@indigoai-us/hq-cloud 6.16.64 → 6.16.66
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/dist/bin/sync-runner-company.d.ts +14 -0
- package/dist/bin/sync-runner-company.d.ts.map +1 -1
- package/dist/bin/sync-runner-company.js +42 -8
- package/dist/bin/sync-runner-company.js.map +1 -1
- package/dist/bin/sync-runner-company.test.js +62 -7
- package/dist/bin/sync-runner-company.test.js.map +1 -1
- package/dist/bin/sync-runner-planning.d.ts +12 -3
- package/dist/bin/sync-runner-planning.d.ts.map +1 -1
- package/dist/bin/sync-runner-planning.js +65 -3
- package/dist/bin/sync-runner-planning.js.map +1 -1
- package/dist/bin/sync-runner-planning.test.js +172 -1
- package/dist/bin/sync-runner-planning.test.js.map +1 -1
- package/dist/bin/sync-runner-watch-loop.d.ts +52 -3
- package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
- package/dist/bin/sync-runner-watch-loop.js +443 -167
- package/dist/bin/sync-runner-watch-loop.js.map +1 -1
- package/dist/bin/sync-runner-watch-routes.d.ts +19 -2
- package/dist/bin/sync-runner-watch-routes.d.ts.map +1 -1
- package/dist/bin/sync-runner-watch-routes.js +40 -5
- package/dist/bin/sync-runner-watch-routes.js.map +1 -1
- package/dist/bin/sync-runner-watch-routes.test.js +47 -0
- package/dist/bin/sync-runner-watch-routes.test.js.map +1 -1
- package/dist/bin/sync-runner.d.ts +64 -6
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +48 -4
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/bin/sync-runner.test.js +1577 -169
- package/dist/bin/sync-runner.test.js.map +1 -1
- package/dist/cli/onepass-pull-planner-regressions.test.d.ts +2 -0
- package/dist/cli/onepass-pull-planner-regressions.test.d.ts.map +1 -0
- package/dist/cli/onepass-pull-planner-regressions.test.js +300 -0
- package/dist/cli/onepass-pull-planner-regressions.test.js.map +1 -0
- package/dist/cli/onepass-pull-planner.test.d.ts +2 -0
- package/dist/cli/onepass-pull-planner.test.d.ts.map +1 -0
- package/dist/cli/onepass-pull-planner.test.js +266 -0
- package/dist/cli/onepass-pull-planner.test.js.map +1 -0
- package/dist/cli/push-scan-exclusions.test.js +4 -4
- package/dist/cli/push-scan-exclusions.test.js.map +1 -1
- package/dist/cli/share.d.ts +31 -1
- package/dist/cli/share.d.ts.map +1 -1
- package/dist/cli/share.js +136 -6
- package/dist/cli/share.js.map +1 -1
- package/dist/cli/share.test.js +295 -5
- package/dist/cli/share.test.js.map +1 -1
- package/dist/cli/streaming-pull-planner.bench.test.d.ts +15 -0
- package/dist/cli/streaming-pull-planner.bench.test.d.ts.map +1 -0
- package/dist/cli/streaming-pull-planner.bench.test.js +273 -0
- package/dist/cli/streaming-pull-planner.bench.test.js.map +1 -0
- package/dist/cli/sync-scope.test.js +8 -0
- package/dist/cli/sync-scope.test.js.map +1 -1
- package/dist/cli/sync.d.ts +12 -0
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +302 -123
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/sync.test.js +255 -2
- package/dist/cli/sync.test.js.map +1 -1
- package/dist/hq-root-recovery.d.ts +30 -0
- package/dist/hq-root-recovery.d.ts.map +1 -0
- package/dist/hq-root-recovery.js +131 -0
- package/dist/hq-root-recovery.js.map +1 -0
- package/dist/hq-root-recovery.test.d.ts +2 -0
- package/dist/hq-root-recovery.test.d.ts.map +1 -0
- package/dist/hq-root-recovery.test.js +65 -0
- package/dist/hq-root-recovery.test.js.map +1 -0
- package/dist/journal-row-store.d.ts +40 -5
- package/dist/journal-row-store.d.ts.map +1 -1
- package/dist/journal-row-store.js +240 -21
- package/dist/journal-row-store.js.map +1 -1
- package/dist/journal-row-store.test.js +54 -0
- package/dist/journal-row-store.test.js.map +1 -1
- package/dist/journal-snapshot-v4.d.ts.map +1 -1
- package/dist/journal-snapshot-v4.js +11 -6
- package/dist/journal-snapshot-v4.js.map +1 -1
- package/dist/journal-store.test.js +324 -7
- package/dist/journal-store.test.js.map +1 -1
- package/dist/journal.d.ts +51 -16
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +303 -79
- package/dist/journal.js.map +1 -1
- package/dist/lib/exit-codes.d.ts +15 -0
- package/dist/lib/exit-codes.d.ts.map +1 -1
- package/dist/lib/exit-codes.js +15 -0
- package/dist/lib/exit-codes.js.map +1 -1
- package/dist/personal-vault.d.ts.map +1 -1
- package/dist/personal-vault.js +10 -3
- package/dist/personal-vault.js.map +1 -1
- package/dist/personal-vault.test.js +35 -0
- package/dist/personal-vault.test.js.map +1 -1
- package/dist/remote-pull.d.ts.map +1 -1
- package/dist/remote-pull.js +9 -2
- package/dist/remote-pull.js.map +1 -1
- package/dist/remote-pull.test.js +59 -2
- package/dist/remote-pull.test.js.map +1 -1
- package/dist/s3.d.ts +1 -0
- package/dist/s3.d.ts.map +1 -1
- package/dist/s3.js +20 -2
- package/dist/s3.js.map +1 -1
- package/dist/s3.list-cost.test.d.ts +2 -0
- package/dist/s3.list-cost.test.d.ts.map +1 -0
- package/dist/s3.list-cost.test.js +51 -0
- package/dist/s3.list-cost.test.js.map +1 -0
- package/dist/sync/area-ledger.d.ts +27 -3
- package/dist/sync/area-ledger.d.ts.map +1 -1
- package/dist/sync/area-ledger.js +149 -39
- package/dist/sync/area-ledger.js.map +1 -1
- package/dist/sync/area-ledger.test.js +192 -5
- package/dist/sync/area-ledger.test.js.map +1 -1
- package/dist/sync/parallel-sync-coordinator.test.js +29 -0
- package/dist/sync/parallel-sync-coordinator.test.js.map +1 -1
- package/dist/sync/realtime-telemetry.d.ts +1 -1
- package/dist/sync/realtime-telemetry.d.ts.map +1 -1
- package/dist/sync/realtime-telemetry.js +14 -6
- package/dist/sync/realtime-telemetry.js.map +1 -1
- package/dist/sync/realtime-telemetry.test.js +136 -16
- package/dist/sync/realtime-telemetry.test.js.map +1 -1
- package/dist/sync/remote-file-spool.d.ts +16 -0
- package/dist/sync/remote-file-spool.d.ts.map +1 -0
- package/dist/sync/remote-file-spool.js +91 -0
- package/dist/sync/remote-file-spool.js.map +1 -0
- package/dist/sync/remote-file-spool.test.d.ts +2 -0
- package/dist/sync/remote-file-spool.test.d.ts.map +1 -0
- package/dist/sync/remote-file-spool.test.js +77 -0
- package/dist/sync/remote-file-spool.test.js.map +1 -0
- package/dist/sync/state-store.d.ts +6 -0
- package/dist/sync/state-store.d.ts.map +1 -1
- package/dist/sync/state-store.js +14 -2
- package/dist/sync/state-store.js.map +1 -1
- package/dist/watch-coverage.d.ts +24 -0
- package/dist/watch-coverage.d.ts.map +1 -0
- package/dist/watch-coverage.js +46 -0
- package/dist/watch-coverage.js.map +1 -0
- package/dist/watch-coverage.test.d.ts +2 -0
- package/dist/watch-coverage.test.d.ts.map +1 -0
- package/dist/watch-coverage.test.js +56 -0
- package/dist/watch-coverage.test.js.map +1 -0
- package/dist/watcher.d.ts +31 -1
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +172 -0
- package/dist/watcher.js.map +1 -1
- package/dist/watcher.test.js +78 -0
- package/dist/watcher.test.js.map +1 -1
- package/package.json +2 -1
|
@@ -52,8 +52,8 @@ describe("push-scan personal-vault exclusions", () => {
|
|
|
52
52
|
fs.rmSync(hqRoot, { recursive: true, force: true });
|
|
53
53
|
});
|
|
54
54
|
const buildFilter = () => wrapFilterWithPersonalVaultDefaults(createIgnoreFilter(hqRoot), hqRoot, () => { });
|
|
55
|
-
it("excludes every excluded class from the plan and keeps legit content", () => {
|
|
56
|
-
const collected = collectFiles(computePersonalVaultPaths(hqRoot, {}), hqRoot, hqRoot, buildFilter());
|
|
55
|
+
it("excludes every excluded class from the plan and keeps legit content", async () => {
|
|
56
|
+
const collected = await collectFiles(computePersonalVaultPaths(hqRoot, {}), hqRoot, hqRoot, buildFilter());
|
|
57
57
|
const keys = collected.map((e) => e.relativePath);
|
|
58
58
|
expect(keys).toContain("personal/keep.md");
|
|
59
59
|
expect(keys).toContain("core/policies/p.md");
|
|
@@ -66,10 +66,10 @@ describe("push-scan personal-vault exclusions", () => {
|
|
|
66
66
|
expect(k).not.toMatch(/(^|\/)\.conflict-/);
|
|
67
67
|
}
|
|
68
68
|
});
|
|
69
|
-
it("prunes excluded directories during traversal (never reads inside them)", () => {
|
|
69
|
+
it("prunes excluded directories during traversal (never reads inside them)", async () => {
|
|
70
70
|
const readdirSpy = vi.spyOn(fs, "readdirSync");
|
|
71
71
|
try {
|
|
72
|
-
collectFiles(computePersonalVaultPaths(hqRoot, {}), hqRoot, hqRoot, buildFilter());
|
|
72
|
+
await collectFiles(computePersonalVaultPaths(hqRoot, {}), hqRoot, hqRoot, buildFilter());
|
|
73
73
|
}
|
|
74
74
|
finally {
|
|
75
75
|
// Capture the directories the walk enumerated, then restore.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-scan-exclusions.test.js","sourceRoot":"","sources":["../../src/cli/push-scan-exclusions.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,4EAA4E;AAC5E,2EAA2E;AAC3E,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACrC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAuB,CAAC;IAC3D,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mCAAmC,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;AAElC,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,MAAc,CAAC;IAEnB,MAAM,EAAE,GAAG,CAAC,GAAW,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;QAC9D,gCAAgC;QAChC,EAAE,CAAC,kBAAkB,CAAC,CAAC;QACvB,EAAE,CAAC,oBAAoB,CAAC,CAAC;QACzB,EAAE,CAAC,6BAA6B,CAAC,CAAC;QAClC,8DAA8D;QAC9D,EAAE,CAAC,wCAAwC,CAAC,CAAC;QAC7C,EAAE,CAAC,wCAAwC,CAAC,CAAC;QAC7C,EAAE,CAAC,yCAAyC,CAAC,CAAC;QAC9C,EAAE,CAAC,8BAA8B,CAAC,CAAC;QACnC,EAAE,CAAC,mCAAmC,CAAC,CAAC;QACxC,wDAAwD;QACxD,EAAE,CAAC,4CAA4C,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,mCAAmC,CACjC,kBAAkB,CAAC,MAAM,CAAC,EAC1B,MAAM,EACN,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;IAEJ,EAAE,CAAC,qEAAqE,EAAE,
|
|
1
|
+
{"version":3,"file":"push-scan-exclusions.test.js","sourceRoot":"","sources":["../../src/cli/push-scan-exclusions.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/share.d.ts
CHANGED
|
@@ -134,6 +134,12 @@ export declare function isEphemeralPath(p: string): boolean;
|
|
|
134
134
|
* (skip-excluded-policy), symmetric with the ephemeral-mirror filter above.
|
|
135
135
|
*/
|
|
136
136
|
export declare function isMalformedVaultKey(key: string): boolean;
|
|
137
|
+
declare function enableCooperativeRowVisits(): void;
|
|
138
|
+
declare function disableCooperativeRowVisits(): void;
|
|
139
|
+
declare function snapshotCooperativeRowVisits(): {
|
|
140
|
+
collect: Map<string, number>;
|
|
141
|
+
plan: Map<string, number>;
|
|
142
|
+
};
|
|
137
143
|
/**
|
|
138
144
|
* Test-only export. Kept under a `_testing` namespace so the module's public
|
|
139
145
|
* surface stays focused on `share()` / `ShareOptions` / `ShareResult` while
|
|
@@ -151,6 +157,9 @@ export declare const _testing: {
|
|
|
151
157
|
isWithinLexicalOrReal: typeof isWithinLexicalOrReal;
|
|
152
158
|
defaultConsoleLogger: typeof defaultConsoleLogger;
|
|
153
159
|
statMatchesJournal: typeof statMatchesJournal;
|
|
160
|
+
enableCooperativeRowVisits: typeof enableCooperativeRowVisits;
|
|
161
|
+
disableCooperativeRowVisits: typeof disableCooperativeRowVisits;
|
|
162
|
+
cooperativeRowVisits: typeof snapshotCooperativeRowVisits;
|
|
154
163
|
};
|
|
155
164
|
/**
|
|
156
165
|
* Stage-1 classification for a single local file in a push run. Pre-HEAD —
|
|
@@ -278,6 +287,14 @@ export interface ShareOptions {
|
|
|
278
287
|
* planning. The caller owns throttling; one-shot CLI callers omit it.
|
|
279
288
|
*/
|
|
280
289
|
onHeartbeat?: () => void;
|
|
290
|
+
/**
|
|
291
|
+
* Cooperative root-lock hand-off for a watch-mode full push. It is called
|
|
292
|
+
* only after a bounded upload unit has completely settled and its journal
|
|
293
|
+
* updates are on disk. A `true` result means realtime work ran while this
|
|
294
|
+
* pass yielded, so the push is rebuilt from current local and journal state
|
|
295
|
+
* before it can plan another durable mutation.
|
|
296
|
+
*/
|
|
297
|
+
cooperativeCheckpoint?: () => Promise<void | boolean>;
|
|
281
298
|
/**
|
|
282
299
|
* When true, files whose local hash matches the journal entry from the
|
|
283
300
|
* last sync are skipped (no remote HEAD, no upload). This is the gate
|
|
@@ -641,6 +658,12 @@ export interface SharePathResult {
|
|
|
641
658
|
export declare function wrapFilterWithIgnoreVisibility(underlying: (absPath: string, isDir?: boolean) => boolean, hqRoot: string, onIgnoreExcluded: (relPath: string) => void, onAnyExcluded?: () => void): (absPath: string, isDir?: boolean) => boolean;
|
|
642
659
|
/**
|
|
643
660
|
* Share local file(s) to the entity vault.
|
|
661
|
+
*
|
|
662
|
+
* A cooperative hand-off yields the root lock at a drained 500-row unit, then
|
|
663
|
+
* resumes the same collection, plan, and executor instead of restarting
|
|
664
|
+
* `share()`. Journal writes stay delta-only (absence-is-deletion is the delete
|
|
665
|
+
* plan, computed once from the completed walk), so a realtime writer's rows
|
|
666
|
+
* are not dropped when this pass finalizes.
|
|
644
667
|
*/
|
|
645
668
|
export declare function share(options: ShareOptions): Promise<ShareResult>;
|
|
646
669
|
type UploadPlanItem = Extract<PushPlanItem, {
|
|
@@ -656,6 +679,12 @@ type UploadPlanItem = Extract<PushPlanItem, {
|
|
|
656
679
|
export declare function currentUploadBytes(item: UploadPlanItem): number;
|
|
657
680
|
/** Read only the immutable identity field from the first YAML frontmatter. */
|
|
658
681
|
export declare function parseRegisteredCompanySkillUid(content: string): string | undefined;
|
|
682
|
+
/**
|
|
683
|
+
* Maximum completed upload mutations between cooperative full-push hand-offs.
|
|
684
|
+
* The executor drains a unit before yielding, so realtime never overlaps an
|
|
685
|
+
* upload body or the push's mutable journal state.
|
|
686
|
+
*/
|
|
687
|
+
export declare const FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE = 500;
|
|
659
688
|
/**
|
|
660
689
|
* Default human-readable share output. Preserves the exact format the CLI
|
|
661
690
|
* emitted before `onEvent` was added — tty users see no change.
|
|
@@ -722,6 +751,7 @@ interface CollectHooks {
|
|
|
722
751
|
onUnreachablePath?: (namedPath: string, reason: UnreachablePathReason) => void;
|
|
723
752
|
onLinkedSubtree?: (rel: string) => void;
|
|
724
753
|
onHeartbeat?: () => void;
|
|
754
|
+
cooperativeCheckpoint?: () => Promise<void | boolean>;
|
|
725
755
|
}
|
|
726
756
|
/**
|
|
727
757
|
* Resolve a caller-supplied push path to an absolute path.
|
|
@@ -799,6 +829,6 @@ declare function isWithinLexicalOrReal(parent: string, child: string, hqRoot: st
|
|
|
799
829
|
* Pre-fix, statSync followed the link and the target's bytes were uploaded
|
|
800
830
|
* under the link's key — silently flattening the link topology.
|
|
801
831
|
*/
|
|
802
|
-
declare function collectFiles(paths: string[], hqRoot: string, syncRoot: string, filter: (p: string, isDir?: boolean) => boolean, hooks?: CollectHooks): CollectedEntry[]
|
|
832
|
+
declare function collectFiles(paths: string[], hqRoot: string, syncRoot: string, filter: (p: string, isDir?: boolean) => boolean, hooks?: CollectHooks): Promise<CollectedEntry[]>;
|
|
803
833
|
export {};
|
|
804
834
|
//# sourceMappingURL=share.d.ts.map
|
package/dist/cli/share.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/cli/share.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AAwBhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAqC7C,OAAO,KAAK,EAAwC,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAOL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAML,KAAK,0BAA0B,EAChC,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EAA4B,KAAK,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAiEtG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,sBAAsB,QACmD,CAAC;AAEvF;;;;;;;;;GASG;AACH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,QAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/cli/share.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/share.js
CHANGED
|
@@ -213,6 +213,33 @@ export function isEphemeralPath(p) {
|
|
|
213
213
|
export function isMalformedVaultKey(key) {
|
|
214
214
|
return key.includes("\\");
|
|
215
215
|
}
|
|
216
|
+
const cooperativeRowVisits = {
|
|
217
|
+
enabled: false,
|
|
218
|
+
collect: new Map(),
|
|
219
|
+
plan: new Map(),
|
|
220
|
+
};
|
|
221
|
+
function noteCooperativeRowVisit(phase, relativePath) {
|
|
222
|
+
if (!cooperativeRowVisits.enabled)
|
|
223
|
+
return;
|
|
224
|
+
const bucket = cooperativeRowVisits[phase];
|
|
225
|
+
bucket.set(relativePath, (bucket.get(relativePath) ?? 0) + 1);
|
|
226
|
+
}
|
|
227
|
+
function enableCooperativeRowVisits() {
|
|
228
|
+
cooperativeRowVisits.enabled = true;
|
|
229
|
+
cooperativeRowVisits.collect = new Map();
|
|
230
|
+
cooperativeRowVisits.plan = new Map();
|
|
231
|
+
}
|
|
232
|
+
function disableCooperativeRowVisits() {
|
|
233
|
+
cooperativeRowVisits.enabled = false;
|
|
234
|
+
cooperativeRowVisits.collect = new Map();
|
|
235
|
+
cooperativeRowVisits.plan = new Map();
|
|
236
|
+
}
|
|
237
|
+
function snapshotCooperativeRowVisits() {
|
|
238
|
+
return {
|
|
239
|
+
collect: new Map(cooperativeRowVisits.collect),
|
|
240
|
+
plan: new Map(cooperativeRowVisits.plan),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
216
243
|
/**
|
|
217
244
|
* Test-only export. Kept under a `_testing` namespace so the module's public
|
|
218
245
|
* surface stays focused on `share()` / `ShareOptions` / `ShareResult` while
|
|
@@ -230,6 +257,9 @@ export const _testing = {
|
|
|
230
257
|
isWithinLexicalOrReal,
|
|
231
258
|
defaultConsoleLogger,
|
|
232
259
|
statMatchesJournal,
|
|
260
|
+
enableCooperativeRowVisits,
|
|
261
|
+
disableCooperativeRowVisits,
|
|
262
|
+
cooperativeRowVisits: snapshotCooperativeRowVisits,
|
|
233
263
|
};
|
|
234
264
|
/** Snapshot of `absolutePath`, or null when it is missing or not a plain file. */
|
|
235
265
|
function statSnapshot(absolutePath) {
|
|
@@ -287,6 +317,21 @@ function statMatchesJournal(absolutePath, entry) {
|
|
|
287
317
|
// (journal.ts) so the pull planner applies the identical gate.
|
|
288
318
|
return journalEntryMatchesStat(entry, lstat);
|
|
289
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Let watcher ingress run at a bounded row cadence, then hand the full-pass
|
|
322
|
+
* scheduler a mutation-free boundary when it has realtime work waiting. The
|
|
323
|
+
* caller resumes at the next 500-row unit; collection and planning keep the
|
|
324
|
+
* snapshot they already built instead of restarting `share()`.
|
|
325
|
+
*/
|
|
326
|
+
async function yieldToCooperativeCheckpoint(work, cooperativeCheckpoint, force = false) {
|
|
327
|
+
work.rowsSinceYield += 1;
|
|
328
|
+
if (!force && work.rowsSinceYield < FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE)
|
|
329
|
+
return;
|
|
330
|
+
work.rowsSinceYield = 0;
|
|
331
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
332
|
+
if (cooperativeCheckpoint)
|
|
333
|
+
await cooperativeCheckpoint();
|
|
334
|
+
}
|
|
290
335
|
function computePushPlan(filesToShare, journal, skipUnchanged, onHeartbeat) {
|
|
291
336
|
const items = [];
|
|
292
337
|
for (const entry of filesToShare) {
|
|
@@ -435,6 +480,31 @@ function computePushPlan(filesToShare, journal, skipUnchanged, onHeartbeat) {
|
|
|
435
480
|
}
|
|
436
481
|
return { items, filesToUpload, bytesToUpload, filesToSkip };
|
|
437
482
|
}
|
|
483
|
+
/**
|
|
484
|
+
* Build a full-pass plan in bounded row batches. A scoped replan deliberately
|
|
485
|
+
* uses the synchronous single-row planner above, so it does not add an await
|
|
486
|
+
* boundary between upload admissions and collapse the transfer pool.
|
|
487
|
+
*/
|
|
488
|
+
async function computePushPlanCooperatively(filesToShare, journal, skipUnchanged, onHeartbeat, cooperativeCheckpoint) {
|
|
489
|
+
const items = [];
|
|
490
|
+
let filesToUpload = 0;
|
|
491
|
+
let bytesToUpload = 0;
|
|
492
|
+
let filesToSkip = 0;
|
|
493
|
+
const cooperativeWork = { rowsSinceYield: 0 };
|
|
494
|
+
for (let start = 0; start < filesToShare.length; start += FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE) {
|
|
495
|
+
const slice = filesToShare.slice(start, start + FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE);
|
|
496
|
+
const plan = computePushPlan(slice, journal, skipUnchanged, onHeartbeat);
|
|
497
|
+
items.push(...plan.items);
|
|
498
|
+
filesToUpload += plan.filesToUpload;
|
|
499
|
+
bytesToUpload += plan.bytesToUpload;
|
|
500
|
+
filesToSkip += plan.filesToSkip;
|
|
501
|
+
for (const entry of slice) {
|
|
502
|
+
noteCooperativeRowVisit("plan", entry.relativePath);
|
|
503
|
+
}
|
|
504
|
+
await yieldToCooperativeCheckpoint(cooperativeWork, cooperativeCheckpoint, true);
|
|
505
|
+
}
|
|
506
|
+
return { items, filesToUpload, bytesToUpload, filesToSkip };
|
|
507
|
+
}
|
|
438
508
|
/** Re-read one collected path at the execution seam. */
|
|
439
509
|
function recollectPushEntry(item) {
|
|
440
510
|
let lstat;
|
|
@@ -632,8 +702,17 @@ export function wrapFilterWithIgnoreVisibility(underlying, hqRoot, onIgnoreExclu
|
|
|
632
702
|
}
|
|
633
703
|
/**
|
|
634
704
|
* Share local file(s) to the entity vault.
|
|
705
|
+
*
|
|
706
|
+
* A cooperative hand-off yields the root lock at a drained 500-row unit, then
|
|
707
|
+
* resumes the same collection, plan, and executor instead of restarting
|
|
708
|
+
* `share()`. Journal writes stay delta-only (absence-is-deletion is the delete
|
|
709
|
+
* plan, computed once from the completed walk), so a realtime writer's rows
|
|
710
|
+
* are not dropped when this pass finalizes.
|
|
635
711
|
*/
|
|
636
712
|
export async function share(options) {
|
|
713
|
+
return shareOnce(options);
|
|
714
|
+
}
|
|
715
|
+
async function shareOnce(options) {
|
|
637
716
|
const run = await createPushRunContext(options);
|
|
638
717
|
const counters = createShareCounters();
|
|
639
718
|
const filesRefusedStalePaths = [];
|
|
@@ -1465,7 +1544,7 @@ async function reconcileLandedCompanySkill(run, relativePath, content, absoluteP
|
|
|
1465
1544
|
}
|
|
1466
1545
|
}
|
|
1467
1546
|
async function buildSharePlans(run) {
|
|
1468
|
-
const collected = collectFiles(run.paths, run.hqRoot, run.syncRoot, run.shouldSync, {
|
|
1547
|
+
const collected = await collectFiles(run.paths, run.hqRoot, run.syncRoot, run.shouldSync, {
|
|
1469
1548
|
onUnreachablePath: (namedPath, reason) => {
|
|
1470
1549
|
// First reason wins: a path is named once, and re-adding would only
|
|
1471
1550
|
// churn the map ordering the error message and event sample rely on.
|
|
@@ -1475,6 +1554,7 @@ async function buildSharePlans(run) {
|
|
|
1475
1554
|
},
|
|
1476
1555
|
onLinkedSubtree: (rel) => run.linkedSubtreeSet.add(rel),
|
|
1477
1556
|
onHeartbeat: run.options.onHeartbeat,
|
|
1557
|
+
cooperativeCheckpoint: run.options.cooperativeCheckpoint,
|
|
1478
1558
|
});
|
|
1479
1559
|
// Ask #2 of feedback_a51cb63d: "error, not warn-skip, when the named file
|
|
1480
1560
|
// exists locally but is unreachable by the resolver". This is the throw that
|
|
@@ -1557,7 +1637,7 @@ async function buildSharePlans(run) {
|
|
|
1557
1637
|
const uploadableFiles = registrationSkipped.size > 0
|
|
1558
1638
|
? filesToShare.filter((entry) => !registrationSkipped.has(entry.relativePath))
|
|
1559
1639
|
: filesToShare;
|
|
1560
|
-
const pushPlan =
|
|
1640
|
+
const pushPlan = await computePushPlanCooperatively(uploadableFiles, run.journal, run.skipUnchanged === true, run.options.onHeartbeat, run.options.cooperativeCheckpoint);
|
|
1561
1641
|
const deletePlan = run.propagateDeletes === true
|
|
1562
1642
|
? await computeDeletePlan(run.journal, run.syncRoot, deleteScopeRoots, run.shouldSync, run.propagateDeletePolicy, run.ctx, run.options.personalMode !== true)
|
|
1563
1643
|
: { toDelete: [], toTombstone: [], refusedStale: [] };
|
|
@@ -2367,9 +2447,21 @@ async function executeUploads(run, pushPlan, counters, conflictPaths) {
|
|
|
2367
2447
|
// this flag only halts admission, so the refusal still surfaces via
|
|
2368
2448
|
// throwUploadWorkerErrors below. In-flight legs still drain.
|
|
2369
2449
|
let sessionAuthAborted = false;
|
|
2450
|
+
// Cooperative work is admitted in bounded units, then fully drained before
|
|
2451
|
+
// the root lock can change owners. A mostly unchanged personal vault can
|
|
2452
|
+
// contain more than a million skip rows, so those rows get an equally
|
|
2453
|
+
// bounded, mutation-free hand-off cadence instead of monopolizing the
|
|
2454
|
+
// scheduler until the full pass ends.
|
|
2455
|
+
let admittedSinceCooperativeCheckpoint = 0;
|
|
2456
|
+
let skippedSinceCooperativeCheckpoint = 0;
|
|
2370
2457
|
while (queue.length > 0 || inFlight.size > 0) {
|
|
2371
2458
|
while (!aborted &&
|
|
2372
2459
|
!sessionAuthAborted &&
|
|
2460
|
+
(!run.options.cooperativeCheckpoint ||
|
|
2461
|
+
(admittedSinceCooperativeCheckpoint <
|
|
2462
|
+
FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE &&
|
|
2463
|
+
skippedSinceCooperativeCheckpoint <
|
|
2464
|
+
FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE)) &&
|
|
2373
2465
|
inFlight.size < TRANSFER_CONCURRENCY &&
|
|
2374
2466
|
queue.length > 0) {
|
|
2375
2467
|
const previewItem = queue[0];
|
|
@@ -2377,15 +2469,18 @@ async function executeUploads(run, pushPlan, counters, conflictPaths) {
|
|
|
2377
2469
|
if (item === null) {
|
|
2378
2470
|
queue.shift();
|
|
2379
2471
|
counters.filesSkipped++;
|
|
2472
|
+
skippedSinceCooperativeCheckpoint++;
|
|
2380
2473
|
continue;
|
|
2381
2474
|
}
|
|
2382
2475
|
if (item.action !== "upload") {
|
|
2383
2476
|
queue.shift();
|
|
2384
2477
|
settleFreshSkip(item);
|
|
2478
|
+
skippedSinceCooperativeCheckpoint++;
|
|
2385
2479
|
continue;
|
|
2386
2480
|
}
|
|
2387
2481
|
if (suppressFreshTombstone(item)) {
|
|
2388
2482
|
queue.shift();
|
|
2483
|
+
skippedSinceCooperativeCheckpoint++;
|
|
2389
2484
|
continue;
|
|
2390
2485
|
}
|
|
2391
2486
|
// Reserve the file's CURRENT on-disk size, not the planned size: an
|
|
@@ -2396,6 +2491,7 @@ async function executeUploads(run, pushPlan, counters, conflictPaths) {
|
|
|
2396
2491
|
if (inFlight.size > 0 && inFlightBytes + nextBytes > byteBudget)
|
|
2397
2492
|
break;
|
|
2398
2493
|
queue.shift();
|
|
2494
|
+
admittedSinceCooperativeCheckpoint++;
|
|
2399
2495
|
inFlightBytes += nextBytes;
|
|
2400
2496
|
const upload = () => processUploadItem(item);
|
|
2401
2497
|
const p = (run.options.transferSemaphore
|
|
@@ -2423,6 +2519,27 @@ async function executeUploads(run, pushPlan, counters, conflictPaths) {
|
|
|
2423
2519
|
if (inFlight.size > 0) {
|
|
2424
2520
|
await Promise.race(Array.from(inFlight));
|
|
2425
2521
|
}
|
|
2522
|
+
else if (run.options.cooperativeCheckpoint &&
|
|
2523
|
+
!aborted &&
|
|
2524
|
+
!sessionAuthAborted &&
|
|
2525
|
+
!hadUploadFailure &&
|
|
2526
|
+
(admittedSinceCooperativeCheckpoint > 0 || skippedSinceCooperativeCheckpoint > 0) &&
|
|
2527
|
+
(admittedSinceCooperativeCheckpoint >=
|
|
2528
|
+
FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE ||
|
|
2529
|
+
skippedSinceCooperativeCheckpoint >=
|
|
2530
|
+
FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE ||
|
|
2531
|
+
queue.length === 0)) {
|
|
2532
|
+
// Every admitted upload has settled, so `processUploadItem` has
|
|
2533
|
+
// finished its mutable journal updates. Persist that durable unit before
|
|
2534
|
+
// yielding. Skip-only units have no new durable state; resume the
|
|
2535
|
+
// remaining queue after realtime returns the lock.
|
|
2536
|
+
if (admittedSinceCooperativeCheckpoint > 0)
|
|
2537
|
+
flushShareJournal(run);
|
|
2538
|
+
admittedSinceCooperativeCheckpoint = 0;
|
|
2539
|
+
skippedSinceCooperativeCheckpoint = 0;
|
|
2540
|
+
await new Promise((resolve) => setImmediate(resolve));
|
|
2541
|
+
await run.options.cooperativeCheckpoint();
|
|
2542
|
+
}
|
|
2426
2543
|
else {
|
|
2427
2544
|
break;
|
|
2428
2545
|
}
|
|
@@ -2955,6 +3072,12 @@ async function executeDeletes(run, deletePlan, decommissionPlan, counters, files
|
|
|
2955
3072
|
*/
|
|
2956
3073
|
const CHECKPOINT_MIN_APPLIED = 250;
|
|
2957
3074
|
const CHECKPOINT_MIN_INTERVAL_MS = 5_000;
|
|
3075
|
+
/**
|
|
3076
|
+
* Maximum completed upload mutations between cooperative full-push hand-offs.
|
|
3077
|
+
* The executor drains a unit before yielding, so realtime never overlaps an
|
|
3078
|
+
* upload body or the push's mutable journal state.
|
|
3079
|
+
*/
|
|
3080
|
+
export const FULL_PUSH_COOPERATIVE_CHECKPOINT_BATCH_SIZE = 500;
|
|
2958
3081
|
/**
|
|
2959
3082
|
* Fraction of the journal's current size that must be re-applied before another
|
|
2960
3083
|
* checkpoint is worth its write. `writeJournal` publishes a whole compact
|
|
@@ -3649,14 +3772,16 @@ function reportLinkedSubtreeIfExternal(linkPath, syncRoot, relativePath, hooks)
|
|
|
3649
3772
|
* Pre-fix, statSync followed the link and the target's bytes were uploaded
|
|
3650
3773
|
* under the link's key — silently flattening the link topology.
|
|
3651
3774
|
*/
|
|
3652
|
-
function collectFiles(paths, hqRoot, syncRoot, filter, hooks = {}) {
|
|
3775
|
+
async function collectFiles(paths, hqRoot, syncRoot, filter, hooks = {}) {
|
|
3653
3776
|
const results = [];
|
|
3777
|
+
const cooperativeWork = { rowsSinceYield: 0 };
|
|
3654
3778
|
// Scoped to THIS collect pass and discarded with it: a watcher batch can
|
|
3655
3779
|
// name hundreds of paths, and rescanning the companies/ tree for each one
|
|
3656
3780
|
// is wasted I/O. A cache that outlived the pass could fail open on a tenant
|
|
3657
3781
|
// boundary, so it deliberately does not.
|
|
3658
3782
|
const tenantRoots = new Map();
|
|
3659
3783
|
for (const p of paths) {
|
|
3784
|
+
await yieldToCooperativeCheckpoint(cooperativeWork, hooks.cooperativeCheckpoint);
|
|
3660
3785
|
hooks.onHeartbeat?.();
|
|
3661
3786
|
const absolutePath = resolveNamedPath(p, hqRoot, syncRoot);
|
|
3662
3787
|
// Ephemeral artifacts (conflict mirrors) — see EPHEMERAL_PATH_PATTERN doc.
|
|
@@ -3735,18 +3860,20 @@ function collectFiles(paths, hqRoot, syncRoot, filter, hooks = {}) {
|
|
|
3735
3860
|
if (lstat.isDirectory()) {
|
|
3736
3861
|
if (!filter(absolutePath, true))
|
|
3737
3862
|
continue;
|
|
3738
|
-
walkDir(absolutePath, syncRoot, filter, results, hooks);
|
|
3863
|
+
await walkDir(absolutePath, syncRoot, filter, results, hooks, cooperativeWork);
|
|
3739
3864
|
}
|
|
3740
3865
|
else if (lstat.isFile()) {
|
|
3741
3866
|
const relativePath = vaultKeyForLocalPath(syncRoot, absolutePath);
|
|
3742
3867
|
if (filter(absolutePath)) {
|
|
3868
|
+
noteCooperativeRowVisit("collect", relativePath);
|
|
3743
3869
|
results.push({ kind: "file", absolutePath, relativePath });
|
|
3744
3870
|
}
|
|
3745
3871
|
}
|
|
3746
3872
|
}
|
|
3873
|
+
await yieldToCooperativeCheckpoint(cooperativeWork, hooks.cooperativeCheckpoint, true);
|
|
3747
3874
|
return results;
|
|
3748
3875
|
}
|
|
3749
|
-
function walkDir(dir, syncRoot, filter, results, hooks = {}) {
|
|
3876
|
+
async function walkDir(dir, syncRoot, filter, results, hooks = {}, cooperativeWork = { rowsSinceYield: 0 }) {
|
|
3750
3877
|
// A frame per open directory preserves the recursive walk's depth-first
|
|
3751
3878
|
// ordering without turning a completed subtree into one giant call argument
|
|
3752
3879
|
// list. This matters for both operator-visible plan ordering and large trees.
|
|
@@ -3762,6 +3889,7 @@ function walkDir(dir, syncRoot, filter, results, hooks = {}) {
|
|
|
3762
3889
|
};
|
|
3763
3890
|
enterDirectory(dir);
|
|
3764
3891
|
while (stack.length > 0) {
|
|
3892
|
+
await yieldToCooperativeCheckpoint(cooperativeWork, hooks.cooperativeCheckpoint);
|
|
3765
3893
|
hooks.onHeartbeat?.();
|
|
3766
3894
|
const frame = stack[stack.length - 1];
|
|
3767
3895
|
if (frame.index >= frame.entries.length) {
|
|
@@ -3824,10 +3952,12 @@ function walkDir(dir, syncRoot, filter, results, hooks = {}) {
|
|
|
3824
3952
|
enterDirectory(absolutePath);
|
|
3825
3953
|
}
|
|
3826
3954
|
else if (entry.isFile()) {
|
|
3955
|
+
const relativePath = vaultKeyForLocalPath(syncRoot, absolutePath);
|
|
3956
|
+
noteCooperativeRowVisit("collect", relativePath);
|
|
3827
3957
|
results.push({
|
|
3828
3958
|
kind: "file",
|
|
3829
3959
|
absolutePath,
|
|
3830
|
-
relativePath
|
|
3960
|
+
relativePath,
|
|
3831
3961
|
});
|
|
3832
3962
|
}
|
|
3833
3963
|
}
|