@indigoai-us/hq-cloud 6.11.11 → 6.11.13

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 (220) hide show
  1. package/dist/bin/sync-runner-company.d.ts +35 -0
  2. package/dist/bin/sync-runner-company.d.ts.map +1 -0
  3. package/dist/bin/sync-runner-company.js +290 -0
  4. package/dist/bin/sync-runner-company.js.map +1 -0
  5. package/dist/bin/sync-runner-events.d.ts +12 -0
  6. package/dist/bin/sync-runner-events.d.ts.map +1 -0
  7. package/dist/bin/sync-runner-events.js +12 -0
  8. package/dist/bin/sync-runner-events.js.map +1 -0
  9. package/dist/bin/sync-runner-planning.d.ts +53 -0
  10. package/dist/bin/sync-runner-planning.d.ts.map +1 -0
  11. package/dist/bin/sync-runner-planning.js +59 -0
  12. package/dist/bin/sync-runner-planning.js.map +1 -0
  13. package/dist/bin/sync-runner-rollup.d.ts +24 -0
  14. package/dist/bin/sync-runner-rollup.d.ts.map +1 -0
  15. package/dist/bin/sync-runner-rollup.js +46 -0
  16. package/dist/bin/sync-runner-rollup.js.map +1 -0
  17. package/dist/bin/sync-runner-telemetry.d.ts +5 -0
  18. package/dist/bin/sync-runner-telemetry.d.ts.map +1 -0
  19. package/dist/bin/sync-runner-telemetry.js +5 -0
  20. package/dist/bin/sync-runner-telemetry.js.map +1 -0
  21. package/dist/bin/sync-runner-watch-loop.d.ts +17 -0
  22. package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -0
  23. package/dist/bin/sync-runner-watch-loop.js +372 -0
  24. package/dist/bin/sync-runner-watch-loop.js.map +1 -0
  25. package/dist/bin/sync-runner-watch-routes.d.ts +25 -0
  26. package/dist/bin/sync-runner-watch-routes.d.ts.map +1 -0
  27. package/dist/bin/sync-runner-watch-routes.js +74 -0
  28. package/dist/bin/sync-runner-watch-routes.js.map +1 -0
  29. package/dist/bin/sync-runner.d.ts +5 -54
  30. package/dist/bin/sync-runner.d.ts.map +1 -1
  31. package/dist/bin/sync-runner.js +76 -978
  32. package/dist/bin/sync-runner.js.map +1 -1
  33. package/dist/bin/sync-runner.test.js +265 -11
  34. package/dist/bin/sync-runner.test.js.map +1 -1
  35. package/dist/cli/reindex.d.ts.map +1 -1
  36. package/dist/cli/reindex.js +34 -17
  37. package/dist/cli/reindex.js.map +1 -1
  38. package/dist/cli/reindex.test.js +39 -5
  39. package/dist/cli/reindex.test.js.map +1 -1
  40. package/dist/cli/rescue-classify-ordering.test.js +75 -0
  41. package/dist/cli/rescue-classify-ordering.test.js.map +1 -1
  42. package/dist/cli/rescue-core.d.ts +45 -0
  43. package/dist/cli/rescue-core.d.ts.map +1 -1
  44. package/dist/cli/rescue-core.js +320 -170
  45. package/dist/cli/rescue-core.js.map +1 -1
  46. package/dist/cli/share.d.ts +2 -1
  47. package/dist/cli/share.d.ts.map +1 -1
  48. package/dist/cli/share.js +276 -660
  49. package/dist/cli/share.js.map +1 -1
  50. package/dist/cli/share.test.js +30 -0
  51. package/dist/cli/share.test.js.map +1 -1
  52. package/dist/cli/sync.d.ts +28 -1
  53. package/dist/cli/sync.d.ts.map +1 -1
  54. package/dist/cli/sync.js +541 -748
  55. package/dist/cli/sync.js.map +1 -1
  56. package/dist/cli/sync.test.js +382 -1
  57. package/dist/cli/sync.test.js.map +1 -1
  58. package/dist/cognito-auth.d.ts.map +1 -1
  59. package/dist/cognito-auth.js +55 -10
  60. package/dist/cognito-auth.js.map +1 -1
  61. package/dist/cognito-auth.test.js +61 -0
  62. package/dist/cognito-auth.test.js.map +1 -1
  63. package/dist/daemon-worker.d.ts +2 -2
  64. package/dist/daemon-worker.js +3 -3
  65. package/dist/daemon-worker.js.map +1 -1
  66. package/dist/index.d.ts +2 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/journal.d.ts.map +1 -1
  71. package/dist/journal.js +93 -6
  72. package/dist/journal.js.map +1 -1
  73. package/dist/journal.test.js +59 -0
  74. package/dist/journal.test.js.map +1 -1
  75. package/dist/machine-auth.test.js +60 -2
  76. package/dist/machine-auth.test.js.map +1 -1
  77. package/dist/object-io.d.ts +37 -1
  78. package/dist/object-io.d.ts.map +1 -1
  79. package/dist/object-io.js +149 -30
  80. package/dist/object-io.js.map +1 -1
  81. package/dist/object-io.test.js +121 -0
  82. package/dist/object-io.test.js.map +1 -1
  83. package/dist/operation-lock.d.ts +8 -8
  84. package/dist/operation-lock.d.ts.map +1 -1
  85. package/dist/operation-lock.js +99 -32
  86. package/dist/operation-lock.js.map +1 -1
  87. package/dist/operation-lock.test.js +51 -4
  88. package/dist/operation-lock.test.js.map +1 -1
  89. package/dist/personal-vault.d.ts.map +1 -1
  90. package/dist/personal-vault.js +8 -2
  91. package/dist/personal-vault.js.map +1 -1
  92. package/dist/personal-vault.test.js +34 -0
  93. package/dist/personal-vault.test.js.map +1 -1
  94. package/dist/prefix-coalesce.d.ts +20 -9
  95. package/dist/prefix-coalesce.d.ts.map +1 -1
  96. package/dist/prefix-coalesce.js +124 -28
  97. package/dist/prefix-coalesce.js.map +1 -1
  98. package/dist/prefix-coalesce.test.js +57 -2
  99. package/dist/prefix-coalesce.test.js.map +1 -1
  100. package/dist/remote-pull.d.ts +8 -3
  101. package/dist/remote-pull.d.ts.map +1 -1
  102. package/dist/remote-pull.js +85 -16
  103. package/dist/remote-pull.js.map +1 -1
  104. package/dist/remote-pull.test.js +213 -2
  105. package/dist/remote-pull.test.js.map +1 -1
  106. package/dist/s3.d.ts +2 -0
  107. package/dist/s3.d.ts.map +1 -1
  108. package/dist/s3.js +197 -116
  109. package/dist/s3.js.map +1 -1
  110. package/dist/s3.test.js +109 -0
  111. package/dist/s3.test.js.map +1 -1
  112. package/dist/scope-shrink.d.ts +3 -2
  113. package/dist/scope-shrink.d.ts.map +1 -1
  114. package/dist/scope-shrink.js +1 -1
  115. package/dist/scope-shrink.js.map +1 -1
  116. package/dist/skill-telemetry.d.ts +1 -1
  117. package/dist/skill-telemetry.d.ts.map +1 -1
  118. package/dist/skill-telemetry.js +69 -9
  119. package/dist/skill-telemetry.js.map +1 -1
  120. package/dist/skill-telemetry.test.js +86 -0
  121. package/dist/skill-telemetry.test.js.map +1 -1
  122. package/dist/sync/event-sync.d.ts +6 -0
  123. package/dist/sync/event-sync.d.ts.map +1 -1
  124. package/dist/sync/event-sync.js +34 -1
  125. package/dist/sync/event-sync.js.map +1 -1
  126. package/dist/sync/event-sync.test.js +73 -0
  127. package/dist/sync/event-sync.test.js.map +1 -1
  128. package/dist/sync/metrics.d.ts +17 -1
  129. package/dist/sync/metrics.d.ts.map +1 -1
  130. package/dist/sync/metrics.js +32 -1
  131. package/dist/sync/metrics.js.map +1 -1
  132. package/dist/sync/metrics.test.js +74 -1
  133. package/dist/sync/metrics.test.js.map +1 -1
  134. package/dist/sync/pull-scope.d.ts.map +1 -1
  135. package/dist/sync/pull-scope.js +15 -7
  136. package/dist/sync/pull-scope.js.map +1 -1
  137. package/dist/sync/push-receiver.d.ts +12 -5
  138. package/dist/sync/push-receiver.d.ts.map +1 -1
  139. package/dist/sync/push-receiver.js +45 -17
  140. package/dist/sync/push-receiver.js.map +1 -1
  141. package/dist/sync/push-receiver.test.js +67 -1
  142. package/dist/sync/push-receiver.test.js.map +1 -1
  143. package/dist/sync-core.d.ts +27 -0
  144. package/dist/sync-core.d.ts.map +1 -0
  145. package/dist/sync-core.js +54 -0
  146. package/dist/sync-core.js.map +1 -0
  147. package/dist/telemetry.d.ts +1 -1
  148. package/dist/telemetry.d.ts.map +1 -1
  149. package/dist/telemetry.js +59 -6
  150. package/dist/telemetry.js.map +1 -1
  151. package/dist/telemetry.test.js +74 -0
  152. package/dist/telemetry.test.js.map +1 -1
  153. package/dist/types.d.ts +8 -0
  154. package/dist/types.d.ts.map +1 -1
  155. package/dist/vault-client.d.ts.map +1 -1
  156. package/dist/vault-client.js +284 -36
  157. package/dist/vault-client.js.map +1 -1
  158. package/dist/vault-client.test.js +59 -0
  159. package/dist/vault-client.test.js.map +1 -1
  160. package/dist/watcher.d.ts +38 -20
  161. package/dist/watcher.d.ts.map +1 -1
  162. package/dist/watcher.js +155 -143
  163. package/dist/watcher.js.map +1 -1
  164. package/dist/watcher.test.js +103 -0
  165. package/dist/watcher.test.js.map +1 -1
  166. package/package.json +1 -1
  167. package/src/bin/sync-runner-company.ts +350 -0
  168. package/src/bin/sync-runner-events.ts +25 -0
  169. package/src/bin/sync-runner-planning.ts +121 -0
  170. package/src/bin/sync-runner-rollup.ts +72 -0
  171. package/src/bin/sync-runner-telemetry.ts +8 -0
  172. package/src/bin/sync-runner-watch-loop.ts +443 -0
  173. package/src/bin/sync-runner-watch-routes.ts +86 -0
  174. package/src/bin/sync-runner.test.ts +298 -11
  175. package/src/bin/sync-runner.ts +99 -1054
  176. package/src/cli/reindex.test.ts +41 -3
  177. package/src/cli/reindex.ts +35 -19
  178. package/src/cli/rescue-classify-ordering.test.ts +81 -0
  179. package/src/cli/rescue-core.ts +400 -165
  180. package/src/cli/share.test.ts +38 -0
  181. package/src/cli/share.ts +420 -693
  182. package/src/cli/sync.test.ts +460 -1
  183. package/src/cli/sync.ts +788 -825
  184. package/src/cognito-auth.test.ts +77 -0
  185. package/src/cognito-auth.ts +73 -11
  186. package/src/daemon-worker.ts +3 -3
  187. package/src/index.ts +8 -0
  188. package/src/journal.test.ts +72 -0
  189. package/src/journal.ts +95 -8
  190. package/src/machine-auth.test.ts +64 -2
  191. package/src/object-io.test.ts +142 -0
  192. package/src/object-io.ts +183 -31
  193. package/src/operation-lock.test.ts +63 -4
  194. package/src/operation-lock.ts +99 -31
  195. package/src/personal-vault.test.ts +42 -0
  196. package/src/personal-vault.ts +8 -2
  197. package/src/prefix-coalesce.test.ts +71 -1
  198. package/src/prefix-coalesce.ts +155 -30
  199. package/src/remote-pull.test.ts +235 -1
  200. package/src/remote-pull.ts +106 -18
  201. package/src/s3.test.ts +126 -0
  202. package/src/s3.ts +237 -122
  203. package/src/scope-shrink.ts +6 -3
  204. package/src/skill-telemetry.test.ts +109 -0
  205. package/src/skill-telemetry.ts +82 -14
  206. package/src/sync/event-sync.test.ts +75 -0
  207. package/src/sync/event-sync.ts +54 -1
  208. package/src/sync/metrics.test.ts +81 -0
  209. package/src/sync/metrics.ts +59 -4
  210. package/src/sync/pull-scope.ts +23 -7
  211. package/src/sync/push-receiver.test.ts +73 -1
  212. package/src/sync/push-receiver.ts +56 -20
  213. package/src/sync-core.ts +58 -0
  214. package/src/telemetry.test.ts +85 -0
  215. package/src/telemetry.ts +69 -6
  216. package/src/types.ts +8 -0
  217. package/src/vault-client.test.ts +74 -0
  218. package/src/vault-client.ts +395 -43
  219. package/src/watcher.test.ts +117 -0
  220. package/src/watcher.ts +215 -174
