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

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 (251) hide show
  1. package/dist/branches.d.ts +19 -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 +238 -272
  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 +34 -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 +115 -0
  30. package/dist/pushwork.d.ts.map +1 -0
  31. package/dist/pushwork.js +918 -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 +37 -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 +88 -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/flake.lock +128 -0
  66. package/flake.nix +66 -0
  67. package/package.json +15 -48
  68. package/patches/@automerge__automerge-repo@2.6.0-subduction.15.patch +26 -0
  69. package/pnpm-workspace.yaml +5 -0
  70. package/src/branches.ts +93 -0
  71. package/src/cli.ts +258 -408
  72. package/src/config.ts +64 -0
  73. package/src/fs-tree.ts +70 -0
  74. package/src/ignore.ts +33 -0
  75. package/src/index.ts +38 -4
  76. package/src/log.ts +8 -0
  77. package/src/pushwork.ts +1055 -0
  78. package/src/repo.ts +76 -0
  79. package/src/shapes/custom.ts +29 -0
  80. package/src/shapes/file.ts +115 -0
  81. package/src/shapes/index.ts +19 -0
  82. package/src/shapes/patchwork-folder.ts +156 -0
  83. package/src/shapes/types.ts +79 -0
  84. package/src/shapes/vfs.ts +93 -0
  85. package/src/stash.ts +106 -0
  86. package/test/integration/branches.test.ts +389 -0
  87. package/test/integration/pushwork.test.ts +547 -0
  88. package/test/setup.ts +29 -0
  89. package/test/unit/doc-shape.test.ts +612 -0
  90. package/tsconfig.json +2 -3
  91. package/vitest.config.ts +14 -0
  92. package/ARCHITECTURE-ACCORDING-TO-CLAUDE.md +0 -248
  93. package/CLAUDE.md +0 -141
  94. package/README.md +0 -221
  95. package/babel.config.js +0 -5
  96. package/dist/cli/commands.d.ts +0 -71
  97. package/dist/cli/commands.d.ts.map +0 -1
  98. package/dist/cli/commands.js +0 -794
  99. package/dist/cli/commands.js.map +0 -1
  100. package/dist/cli/index.d.ts +0 -2
  101. package/dist/cli/index.d.ts.map +0 -1
  102. package/dist/cli/index.js +0 -19
  103. package/dist/cli/index.js.map +0 -1
  104. package/dist/commands.d.ts +0 -61
  105. package/dist/commands.d.ts.map +0 -1
  106. package/dist/commands.js +0 -861
  107. package/dist/commands.js.map +0 -1
  108. package/dist/config/index.d.ts +0 -71
  109. package/dist/config/index.d.ts.map +0 -1
  110. package/dist/config/index.js +0 -314
  111. package/dist/config/index.js.map +0 -1
  112. package/dist/core/change-detection.d.ts +0 -80
  113. package/dist/core/change-detection.d.ts.map +0 -1
  114. package/dist/core/change-detection.js +0 -523
  115. package/dist/core/change-detection.js.map +0 -1
  116. package/dist/core/config.d.ts +0 -81
  117. package/dist/core/config.d.ts.map +0 -1
  118. package/dist/core/config.js +0 -258
  119. package/dist/core/config.js.map +0 -1
  120. package/dist/core/index.d.ts +0 -6
  121. package/dist/core/index.d.ts.map +0 -1
  122. package/dist/core/index.js +0 -6
  123. package/dist/core/index.js.map +0 -1
  124. package/dist/core/move-detection.d.ts +0 -34
  125. package/dist/core/move-detection.d.ts.map +0 -1
  126. package/dist/core/move-detection.js +0 -121
  127. package/dist/core/move-detection.js.map +0 -1
  128. package/dist/core/snapshot.d.ts +0 -105
  129. package/dist/core/snapshot.d.ts.map +0 -1
  130. package/dist/core/snapshot.js +0 -217
  131. package/dist/core/snapshot.js.map +0 -1
  132. package/dist/core/sync-engine.d.ts +0 -157
  133. package/dist/core/sync-engine.d.ts.map +0 -1
  134. package/dist/core/sync-engine.js +0 -1379
  135. package/dist/core/sync-engine.js.map +0 -1
  136. package/dist/types/config.d.ts +0 -99
  137. package/dist/types/config.d.ts.map +0 -1
  138. package/dist/types/config.js +0 -5
  139. package/dist/types/config.js.map +0 -1
  140. package/dist/types/documents.d.ts +0 -88
  141. package/dist/types/documents.d.ts.map +0 -1
  142. package/dist/types/documents.js +0 -20
  143. package/dist/types/documents.js.map +0 -1
  144. package/dist/types/index.d.ts +0 -4
  145. package/dist/types/index.d.ts.map +0 -1
  146. package/dist/types/index.js +0 -4
  147. package/dist/types/index.js.map +0 -1
  148. package/dist/types/snapshot.d.ts +0 -64
  149. package/dist/types/snapshot.d.ts.map +0 -1
  150. package/dist/types/snapshot.js +0 -2
  151. package/dist/types/snapshot.js.map +0 -1
  152. package/dist/utils/content-similarity.d.ts +0 -53
  153. package/dist/utils/content-similarity.d.ts.map +0 -1
  154. package/dist/utils/content-similarity.js +0 -155
  155. package/dist/utils/content-similarity.js.map +0 -1
  156. package/dist/utils/content.d.ts +0 -10
  157. package/dist/utils/content.d.ts.map +0 -1
  158. package/dist/utils/content.js +0 -31
  159. package/dist/utils/content.js.map +0 -1
  160. package/dist/utils/directory.d.ts +0 -24
  161. package/dist/utils/directory.d.ts.map +0 -1
  162. package/dist/utils/directory.js +0 -52
  163. package/dist/utils/directory.js.map +0 -1
  164. package/dist/utils/fs.d.ts +0 -74
  165. package/dist/utils/fs.d.ts.map +0 -1
  166. package/dist/utils/fs.js +0 -248
  167. package/dist/utils/fs.js.map +0 -1
  168. package/dist/utils/index.d.ts +0 -5
  169. package/dist/utils/index.d.ts.map +0 -1
  170. package/dist/utils/index.js +0 -5
  171. package/dist/utils/index.js.map +0 -1
  172. package/dist/utils/mime-types.d.ts +0 -13
  173. package/dist/utils/mime-types.d.ts.map +0 -1
  174. package/dist/utils/mime-types.js +0 -209
  175. package/dist/utils/mime-types.js.map +0 -1
  176. package/dist/utils/network-sync.d.ts +0 -36
  177. package/dist/utils/network-sync.d.ts.map +0 -1
  178. package/dist/utils/network-sync.js +0 -250
  179. package/dist/utils/network-sync.js.map +0 -1
  180. package/dist/utils/node-polyfills.d.ts +0 -9
  181. package/dist/utils/node-polyfills.d.ts.map +0 -1
  182. package/dist/utils/node-polyfills.js +0 -9
  183. package/dist/utils/node-polyfills.js.map +0 -1
  184. package/dist/utils/output.d.ts +0 -129
  185. package/dist/utils/output.d.ts.map +0 -1
  186. package/dist/utils/output.js +0 -368
  187. package/dist/utils/output.js.map +0 -1
  188. package/dist/utils/repo-factory.d.ts +0 -13
  189. package/dist/utils/repo-factory.d.ts.map +0 -1
  190. package/dist/utils/repo-factory.js +0 -46
  191. package/dist/utils/repo-factory.js.map +0 -1
  192. package/dist/utils/string-similarity.d.ts +0 -14
  193. package/dist/utils/string-similarity.d.ts.map +0 -1
  194. package/dist/utils/string-similarity.js +0 -39
  195. package/dist/utils/string-similarity.js.map +0 -1
  196. package/dist/utils/text-diff.d.ts +0 -37
  197. package/dist/utils/text-diff.d.ts.map +0 -1
  198. package/dist/utils/text-diff.js +0 -93
  199. package/dist/utils/text-diff.js.map +0 -1
  200. package/dist/utils/trace.d.ts +0 -19
  201. package/dist/utils/trace.d.ts.map +0 -1
  202. package/dist/utils/trace.js +0 -63
  203. package/dist/utils/trace.js.map +0 -1
  204. package/src/commands.ts +0 -1134
  205. package/src/core/change-detection.ts +0 -712
  206. package/src/core/config.ts +0 -313
  207. package/src/core/index.ts +0 -5
  208. package/src/core/move-detection.ts +0 -169
  209. package/src/core/snapshot.ts +0 -275
  210. package/src/core/sync-engine.ts +0 -1795
  211. package/src/types/config.ts +0 -111
  212. package/src/types/documents.ts +0 -91
  213. package/src/types/index.ts +0 -3
  214. package/src/types/snapshot.ts +0 -67
  215. package/src/utils/content.ts +0 -34
  216. package/src/utils/directory.ts +0 -73
  217. package/src/utils/fs.ts +0 -297
  218. package/src/utils/index.ts +0 -4
  219. package/src/utils/mime-types.ts +0 -244
  220. package/src/utils/network-sync.ts +0 -319
  221. package/src/utils/node-polyfills.ts +0 -8
  222. package/src/utils/output.ts +0 -450
  223. package/src/utils/repo-factory.ts +0 -73
  224. package/src/utils/string-similarity.ts +0 -54
  225. package/src/utils/text-diff.ts +0 -101
  226. package/src/utils/trace.ts +0 -70
  227. package/test/integration/README.md +0 -328
  228. package/test/integration/clone-test.sh +0 -310
  229. package/test/integration/conflict-resolution-test.sh +0 -309
  230. package/test/integration/debug-both-nested.sh +0 -74
  231. package/test/integration/debug-concurrent-nested.sh +0 -87
  232. package/test/integration/debug-nested.sh +0 -73
  233. package/test/integration/deletion-behavior-test.sh +0 -487
  234. package/test/integration/deletion-sync-test-simple.sh +0 -193
  235. package/test/integration/deletion-sync-test.sh +0 -297
  236. package/test/integration/exclude-patterns.test.ts +0 -144
  237. package/test/integration/full-integration-test.sh +0 -363
  238. package/test/integration/fuzzer.test.ts +0 -818
  239. package/test/integration/in-memory-sync.test.ts +0 -830
  240. package/test/integration/init-sync.test.ts +0 -89
  241. package/test/integration/manual-sync-test.sh +0 -84
  242. package/test/integration/sync-deletion.test.ts +0 -280
  243. package/test/integration/sync-flow.test.ts +0 -291
  244. package/test/jest.setup.ts +0 -34
  245. package/test/run-tests.sh +0 -225
  246. package/test/unit/deletion-behavior.test.ts +0 -249
  247. package/test/unit/enhanced-mime-detection.test.ts +0 -244
  248. package/test/unit/snapshot.test.ts +0 -404
  249. package/test/unit/sync-convergence.test.ts +0 -298
  250. package/test/unit/sync-timing.test.ts +0 -134
  251. package/test/unit/utils.test.ts +0 -366
