pushwork 2.0.0-a.sub.1 → 2.0.0-preview.2

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 (234) hide show
  1. package/dist/branches.d.ts +20 -0
  2. package/dist/branches.d.ts.map +1 -0
  3. package/dist/branches.js +111 -0
  4. package/dist/branches.js.map +1 -0
  5. package/dist/cli.d.ts +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +245 -270
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config.d.ts +17 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +84 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/fs-tree.d.ts +6 -0
  14. package/dist/fs-tree.d.ts.map +1 -0
  15. package/dist/fs-tree.js +99 -0
  16. package/dist/fs-tree.js.map +1 -0
  17. package/dist/ignore.d.ts +6 -0
  18. package/dist/ignore.d.ts.map +1 -0
  19. package/dist/ignore.js +74 -0
  20. package/dist/ignore.js.map +1 -0
  21. package/dist/index.d.ts +8 -4
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +35 -4
  24. package/dist/index.js.map +1 -1
  25. package/dist/log.d.ts +3 -0
  26. package/dist/log.d.ts.map +1 -0
  27. package/dist/log.js +14 -0
  28. package/dist/log.js.map +1 -0
  29. package/dist/pushwork.d.ts +129 -0
  30. package/dist/pushwork.d.ts.map +1 -0
  31. package/dist/pushwork.js +1062 -0
  32. package/dist/pushwork.js.map +1 -0
  33. package/dist/repo.d.ts +14 -0
  34. package/dist/repo.d.ts.map +1 -0
  35. package/dist/repo.js +60 -0
  36. package/dist/repo.js.map +1 -0
  37. package/dist/shapes/custom.d.ts +3 -0
  38. package/dist/shapes/custom.d.ts.map +1 -0
  39. package/dist/shapes/custom.js +57 -0
  40. package/dist/shapes/custom.js.map +1 -0
  41. package/dist/shapes/file.d.ts +20 -0
  42. package/dist/shapes/file.d.ts.map +1 -0
  43. package/dist/shapes/file.js +140 -0
  44. package/dist/shapes/file.js.map +1 -0
  45. package/dist/shapes/index.d.ts +10 -0
  46. package/dist/shapes/index.d.ts.map +1 -0
  47. package/dist/shapes/index.js +35 -0
  48. package/dist/shapes/index.js.map +1 -0
  49. package/dist/shapes/patchwork-folder.d.ts +3 -0
  50. package/dist/shapes/patchwork-folder.d.ts.map +1 -0
  51. package/dist/shapes/patchwork-folder.js +160 -0
  52. package/dist/shapes/patchwork-folder.js.map +1 -0
  53. package/dist/shapes/types.d.ts +38 -0
  54. package/dist/shapes/types.d.ts.map +1 -0
  55. package/dist/shapes/types.js +52 -0
  56. package/dist/shapes/types.js.map +1 -0
  57. package/dist/shapes/vfs.d.ts +3 -0
  58. package/dist/shapes/vfs.d.ts.map +1 -0
  59. package/dist/shapes/vfs.js +92 -0
  60. package/dist/shapes/vfs.js.map +1 -0
  61. package/dist/stash.d.ts +23 -0
  62. package/dist/stash.d.ts.map +1 -0
  63. package/dist/stash.js +118 -0
  64. package/dist/stash.js.map +1 -0
  65. package/dist/version.d.ts +11 -0
  66. package/dist/version.d.ts.map +1 -0
  67. package/dist/version.js +93 -0
  68. package/dist/version.js.map +1 -0
  69. package/package.json +19 -48
  70. package/patches/@automerge__automerge-repo@2.6.0-subduction.15.patch +26 -0
  71. package/.prettierrc +0 -9
  72. package/ARCHITECTURE-ACCORDING-TO-CLAUDE.md +0 -248
  73. package/CLAUDE.md +0 -141
  74. package/README.md +0 -221
  75. package/babel.config.js +0 -5
  76. package/dist/cli/commands.d.ts +0 -71
  77. package/dist/cli/commands.d.ts.map +0 -1
  78. package/dist/cli/commands.js +0 -794
  79. package/dist/cli/commands.js.map +0 -1
  80. package/dist/cli/index.d.ts +0 -2
  81. package/dist/cli/index.d.ts.map +0 -1
  82. package/dist/cli/index.js +0 -19
  83. package/dist/cli/index.js.map +0 -1
  84. package/dist/commands.d.ts +0 -61
  85. package/dist/commands.d.ts.map +0 -1
  86. package/dist/commands.js +0 -861
  87. package/dist/commands.js.map +0 -1
  88. package/dist/config/index.d.ts +0 -71
  89. package/dist/config/index.d.ts.map +0 -1
  90. package/dist/config/index.js +0 -314
  91. package/dist/config/index.js.map +0 -1
  92. package/dist/core/change-detection.d.ts +0 -80
  93. package/dist/core/change-detection.d.ts.map +0 -1
  94. package/dist/core/change-detection.js +0 -523
  95. package/dist/core/change-detection.js.map +0 -1
  96. package/dist/core/config.d.ts +0 -81
  97. package/dist/core/config.d.ts.map +0 -1
  98. package/dist/core/config.js +0 -258
  99. package/dist/core/config.js.map +0 -1
  100. package/dist/core/index.d.ts +0 -6
  101. package/dist/core/index.d.ts.map +0 -1
  102. package/dist/core/index.js +0 -6
  103. package/dist/core/index.js.map +0 -1
  104. package/dist/core/move-detection.d.ts +0 -34
  105. package/dist/core/move-detection.d.ts.map +0 -1
  106. package/dist/core/move-detection.js +0 -121
  107. package/dist/core/move-detection.js.map +0 -1
  108. package/dist/core/snapshot.d.ts +0 -105
  109. package/dist/core/snapshot.d.ts.map +0 -1
  110. package/dist/core/snapshot.js +0 -217
  111. package/dist/core/snapshot.js.map +0 -1
  112. package/dist/core/sync-engine.d.ts +0 -157
  113. package/dist/core/sync-engine.d.ts.map +0 -1
  114. package/dist/core/sync-engine.js +0 -1379
  115. package/dist/core/sync-engine.js.map +0 -1
  116. package/dist/types/config.d.ts +0 -99
  117. package/dist/types/config.d.ts.map +0 -1
  118. package/dist/types/config.js +0 -5
  119. package/dist/types/config.js.map +0 -1
  120. package/dist/types/documents.d.ts +0 -88
  121. package/dist/types/documents.d.ts.map +0 -1
  122. package/dist/types/documents.js +0 -20
  123. package/dist/types/documents.js.map +0 -1
  124. package/dist/types/index.d.ts +0 -4
  125. package/dist/types/index.d.ts.map +0 -1
  126. package/dist/types/index.js +0 -4
  127. package/dist/types/index.js.map +0 -1
  128. package/dist/types/snapshot.d.ts +0 -64
  129. package/dist/types/snapshot.d.ts.map +0 -1
  130. package/dist/types/snapshot.js +0 -2
  131. package/dist/types/snapshot.js.map +0 -1
  132. package/dist/utils/content-similarity.d.ts +0 -53
  133. package/dist/utils/content-similarity.d.ts.map +0 -1
  134. package/dist/utils/content-similarity.js +0 -155
  135. package/dist/utils/content-similarity.js.map +0 -1
  136. package/dist/utils/content.d.ts +0 -10
  137. package/dist/utils/content.d.ts.map +0 -1
  138. package/dist/utils/content.js +0 -31
  139. package/dist/utils/content.js.map +0 -1
  140. package/dist/utils/directory.d.ts +0 -24
  141. package/dist/utils/directory.d.ts.map +0 -1
  142. package/dist/utils/directory.js +0 -52
  143. package/dist/utils/directory.js.map +0 -1
  144. package/dist/utils/fs.d.ts +0 -74
  145. package/dist/utils/fs.d.ts.map +0 -1
  146. package/dist/utils/fs.js +0 -248
  147. package/dist/utils/fs.js.map +0 -1
  148. package/dist/utils/index.d.ts +0 -5
  149. package/dist/utils/index.d.ts.map +0 -1
  150. package/dist/utils/index.js +0 -5
  151. package/dist/utils/index.js.map +0 -1
  152. package/dist/utils/mime-types.d.ts +0 -13
  153. package/dist/utils/mime-types.d.ts.map +0 -1
  154. package/dist/utils/mime-types.js +0 -209
  155. package/dist/utils/mime-types.js.map +0 -1
  156. package/dist/utils/network-sync.d.ts +0 -36
  157. package/dist/utils/network-sync.d.ts.map +0 -1
  158. package/dist/utils/network-sync.js +0 -250
  159. package/dist/utils/network-sync.js.map +0 -1
  160. package/dist/utils/node-polyfills.d.ts +0 -9
  161. package/dist/utils/node-polyfills.d.ts.map +0 -1
  162. package/dist/utils/node-polyfills.js +0 -9
  163. package/dist/utils/node-polyfills.js.map +0 -1
  164. package/dist/utils/output.d.ts +0 -129
  165. package/dist/utils/output.d.ts.map +0 -1
  166. package/dist/utils/output.js +0 -368
  167. package/dist/utils/output.js.map +0 -1
  168. package/dist/utils/repo-factory.d.ts +0 -13
  169. package/dist/utils/repo-factory.d.ts.map +0 -1
  170. package/dist/utils/repo-factory.js +0 -46
  171. package/dist/utils/repo-factory.js.map +0 -1
  172. package/dist/utils/string-similarity.d.ts +0 -14
  173. package/dist/utils/string-similarity.d.ts.map +0 -1
  174. package/dist/utils/string-similarity.js +0 -39
  175. package/dist/utils/string-similarity.js.map +0 -1
  176. package/dist/utils/text-diff.d.ts +0 -37
  177. package/dist/utils/text-diff.d.ts.map +0 -1
  178. package/dist/utils/text-diff.js +0 -93
  179. package/dist/utils/text-diff.js.map +0 -1
  180. package/dist/utils/trace.d.ts +0 -19
  181. package/dist/utils/trace.d.ts.map +0 -1
  182. package/dist/utils/trace.js +0 -63
  183. package/dist/utils/trace.js.map +0 -1
  184. package/src/cli.ts +0 -442
  185. package/src/commands.ts +0 -1134
  186. package/src/core/change-detection.ts +0 -712
  187. package/src/core/config.ts +0 -313
  188. package/src/core/index.ts +0 -5
  189. package/src/core/move-detection.ts +0 -169
  190. package/src/core/snapshot.ts +0 -275
  191. package/src/core/sync-engine.ts +0 -1795
  192. package/src/index.ts +0 -4
  193. package/src/types/config.ts +0 -111
  194. package/src/types/documents.ts +0 -91
  195. package/src/types/index.ts +0 -3
  196. package/src/types/snapshot.ts +0 -67
  197. package/src/utils/content.ts +0 -34
  198. package/src/utils/directory.ts +0 -73
  199. package/src/utils/fs.ts +0 -297
  200. package/src/utils/index.ts +0 -4
  201. package/src/utils/mime-types.ts +0 -244
  202. package/src/utils/network-sync.ts +0 -319
  203. package/src/utils/node-polyfills.ts +0 -8
  204. package/src/utils/output.ts +0 -450
  205. package/src/utils/repo-factory.ts +0 -73
  206. package/src/utils/string-similarity.ts +0 -54
  207. package/src/utils/text-diff.ts +0 -101
  208. package/src/utils/trace.ts +0 -70
  209. package/test/integration/README.md +0 -328
  210. package/test/integration/clone-test.sh +0 -310
  211. package/test/integration/conflict-resolution-test.sh +0 -309
  212. package/test/integration/debug-both-nested.sh +0 -74
  213. package/test/integration/debug-concurrent-nested.sh +0 -87
  214. package/test/integration/debug-nested.sh +0 -73
  215. package/test/integration/deletion-behavior-test.sh +0 -487
  216. package/test/integration/deletion-sync-test-simple.sh +0 -193
  217. package/test/integration/deletion-sync-test.sh +0 -297
  218. package/test/integration/exclude-patterns.test.ts +0 -144
  219. package/test/integration/full-integration-test.sh +0 -363
  220. package/test/integration/fuzzer.test.ts +0 -818
  221. package/test/integration/in-memory-sync.test.ts +0 -830
  222. package/test/integration/init-sync.test.ts +0 -89
  223. package/test/integration/manual-sync-test.sh +0 -84
  224. package/test/integration/sync-deletion.test.ts +0 -280
  225. package/test/integration/sync-flow.test.ts +0 -291
  226. package/test/jest.setup.ts +0 -34
  227. package/test/run-tests.sh +0 -225
  228. package/test/unit/deletion-behavior.test.ts +0 -249
  229. package/test/unit/enhanced-mime-detection.test.ts +0 -244
  230. package/test/unit/snapshot.test.ts +0 -404
  231. package/test/unit/sync-convergence.test.ts +0 -298
  232. package/test/unit/sync-timing.test.ts +0 -134
  233. package/test/unit/utils.test.ts +0 -366
  234. package/tsconfig.json +0 -23
