@indigoai-us/hq-cloud 6.15.76 → 6.15.78

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 (81) hide show
  1. package/dist/bin/sync-runner-worker.d.ts +3 -0
  2. package/dist/bin/sync-runner-worker.d.ts.map +1 -0
  3. package/dist/bin/sync-runner-worker.js +88 -0
  4. package/dist/bin/sync-runner-worker.js.map +1 -0
  5. package/dist/bin/sync-runner.d.ts +3 -1
  6. package/dist/bin/sync-runner.d.ts.map +1 -1
  7. package/dist/bin/sync-runner.js +31 -13
  8. package/dist/bin/sync-runner.js.map +1 -1
  9. package/dist/bin/sync-runner.test.js +117 -1
  10. package/dist/bin/sync-runner.test.js.map +1 -1
  11. package/dist/index.d.ts +2 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.test.d.ts +2 -0
  16. package/dist/index.test.d.ts.map +1 -0
  17. package/dist/index.test.js +16 -0
  18. package/dist/index.test.js.map +1 -0
  19. package/dist/operation-lock.d.ts +31 -28
  20. package/dist/operation-lock.d.ts.map +1 -1
  21. package/dist/operation-lock.js +206 -50
  22. package/dist/operation-lock.js.map +1 -1
  23. package/dist/operation-lock.test.js +105 -1
  24. package/dist/operation-lock.test.js.map +1 -1
  25. package/dist/sync/area-resolver.d.ts +66 -0
  26. package/dist/sync/area-resolver.d.ts.map +1 -0
  27. package/dist/sync/area-resolver.js +306 -0
  28. package/dist/sync/area-resolver.js.map +1 -0
  29. package/dist/sync/area-resolver.test.d.ts +2 -0
  30. package/dist/sync/area-resolver.test.d.ts.map +1 -0
  31. package/dist/sync/area-resolver.test.js +211 -0
  32. package/dist/sync/area-resolver.test.js.map +1 -0
  33. package/dist/sync/child-process-sync-worker.d.ts +53 -0
  34. package/dist/sync/child-process-sync-worker.d.ts.map +1 -0
  35. package/dist/sync/child-process-sync-worker.js +256 -0
  36. package/dist/sync/child-process-sync-worker.js.map +1 -0
  37. package/dist/sync/child-process-sync-worker.test.d.ts +2 -0
  38. package/dist/sync/child-process-sync-worker.test.d.ts.map +1 -0
  39. package/dist/sync/child-process-sync-worker.test.js +262 -0
  40. package/dist/sync/child-process-sync-worker.test.js.map +1 -0
  41. package/dist/sync/index.d.ts +8 -0
  42. package/dist/sync/index.d.ts.map +1 -1
  43. package/dist/sync/index.js +4 -0
  44. package/dist/sync/index.js.map +1 -1
  45. package/dist/sync/parallel-sync-coordinator.d.ts +77 -0
  46. package/dist/sync/parallel-sync-coordinator.d.ts.map +1 -0
  47. package/dist/sync/parallel-sync-coordinator.js +292 -0
  48. package/dist/sync/parallel-sync-coordinator.js.map +1 -0
  49. package/dist/sync/parallel-sync-coordinator.test.d.ts +2 -0
  50. package/dist/sync/parallel-sync-coordinator.test.d.ts.map +1 -0
  51. package/dist/sync/parallel-sync-coordinator.test.js +303 -0
  52. package/dist/sync/parallel-sync-coordinator.test.js.map +1 -0
  53. package/dist/sync/path-leases.d.ts +31 -0
  54. package/dist/sync/path-leases.d.ts.map +1 -0
  55. package/dist/sync/path-leases.js +74 -0
  56. package/dist/sync/path-leases.js.map +1 -0
  57. package/dist/sync/path-leases.test.d.ts +2 -0
  58. package/dist/sync/path-leases.test.d.ts.map +1 -0
  59. package/dist/sync/path-leases.test.js +51 -0
  60. package/dist/sync/path-leases.test.js.map +1 -0
  61. package/dist/sync/state-store.d.ts +13 -0
  62. package/dist/sync/state-store.d.ts.map +1 -1
  63. package/dist/sync/state-store.js +158 -51
  64. package/dist/sync/state-store.js.map +1 -1
  65. package/dist/sync/state-store.test.js +148 -2
  66. package/dist/sync/state-store.test.js.map +1 -1
  67. package/dist/sync/sync-work.d.ts +66 -0
  68. package/dist/sync/sync-work.d.ts.map +1 -0
  69. package/dist/sync/sync-work.js +11 -0
  70. package/dist/sync/sync-work.js.map +1 -0
  71. package/dist/sync/sync-worker-port.d.ts +59 -0
  72. package/dist/sync/sync-worker-port.d.ts.map +1 -0
  73. package/dist/sync/sync-worker-port.js +67 -0
  74. package/dist/sync/sync-worker-port.js.map +1 -0
  75. package/dist/watcher.d.ts +6 -0
  76. package/dist/watcher.d.ts.map +1 -1
  77. package/dist/watcher.js +94 -9
  78. package/dist/watcher.js.map +1 -1
  79. package/dist/watcher.test.js +90 -0
  80. package/dist/watcher.test.js.map +1 -1
  81. package/package.json +1 -1