package/dist/watcher.js CHANGED
@@ -2,18 +2,15 @@
2
2
  * File watcher — monitors HQ directory for changes
3
3
  * Uses chokidar with debounced batching
4
4
  *
5
- * Day 1: not invoked by CLI surface; retained for future automatic-sync milestone.
6
- * When re-enabled, the constructor will need an EntityContext (or a context resolver)
7
- * to be passed in for entity-aware S3 operations.
5
+ * Active watcher path: TreeWatcher detects local changes, WatchPushDriver
6
+ * schedules pushes, and PushEventEmitter publishes typed push events.
8
7
  */
9
8
  import * as fs from "fs";
10
9
  import { createHash } from "node:crypto";
11
10
  import { readFile, stat } from "node:fs/promises";
12
11
  import * as path from "path";
13
12
  import { watch } from "chokidar";
14
- import { createIgnoreFilter, isWithinSizeLimit } from "./ignore.js";
15
- import { readJournal, writeJournal, hashFile, updateEntry } from "./journal.js";
16
- import { uploadFile, deleteRemoteFile, toPosixKey } from "./s3.js";
13
+ import { createIgnoreFilter } from "./ignore.js";
17
14
  import { isPersonalVaultExcluded } from "./personal-vault-exclusions.js";
18
15
  import { CONTINUITY_POINTER_REL, PERSONAL_VAULT_EXCLUDED_TOP_LEVEL, } from "./personal-vault.js";