@@ -1,523 +0,0 @@
1
- import * as A from "@automerge/automerge";
2
- import { ChangeType, FileType, } from "../types/index.js";
3
- import { readFileContent, listDirectory, getRelativePath, findFileInDirectoryHierarchy, joinAndNormalizePath, getPlainUrl, readDocContent, } from "../utils/index.js";
4
- import { isContentEqual, contentHash } from "../utils/content.js";
5
- import { out } from "../utils/output.js";
6
- const isDebug = !!process.env.DEBUG;
7
- function debug(...args) {
8
- if (isDebug)
9
- console.error("[pushwork:change-detection]", ...args);
10
- }
11
- /**
12
- * Change detection engine
13
- */
14
- export class ChangeDetector {
15
- constructor(repo, rootPath, excludePatterns = [], artifactDirectories = []) {
16
- this.repo = repo;
17
- this.rootPath = rootPath;
18
- this.excludePatterns = excludePatterns;
19
- this.artifactDirectories = artifactDirectories;
20
- }
21
- /**
22
- * Check if a file path is inside an artifact directory.
23
- * Artifact files use RawString and are always replaced wholesale,
24
- * so we can skip expensive remote content reads for them.
25
- */
26
- isArtifactPath(filePath) {
27
- return this.artifactDirectories.some(dir => filePath === dir || filePath.startsWith(dir + "/"));
28
- }
29
- /**
30
- * Detect all changes between local filesystem and snapshot
31
- */
32
- async detectChanges(snapshot, excludePaths) {
33
- const changes = [];
34
- // Get current filesystem state
35
- const currentFiles = await this.getCurrentFilesystemState();
36
- // Check for local changes (new, modified, deleted files)
37
- const localChanges = await this.detectLocalChanges(snapshot, currentFiles);
38
- changes.push(...localChanges);
39
- // Check for remote changes (changes in Automerge documents)
40
- const remoteChanges = await this.detectRemoteChanges(snapshot);
41
- changes.push(...remoteChanges);
42
- // Check for new remote documents not in snapshot (critical for clone scenarios)
43
- const newRemoteDocuments = await this.detectNewRemoteDocuments(snapshot, excludePaths);
44
- changes.push(...newRemoteDocuments);
45
- return changes;
46
- }
47
- /**
48
- * Detect changes in local filesystem compared to snapshot
49
- */
50
- async detectLocalChanges(snapshot, currentFiles) {
51
- const changes = [];
52
- // Check for new and modified files in parallel for better performance
53
- await Promise.all(Array.from(currentFiles.entries()).map(async ([relativePath, fileInfo]) => {
54
- const snapshotEntry = snapshot.files.get(relativePath);
55
- if (!snapshotEntry) {
56
- // New file
57
- changes.push({
58
- path: relativePath,
59
- changeType: ChangeType.LOCAL_ONLY,
60
- fileType: fileInfo.type,
61
- localContent: fileInfo.content,
62
- remoteContent: null,
63
- });
64
- }
65
- else if (this.isArtifactPath(relativePath)) {
66
- // Artifact files are always replaced wholesale (RawString).
67
- // Skip remote doc content reads — compare local hash against
68
- // stored hash to detect local changes, and check heads for remote.
69
- const localHash = contentHash(fileInfo.content);
70
- const localChanged = snapshotEntry.contentHash
71
- ? localHash !== snapshotEntry.contentHash
72
- : true; // No stored hash = first sync with hash support, assume changed
73
- const remoteHead = await this.getCurrentRemoteHead(snapshotEntry.url);
74
- const remoteChanged = !A.equals(remoteHead, snapshotEntry.head);
75
- if (localChanged || remoteChanged) {
76
- changes.push({
77
- path: relativePath,
78
- changeType: localChanged && remoteChanged
79
- ? ChangeType.BOTH_CHANGED
80
- : localChanged
81
- ? ChangeType.LOCAL_ONLY
82
- : ChangeType.REMOTE_ONLY,
83
- fileType: fileInfo.type,
84
- localContent: fileInfo.content,
85
- remoteContent: null,
86
- localHead: snapshotEntry.head,
87
- remoteHead,
88
- });
89
- }
90
- }
91
- else {
92
- // Check if content changed
93
- const lastKnownContent = await this.getContentAtHead(snapshotEntry.url, snapshotEntry.head);
94
- const contentChanged = !isContentEqual(fileInfo.content, lastKnownContent);
95
- if (contentChanged) {
96
- // Check remote state too
97
- const currentRemoteContent = await this.getCurrentRemoteContent(snapshotEntry.url);
98
- const remoteChanged = !isContentEqual(lastKnownContent, currentRemoteContent);
99
- const changeType = remoteChanged
100
- ? ChangeType.BOTH_CHANGED
101
- : ChangeType.LOCAL_ONLY;
102
- const remoteHead = await this.getCurrentRemoteHead(snapshotEntry.url);
103
- changes.push({
104
- path: relativePath,
105
- changeType,
106
- fileType: fileInfo.type,
107
- localContent: fileInfo.content,
108
- remoteContent: currentRemoteContent,
109
- localHead: snapshotEntry.head,
110
- remoteHead,
111
- });
112
- }
113
- }
114
- }));
115
- // Check for deleted files in parallel
116
- await Promise.all(Array.from(snapshot.files.entries())
117
- .filter(([relativePath]) => !currentFiles.has(relativePath))
118
- .map(async ([relativePath, snapshotEntry]) => {
119
- if (this.isArtifactPath(relativePath)) {
120
- // Artifact deletion: skip remote content read
121
- const remoteHead = await this.getCurrentRemoteHead(snapshotEntry.url);
122
- const remoteChanged = !A.equals(remoteHead, snapshotEntry.head);
123
- changes.push({
124
- path: relativePath,
125
- changeType: remoteChanged
126
- ? ChangeType.BOTH_CHANGED
127
- : ChangeType.LOCAL_ONLY,
128
- fileType: FileType.TEXT,
129
- localContent: null,
130
- remoteContent: null,
131
- localHead: snapshotEntry.head,
132
- remoteHead,
133
- });
134
- return;
135
- }
136
- // File was deleted locally
137
- const currentRemoteContent = await this.getCurrentRemoteContent(snapshotEntry.url);
138
- const lastKnownContent = await this.getContentAtHead(snapshotEntry.url, snapshotEntry.head);
139
- const remoteChanged = !isContentEqual(lastKnownContent, currentRemoteContent);
140
- const changeType = remoteChanged
141
- ? ChangeType.BOTH_CHANGED
142
- : ChangeType.LOCAL_ONLY;
143
- changes.push({
144
- path: relativePath,
145
- changeType,
146
- fileType: FileType.TEXT, // Will be determined from document
147
- localContent: null,
148
- remoteContent: currentRemoteContent,
149
- localHead: snapshotEntry.head,
150
- remoteHead: await this.getCurrentRemoteHead(snapshotEntry.url),
151
- });
152
- }));
153
- return changes;
154
- }
155
- /**
156
- * Detect changes in remote Automerge documents compared to snapshot
157
- */
158
- async detectRemoteChanges(snapshot) {
159
- const changes = [];
160
- await Promise.all(Array.from(snapshot.files.entries()).map(async ([relativePath, snapshotEntry]) => {
161
- // Find the file's current entry in the remote directory hierarchy
162
- const remoteEntry = await this.findInRemoteDirectory(snapshot.rootDirectoryUrl, relativePath);
163
- if (!remoteEntry) {
164
- // File was removed from remote directory listing
165
- const localContent = await this.getLocalContent(relativePath);
166
- // Only report as deleted if local file still exists
167
- // (if local file is also deleted, detectLocalChanges handles it)
168
- if (localContent !== null) {
169
- changes.push({
170
- path: relativePath,
171
- changeType: ChangeType.REMOTE_ONLY,
172
- fileType: FileType.TEXT,
173
- localContent,
174
- remoteContent: null, // File deleted remotely
175
- localHead: snapshotEntry.head,
176
- remoteHead: snapshotEntry.head,
177
- });
178
- }
179
- return;
180
- }
181
- // Check if the document was replaced entirely (new URL).
182
- // This happens when a peer replaces an artifact file, fixes a
183
- // legacy immutable string, or recreates a failed document.
184
- // The old snapshot URL is now orphaned — read from the new one.
185
- const urlReplaced = getPlainUrl(remoteEntry.url) !== getPlainUrl(snapshotEntry.url);
186
- const remoteUrl = urlReplaced ? remoteEntry.url : snapshotEntry.url;
187
- const currentRemoteHead = await this.getCurrentRemoteHead(remoteUrl);
188
- if (urlReplaced || !A.equals(currentRemoteHead, snapshotEntry.head)) {
189
- if (this.isArtifactPath(relativePath)) {
190
- // Artifact: skip content reads, just report head change
191
- const localContent = await this.getLocalContent(relativePath);
192
- changes.push({
193
- path: relativePath,
194
- changeType: localContent !== null
195
- ? ChangeType.BOTH_CHANGED
196
- : ChangeType.REMOTE_ONLY,
197
- fileType: FileType.TEXT,
198
- localContent,
199
- remoteContent: null,
200
- localHead: snapshotEntry.head,
201
- remoteHead: currentRemoteHead,
202
- ...(urlReplaced ? { remoteUrl: remoteEntry.url } : {}),
203
- });
204
- return;
205
- }
206
- // Remote document has changed
207
- const currentRemoteContent = await this.getCurrentRemoteContent(remoteUrl);
208
- const localContent = await this.getLocalContent(relativePath);
209
- const lastKnownContent = urlReplaced
210
- ? null // Can't diff against old doc when URL changed
211
- : await this.getContentAtHead(snapshotEntry.url, snapshotEntry.head);
212
- const localChanged = localContent && lastKnownContent
213
- ? !isContentEqual(localContent, lastKnownContent)
214
- : localContent !== null;
215
- const changeType = localChanged
216
- ? ChangeType.BOTH_CHANGED
217
- : ChangeType.REMOTE_ONLY;
218
- changes.push({
219
- path: relativePath,
220
- changeType,
221
- fileType: await this.getFileTypeFromContent(currentRemoteContent),
222
- localContent,
223
- remoteContent: currentRemoteContent,
224
- localHead: snapshotEntry.head,
225
- remoteHead: currentRemoteHead,
226
- ...(urlReplaced ? { remoteUrl: remoteEntry.url } : {}),
227
- });
228
- }
229
- }));
230
- return changes;
231
- }
232
- /**
233
- * Detect new remote documents from directory hierarchy that aren't in snapshot
234
- * This is critical for clone scenarios where local snapshot is empty
235
- */
236
- async detectNewRemoteDocuments(snapshot, excludePaths) {
237
- const changes = [];
238
- // If no root directory URL, nothing to discover
239
- if (!snapshot.rootDirectoryUrl) {
240
- return changes;
241
- }
242
- try {
243
- // Recursively traverse the directory hierarchy
244
- await this.discoverRemoteDocumentsRecursive(snapshot.rootDirectoryUrl, "", snapshot, changes, excludePaths);
245
- }
246
- catch (error) {
247
- out.taskLine(`Failed to discover remote documents: ${error}`, true);
248
- }
249
- return changes;
250
- }
251
- /**
252
- * Recursively discover remote documents in directory hierarchy
253
- */
254
- async discoverRemoteDocumentsRecursive(directoryUrl, currentPath, snapshot, changes, excludePaths) {
255
- try {
256
- // Find and wait for document to be available (retries on "unavailable")
257
- const plainUrl = getPlainUrl(directoryUrl);
258
- const result = await this.findDocument(plainUrl);
259
- if (!result) {
260
- return;
261
- }
262
- const dirDoc = result.doc;
263
- // Process each entry in the directory
264
- for (const entry of dirDoc.docs) {
265
- const entryPath = currentPath
266
- ? `${currentPath}/${entry.name}`
267
- : entry.name;
268
- if (entry.type === "file") {
269
- // Skip files that were deliberately deleted during this sync cycle
270
- if (excludePaths?.has(entryPath)) {
271
- debug(`skipping deleted path during re-detection: ${entryPath}`);
272
- continue;
273
- }
274
- // Check if this file is already tracked in the snapshot
275
- const existingEntry = snapshot.files.get(entryPath);
276
- if (!existingEntry) {
277
- // This is a remote file not in our snapshot
278
- const localContent = await this.getLocalContent(entryPath);
279
- const remoteContent = await this.getCurrentRemoteContent(entry.url);
280
- const remoteHead = await this.getCurrentRemoteHead(entry.url);
281
- if (localContent && remoteContent) {
282
- // File exists both locally and remotely but not in snapshot
283
- changes.push({
284
- path: entryPath,
285
- changeType: ChangeType.BOTH_CHANGED,
286
- fileType: await this.getFileTypeFromContent(remoteContent),
287
- localContent,
288
- remoteContent,
289
- remoteHead,
290
- });
291
- }
292
- else if (localContent !== null && remoteContent === null) {
293
- // File exists locally but not remotely (shouldn't happen in this flow)
294
- changes.push({
295
- path: entryPath,
296
- changeType: ChangeType.LOCAL_ONLY,
297
- fileType: await this.getFileTypeFromContent(localContent),
298
- localContent,
299
- remoteContent: null,
300
- });
301
- }
302
- else if (localContent === null && remoteContent !== null) {
303
- // File exists remotely but not locally - this is what we need for clone!
304
- changes.push({
305
- path: entryPath,
306
- changeType: ChangeType.REMOTE_ONLY,
307
- fileType: await this.getFileTypeFromContent(remoteContent),
308
- localContent: null,
309
- remoteContent,
310
- remoteHead,
311
- });
312
- }
313
- // Only ignore if neither local nor remote content exists (ghost entry)
314
- }
315
- else if (getPlainUrl(entry.url) !== getPlainUrl(existingEntry.url)) {
316
- // HACK: URL replacement detection bolted onto the "discover new docs" walk.
317
- //
318
- // A peer can replace a document entirely (creating a new URL) rather than mutating
319
- // the existing one. This happens in several cases in updateRemoteFile(): artifact
320
- // paths are always replaced; non-artifact docs with legacy immutable string content
321
- // are also replaced; and recreateFailedDocuments() replaces docs that timed out
322
- // during network sync. The two normal remote-change scans both miss this:
323
- // - detectRemoteChanges() is snapshot-centric: it checks the old (now orphaned)
324
- // doc's heads, which haven't changed, so it reports no change.
325
- // - The "new doc" branch above is directory-centric: it skips paths already in
326
- // the snapshot, assuming they're handled by detectRemoteChanges().
327
- //
328
- // A cleaner fix would be to have detectRemoteChanges() also verify that the
329
- // directory still points to the same URL for each snapshot entry, treating a
330
- // mismatch as a first-class URL-replacement change rather than a special case here.
331
- const localContent = await this.getLocalContent(entryPath);
332
- const remoteContent = await this.getCurrentRemoteContent(entry.url);
333
- const remoteHead = await this.getCurrentRemoteHead(entry.url);
334
- if (remoteContent !== null) {
335
- changes.push({
336
- path: entryPath,
337
- changeType: localContent !== null
338
- ? ChangeType.BOTH_CHANGED
339
- : ChangeType.REMOTE_ONLY,
340
- fileType: await this.getFileTypeFromContent(remoteContent),
341
- localContent: localContent ?? null,
342
- remoteContent,
343
- remoteHead,
344
- remoteUrl: entry.url,
345
- });
346
- }
347
- }
348
- }
349
- else if (entry.type === "folder") {
350
- // Recursively process subdirectory
351
- await this.discoverRemoteDocumentsRecursive(entry.url, entryPath, snapshot, changes, excludePaths);
352
- }
353
- }
354
- }
355
- catch (error) {
356
- out.taskLine(`Failed to process directory: ${error}`, true);
357
- }
358
- }
359
- /**
360
- * Get current filesystem state as a map
361
- */
362
- async getCurrentFilesystemState() {
363
- const fileMap = new Map();
364
- try {
365
- const entries = await listDirectory(this.rootPath, true, this.excludePatterns);
366
- const fileEntries = entries.filter(entry => entry.type !== FileType.DIRECTORY);
367
- await Promise.all(fileEntries.map(async (entry) => {
368
- const relativePath = getRelativePath(this.rootPath, entry.path);
369
- const content = await readFileContent(entry.path);
370
- fileMap.set(relativePath, { content, type: entry.type });
371
- }));
372
- }
373
- catch (error) {
374
- out.taskLine(`Failed to scan filesystem: ${error}`, true);
375
- // Log more details about the error
376
- if (error instanceof Error) {
377
- out.taskLine(`Error details: ${error.message}`, true);
378
- if (error.stack) {
379
- out.taskLine(`Stack: ${error.stack}`, true);
380
- }
381
- }
382
- }
383
- return fileMap;
384
- }
385
- /**
386
- * Get local file content if it exists
387
- */
388
- async getLocalContent(relativePath) {
389
- try {
390
- const fullPath = joinAndNormalizePath(this.rootPath, relativePath);
391
- return await readFileContent(fullPath);
392
- }
393
- catch {
394
- return null;
395
- }
396
- }
397
- /**
398
- * Get content from Automerge document at specific head
399
- */
400
- async getContentAtHead(url, heads) {
401
- try {
402
- // Strip heads for current document state
403
- const plainUrl = getPlainUrl(url);
404
- const handle = await this.repo.find(plainUrl);
405
- const doc = await handle.view(heads).doc();
406
- const content = doc?.content;
407
- return readDocContent(content);
408
- }
409
- catch {
410
- return null;
411
- }
412
- }
413
- /**
414
- * Get current content from Automerge document
415
- */
416
- async getCurrentRemoteContent(url) {
417
- try {
418
- const plainUrl = getPlainUrl(url);
419
- const result = await this.findDocument(plainUrl);
420
- if (!result)
421
- return null;
422
- const content = result.doc.content;
423
- return readDocContent(content);
424
- }
425
- catch (error) {
426
- out.taskLine(`Failed to get remote content: ${error}`, true);
427
- return null;
428
- }
429
- }
430
- /**
431
- * Find and wait for a document to be available, with retry logic.
432
- * repo.find() rejects with "unavailable" if the server doesn't have the
433
- * document yet, and doc() throws if the handle isn't ready. We retry
434
- * both with backoff since the document may just not have propagated yet.
435
- */
436
- async findDocument(url, options = {}) {
437
- const { maxRetries = 5, retryDelayMs = 500 } = options;
438
- for (let attempt = 0; attempt < maxRetries; attempt++) {
439
- try {
440
- const handle = await this.repo.find(url);
441
- const doc = handle.doc();
442
- return { handle, doc };
443
- }
444
- catch {
445
- // Document may be unavailable — retry after a delay
446
- if (attempt < maxRetries - 1) {
447
- await new Promise(r => setTimeout(r, retryDelayMs * (attempt + 1)));
448
- }
449
- }
450
- }
451
- return undefined;
452
- }
453
- /**
454
- * Get current head of Automerge document
455
- */
456
- async getCurrentRemoteHead(url) {
457
- try {
458
- const plainUrl = getPlainUrl(url);
459
- const result = await this.findDocument(plainUrl, {
460
- maxRetries: 3,
461
- retryDelayMs: 200,
462
- });
463
- if (!result)
464
- return [];
465
- return result.handle.heads();
466
- }
467
- catch {
468
- return [];
469
- }
470
- }
471
- /**
472
- * Determine file type from content
473
- */
474
- async getFileTypeFromContent(content) {
475
- if (!content)
476
- return FileType.TEXT;
477
- if (content instanceof Uint8Array) {
478
- return FileType.BINARY;
479
- }
480
- else {
481
- return FileType.TEXT;
482
- }
483
- }
484
- /**
485
- * Classify change type for a path
486
- */
487
- async classifyChange(relativePath, snapshot) {
488
- const snapshotEntry = snapshot.files.get(relativePath);
489
- const localContent = await this.getLocalContent(relativePath);
490
- if (!snapshotEntry) {
491
- // New file
492
- return ChangeType.LOCAL_ONLY;
493
- }
494
- const lastKnownContent = await this.getContentAtHead(snapshotEntry.url, snapshotEntry.head);
495
- const currentRemoteContent = await this.getCurrentRemoteContent(snapshotEntry.url);
496
- const localChanged = localContent
497
- ? !isContentEqual(localContent, lastKnownContent)
498
- : true;
499
- const remoteChanged = !isContentEqual(lastKnownContent, currentRemoteContent);
500
- if (!localChanged && !remoteChanged) {
501
- return ChangeType.NO_CHANGE;
502
- }
503
- else if (localChanged && !remoteChanged) {
504
- return ChangeType.LOCAL_ONLY;
505
- }
506
- else if (!localChanged && remoteChanged) {
507
- return ChangeType.REMOTE_ONLY;
508
- }
509
- else {
510
- return ChangeType.BOTH_CHANGED;
511
- }
512
- }
513
- /**
514
- * Find a file's entry in the remote directory hierarchy.
515
- * Returns the entry (with name, type, url) or null if not found.
516
- */
517
- async findInRemoteDirectory(rootDirectoryUrl, filePath) {
518
- if (!rootDirectoryUrl)
519
- return null;
520
- return findFileInDirectoryHierarchy(this.repo, rootDirectoryUrl, filePath);
521
- }
522
- }
523
- //# sourceMappingURL=change-detection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"change-detection.js","sourceRoot":"","sources":["../../src/core/change-detection.ts"],"names":[],"mappings":"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"}
@@ -1,81 +0,0 @@
1
- import { GlobalConfig, DirectoryConfig } from "../types/index.js";
2
- /**
3
- * Configuration manager for pushwork
4
- */
5
- export declare class ConfigManager {
6
- private workingDir?;
7
- private static readonly GLOBAL_CONFIG_DIR;
8
- private static readonly CONFIG_FILENAME;
9
- static readonly CONFIG_DIR = ".pushwork";
10
- constructor(workingDir?: string | undefined);
11
- /**
12
- * Get global configuration path
13
- */
14
- private getGlobalConfigPath;
15
- /**
16
- * Get local configuration path
17
- */
18
- private getLocalConfigPath;
19
- /**
20
- * Load global configuration
21
- */
22
- loadGlobal(): Promise<GlobalConfig | null>;
23
- /**
24
- * Save global configuration
25
- */
26
- saveGlobal(config: GlobalConfig): Promise<void>;
27
- /**
28
- * Load local/directory configuration
29
- */
30
- load(): Promise<DirectoryConfig | null>;
31
- /**
32
- * Save local/directory configuration
33
- */
34
- save(config: DirectoryConfig): Promise<void>;
35
- private getDefaultGlobalConfig;
36
- /**
37
- * Get default configuration
38
- */
39
- getDefaultDirectoryConfig(): DirectoryConfig;
40
- /**
41
- * Get merged configuration (global + local)
42
- */
43
- getMerged(): Promise<DirectoryConfig>;
44
- /**
45
- * Initialize with CLI option overrides
46
- * Creates a new config with defaults + CLI overrides and saves it
47
- */
48
- initializeWithOverrides(overrides?: Partial<DirectoryConfig>): Promise<DirectoryConfig>;
49
- /**
50
- * Merge two configuration objects
51
- */
52
- private mergeConfigs;
53
- /**
54
- * Create default global configuration
55
- */
56
- createDefaultGlobal(): Promise<void>;
57
- /**
58
- * Check if global configuration exists
59
- */
60
- globalConfigExists(): Promise<boolean>;
61
- /**
62
- * Check if local configuration exists
63
- */
64
- localConfigExists(): Promise<boolean>;
65
- /**
66
- * Get configuration value by path (e.g., 'sync.move_detection_threshold')
67
- */
68
- getValue(keyPath: string): Promise<any>;
69
- /**
70
- * Set configuration value by path
71
- */
72
- setValue(keyPath: string, value: any): Promise<void>;
73
- /**
74
- * Validate configuration
75
- */
76
- validate(config: DirectoryConfig): {
77
- valid: boolean;
78
- errors: string[];
79
- };
80
- }
81
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,aAAa;IAMZ,OAAO,CAAC,UAAU,CAAC;IAL/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAe;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAExD,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAe;gBAErB,UAAU,CAAC,EAAE,MAAM,YAAA;IAEvC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAehD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAmB7C;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlD,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;IACH,yBAAyB,IAAI,eAAe;IAkB5C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAkB3C;;;OAGG;IACG,uBAAuB,CAC3B,SAAS,GAAE,OAAO,CAAC,eAAe,CAAM,GACvC,OAAO,CAAC,eAAe,CAAC;IAM3B;;OAEG;IACH,OAAO,CAAC,YAAY;IA8BpB;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1C;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAK3C;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAiB7C;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB1D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;CAiBxE"}