@@ -1,258 +0,0 @@
1
- import * as fs from "fs/promises";
2
- import * as path from "path";
3
- import * as os from "os";
4
- import { DEFAULT_SYNC_SERVER, } from "../types/index.js";
5
- import { pathExists, ensureDirectoryExists } from "../utils/index.js";
6
- /**
7
- * Configuration manager for pushwork
8
- */
9
- export class ConfigManager {
10
- constructor(workingDir) {
11
- this.workingDir = workingDir;
12
- }
13
- /**
14
- * Get global configuration path
15
- */
16
- getGlobalConfigPath() {
17
- return path.join(os.homedir(), ConfigManager.GLOBAL_CONFIG_DIR, ConfigManager.CONFIG_FILENAME);
18
- }
19
- /**
20
- * Get local configuration path
21
- */
22
- getLocalConfigPath() {
23
- if (!this.workingDir) {
24
- throw new Error("Working directory not set for local config");
25
- }
26
- return path.join(this.workingDir, ConfigManager.CONFIG_DIR, ConfigManager.CONFIG_FILENAME);
27
- }
28
- /**
29
- * Load global configuration
30
- */
31
- async loadGlobal() {
32
- try {
33
- const configPath = this.getGlobalConfigPath();
34
- if (!(await pathExists(configPath))) {
35
- return null;
36
- }
37
- const content = await fs.readFile(configPath, "utf8");
38
- return JSON.parse(content);
39
- }
40
- catch (error) {
41
- // Failed to load global config
42
- return null;
43
- }
44
- }
45
- /**
46
- * Save global configuration
47
- */
48
- async saveGlobal(config) {
49
- try {
50
- const configPath = this.getGlobalConfigPath();
51
- await ensureDirectoryExists(path.dirname(configPath));
52
- const content = JSON.stringify(config, null, 2);
53
- await fs.writeFile(configPath, content, "utf8");
54
- }
55
- catch (error) {
56
- throw new Error(`Failed to save global config: ${error}`);
57
- }
58
- }
59
- /**
60
- * Load local/directory configuration
61
- */
62
- async load() {
63
- if (!this.workingDir) {
64
- return null;
65
- }
66
- try {
67
- const configPath = this.getLocalConfigPath();
68
- if (!(await pathExists(configPath))) {
69
- return null;
70
- }
71
- const content = await fs.readFile(configPath, "utf8");
72
- return JSON.parse(content);
73
- }
74
- catch (error) {
75
- // Failed to load local config
76
- return null;
77
- }
78
- }
79
- /**
80
- * Save local/directory configuration
81
- */
82
- async save(config) {
83
- if (!this.workingDir) {
84
- throw new Error("Working directory not set for local config");
85
- }
86
- try {
87
- const configPath = this.getLocalConfigPath();
88
- await ensureDirectoryExists(path.dirname(configPath));
89
- const content = JSON.stringify(config, null, 2);
90
- await fs.writeFile(configPath, content, "utf8");
91
- }
92
- catch (error) {
93
- throw new Error(`Failed to save local config: ${error}`);
94
- }
95
- }
96
- getDefaultGlobalConfig() {
97
- return {
98
- exclude_patterns: [
99
- ".git",
100
- "node_modules",
101
- "*.tmp",
102
- ".DS_Store",
103
- ".pushwork",
104
- ],
105
- artifact_directories: ["dist"],
106
- sync_server: DEFAULT_SYNC_SERVER,
107
- sync: {
108
- move_detection_threshold: 0.7,
109
- },
110
- };
111
- }
112
- /**
113
- * Get default configuration
114
- */
115
- getDefaultDirectoryConfig() {
116
- return {
117
- sync_enabled: true,
118
- sync_server: DEFAULT_SYNC_SERVER,
119
- exclude_patterns: [
120
- ".git",
121
- "node_modules",
122
- "*.tmp",
123
- ".pushwork",
124
- ".DS_Store",
125
- ],
126
- artifact_directories: ["dist"],
127
- sync: {
128
- move_detection_threshold: 0.7,
129
- },
130
- };
131
- }
132
- /**
133
- * Get merged configuration (global + local)
134
- */
135
- async getMerged() {
136
- const globalConfig = await this.loadGlobal();
137
- const localConfig = await this.load();
138
- // Merge configurations: default < global < local
139
- let merged = this.getDefaultDirectoryConfig();
140
- if (globalConfig) {
141
- merged = this.mergeConfigs(merged, globalConfig);
142
- }
143
- if (localConfig) {
144
- merged = this.mergeConfigs(merged, localConfig);
145
- }
146
- return merged;
147
- }
148
- /**
149
- * Initialize with CLI option overrides
150
- * Creates a new config with defaults + CLI overrides and saves it
151
- */
152
- async initializeWithOverrides(overrides = {}) {
153
- const config = this.mergeConfigs(this.getDefaultDirectoryConfig(), overrides);
154
- await this.save(config);
155
- return config;
156
- }
157
- /**
158
- * Merge two configuration objects
159
- */
160
- mergeConfigs(base, override) {
161
- const merged = { ...base };
162
- if ("sync_server" in override && override.sync_server !== undefined) {
163
- merged.sync_server = override.sync_server;
164
- }
165
- if ("sync_enabled" in override && override.sync_enabled !== undefined) {
166
- merged.sync_enabled = override.sync_enabled;
167
- }
168
- // Handle GlobalConfig structure
169
- if ("exclude_patterns" in override && override.exclude_patterns) {
170
- merged.exclude_patterns = override.exclude_patterns;
171
- }
172
- if ("artifact_directories" in override && override.artifact_directories) {
173
- merged.artifact_directories = override.artifact_directories;
174
- }
175
- if ("sync" in override && override.sync) {
176
- merged.sync = { ...merged.sync, ...override.sync };
177
- }
178
- return merged;
179
- }
180
- /**
181
- * Create default global configuration
182
- */
183
- async createDefaultGlobal() {
184
- const defaultGlobal = this.getDefaultGlobalConfig();
185
- await this.saveGlobal(defaultGlobal);
186
- }
187
- /**
188
- * Check if global configuration exists
189
- */
190
- async globalConfigExists() {
191
- return await pathExists(this.getGlobalConfigPath());
192
- }
193
- /**
194
- * Check if local configuration exists
195
- */
196
- async localConfigExists() {
197
- if (!this.workingDir)
198
- return false;
199
- return await pathExists(this.getLocalConfigPath());
200
- }
201
- /**
202
- * Get configuration value by path (e.g., 'sync.move_detection_threshold')
203
- */
204
- async getValue(keyPath) {
205
- const config = await this.getMerged();
206
- const keys = keyPath.split(".");
207
- let value = config;
208
- for (const key of keys) {
209
- if (value && typeof value === "object" && key in value) {
210
- value = value[key];
211
- }
212
- else {
213
- return undefined;
214
- }
215
- }
216
- return value;
217
- }
218
- /**
219
- * Set configuration value by path
220
- */
221
- async setValue(keyPath, value) {
222
- const config = (await this.load()) || {};
223
- const keys = keyPath.split(".");
224
- let current = config;
225
- // Navigate to the parent of the target key
226
- for (let i = 0; i < keys.length - 1; i++) {
227
- const key = keys[i];
228
- if (!(key in current) || typeof current[key] !== "object") {
229
- current[key] = {};
230
- }
231
- current = current[key];
232
- }
233
- // Set the value
234
- const finalKey = keys[keys.length - 1];
235
- current[finalKey] = value;
236
- await this.save(config);
237
- }
238
- /**
239
- * Validate configuration
240
- */
241
- validate(config) {
242
- const errors = [];
243
- if (config.sync?.move_detection_threshold !== undefined) {
244
- if (config.sync.move_detection_threshold < 0 ||
245
- config.sync.move_detection_threshold > 1) {
246
- errors.push("move_detection_threshold must be between 0 and 1");
247
- }
248
- }
249
- return {
250
- valid: errors.length === 0,
251
- errors,
252
- };
253
- }
254
- }
255
- ConfigManager.GLOBAL_CONFIG_DIR = ".pushwork";
256
- ConfigManager.CONFIG_FILENAME = "config.json";
257
- ConfigManager.CONFIG_DIR = ".pushwork";
258
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export * from "./snapshot.js";
2
- export * from "./change-detection.js";
3
- export * from "./move-detection.js";
4
- export * from "./sync-engine.js";
5
- export * from "./config.js";
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
@@ -1,6 +0,0 @@
1
- export * from "./snapshot.js";
2
- export * from "./change-detection.js";
3
- export * from "./move-detection.js";
4
- export * from "./sync-engine.js";
5
- export * from "./config.js";
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
@@ -1,34 +0,0 @@
1
- import { SyncSnapshot, MoveCandidate } from "../types/index.js";
2
- import { DetectedChange } from "../types/index.js";
3
- /**
4
- * Simplified move detection engine
5
- */
6
- export declare class MoveDetector {
7
- private readonly moveThreshold;
8
- constructor(moveThreshold?: number);
9
- /**
10
- * Detect file moves by analyzing deleted and created files
11
- */
12
- detectMoves(changes: DetectedChange[], snapshot: SyncSnapshot): Promise<{
13
- moves: MoveCandidate[];
14
- remainingChanges: DetectedChange[];
15
- }>;
16
- /**
17
- * Calculate similarity between two content pieces
18
- * Optimized for speed while maintaining accuracy
19
- */
20
- private calculateSimilarity;
21
- /**
22
- * Get representative samples from content (beginning, middle, end)
23
- */
24
- private getSamples;
25
- /**
26
- * Convert buffer to string (for text comparison)
27
- */
28
- private bufferToString;
29
- /**
30
- * Format move for display
31
- */
32
- formatMove(move: MoveCandidate): string;
33
- }
34
- //# sourceMappingURL=move-detection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"move-detection.d.ts","sourceRoot":"","sources":["../../src/core/move-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EAAc,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,aAAa,GAAE,MAAY;IAIvC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC;QAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAAC,gBAAgB,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;IAkE1E;;;OAGG;YACW,mBAAmB;IA0CjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;CAIxC"}
@@ -1,121 +0,0 @@
1
- import { isTextFile } from "../utils/index.js";
2
- import { stringSimilarity } from "../utils/string-similarity.js";
3
- import { ChangeType } from "../types/index.js";
4
- /**
5
- * Simplified move detection engine
6
- */
7
- export class MoveDetector {
8
- constructor(moveThreshold = 0.7) {
9
- this.moveThreshold = moveThreshold;
10
- }
11
- /**
12
- * Detect file moves by analyzing deleted and created files
13
- */
14
- async detectMoves(changes, snapshot) {
15
- const deletedFiles = changes.filter((c) => !c.localContent && c.changeType === ChangeType.LOCAL_ONLY);
16
- const createdFiles = changes.filter((c) => c.localContent &&
17
- c.changeType === ChangeType.LOCAL_ONLY &&
18
- !snapshot.files.has(c.path));
19
- if (deletedFiles.length === 0 || createdFiles.length === 0) {
20
- return { moves: [], remainingChanges: changes };
21
- }
22
- const moves = [];
23
- const usedCreations = new Set();
24
- const usedDeletions = new Set();
25
- // Find potential moves by comparing content
26
- for (const deletedFile of deletedFiles) {
27
- const deletedContent = deletedFile.remoteContent;
28
- if (deletedContent === null)
29
- continue;
30
- let bestMatch = null;
31
- for (const createdFile of createdFiles) {
32
- if (usedCreations.has(createdFile.path))
33
- continue;
34
- if (createdFile.localContent === null)
35
- continue;
36
- const similarity = await this.calculateSimilarity(deletedContent, createdFile.localContent, deletedFile.path);
37
- if (similarity >= this.moveThreshold) {
38
- if (!bestMatch || similarity > bestMatch.similarity) {
39
- bestMatch = { file: createdFile, similarity };
40
- }
41
- }
42
- }
43
- if (bestMatch) {
44
- // If we detected a move above threshold, we apply it
45
- moves.push({
46
- fromPath: deletedFile.path,
47
- toPath: bestMatch.file.path,
48
- similarity: bestMatch.similarity,
49
- newContent: bestMatch.file.localContent || undefined,
50
- });
51
- // Consume the deletion and creation (move replaces both)
52
- usedCreations.add(bestMatch.file.path);
53
- usedDeletions.add(deletedFile.path);
54
- }
55
- }
56
- const remainingChanges = changes.filter((change) => !usedCreations.has(change.path) && !usedDeletions.has(change.path));
57
- return { moves, remainingChanges };
58
- }
59
- /**
60
- * Calculate similarity between two content pieces
61
- * Optimized for speed while maintaining accuracy
62
- */
63
- async calculateSimilarity(content1, content2, path) {
64
- if (content1 === content2)
65
- return 1.0;
66
- // Early exit: size difference too large
67
- const size1 = typeof content1 === "string" ? content1.length : content1.length;
68
- const size2 = typeof content2 === "string" ? content2.length : content2.length;
69
- const sizeDiff = Math.abs(size1 - size2) / Math.max(size1, size2);
70
- if (sizeDiff > 0.5)
71
- return 0.0;
72
- // Binary files: hash mismatch = not a move
73
- const isText = await isTextFile(path);
74
- if (!isText)
75
- return 0.0;
76
- // Text files: use string similarity
77
- const str1 = typeof content1 === "string" ? content1 : this.bufferToString(content1);
78
- const str2 = typeof content2 === "string" ? content2 : this.bufferToString(content2);
79
- // For small files (<4KB), compare full content
80
- if (size1 < 4096 && size2 < 4096) {
81
- return stringSimilarity(str1, str2);
82
- }
83
- // For large files, sample 3 locations
84
- const samples1 = this.getSamples(str1);
85
- const samples2 = this.getSamples(str2);
86
- let totalSimilarity = 0;
87
- for (let i = 0; i < Math.min(samples1.length, samples2.length); i++) {
88
- totalSimilarity += stringSimilarity(samples1[i], samples2[i]);
89
- }
90
- return totalSimilarity / Math.min(samples1.length, samples2.length);
91
- }
92
- /**
93
- * Get representative samples from content (beginning, middle, end)
94
- */
95
- getSamples(str) {
96
- const CHUNK_SIZE = 1024;
97
- const length = str.length;
98
- if (length <= CHUNK_SIZE) {
99
- return [str];
100
- }
101
- return [
102
- str.slice(0, CHUNK_SIZE), // Beginning
103
- str.slice(Math.floor(length / 2) - Math.floor(CHUNK_SIZE / 2), Math.floor(length / 2) + Math.floor(CHUNK_SIZE / 2)), // Middle
104
- str.slice(-CHUNK_SIZE), // End
105
- ];
106
- }
107
- /**
108
- * Convert buffer to string (for text comparison)
109
- */
110
- bufferToString(buffer) {
111
- return new TextDecoder().decode(buffer);
112
- }
113
- /**
114
- * Format move for display
115
- */
116
- formatMove(move) {
117
- const percentage = Math.round(move.similarity * 100);
118
- return `${move.fromPath} → ${move.toPath} (${percentage}% similar)`;
119
- }
120
- }
121
- //# sourceMappingURL=move-detection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"move-detection.js","sourceRoot":"","sources":["../../src/core/move-detection.ts"],"names":[],"mappings":"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"}
@@ -1,105 +0,0 @@
1
- /**
2
- * pvh TODO: the files & directories could be unified into a single map of entries with a type field
3
- */
4
- import { SyncSnapshot, SnapshotFileEntry, SnapshotDirectoryEntry } from "../types/index.js";
5
- /**
6
- * Manages sync snapshots for local state tracking
7
- */
8
- export declare class SnapshotManager {
9
- private rootPath;
10
- private static readonly SNAPSHOT_FILENAME;
11
- private static readonly SYNC_TOOL_DIR;
12
- constructor(rootPath: string);
13
- /**
14
- * Get path to sync tool directory
15
- */
16
- private getSyncToolDir;
17
- /**
18
- * Get path to snapshot file
19
- */
20
- private getSnapshotPath;
21
- /**
22
- * Check if snapshot exists
23
- */
24
- exists(): Promise<boolean>;
25
- /**
26
- * Load snapshot from disk
27
- */
28
- load(): Promise<SyncSnapshot | null>;
29
- /**
30
- * Save snapshot to disk
31
- */
32
- save(snapshot: SyncSnapshot): Promise<void>;
33
- /**
34
- * Create empty snapshot
35
- */
36
- createEmpty(): SyncSnapshot;
37
- /**
38
- * Update file entry in snapshot
39
- */
40
- updateFileEntry(snapshot: SyncSnapshot, relativePath: string, entry: SnapshotFileEntry): void;
41
- /**
42
- * Update directory entry in snapshot
43
- */
44
- updateDirectoryEntry(snapshot: SyncSnapshot, relativePath: string, entry: SnapshotDirectoryEntry): void;
45
- /**
46
- * Remove file entry from snapshot
47
- */
48
- removeFileEntry(snapshot: SyncSnapshot, relativePath: string): void;
49
- /**
50
- * Remove directory entry from snapshot
51
- */
52
- removeDirectoryEntry(snapshot: SyncSnapshot, relativePath: string): void;
53
- /**
54
- * Get all file paths in snapshot
55
- */
56
- getFilePaths(snapshot: SyncSnapshot): string[];
57
- /**
58
- * Get all directory paths in snapshot
59
- */
60
- getDirectoryPaths(snapshot: SyncSnapshot): string[];
61
- /**
62
- * Get file entry by path
63
- */
64
- getFileEntry(snapshot: SyncSnapshot, relativePath: string): SnapshotFileEntry | undefined;
65
- /**
66
- * Get directory entry by path
67
- */
68
- getDirectoryEntry(snapshot: SyncSnapshot, relativePath: string): SnapshotDirectoryEntry | undefined;
69
- /**
70
- * Check if path is tracked in snapshot
71
- */
72
- isTracked(snapshot: SyncSnapshot, relativePath: string): boolean;
73
- /**
74
- * Get snapshot statistics
75
- */
76
- getStats(snapshot: SyncSnapshot): {
77
- files: number;
78
- directories: number;
79
- timestamp: Date;
80
- };
81
- /**
82
- * Validate snapshot integrity
83
- */
84
- validate(snapshot: SyncSnapshot): {
85
- valid: boolean;
86
- errors: string[];
87
- };
88
- /**
89
- * Convert snapshot to serializable format
90
- */
91
- private serializeSnapshot;
92
- /**
93
- * Convert serializable format back to snapshot
94
- */
95
- private deserializeSnapshot;
96
- /**
97
- * Clear all snapshot data
98
- */
99
- clear(snapshot: SyncSnapshot): void;
100
- /**
101
- * Clone snapshot for safe manipulation
102
- */
103
- clone(snapshot: SyncSnapshot): SyncSnapshot;
104
- }
105
- //# sourceMappingURL=snapshot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/core/snapshot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,YAAY,EAEZ,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAI3B;;GAEG;AACH,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAEhC,QAAQ,EAAE,MAAM;IAEpC;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAiB1C;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAajD;;OAEG;IACH,WAAW,IAAI,YAAY;IAU3B;;OAEG;IACH,eAAe,CACb,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,iBAAiB,GACvB,IAAI;IAKP;;OAEG;IACH,oBAAoB,CAClB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,sBAAsB,GAC5B,IAAI;IAKP;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAKnE;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAKxE;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IAI9C;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IAInD;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,GACnB,iBAAiB,GAAG,SAAS;IAIhC;;OAEG;IACH,iBAAiB,CACf,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,GACnB,sBAAsB,GAAG,SAAS;IAIrC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAMhE;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,IAAI,CAAC;KACjB;IAQD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA8BtE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAMnC;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY;CAS5C"}