19
16
  const DEBOUNCE_MS = 2000;
@@ -110,7 +107,9 @@ export class WatchPushDriver {
110
107
  }
111
108
  this.timer = this.clock.setTimeout(() => {
112
109
  this.timer = null;
113
- void this.fire();
110
+ void this.fire().catch((err) => {
111
+ console.error("WatchPushDriver push failed:", err);
112
+ });
114
113
  }, this.debounceMs);
115
114
  }
116
115
  async fire() {
@@ -148,113 +147,6 @@ export class WatchPushDriver {
148
147
  this.pendingWhilePushing = false;
149
148
  }
150
149
  }
151
- export class SyncWatcher {
152
- watcher = null;
153
- hqRoot;
154
- ctx;
155
- author;
156
- shouldSync;
157
- pendingChanges = new Map();
158
- debounceTimer = null;
159
- processing = false;
160
- constructor(hqRoot, ctx, author) {
161
- this.hqRoot = hqRoot;
162
- this.ctx = ctx;
163
- this.author = author;
164
- this.shouldSync = createIgnoreFilter(hqRoot);
165
- }
166
- start() {
167
- if (this.watcher)
168
- return;
169
- this.watcher = watch(this.hqRoot, {
170
- // See toChokidarIgnored: chokidar's pre-stat descent probe has no stats
171
- // hint, so a naive file-verdict prunes intermediate allowlist dirs
172
- // before descending to their in-scope leaves. Keep a statless probe
173
- // when EITHER the file or directory reading would survive the filter.
174
- ignored: toChokidarIgnored(this.shouldSync, this.hqRoot),
175
- persistent: true,
176
- ignoreInitial: true,
177
- awaitWriteFinish: {
178
- stabilityThreshold: 500,
179
- pollInterval: 100,
180
- },
181
- });
182
- this.watcher
183
- .on("add", (p) => this.queueChange("add", p))
184
- .on("change", (p) => this.queueChange("change", p))
185
- .on("unlink", (p) => this.queueChange("unlink", p))
186
- .on("error", (err) => console.error("Watcher error:", err));
187
- }
188
- stop() {
189
- if (this.watcher) {
190
- this.watcher.close();
191
- this.watcher = null;
192
- }
193
- if (this.debounceTimer) {
194
- clearTimeout(this.debounceTimer);
195
- this.debounceTimer = null;
196
- }
197
- }
198
- queueChange(type, absolutePath) {
199
- const relativePath = toPosixKey(path.relative(this.hqRoot, absolutePath));
200
- // Skip files that exceed size limit
201
- if (type !== "unlink" && !isWithinSizeLimit(absolutePath)) {
202
- return;
203
- }
204
- this.pendingChanges.set(relativePath, {
205
- type,
206
- absolutePath,
207
- relativePath,
208
- });
209
- // Debounce: wait for DEBOUNCE_MS of quiet before processing
210
- if (this.debounceTimer) {
211
- clearTimeout(this.debounceTimer);
212
- }
213
- this.debounceTimer = setTimeout(() => this.flush(), DEBOUNCE_MS);
214
- }
215
- async flush() {
216
- if (this.processing || this.pendingChanges.size === 0)
217
- return;
218
- this.processing = true;
219
- const batch = new Map(this.pendingChanges);
220
- this.pendingChanges.clear();
221
- const journal = readJournal(this.ctx.slug);
222
- for (const [relativePath, change] of batch) {
223
- try {
224
- if (change.type === "unlink") {
225
- await deleteRemoteFile(this.ctx, relativePath);
226
- delete journal.files[relativePath];
227
- }
228
- else {
229
- const hash = hashFile(change.absolutePath);
230
- const stat = fs.statSync(change.absolutePath);
231
- // Skip if unchanged from last sync
232
- const existing = journal.files[relativePath];
233
- if (existing && existing.hash === hash)
234
- continue;
235
- const { etag } = this.author
236
- ? await uploadFile(this.ctx, change.absolutePath, relativePath, this.author)
237
- : await uploadFile(this.ctx, change.absolutePath, relativePath);
238
- updateEntry(journal, relativePath, hash, stat.size, "up", etag);
239
- }
240
- }
241
- catch (err) {
242
- console.error(`Sync error [${relativePath}]:`, err instanceof Error ? err.message : err);
243
- // Re-queue failed changes
244
- this.pendingChanges.set(relativePath, change);
245
- }
246
- }
247
- // See cli/sync.ts: stamp lastSync on every flush so the indicator
248
- // ticks even when all changes were re-queued or no-op.
249
- journal.lastSync = new Date().toISOString();
250
- writeJournal(this.ctx.slug, journal);
251
- this.processing = false;
252
- // Process any changes that came in while we were flushing
253
- if (this.pendingChanges.size > 0) {
254
- this.debounceTimer = setTimeout(() => this.flush(), DEBOUNCE_MS);
255
- }
256
- }
257
- }
258
150
  /**
259
151
  * Translate an emit-filter into chokidar's `ignored` predicate (true = SKIP).
260
152
  *
@@ -297,6 +189,30 @@ function toChokidarIgnored(shouldEmit, hqRoot) {
297
189
  function supportsRecursiveWatch() {
298
190
  return process.platform === "darwin" || process.platform === "win32";
299
191
  }
192
+ function startChokidarTreeWatch(hqRoot, shouldEmit, onEvent, onError) {
193
+ const cw = watch(hqRoot, {
194
+ // chokidar fallback (Linux): see toChokidarIgnored for why the descent
195
+ // probe must not prune ancestor dirs of allowlisted leaves.
196
+ ignored: toChokidarIgnored(shouldEmit, hqRoot),
197
+ persistent: true,
198
+ ignoreInitial: true,
199
+ awaitWriteFinish: {
200
+ stabilityThreshold: 500,
201
+ pollInterval: 100,
202
+ },
203
+ });
204
+ cw.on("add", onEvent)
205
+ .on("change", onEvent)
206
+ .on("unlink", onEvent)
207
+ .on("addDir", onEvent)
208
+ .on("unlinkDir", onEvent)
209
+ .on("error", onError);
210
+ return {
211
+ close: () => {
212
+ void cw.close();
213
+ },
214
+ };
215
+ }
300
216
  /**
301
217
  * Start watching `hqRoot`, calling `onEvent(absolutePath)` for every change.
302
218
  *
@@ -331,8 +247,38 @@ function startTreeWatch(hqRoot, shouldEmit, onEvent, onError) {
331
247
  return;
332
248
  onEvent(path.resolve(hqRoot, rel));
333
249
  });
334
- native.on("error", onError);
335
- return { close: () => native.close() };
250
+ let closed = false;
251
+ let fallback = null;
252
+ native.on("error", (err) => {
253
+ onError(err);
254
+ if (closed || fallback !== null)
255
+ return;
256
+ try {
257
+ native.close();
258
+ }
259
+ catch {
260
+ /* already closed */
261
+ }
262
+ try {
263
+ fallback = startChokidarTreeWatch(hqRoot, shouldEmit, onEvent, onError);
264
+ }
265
+ catch (fallbackErr) {
266
+ onError(fallbackErr);
267
+ }
268
+ });
269
+ return {
270
+ close: () => {
271
+ closed = true;
272
+ try {
273
+ native.close();
274
+ }
275
+ catch {
276
+ /* already closed */
277
+ }
278
+ fallback?.close();
279
+ fallback = null;
280
+ },
281
+ };
336
282
  }