@@ -0,0 +1,77 @@
1
+ import { PathLeaseManager } from "./path-leases.js";
2
+ import { type AreaId, type CanonicalPath, type ChoreSyncWork, type SyncWork, type SyncWorkerAdapter, type WorkOutcome } from "./sync-work.js";
3
+ export type PathIdentity = {
4
+ targetUid: string;
5
+ areaId: AreaId;
6
+ };
7
+ export type CoordinatorClock = {
8
+ now(): number;
9
+ };
10
+ export type ParallelSyncCoordinatorOptions = {
11
+ /** Permanently reserved for realtime work; it is never assigned a chore. */
12
+ realtimeWorker: SyncWorkerAdapter;
13
+ /** Runs bounded chore slices only. */
14
+ choreWorker: SyncWorkerAdapter;
15
+ /** Resolves storage ownership without exposing it to SyncWork callers. */
16
+ identifyPath: (path: CanonicalPath) => PathIdentity;
17
+ /** Turns a chore cursor into its next bounded concrete mutation slice. */
18
+ planChorePaths: (work: ChoreSyncWork) => readonly CanonicalPath[];
19
+ clock?: CoordinatorClock;
20
+ };
21
+ export type CoordinatorSnapshot = {
22
+ realtimeQueued: number;
23
+ choreQueued: number;
24
+ realtimeRunning: boolean;
25
+ choreRunning: boolean;
26
+ leases: ReturnType<PathLeaseManager["inspect"]>;
27
+ now: number;
28
+ };
29
+ export interface ParallelSyncCoordinator {
30
+ submit(work: SyncWork): Promise<WorkOutcome>;
31
+ inspect(): CoordinatorSnapshot;
32
+ shutdown(): Promise<void>;
33
+ }
34
+ /**
35
+ * Scheduler and fencing authority for semantic sync work. It deliberately owns
36
+ * mailboxes, lease acquisition, path epochs, and adapter selection so callers
37
+ * cannot smuggle in a lane, lock, argv, or worker choice.
38
+ */
39
+ export declare class DefaultParallelSyncCoordinator implements ParallelSyncCoordinator {
40
+ private readonly options;
41
+ private readonly leases;
42
+ private readonly realtimeQueue;
43
+ private readonly choreQueue;
44
+ private epochs;
45
+ private readonly clock;
46
+ private readonly identifyPath;
47
+ private readonly planChorePaths;
48
+ private nextId;
49
+ private nextEpoch;
50
+ private realtimeRunning?;
51
+ private choreRunning?;
52
+ private stopping;
53
+ private shutdownPromise?;
54
+ constructor(options: ParallelSyncCoordinatorOptions);
55
+ submit(work: SyncWork): Promise<WorkOutcome>;
56
+ inspect(): CoordinatorSnapshot;
57
+ shutdown(): Promise<void>;
58
+ private createSubmission;
59
+ private pathsFor;
60
+ private registerEpochs;
61
+ private hasInternallyConflictingPaths;
62
+ private preemptForRealtime;
63
+ private drain;
64
+ private startNext;
65
+ private requestsFor;
66
+ private execute;
67
+ private applyWorkerOutcome;
68
+ private isStale;
69
+ private completeAfterWorkerFailure;
70
+ private setResult;
71
+ private completeRemaining;
72
+ private finishIfEmpty;
73
+ private pruneEpochs;
74
+ private refusedOutcome;
75
+ private retryableOutcome;
76
+ }
77
+ //# sourceMappingURL=parallel-sync-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-sync-coordinator.d.ts","sourceRoot":"","sources":["../../src/sync/parallel-sync-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ import { assertCanonicalPath, PathLeaseManager, pathsConflict } from "./path-leases.js";
2
+ function identityKey(path) {
3
+ return `${path.targetUid}\u0000${path.areaId}\u0000${path.canonicalPath}`;
4
+ }
5
+ function overlaps(left, right) {
6
+ return left.targetUid === right.targetUid && left.areaId === right.areaId && pathsConflict(left.canonicalPath, right.canonicalPath);
7
+ }
8
+ class SubmissionValidationError extends Error {
9
+ paths;
10
+ constructor(paths, message) {
11
+ super(message);
12
+ this.paths = paths;
13
+ }
14
+ }
15
+ /**
16
+ * Scheduler and fencing authority for semantic sync work. It deliberately owns
17
+ * mailboxes, lease acquisition, path epochs, and adapter selection so callers
18
+ * cannot smuggle in a lane, lock, argv, or worker choice.
19
+ */
20
+ export class DefaultParallelSyncCoordinator {
21
+ options;
22
+ leases = new PathLeaseManager();
23
+ realtimeQueue = [];
24
+ choreQueue = [];
25
+ epochs = [];
26
+ clock;
27
+ identifyPath;
28
+ planChorePaths;
29
+ nextId = 1;
30
+ nextEpoch = 1;
31
+ realtimeRunning;
32
+ choreRunning;
33
+ stopping = false;
34
+ shutdownPromise;
35
+ constructor(options) {
36
+ this.options = options;
37
+ this.clock = options.clock ?? { now: () => Date.now() };
38
+ if (typeof options.identifyPath !== "function")
39
+ throw new Error("parallel sync coordinator requires identifyPath");
40
+ if (typeof options.planChorePaths !== "function")
41
+ throw new Error("parallel sync coordinator requires planChorePaths");
42
+ this.identifyPath = options.identifyPath;
43
+ this.planChorePaths = options.planChorePaths;
44
+ }
45
+ submit(work) {
46
+ if (this.stopping)
47
+ return Promise.resolve(this.retryableOutcome(this.pathsFor(work), "coordinator is shutting down"));
48
+ return new Promise((resolve) => {
49
+ let submission;
50
+ try {
51
+ submission = this.createSubmission(work, resolve);
52
+ }
53
+ catch (error) {
54
+ const message = error instanceof Error ? error.message : String(error);
55
+ const paths = error instanceof SubmissionValidationError ? error.paths : [];
56
+ resolve({
57
+ paths: paths.map((path) => ({ path, epoch: 0, status: "refused", reason: message })),
58
+ error: message,
59
+ });
60
+ return;
61
+ }
62
+ if (this.hasInternallyConflictingPaths(submission.paths)) {
63
+ resolve(this.refusedOutcome(submission.paths, "submission contains internally conflicting paths"));
64
+ return;
65
+ }
66
+ this.registerEpochs(submission);
67
+ if (work.class === "realtime")
68
+ this.preemptForRealtime(submission);
69
+ const queue = work.class === "realtime" ? this.realtimeQueue : this.choreQueue;
70
+ queue.push(submission);
71
+ this.finishIfEmpty(submission);
72
+ this.drain();
73
+ });
74
+ }
75
+ inspect() {
76
+ return {
77
+ realtimeQueued: this.realtimeQueue.filter((submission) => !submission.finished).length,
78
+ choreQueued: this.choreQueue.filter((submission) => !submission.finished).length,
79
+ realtimeRunning: this.realtimeRunning !== undefined,
80
+ choreRunning: this.choreRunning !== undefined,
81
+ leases: this.leases.inspect(),
82
+ now: this.clock.now(),
83
+ };
84
+ }
85
+ shutdown() {
86
+ if (this.shutdownPromise)
87
+ return this.shutdownPromise;
88
+ this.stopping = true;
89
+ for (const submission of [...this.realtimeQueue, ...this.choreQueue]) {
90
+ this.completeRemaining(submission, "retryable", "coordinator is shutting down");
91
+ }
92
+ this.realtimeQueue.length = 0;
93
+ this.choreQueue.length = 0;
94
+ this.realtimeRunning?.controller.abort();
95
+ this.choreRunning?.controller.abort();
96
+ const executions = [this.realtimeRunning?.execution, this.choreRunning?.execution]
97
+ .filter((execution) => execution !== undefined);
98
+ const workers = [...new Set([this.options.realtimeWorker, this.options.choreWorker])];
99
+ this.shutdownPromise = Promise.allSettled([
100
+ Promise.allSettled(executions).then(() => undefined),
101
+ Promise.allSettled(workers.map((worker) => worker.shutdown?.())).then(() => undefined),
102
+ ]).then(() => undefined);
103
+ return this.shutdownPromise;
104
+ }
105
+ createSubmission(work, resolve) {
106
+ const paths = this.pathsFor(work);
107
+ return {
108
+ id: `sync-${this.nextId++}`,
109
+ work,
110
+ paths,
111
+ results: new Map(),
112
+ resolve,
113
+ controller: new AbortController(),
114
+ running: false,
115
+ finished: false,
116
+ };
117
+ }
118
+ pathsFor(work) {
119
+ const source = work.class === "realtime" ? work.paths : this.planChorePaths(work);
120
+ try {
121
+ for (const canonicalPath of source)
122
+ assertCanonicalPath(canonicalPath);
123
+ }
124
+ catch (error) {
125
+ throw new SubmissionValidationError(source, error instanceof Error ? error.message : String(error));
126
+ }
127
+ const unique = new Map();
128
+ for (const canonicalPath of source) {
129
+ let identity;
130
+ try {
131
+ identity = this.identifyPath(canonicalPath);
132
+ }
133
+ catch (error) {
134
+ throw new SubmissionValidationError(source, error instanceof Error ? error.message : String(error));
135
+ }
136
+ const scheduled = { canonicalPath, ...identity, epoch: this.nextEpoch++ };
137
+ unique.set(identityKey(scheduled), scheduled);
138
+ }
139
+ return [...unique.values()];
140
+ }
141
+ registerEpochs(submission) {
142
+ this.epochs.push(...submission.paths.map((path) => ({ ...path, class: submission.work.class })));
143
+ }
144
+ hasInternallyConflictingPaths(paths) {
145
+ return paths.some((path, index) => paths.slice(index + 1).some((other) => overlaps(path, other)));
146
+ }
147
+ preemptForRealtime(incoming) {
148
+ for (const queued of [...this.realtimeQueue, ...this.choreQueue]) {
149
+ const revoked = queued.paths.filter((path) => incoming.paths.some((candidate) => overlaps(path, candidate)));
150
+ if (revoked.length === 0)
151
+ continue;
152
+ for (const path of revoked)
153
+ this.setResult(queued, path, "refused", "superseded by newer realtime work");
154
+ queued.paths = queued.paths.filter((path) => !revoked.includes(path));
155
+ this.finishIfEmpty(queued);
156
+ }
157
+ for (const running of [this.realtimeRunning, this.choreRunning]) {
158
+ if (running && running.paths.some((path) => incoming.paths.some((candidate) => overlaps(path, candidate)))) {
159
+ running.controller.abort();
160
+ }
161
+ }
162
+ }
163
+ drain() {
164
+ if (this.stopping)
165
+ return;
166
+ if (!this.realtimeRunning)
167
+ this.startNext("realtime");
168
+ if (!this.choreRunning)
169
+ this.startNext("chore");
170
+ }
171
+ startNext(kind) {
172
+ const queue = kind === "realtime" ? this.realtimeQueue : this.choreQueue;
173
+ for (let index = 0; index < queue.length; index += 1) {
174
+ const submission = queue[index];
175
+ if (submission.finished)
176
+ continue;
177
+ const lease = this.leases.tryAcquire(submission.id, this.requestsFor(submission.paths));
178
+ if (!lease)
179
+ continue;
180
+ queue.splice(index, 1);
181
+ submission.lease = lease;
182
+ submission.running = true;
183
+ if (kind === "realtime")
184
+ this.realtimeRunning = submission;
185
+ else
186
+ this.choreRunning = submission;
187
+ submission.execution = this.execute(kind, submission);
188
+ return;
189
+ }
190
+ }
191
+ requestsFor(paths) {
192
+ return paths.map(({ targetUid, areaId, canonicalPath }) => ({ targetUid, areaId, canonicalPath, mode: "mutation" }));
193
+ }
194
+ async execute(kind, submission) {
195
+ const worker = kind === "realtime" ? this.options.realtimeWorker : this.options.choreWorker;
196
+ try {
197
+ const outcome = await worker.execute({
198
+ id: submission.id,
199
+ work: submission.work,
200
+ paths: submission.paths,
201
+ signal: submission.controller.signal,
202
+ });
203
+ this.applyWorkerOutcome(submission, outcome);
204
+ }
205
+ catch (error) {
206
+ this.completeAfterWorkerFailure(submission, error instanceof Error ? error.message : String(error));
207
+ }
208
+ finally {
209
+ submission.lease?.release();
210
+ submission.running = false;
211
+ if (kind === "realtime")
212
+ this.realtimeRunning = undefined;
213
+ else
214
+ this.choreRunning = undefined;
215
+ this.finishIfEmpty(submission);
216
+ this.drain();
217
+ }
218
+ }
219
+ applyWorkerOutcome(submission, outcome) {
220
+ if (this.stopping) {
221
+ this.completeRemaining(submission, "retryable", "coordinator is shutting down");
222
+ return;
223
+ }
224
+ const byPath = new Map(outcome.paths.map((result) => [result.path, result]));
225
+ for (const path of submission.paths) {
226
+ if (this.isStale(path)) {
227
+ this.setResult(submission, path, "refused", "stale path epoch");
228
+ continue;
229
+ }
230
+ const result = byPath.get(path.canonicalPath);
231
+ if (!result || result.epoch !== path.epoch) {
232
+ this.setResult(submission, path, "retryable", outcome.error ?? "worker omitted or mismatched a path outcome");
233
+ continue;
234
+ }
235
+ this.setResult(submission, path, result.status, result.reason);
236
+ }
237
+ }
238
+ isStale(path) {
239
+ return this.epochs.some((intent) => intent.targetUid === path.targetUid &&
240
+ intent.areaId === path.areaId &&
241
+ intent.epoch > path.epoch &&
242
+ pathsConflict(intent.canonicalPath, path.canonicalPath) &&
243
+ intent.class === "realtime");
244
+ }
245
+ completeAfterWorkerFailure(submission, reason) {
246
+ for (const path of submission.paths) {
247
+ if (submission.results.has(identityKey(path)))
248
+ continue;
249
+ if (this.isStale(path))
250
+ this.setResult(submission, path, "refused", "stale path epoch");
251
+ else
252
+ this.setResult(submission, path, "retryable", reason);
253
+ }
254
+ this.finishIfEmpty(submission);
255
+ }
256
+ setResult(submission, path, status, reason) {
257
+ submission.results.set(identityKey(path), { path: path.canonicalPath, status, epoch: path.epoch, ...(reason ? { reason } : {}) });
258
+ }
259
+ completeRemaining(submission, status, reason) {
260
+ for (const path of submission.paths) {
261
+ if (!submission.results.has(identityKey(path)))
262
+ this.setResult(submission, path, status, reason);
263
+ }
264
+ this.finishIfEmpty(submission);
265
+ }
266
+ finishIfEmpty(submission) {
267
+ if (submission.finished || submission.running)
268
+ return;
269
+ if (submission.paths.some((path) => !submission.results.has(identityKey(path))))
270
+ return;
271
+ submission.finished = true;
272
+ submission.resolve({ paths: [...submission.results.values()] });
273
+ this.pruneEpochs();
274
+ }
275
+ pruneEpochs() {
276
+ const livePaths = [
277
+ ...this.realtimeQueue,
278
+ ...this.choreQueue,
279
+ this.realtimeRunning,
280
+ this.choreRunning,
281
+ ].flatMap((submission) => submission && !submission.finished ? submission.paths : []);
282
+ this.epochs = this.epochs.filter((intent) => livePaths.some((path) => identityKey(path) === identityKey(intent) && path.epoch === intent.epoch) ||
283
+ (intent.class === "realtime" && livePaths.some((path) => path.epoch < intent.epoch && overlaps(path, intent))));
284
+ }
285
+ refusedOutcome(paths, reason) {
286
+ return { paths: paths.map((path) => ({ path: path.canonicalPath, epoch: path.epoch, status: "refused", reason })) };
287
+ }
288
+ retryableOutcome(paths, reason) {
289
+ return { paths: paths.map((path) => ({ path: path.canonicalPath, epoch: path.epoch, status: "retryable", reason })) };
290
+ }
291
+ }
292
+ //# sourceMappingURL=parallel-sync-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-sync-coordinator.js","sourceRoot":"","sources":["../../src/sync/parallel-sync-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parallel-sync-coordinator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-sync-coordinator.test.d.ts","sourceRoot":"","sources":["../../src/sync/parallel-sync-coordinator.test.ts"],"names":[],"mappings":""}