pushwork 1.1.6 → 1.2.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.
- package/ARCHITECTURE-ACCORDING-TO-CLAUDE.md +17 -11
- package/CLAUDE.md +46 -1
- package/README.md +18 -4
- package/dist/cli.js +45 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +151 -38
- package/dist/commands.js.map +1 -1
- package/dist/core/change-detection.js +2 -2
- package/dist/core/change-detection.js.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +3 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/move-detection.d.ts.map +1 -1
- package/dist/core/move-detection.js +4 -1
- package/dist/core/move-detection.js.map +1 -1
- package/dist/core/sync-engine.d.ts +24 -4
- package/dist/core/sync-engine.d.ts.map +1 -1
- package/dist/core/sync-engine.js +85 -50
- package/dist/core/sync-engine.js.map +1 -1
- package/dist/types/config.d.ts +4 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +2 -1
- package/dist/types/config.js.map +1 -1
- package/dist/utils/content.js +1 -1
- package/dist/utils/content.js.map +1 -1
- package/dist/utils/network-sync.d.ts +1 -2
- package/dist/utils/network-sync.d.ts.map +1 -1
- package/dist/utils/network-sync.js +76 -7
- package/dist/utils/network-sync.js.map +1 -1
- package/dist/utils/output.js +7 -7
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/repo-factory.d.ts +11 -3
- package/dist/utils/repo-factory.d.ts.map +1 -1
- package/dist/utils/repo-factory.js +112 -8
- package/dist/utils/repo-factory.js.map +1 -1
- package/flake.lock +128 -0
- package/flake.nix +66 -0
- package/package.json +98 -97
- package/scripts/roundtrip-test.sh +35 -0
- package/src/cli.ts +53 -6
- package/src/commands.ts +150 -26
- package/src/core/change-detection.ts +2 -2
- package/src/core/config.ts +4 -0
- package/src/core/move-detection.ts +3 -1
- package/src/core/sync-engine.ts +99 -59
- package/src/types/config.ts +4 -0
- package/src/utils/content.ts +1 -1
- package/src/utils/network-sync.ts +92 -8
- package/src/utils/output.ts +7 -7
- package/src/utils/repo-factory.ts +124 -10
- package/test/integration/clone-test.sh +0 -0
- package/test/integration/conflict-resolution-test.sh +0 -0
- package/test/integration/deletion-behavior-test.sh +0 -0
- package/test/integration/deletion-sync-test-simple.sh +0 -0
- package/test/integration/deletion-sync-test.sh +0 -0
- package/test/integration/full-integration-test.sh +0 -0
- package/test/integration/manual-sync-test.sh +0 -0
- package/test/integration/sub-flag.test.ts +187 -0
- package/test/run-tests.sh +0 -0
- package/test/unit/artifact-nuke-reinsert.test.ts +80 -0
- package/test/unit/network-sync-sub.test.ts +144 -0
- package/test/unit/repo-factory.test.ts +111 -0
- package/test/unit/subduction-config.test.ts +69 -0
- package/dist/cli/commands.d.ts +0 -71
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -794
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -19
- package/dist/cli/index.js.map +0 -1
- package/dist/config/index.d.ts +0 -71
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -314
- package/dist/config/index.js.map +0 -1
- package/dist/utils/content-similarity.d.ts +0 -53
- package/dist/utils/content-similarity.d.ts.map +0 -1
- package/dist/utils/content-similarity.js +0 -155
- package/dist/utils/content-similarity.js.map +0 -1
- package/dist/utils/node-polyfills.d.ts +0 -9
- package/dist/utils/node-polyfills.d.ts.map +0 -1
- package/dist/utils/node-polyfills.js +0 -9
- package/dist/utils/node-polyfills.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,eAAe,EAGhB,MAAM,UAAU,CAAC;AAGlB;;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;IAkB9B;;OAEG;IACH,yBAAyB,IAAI,eAAe;IAmB5C;;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;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,eAAe,EAGhB,MAAM,UAAU,CAAC;AAGlB;;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;IAkB9B;;OAEG;IACH,yBAAyB,IAAI,eAAe;IAmB5C;;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;IAyCpB;;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"}
|
package/dist/core/config.js
CHANGED
|
@@ -204,6 +204,9 @@ class ConfigManager {
|
|
|
204
204
|
override.sync_server_storage_id !== undefined) {
|
|
205
205
|
merged.sync_server_storage_id = override.sync_server_storage_id;
|
|
206
206
|
}
|
|
207
|
+
if ("subduction" in override && override.subduction !== undefined) {
|
|
208
|
+
merged.subduction = override.subduction;
|
|
209
|
+
}
|
|
207
210
|
if ("sync_enabled" in override && override.sync_enabled !== undefined) {
|
|
208
211
|
merged.sync_enabled = override.sync_enabled;
|
|
209
212
|
}
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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,UAAU,CAAC;AAGvD,OAAO,EAAc,cAAc,EAAE,MAAM,UAAU,CAAC;AAEtD;;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;
|
|
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,UAAU,CAAC;AAGvD,OAAO,EAAc,cAAc,EAAE,MAAM,UAAU,CAAC;AAEtD;;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;IA4CjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;CAIxC"}
|
|
@@ -69,7 +69,10 @@ class MoveDetector {
|
|
|
69
69
|
// Early exit: size difference too large
|
|
70
70
|
const size1 = typeof content1 === "string" ? content1.length : content1.length;
|
|
71
71
|
const size2 = typeof content2 === "string" ? content2.length : content2.length;
|
|
72
|
-
const
|
|
72
|
+
const maxSize = Math.max(size1, size2);
|
|
73
|
+
if (maxSize === 0)
|
|
74
|
+
return 1.0;
|
|
75
|
+
const sizeDiff = Math.abs(size1 - size2) / maxSize;
|
|
73
76
|
if (sizeDiff > 0.5)
|
|
74
77
|
return 0.0;
|
|
75
78
|
// Binary files: hash mismatch = not a move
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-detection.js","sourceRoot":"","sources":["../../src/core/move-detection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"move-detection.js","sourceRoot":"","sources":["../../src/core/move-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import { AutomergeUrl, Repo } from "@automerge/automerge-repo";
|
|
2
|
-
import { SyncSnapshot, SyncResult, MoveCandidate, DirectoryConfig, DetectedChange } from "../types";
|
|
2
|
+
import { SyncSnapshot, SyncResult, DirectoryDocument, MoveCandidate, DirectoryConfig, DetectedChange } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Nuke an artifact directory's docs array and rebuild it from scratch.
|
|
5
|
+
* Entries must be spread into plain objects — pushing Automerge proxy objects
|
|
6
|
+
* back after splicing them out throws "Cannot create a reference to an
|
|
7
|
+
* existing document object".
|
|
8
|
+
*/
|
|
9
|
+
export declare function nukeAndRebuildDocs(doc: DirectoryDocument, dirPath: string, newEntries: {
|
|
10
|
+
name: string;
|
|
11
|
+
url: AutomergeUrl;
|
|
12
|
+
}[], updatedEntries: {
|
|
13
|
+
name: string;
|
|
14
|
+
url: AutomergeUrl;
|
|
15
|
+
}[], deletedNames: string[], subdirUpdates: {
|
|
16
|
+
name: string;
|
|
17
|
+
url: AutomergeUrl;
|
|
18
|
+
}[]): void;
|
|
3
19
|
/**
|
|
4
20
|
* Bidirectional sync engine implementing two-phase sync
|
|
5
21
|
*/
|
|
@@ -37,13 +53,15 @@ export declare class SyncEngine {
|
|
|
37
53
|
private getEntryUrl;
|
|
38
54
|
/**
|
|
39
55
|
* Get the appropriate URL for a subdirectory's directory entry.
|
|
40
|
-
*
|
|
41
|
-
*
|
|
56
|
+
* Artifact directories get versioned URLs (with heads) so consumers can
|
|
57
|
+
* fetch the exact snapshotted version, matching how artifact files work.
|
|
58
|
+
* Non-artifact directories get plain URLs for collaborative editing.
|
|
42
59
|
*/
|
|
43
60
|
private getDirEntryUrl;
|
|
44
61
|
/**
|
|
45
62
|
* Set the root directory URL in the snapshot
|
|
46
63
|
*/
|
|
64
|
+
getRootDirectoryUrl(): Promise<AutomergeUrl | undefined>;
|
|
47
65
|
setRootDirectoryUrl(url: AutomergeUrl): Promise<void>;
|
|
48
66
|
/**
|
|
49
67
|
* Reset the snapshot, clearing all tracked files and directories.
|
|
@@ -70,7 +88,9 @@ export declare class SyncEngine {
|
|
|
70
88
|
/**
|
|
71
89
|
* Run full bidirectional sync
|
|
72
90
|
*/
|
|
73
|
-
sync(
|
|
91
|
+
sync(options?: {
|
|
92
|
+
sub?: boolean;
|
|
93
|
+
}): Promise<SyncResult>;
|
|
74
94
|
/**
|
|
75
95
|
* Phase 1: Push local changes to Automerge documents.
|
|
76
96
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/core/sync-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,IAAI,EAKJ,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACN,YAAY,EACZ,UAAU,
|
|
1
|
+
{"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/core/sync-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/core/sync-engine.js
CHANGED
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.SyncEngine = void 0;
|
|
37
|
+
exports.nukeAndRebuildDocs = nukeAndRebuildDocs;
|
|
37
38
|
const automerge_repo_1 = require("@automerge/automerge-repo");
|
|
38
39
|
const A = __importStar(require("@automerge/automerge"));
|
|
39
40
|
const types_1 = require("../types");
|
|
@@ -62,6 +63,49 @@ function changeWithOptionalHeads(handle, heads, callback) {
|
|
|
62
63
|
handle.change(callback);
|
|
63
64
|
}
|
|
64
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Nuke an artifact directory's docs array and rebuild it from scratch.
|
|
68
|
+
* Entries must be spread into plain objects — pushing Automerge proxy objects
|
|
69
|
+
* back after splicing them out throws "Cannot create a reference to an
|
|
70
|
+
* existing document object".
|
|
71
|
+
*/
|
|
72
|
+
function nukeAndRebuildDocs(doc, dirPath, newEntries, updatedEntries, deletedNames, subdirUpdates) {
|
|
73
|
+
const deletedSet = new Set(deletedNames);
|
|
74
|
+
const updatedMap = new Map(updatedEntries.map(e => [e.name, e.url]));
|
|
75
|
+
const newMap = new Map(newEntries.map(e => [e.name, e.url]));
|
|
76
|
+
const subdirMap = new Map(subdirUpdates.map(e => [e.name, e.url]));
|
|
77
|
+
const kept = [];
|
|
78
|
+
for (const entry of doc.docs) {
|
|
79
|
+
if (entry.type === "file" && deletedSet.has(entry.name)) {
|
|
80
|
+
output_1.out.taskLine(`Removed ${entry.name} from ${(0, utils_1.formatRelativePath)(dirPath) || "root"}`);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (entry.type === "file" && updatedMap.has(entry.name)) {
|
|
84
|
+
kept.push({ ...entry, url: updatedMap.get(entry.name) });
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (entry.type === "file" && newMap.has(entry.name)) {
|
|
88
|
+
// Existing entry being re-added (e.g. from immutable string replacement)
|
|
89
|
+
kept.push({ ...entry, url: newMap.get(entry.name) });
|
|
90
|
+
newMap.delete(entry.name);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (entry.type === "folder" && subdirMap.has(entry.name)) {
|
|
94
|
+
kept.push({ ...entry, url: subdirMap.get(entry.name) });
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
kept.push({ ...entry });
|
|
98
|
+
}
|
|
99
|
+
// Add genuinely new file entries
|
|
100
|
+
for (const [name, url] of newMap) {
|
|
101
|
+
kept.push({ name, type: "file", url });
|
|
102
|
+
}
|
|
103
|
+
// Nuke and rebuild
|
|
104
|
+
doc.docs.splice(0, doc.docs.length);
|
|
105
|
+
for (const entry of kept) {
|
|
106
|
+
doc.docs.push(entry);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
65
109
|
/**
|
|
66
110
|
* Sync configuration constants
|
|
67
111
|
*/
|
|
@@ -121,15 +165,23 @@ class SyncEngine {
|
|
|
121
165
|
}
|
|
122
166
|
/**
|
|
123
167
|
* Get the appropriate URL for a subdirectory's directory entry.
|
|
124
|
-
*
|
|
125
|
-
*
|
|
168
|
+
* Artifact directories get versioned URLs (with heads) so consumers can
|
|
169
|
+
* fetch the exact snapshotted version, matching how artifact files work.
|
|
170
|
+
* Non-artifact directories get plain URLs for collaborative editing.
|
|
126
171
|
*/
|
|
127
|
-
getDirEntryUrl(handle) {
|
|
172
|
+
getDirEntryUrl(handle, dirPath) {
|
|
173
|
+
if (this.isArtifactPath(dirPath)) {
|
|
174
|
+
return this.getVersionedUrl(handle);
|
|
175
|
+
}
|
|
128
176
|
return (0, utils_1.getPlainUrl)(handle.url);
|
|
129
177
|
}
|
|
130
178
|
/**
|
|
131
179
|
* Set the root directory URL in the snapshot
|
|
132
180
|
*/
|
|
181
|
+
async getRootDirectoryUrl() {
|
|
182
|
+
const snapshot = await this.snapshotManager.load();
|
|
183
|
+
return snapshot?.rootDirectoryUrl;
|
|
184
|
+
}
|
|
133
185
|
async setRootDirectoryUrl(url) {
|
|
134
186
|
let snapshot = await this.snapshotManager.load();
|
|
135
187
|
if (!snapshot) {
|
|
@@ -310,7 +362,7 @@ class SyncEngine {
|
|
|
310
362
|
/**
|
|
311
363
|
* Run full bidirectional sync
|
|
312
364
|
*/
|
|
313
|
-
async sync() {
|
|
365
|
+
async sync(options) {
|
|
314
366
|
const result = {
|
|
315
367
|
success: false,
|
|
316
368
|
filesChanged: 0,
|
|
@@ -361,7 +413,7 @@ class SyncEngine {
|
|
|
361
413
|
debug("sync: waiting for initial bidirectional sync");
|
|
362
414
|
output_1.out.update("Waiting for initial sync from server");
|
|
363
415
|
try {
|
|
364
|
-
await (0, network_sync_1.waitForBidirectionalSync)(this.repo, snapshot.rootDirectoryUrl,
|
|
416
|
+
await (0, network_sync_1.waitForBidirectionalSync)(this.repo, snapshot.rootDirectoryUrl, {
|
|
365
417
|
timeoutMs: 5000, // Increased timeout for initial sync
|
|
366
418
|
pollIntervalMs: 100,
|
|
367
419
|
stableChecksRequired: 3,
|
|
@@ -390,6 +442,11 @@ class SyncEngine {
|
|
|
390
442
|
debug(`sync: phase 1 complete - ${phase1Result.filesChanged} files, ${phase1Result.directoriesChanged} dirs changed`);
|
|
391
443
|
// Wait for network sync (important for clone scenarios)
|
|
392
444
|
if (this.config.sync_enabled) {
|
|
445
|
+
const sub = options?.sub ?? false;
|
|
446
|
+
// In Subduction mode, pass no StorageId so waitForSync
|
|
447
|
+
// falls back to head-stability polling. In WebSocket mode,
|
|
448
|
+
// pass the StorageId for precise getSyncInfo-based verification.
|
|
449
|
+
const storageId = sub ? undefined : this.config.sync_server_storage_id;
|
|
393
450
|
try {
|
|
394
451
|
// Ensure root directory handle is tracked for sync
|
|
395
452
|
if (snapshot.rootDirectoryUrl) {
|
|
@@ -402,16 +459,18 @@ class SyncEngine {
|
|
|
402
459
|
const handlePaths = Array.from(this.handlesByPath.keys());
|
|
403
460
|
debug(`sync: waiting for ${allHandles.length} handles to sync to server: ${handlePaths.slice(0, 10).map(p => p || "(root)").join(", ")}${handlePaths.length > 10 ? ` ...and ${handlePaths.length - 10} more` : ""}`);
|
|
404
461
|
output_1.out.update(`Uploading ${allHandles.length} documents to sync server`);
|
|
405
|
-
const { failed } = await (0, network_sync_1.waitForSync)(allHandles,
|
|
406
|
-
// Recreate failed documents and retry once
|
|
407
|
-
|
|
462
|
+
const { failed } = await (0, network_sync_1.waitForSync)(allHandles, storageId);
|
|
463
|
+
// Recreate failed documents and retry once.
|
|
464
|
+
// Skip in Subduction mode — SubductionSource has its
|
|
465
|
+
// own heal-sync retry logic.
|
|
466
|
+
if (failed.length > 0 && !sub) {
|
|
408
467
|
debug(`sync: ${failed.length} documents failed, recreating`);
|
|
409
468
|
output_1.out.update(`Recreating ${failed.length} failed documents`);
|
|
410
469
|
const retryHandles = await this.recreateFailedDocuments(failed, snapshot);
|
|
411
470
|
if (retryHandles.length > 0) {
|
|
412
471
|
debug(`sync: retrying ${retryHandles.length} recreated handles`);
|
|
413
472
|
output_1.out.update(`Retrying ${retryHandles.length} recreated documents`);
|
|
414
|
-
const retry = await (0, network_sync_1.waitForSync)(retryHandles,
|
|
473
|
+
const retry = await (0, network_sync_1.waitForSync)(retryHandles, storageId);
|
|
415
474
|
if (retry.failed.length > 0) {
|
|
416
475
|
const msg = `${retry.failed.length} documents failed to sync to server after recreation`;
|
|
417
476
|
debug(`sync: ${msg}`);
|
|
@@ -424,6 +483,12 @@ class SyncEngine {
|
|
|
424
483
|
}
|
|
425
484
|
}
|
|
426
485
|
}
|
|
486
|
+
else if (failed.length > 0 && sub) {
|
|
487
|
+
const msg = `${failed.length} document${failed.length === 1 ? '' : 's'} did not converge during sync (Subduction will retry in the background; re-run sync to confirm)`;
|
|
488
|
+
debug(`sync: ${msg}`);
|
|
489
|
+
output_1.out.taskLine(msg, true);
|
|
490
|
+
result.warnings.push(msg);
|
|
491
|
+
}
|
|
427
492
|
debug("sync: all handles synced to server");
|
|
428
493
|
}
|
|
429
494
|
// Wait for bidirectional sync to stabilize
|
|
@@ -431,7 +496,7 @@ class SyncEngine {
|
|
|
431
496
|
const changedHandles = Array.from(this.handlesByPath.values());
|
|
432
497
|
debug(`sync: waiting for bidirectional sync to stabilize (${changedHandles.length} tracked handles)`);
|
|
433
498
|
output_1.out.update("Waiting for bidirectional sync to stabilize");
|
|
434
|
-
await (0, network_sync_1.waitForBidirectionalSync)(this.repo, snapshot.rootDirectoryUrl,
|
|
499
|
+
await (0, network_sync_1.waitForBidirectionalSync)(this.repo, snapshot.rootDirectoryUrl, {
|
|
435
500
|
timeoutMs: BIDIRECTIONAL_SYNC_TIMEOUT_MS,
|
|
436
501
|
pollIntervalMs: 100,
|
|
437
502
|
stableChecksRequired: 3,
|
|
@@ -447,7 +512,12 @@ class SyncEngine {
|
|
|
447
512
|
const rootHandle = await this.repo.find(snapshot.rootDirectoryUrl);
|
|
448
513
|
debug("sync: syncing root directory touch to server");
|
|
449
514
|
output_1.out.update("Syncing root directory update");
|
|
450
|
-
await (0, network_sync_1.waitForSync)([rootHandle],
|
|
515
|
+
const rootSync = await (0, network_sync_1.waitForSync)([rootHandle], storageId);
|
|
516
|
+
if (rootSync.failed.length > 0) {
|
|
517
|
+
const msg = "Root directory update did not converge to server; consumers may not see recent changes until next sync";
|
|
518
|
+
debug(`sync: ${msg}`);
|
|
519
|
+
result.warnings.push(msg);
|
|
520
|
+
}
|
|
451
521
|
}
|
|
452
522
|
}
|
|
453
523
|
catch (error) {
|
|
@@ -724,7 +794,7 @@ class SyncEngine {
|
|
|
724
794
|
const childHandle = await this.repo.find((0, utils_1.getPlainUrl)(dirEntry.url));
|
|
725
795
|
subdirUpdates.push({
|
|
726
796
|
name: childName,
|
|
727
|
-
url: this.getDirEntryUrl(childHandle),
|
|
797
|
+
url: this.getDirEntryUrl(childHandle, modifiedDir),
|
|
728
798
|
});
|
|
729
799
|
}
|
|
730
800
|
}
|
|
@@ -1103,7 +1173,7 @@ class SyncEngine {
|
|
|
1103
1173
|
// Track discovered directory for sync
|
|
1104
1174
|
this.handlesByPath.set(directoryPath, childDirHandle);
|
|
1105
1175
|
// Get appropriate URL for directory entry
|
|
1106
|
-
const entryUrl = this.getDirEntryUrl(childDirHandle);
|
|
1176
|
+
const entryUrl = this.getDirEntryUrl(childDirHandle, directoryPath);
|
|
1107
1177
|
// Update snapshot with discovered directory
|
|
1108
1178
|
this.snapshotManager.updateDirectoryEntry(snapshot, directoryPath, {
|
|
1109
1179
|
path: (0, utils_1.joinAndNormalizePath)(this.rootPath, directoryPath),
|
|
@@ -1131,7 +1201,7 @@ class SyncEngine {
|
|
|
1131
1201
|
};
|
|
1132
1202
|
const dirHandle = this.repo.create(dirDoc);
|
|
1133
1203
|
// Get appropriate URL for directory entry
|
|
1134
|
-
const dirEntryUrl = this.getDirEntryUrl(dirHandle);
|
|
1204
|
+
const dirEntryUrl = this.getDirEntryUrl(dirHandle, directoryPath);
|
|
1135
1205
|
// Add this directory to its parent
|
|
1136
1206
|
// Use plain URL for mutable handle
|
|
1137
1207
|
const parentHandle = await this.repo.find((0, utils_1.getPlainUrl)(parentDirUrl));
|
|
@@ -1237,47 +1307,12 @@ class SyncEngine {
|
|
|
1237
1307
|
if (this.isArtifactPath(dirPath)) {
|
|
1238
1308
|
// Artifact directories are always nuked: rebuild docs array from scratch
|
|
1239
1309
|
// using a plain change() to avoid changeAt forking from stale heads.
|
|
1240
|
-
const deletedSet = new Set(deletedNames);
|
|
1241
|
-
const updatedMap = new Map(updatedEntries.map(e => [e.name, e.url]));
|
|
1242
|
-
const newMap = new Map(newEntries.map(e => [e.name, e.url]));
|
|
1243
|
-
const subdirMap = new Map(subdirUpdates.map(e => [e.name, e.url]));
|
|
1244
1310
|
dirHandle.change((doc) => {
|
|
1245
1311
|
if (!doc.name)
|
|
1246
1312
|
doc.name = dirName;
|
|
1247
1313
|
if (!doc.title)
|
|
1248
1314
|
doc.title = dirName;
|
|
1249
|
-
|
|
1250
|
-
const kept = [];
|
|
1251
|
-
for (const entry of doc.docs) {
|
|
1252
|
-
if (entry.type === "file" && deletedSet.has(entry.name)) {
|
|
1253
|
-
output_1.out.taskLine(`Removed ${entry.name} from ${(0, utils_1.formatRelativePath)(dirPath) || "root"}`);
|
|
1254
|
-
continue;
|
|
1255
|
-
}
|
|
1256
|
-
if (entry.type === "file" && updatedMap.has(entry.name)) {
|
|
1257
|
-
kept.push({ ...entry, url: updatedMap.get(entry.name) });
|
|
1258
|
-
continue;
|
|
1259
|
-
}
|
|
1260
|
-
if (entry.type === "file" && newMap.has(entry.name)) {
|
|
1261
|
-
// Existing entry being re-added (e.g. from immutable string replacement)
|
|
1262
|
-
kept.push({ ...entry, url: newMap.get(entry.name) });
|
|
1263
|
-
newMap.delete(entry.name);
|
|
1264
|
-
continue;
|
|
1265
|
-
}
|
|
1266
|
-
if (entry.type === "folder" && subdirMap.has(entry.name)) {
|
|
1267
|
-
kept.push({ ...entry, url: subdirMap.get(entry.name) });
|
|
1268
|
-
continue;
|
|
1269
|
-
}
|
|
1270
|
-
kept.push(entry);
|
|
1271
|
-
}
|
|
1272
|
-
// Add genuinely new file entries
|
|
1273
|
-
for (const [name, url] of newMap) {
|
|
1274
|
-
kept.push({ name, type: "file", url });
|
|
1275
|
-
}
|
|
1276
|
-
// Nuke and rebuild
|
|
1277
|
-
doc.docs.splice(0, doc.docs.length);
|
|
1278
|
-
for (const entry of kept) {
|
|
1279
|
-
doc.docs.push(entry);
|
|
1280
|
-
}
|
|
1315
|
+
nukeAndRebuildDocs(doc, dirPath, newEntries, updatedEntries, deletedNames, subdirUpdates);
|
|
1281
1316
|
});
|
|
1282
1317
|
}
|
|
1283
1318
|
else {
|