337
283
  catch (err) {
338
284
  // Recursive watch unexpectedly unavailable — fall back to chokidar
@@ -340,28 +286,7 @@ function startTreeWatch(hqRoot, shouldEmit, onEvent, onError) {
340
286
  onError(err);
341
287
  }
342
288
  }
343
- const cw = watch(hqRoot, {
344
- // chokidar fallback (Linux): see toChokidarIgnored for why the descent
345
- // probe must not prune ancestor dirs of allowlisted leaves.
346
- ignored: toChokidarIgnored(shouldEmit, hqRoot),
347
- persistent: true,
348
- ignoreInitial: true,
349
- awaitWriteFinish: {
350
- stabilityThreshold: 500,
351
- pollInterval: 100,
352
- },
353
- });
354
- cw.on("add", onEvent)
355
- .on("change", onEvent)
356
- .on("unlink", onEvent)
357
- .on("addDir", onEvent)
358
- .on("unlinkDir", onEvent)
359
- .on("error", onError);
360
- return {
361
- close: () => {
362
- void cw.close();
363
- },
364
- };
289
+ return startChokidarTreeWatch(hqRoot, shouldEmit, onEvent, onError);
365
290
  }
366
291
  /**
367
292
  * Build the composite emit-decision predicate. Returns true when a change to
@@ -418,16 +343,29 @@ export function createWatchPathFilter(hqRoot, personalMode = false) {
418
343
  return true;
419
344
  };
420
345
  }
346
+ export const DEFAULT_TREE_WATCHER_MAX_PENDING_PATHS = 4096;
347
+ export const DEFAULT_TREE_WATCHER_MAX_PENDING_BYTES = 1024 * 1024;
348
+ function estimatePendingEntryBytes(absolutePath, relativePath) {
349
+ return Buffer.byteLength(absolutePath) + Buffer.byteLength(relativePath) + 64;
350
+ }
421
351
  export class TreeWatcher {
422
352
  hqRoot;
423
353
  debounceMs;
424
354
  clock;
425
355
  shouldEmit;
356
+ maxPendingPaths;
357
+ maxPendingBytes;
358
+ onBacklogOverflow;
426
359
  backend = null;
427
360
  timer = null;
428
361
  listeners = new Set();
429
362
  /** Paths accumulated for the current (in-flight) debounce window. */
430
363
  pending = new Map();
364
+ pendingBytes = 0;
365
+ overflowed = false;
366
+ overflowLogged = false;
367
+ droppedPaths = 0;
368
+ droppedBytes = 0;
431
369
  disposed = false;
432
370
  constructor(opts) {
433
371
  this.hqRoot = opts.hqRoot;
@@ -435,6 +373,13 @@ export class TreeWatcher {
435
373
  this.clock = opts.clock ?? systemClock;
436
374
  this.shouldEmit =
437
375
  opts.pathFilter ?? createWatchPathFilter(opts.hqRoot, opts.personalMode ?? false);
376
+ this.maxPendingPaths = Math.max(1, opts.maxPendingPaths ?? DEFAULT_TREE_WATCHER_MAX_PENDING_PATHS);
377
+ this.maxPendingBytes = Math.max(1, opts.maxPendingBytes ?? DEFAULT_TREE_WATCHER_MAX_PENDING_BYTES);
378
+ this.onBacklogOverflow =
379
+ opts.onBacklogOverflow ??
380
+ ((info) => {
381
+ console.warn(`TreeWatcher backlog cap exceeded; dropping ${info.droppedPaths} path(s) until the next resync`);
382
+ });
438
383
  }
439
384
  /**
440
385
  * Register a debounced-`changed` listener. Returns an unsubscribe fn.
@@ -459,7 +404,16 @@ export class TreeWatcher {
459
404
  start() {
460
405
  if (this.disposed || this.backend)
461
406
  return;
462
- this.backend = startTreeWatch(this.hqRoot, this.shouldEmit, (absolutePath) => this.handleEvent(absolutePath), (err) => console.error("TreeWatcher error:", err));
407
+ this.backend = startTreeWatch(this.hqRoot, this.shouldEmit, (absolutePath) => this.handleEvent(absolutePath), (err) => {
408
+ console.error("TreeWatcher error:", err);
409
+ this.signalBackendResync();
410
+ });
411
+ }
412
+ signalBackendResync() {
413
+ if (this.disposed)
414
+ return;
415
+ this.overflowed = true;
416
+ this.arm();
463
417
  }
464
418
  /**
465
419
  * Test/seam entry point: feed a raw filesystem path as if the backend
@@ -477,9 +431,40 @@ export class TreeWatcher {
477
431
  return;
478
432
  const abs = path.resolve(absolutePath);
479
433
  const rel = path.relative(this.hqRoot, abs).split(path.sep).join("/");
434
+ if (!this.pending.has(abs)) {
435
+ const entryBytes = estimatePendingEntryBytes(abs, rel);
436
+ if (this.pending.size >= this.maxPendingPaths ||
437
+ this.pendingBytes + entryBytes > this.maxPendingBytes) {
438
+ this.recordBacklogOverflow(entryBytes);
439
+ this.arm();
440
+ return;
441
+ }
442
+ this.pendingBytes += entryBytes;
443
+ }
480
444
  this.pending.set(abs, rel);
481
445
  this.arm();
482
446
  }
447
+ recordBacklogOverflow(entryBytes) {
448
+ this.overflowed = true;
449
+ this.droppedPaths += 1;
450
+ this.droppedBytes += entryBytes;
451
+ if (this.overflowLogged)
452
+ return;
453
+ this.overflowLogged = true;
454
+ try {
455
+ this.onBacklogOverflow({
456
+ pendingPaths: this.pending.size,
457
+ pendingBytes: this.pendingBytes,
458
+ maxPendingPaths: this.maxPendingPaths,
459
+ maxPendingBytes: this.maxPendingBytes,
460
+ droppedPaths: this.droppedPaths,
461
+ droppedBytes: this.droppedBytes,
462
+ });
463
+ }
464
+ catch (err) {
465
+ console.error("TreeWatcher backlog overflow logger error:", err);
466
+ }
467
+ }
483
468
  arm() {
484
469
  if (this.timer !== null) {
485
470
  this.clock.clearTimeout(this.timer);
@@ -496,7 +481,12 @@ export class TreeWatcher {
496
481
  // Snapshot + clear the accumulated paths so the next window starts fresh
497
482
  // even if a listener re-enters synchronously.
498
483
  const batch = { paths: new Map(this.pending) };
499
- this.pending.clear();
484
+ if (this.overflowed) {
485
+ batch.overflowed = true;
486
+ batch.droppedPaths = this.droppedPaths;
487
+ batch.droppedBytes = this.droppedBytes;
488
+ }
489
+ this.clearPending();
500
490
  // First changed relative path of the burst — the US-003 routing argument.
501
491
  // undefined when the window settled with no captured path (e.g. a synthetic
502
492
  // arm() with no handleEvent).
@@ -510,6 +500,14 @@ export class TreeWatcher {
510
500
  }
511
501
  }
512
502
  }
503
+ clearPending() {
504
+ this.pending.clear();
505
+ this.pendingBytes = 0;
506
+ this.overflowed = false;
507
+ this.overflowLogged = false;
508
+ this.droppedPaths = 0;
509
+ this.droppedBytes = 0;
510
+ }
513
511
  /** True while the watch backend is active. */
514
512
  isWatching() {
515
513
  return this.backend !== null;
@@ -528,7 +526,7 @@ export class TreeWatcher {
528
526
  this.clock.clearTimeout(this.timer);
529
527
  this.timer = null;
530
528
  }
531
- this.pending.clear();
529
+ this.clearPending();
532
530
  if (this.backend) {
533
531
  this.backend.close();
534
532
  this.backend = null;
@@ -567,6 +565,7 @@ async function computeContentHash(absolutePath) {
567
565
  * running TreeWatcher (returns an unsubscribe fn). Flag-gated + failure-safe.
568
566
  */
569
567
  export class PushEventEmitter {
568
+ static MAX_CONCURRENT_PUBLISHES = 16;
570
569
  originTenantId;
571
570
  originDeviceId;
572
571
  transport;
@@ -576,6 +575,7 @@ export class PushEventEmitter {
576
575
  logger;
577
576
  internalSeq = 0;
578
577
  nextSeq;
578
+ publishTail = Promise.resolve();
579
579
  constructor(opts) {
580
580
  this.originTenantId = opts.originTenantId;
581
581
  this.originDeviceId = opts.originDeviceId;
@@ -621,8 +621,20 @@ export class PushEventEmitter {
621
621
  async emitForBatch(batch) {
622
622
  if (!this.enabled)
623
623
  return;
624
- const entries = [...batch.paths.entries()];
625
- await Promise.all(entries.map(([absolutePath, relativePath]) => this.emitOne(absolutePath, relativePath)));
624
+ const entriesByRel = new Map();
625
+ for (const [absolutePath, relativePath] of batch.paths.entries()) {
626
+ entriesByRel.set(relativePath, [absolutePath, relativePath]);
627
+ }
628
+ const entries = [...entriesByRel.values()];
629
+ const run = this.publishTail.then(() => this.emitEntries(entries), () => this.emitEntries(entries));
630
+ this.publishTail = run.catch(() => undefined);
631
+ await run;
632
+ }
633
+ async emitEntries(entries) {
634
+ for (let i = 0; i < entries.length; i += PushEventEmitter.MAX_CONCURRENT_PUBLISHES) {
635
+ const chunk = entries.slice(i, i + PushEventEmitter.MAX_CONCURRENT_PUBLISHES);
636
+ await Promise.all(chunk.map(([absolutePath, relativePath]) => this.emitOne(absolutePath, relativePath)));
637
+ }
626
638
  }
627
639
  async emitOne(absolutePath, relativePath) {
628
640
  let event;
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,9 @@ function makeHarness(opts) {
37
37
  advance: (ms) => clock.advance(ms),
38
38
  };
39
39
  }
40
+ async function flushImmediate() {
41
+ await new Promise((resolve) => setImmediate(resolve));
42
+ }
40
43
  describe("FakeClock", () => {
41
44
  it("fires a timer exactly when its deadline is reached", () => {
42
45
  const clock = new FakeClock();
@@ -137,6 +140,32 @@ describe("US-001: WatchPushDriver — debounced push seam", () => {
137
140
  expect(push).toHaveBeenCalledTimes(2);
138
141
  driver.dispose();
139
142
  });
143
+ it("F17: rejected watch push is caught instead of surfacing as an unhandled rejection", async () => {
144
+ const clock = new FakeClock();
145
+ const rejection = new Error("push failed");
146
+ const push = vi.fn(async () => {
147
+ throw rejection;
148
+ });
149
+ const driver = new WatchPushDriver({ debounceMs: DEBOUNCE, clock, push });
150
+ const unhandled = [];
151
+ const onUnhandled = (reason) => {
152
+ unhandled.push(reason);
153
+ };
154
+ process.prependListener("unhandledRejection", onUnhandled);
155
+ try {
156
+ driver.notifyChange();
157
+ clock.advance(DEBOUNCE);
158
+ await Promise.resolve();
159
+ await flushImmediate();
160
+ expect(push).toHaveBeenCalledTimes(1);
161
+ expect(driver.isPushing()).toBe(false);
162
+ expect(unhandled).toEqual([]);
163
+ }
164
+ finally {
165
+ process.removeListener("unhandledRejection", onUnhandled);
166
+ driver.dispose();
167
+ }
168
+ });
140
169
  it("respects a custom debounce window", async () => {
141
170
  const h = makeHarness({ debounceMs: 500 });
142
171
  h.emitChange();
@@ -311,6 +340,34 @@ describe("US-002: TreeWatcher — debounce coalesce (FakeClock seam)", () => {
311
340
  clock.advance(DEBOUNCE);
312
341
  expect(changed).toHaveBeenCalledTimes(2);
313
342
  });
343
+ it("R-F13: caps watcher backlog and keeps EMFILE polling fallback removed", () => {
344
+ const clock = new FakeClock();
345
+ const changed = vi.fn();
346
+ const overflow = vi.fn();
347
+ const watcher = new TreeWatcher({
348
+ hqRoot: ROOT,
349
+ debounceMs: DEBOUNCE,
350
+ clock,
351
+ pathFilter: () => true,
352
+ maxPendingPaths: 3,
353
+ maxPendingBytes: 10_000,
354
+ onBacklogOverflow: overflow,
355
+ });
356
+ watcher.onChange(changed);
357
+ for (let i = 0; i < 10; i++) {
358
+ watcher.handleEvent(path.join(ROOT, `bulk-${i}.md`));
359
+ }
360
+ expect(overflow).toHaveBeenCalledTimes(1);
361
+ clock.advance(DEBOUNCE);
362
+ expect(changed).toHaveBeenCalledTimes(1);
363
+ const batch = changed.mock.calls[0][1];
364
+ expect(batch.paths.size).toBe(3);
365
+ expect(batch.overflowed).toBe(true);
366
+ expect(batch.droppedPaths).toBe(7);
367
+ const source = fs.readFileSync(path.join(process.cwd(), "src/watcher.ts"), "utf8");
368
+ expect(source).not.toContain("startPollingTreeWatch");
369
+ expect(source).not.toContain("snapshotWatchTree");
370
+ });
314
371
  });
315
372
  describe("US-002: TreeWatcher — lifecycle (real chokidar over a temp dir)", () => {
316
373
  let dir;
@@ -389,6 +446,52 @@ describe("PushEventEmitter — directory and delete tombstone handling", () => {
389
446
  onError: opts?.onError,
390
447
  });
391
448
  }
449
+ it("F13: watcher batch event publishing applies bounded backpressure", async () => {
450
+ const paths = new Map();
451
+ for (let i = 0; i < 32; i++) {
452
+ const rel = `bulk-${i}.md`;
453
+ const abs = path.join(dir, rel);
454
+ fs.writeFileSync(abs, `file ${i}`);
455
+ paths.set(abs, rel);
456
+ }
457
+ let inFlight = 0;
458
+ let maxInFlight = 0;
459
+ let releaseGate;
460
+ const gate = new Promise((resolve) => {
461
+ releaseGate = resolve;
462
+ });
463
+ const transport = {
464
+ start: async () => { },
465
+ dispose: async () => { },
466
+ connected: true,
467
+ publish: async () => {
468
+ inFlight += 1;
469
+ maxInFlight = Math.max(maxInFlight, inFlight);
470
+ await gate;
471
+ inFlight -= 1;
472
+ },
473
+ };
474
+ const emitter = new PushEventEmitter({
475
+ originTenantId: "tenant-indigo",
476
+ originDeviceId: "device-a",
477
+ transport,
478
+ flagProvider: new StaticFlagProvider(["tenant-indigo"]),
479
+ now: () => new Date("2026-06-18T12:00:00.000Z"),
480
+ });
481
+ const run = emitter.emitForBatch({ paths });
482
+ try {
483
+ for (let i = 0; i < 200 && maxInFlight <= 16; i++) {
484
+ await flushImmediate();
485
+ }
486
+ releaseGate();
487
+ await run;
488
+ expect(maxInFlight).toBeLessThanOrEqual(16);
489
+ }
490
+ finally {
491
+ releaseGate();
492
+ await run.catch(() => { });
493
+ }
494
+ });
392
495
  it("skips directory changes silently without publishing or reporting an error", async () => {
393
496
  const published = [];
394
497
  const onError = vi.fn();