@indigoai-us/hq-cloud 6.14.44 → 6.14.46

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.
@@ -52,5 +52,13 @@ export declare function executeCompanyFanout(options: {
52
52
  telemetryClient?: CloudTelemetryClient | null;
53
53
  telemetryClaims?: TelemetryClaims | null;
54
54
  telemetrySessionId?: string;
55
+ /**
56
+ * Ensure a company's local directory exists (recursive mkdir). Injected so
57
+ * tests don't touch a developer's filesystem. Defaults to `fs.mkdirSync(dir,
58
+ * { recursive: true })`. Called after a completed non-personal pull leg so a
59
+ * company a member can SEE is materialized locally even when zero files were
60
+ * shared with them (see the ensure block below).
61
+ */
62
+ ensureCompanyDir?: (dir: string) => void;
55
63
  }): Promise<CompanyFanoutResult>;
56
64
  //# sourceMappingURL=sync-runner-company.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-runner-company.d.ts","sourceRoot":"","sources":["../../src/bin/sync-runner-company.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAqB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAWhC,OAAO,KAAK,EACV,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,kBAAkB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,KAAK,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;KAC5B,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;QAC/B,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACzD,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;IACnD,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAggB/B"}
1
+ {"version":3,"file":"sync-runner-company.d.ts","sourceRoot":"","sources":["../../src/bin/sync-runner-company.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAqB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAWhC,OAAO,KAAK,EACV,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,kBAAkB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,KAAK,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;KAC5B,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;QAC/B,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACzD,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;IACnD,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuiB/B"}
@@ -1,3 +1,4 @@
1
+ import * as fs from "fs";
1
2
  import * as path from "path";
2
3
  import { computePersonalVaultPaths, readCloudBackedSlugsFromManifest, } from "../personal-vault.js";
3
4
  import { resolvePullScope } from "../sync/pull-scope.js";
@@ -8,6 +9,10 @@ import { isTransientNetworkError } from "../lib/net-errors.js";
8
9
  import { VaultAuthError } from "../vault-client.js";
9
10
  import { createCompanyState, } from "./sync-runner-rollup.js";
10
11
  export async function executeCompanyFanout(options) {
12
+ const ensureCompanyDir = options.ensureCompanyDir ??
13
+ ((dir) => {
14
+ fs.mkdirSync(dir, { recursive: true });
15
+ });
11
16
  const doPush = options.direction === "push" || options.direction === "both";
12
17
  const doPull = options.direction === "pull" || options.direction === "both";
13
18
  const errors = [];
@@ -319,6 +324,33 @@ export async function executeCompanyFanout(options) {
319
324
  : aborted
320
325
  ? "aborted"
321
326
  : "complete";
327
+ // Materialize the company directory even when the pull downloaded zero
328
+ // files. A member who can SEE a company should have it appear locally —
329
+ // `companies/<slug>/` on disk plus a manifest entry — whether or not
330
+ // anything has been shared with them yet. Without this, a company with no
331
+ // shared files (e.g. an agency-created client account, or a member on
332
+ // shared-mode with no grants) never gets a local directory, so the
333
+ // post-fanout reconciler (which gates on the directory existing) skips it
334
+ // and HQ "doesn't know about" a company the person is plainly a member
335
+ // of. Only on a clean pull leg for a real company; best-effort, mirroring
336
+ // the reconciler's own non-fatal posture — a mkdir failure just leaves
337
+ // the slug unmaterialized exactly as before.
338
+ if (doPull &&
339
+ target.personalMode !== true &&
340
+ state.status === "complete") {
341
+ try {
342
+ ensureCompanyDir(path.join(options.hqRoot, "companies", target.slug));
343
+ }
344
+ catch (err) {
345
+ // Best-effort: a mkdir failure just leaves this slug unmaterialized,
346
+ // exactly as before this change. Never fail the (successful) pull
347
+ // over it — but never swallow it silently either.
348
+ console.warn("[sync-runner-company] ensure company directory failed (non-fatal)", {
349
+ slug: target.slug,
350
+ err: err instanceof Error ? err.message : String(err),
351
+ });
352
+ }
353
+ }
322
354
  options.emit({
323
355
  type: "complete",
324
356
  company: companyLabel,
@@ -1 +1 @@
1
- {"version":3,"file":"sync-runner-company.js","sourceRoot":"","sources":["../../src/bin/sync-runner-company.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-runner-company.js","sourceRoot":"","sources":["../../src/bin/sync-runner-company.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Watch-root planner — reduce the in-scope tree to the smallest set of OS
3
+ * watches that covers exactly the paths that can upload.
4
+ *
5
+ * Why this exists: on macOS/Windows the watcher used to place ONE recursive
6
+ * `fs.watch` on hqRoot. That is cheap in handles but the OS then delivers every
7
+ * event in the tree, including the buckets sync never uploads — on a real HQ
8
+ * root that is `repos/` (~26k directories) and `workspace/worktrees/` (~62k),
9
+ * where agent builds, installs, and checkouts churn constantly. Every one of
10
+ * those events woke the runner, cost a `path.resolve` (plus a synchronous
11
+ * `lstat` for renames), and was then dropped by the emit filter. The result was
12
+ * a node process pinned above 100% CPU doing nothing but allocating and
13
+ * garbage-collecting discarded paths.
14
+ *
15
+ * The planner walks the exclusion filter ONCE at start and returns:
16
+ * - `recursive`: directories whose entire subtree is in scope. One recursive
17
+ * watch each; the OS never reports an excluded path under them.
18
+ * - `shallow`: directories that contain an excluded descendant. Watched
19
+ * non-recursively so their own files still fire, with their in-scope
20
+ * children planned separately.
21
+ *
22
+ * The walk is post-order: whether a directory can collapse to a single
23
+ * recursive watch depends on its whole subtree, not just its direct children
24
+ * (`workspace/` looks clean until you reach `workspace/worktrees/`).
25
+ */
26
+ import type { WatchPathFilter } from "./watcher.js";
27
+ export interface WatchRootPlan {
28
+ /** Directories to watch recursively — their whole subtree is in scope. */
29
+ recursive: string[];
30
+ /** Directories to watch non-recursively — they contain excluded children. */
31
+ shallow: string[];
32
+ }
33
+ export interface PlanWatchRootsOptions {
34
+ /**
35
+ * Optional depth at which the walk stops splitting and takes a recursive
36
+ * watch even if the subtree still holds exclusions. Unbounded by default:
37
+ * the walk costs about what {@link TreeWatcher}'s known-kinds seed walk
38
+ * already cost on every start, and the two are fused via `onDirectory`, so
39
+ * paying for full pruning is free. A bound trades pruning for walk time on
40
+ * pathologically deep trees; the per-event filter drops whatever residue it
41
+ * admits, so this is a performance dial, never a correctness one.
42
+ */
43
+ maxDepth?: number;
44
+ /** Directory reader seam — defaults to a real `readdirSync`. */
45
+ listChildDirs?: (dir: string) => string[];
46
+ /**
47
+ * Invoked once for every in-scope directory the walk visits. Lets a caller
48
+ * populate its own directory index in the SAME pass instead of walking the
49
+ * tree a second time.
50
+ */
51
+ onDirectory?: (absolutePath: string) => void;
52
+ }
53
+ /**
54
+ * Plan the watch roots for `hqRoot` under `shouldEmit`.
55
+ *
56
+ * `shouldEmit(dir, true)` is the same directory predicate the watcher uses at
57
+ * event time, so the plan and the emit filter can never disagree about what is
58
+ * in scope.
59
+ */
60
+ export declare function planWatchRoots(hqRoot: string, shouldEmit: WatchPathFilter, opts?: PlanWatchRootsOptions): WatchRootPlan;
61
+ /**
62
+ * True when `absolutePath` already falls under one of `recursiveRoots`.
63
+ *
64
+ * Walks the path's own ancestors rather than scanning the root set: this runs
65
+ * on every rename event, in the hot path of a backend whose entire purpose is
66
+ * cutting per-event cost, and a real HQ tree plans ~685 roots. Ancestor-walking
67
+ * is O(path depth) — about ten set lookups — instead of O(roots) string
68
+ * comparisons. It also cannot fall into the shared-prefix trap, where `/hq/a/bc`
69
+ * looks like it sits under the root `/hq/a/b`.
70
+ */
71
+ export declare function isCoveredByRecursiveRoot(absolutePath: string, recursiveRoots: ReadonlySet<string>): boolean;
72
+ //# sourceMappingURL=watch-roots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-roots.d.ts","sourceRoot":"","sources":["../src/watch-roots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAeD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,eAAe,EAC3B,IAAI,GAAE,qBAA0B,GAC/B,aAAa,CAsDf;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,OAAO,CAST"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Watch-root planner — reduce the in-scope tree to the smallest set of OS
3
+ * watches that covers exactly the paths that can upload.
4
+ *
5
+ * Why this exists: on macOS/Windows the watcher used to place ONE recursive
6
+ * `fs.watch` on hqRoot. That is cheap in handles but the OS then delivers every
7
+ * event in the tree, including the buckets sync never uploads — on a real HQ
8
+ * root that is `repos/` (~26k directories) and `workspace/worktrees/` (~62k),
9
+ * where agent builds, installs, and checkouts churn constantly. Every one of
10
+ * those events woke the runner, cost a `path.resolve` (plus a synchronous
11
+ * `lstat` for renames), and was then dropped by the emit filter. The result was
12
+ * a node process pinned above 100% CPU doing nothing but allocating and
13
+ * garbage-collecting discarded paths.
14
+ *
15
+ * The planner walks the exclusion filter ONCE at start and returns:
16
+ * - `recursive`: directories whose entire subtree is in scope. One recursive
17
+ * watch each; the OS never reports an excluded path under them.
18
+ * - `shallow`: directories that contain an excluded descendant. Watched
19
+ * non-recursively so their own files still fire, with their in-scope
20
+ * children planned separately.
21
+ *
22
+ * The walk is post-order: whether a directory can collapse to a single
23
+ * recursive watch depends on its whole subtree, not just its direct children
24
+ * (`workspace/` looks clean until you reach `workspace/worktrees/`).
25
+ */
26
+ import * as fs from "fs";
27
+ import * as path from "path";
28
+ function defaultListChildDirs(dir) {
29
+ return fs
30
+ .readdirSync(dir, { withFileTypes: true })
31
+ .filter((entry) => entry.isDirectory())
32
+ .map((entry) => path.join(dir, entry.name));
33
+ }
34
+ /**
35
+ * Plan the watch roots for `hqRoot` under `shouldEmit`.
36
+ *
37
+ * `shouldEmit(dir, true)` is the same directory predicate the watcher uses at
38
+ * event time, so the plan and the emit filter can never disagree about what is
39
+ * in scope.
40
+ */
41
+ export function planWatchRoots(hqRoot, shouldEmit, opts = {}) {
42
+ const maxDepth = opts.maxDepth ?? Number.POSITIVE_INFINITY;
43
+ const listChildDirs = opts.listChildDirs ?? defaultListChildDirs;
44
+ const onDirectory = opts.onDirectory;
45
+ const root = path.resolve(hqRoot);
46
+ const visit = (dir, depth) => {
47
+ let children;
48
+ try {
49
+ children = listChildDirs(dir);
50
+ }
51
+ catch {
52
+ // Unreadable (permissions, or a race with a concurrent delete). We cannot
53
+ // prove the subtree is clean, but dropping it would silently stop syncing
54
+ // it — take the recursive watch and let the per-event filter sort it out.
55
+ return { clean: true, plan: { recursive: [dir], shallow: [] } };
56
+ }
57
+ const included = [];
58
+ let hasExcludedChild = false;
59
+ for (const child of children) {
60
+ if (shouldEmit(child, true)) {
61
+ included.push(child);
62
+ onDirectory?.(path.resolve(child));
63
+ }
64
+ else
65
+ hasExcludedChild = true;
66
+ }
67
+ // At the depth bound we stop splitting. `clean` still reports what we can
68
+ // see one level down so an ancestor does not collapse over a known
69
+ // exclusion it could have pruned.
70
+ if (depth >= maxDepth) {
71
+ return {
72
+ clean: !hasExcludedChild,
73
+ plan: { recursive: [dir], shallow: [] },
74
+ };
75
+ }
76
+ const childResults = included.map((child) => visit(child, depth + 1));
77
+ const clean = !hasExcludedChild && childResults.every((result) => result.clean);
78
+ // A clean subtree collapses to a single recursive watch here, discarding
79
+ // the per-child watches the recursion built below it.
80
+ if (clean)
81
+ return { clean: true, plan: { recursive: [dir], shallow: [] } };
82
+ return {
83
+ clean: false,
84
+ plan: {
85
+ recursive: childResults.flatMap((result) => result.plan.recursive),
86
+ shallow: [dir, ...childResults.flatMap((result) => result.plan.shallow)],
87
+ },
88
+ };
89
+ };
90
+ return visit(root, 0).plan;
91
+ }
92
+ /**
93
+ * True when `absolutePath` already falls under one of `recursiveRoots`.
94
+ *
95
+ * Walks the path's own ancestors rather than scanning the root set: this runs
96
+ * on every rename event, in the hot path of a backend whose entire purpose is
97
+ * cutting per-event cost, and a real HQ tree plans ~685 roots. Ancestor-walking
98
+ * is O(path depth) — about ten set lookups — instead of O(roots) string
99
+ * comparisons. It also cannot fall into the shared-prefix trap, where `/hq/a/bc`
100
+ * looks like it sits under the root `/hq/a/b`.
101
+ */
102
+ export function isCoveredByRecursiveRoot(absolutePath, recursiveRoots) {
103
+ if (recursiveRoots.size === 0)
104
+ return false;
105
+ let current = path.resolve(absolutePath);
106
+ for (;;) {
107
+ if (recursiveRoots.has(current))
108
+ return true;
109
+ const parent = path.dirname(current);
110
+ if (parent === current)
111
+ return false;
112
+ current = parent;
113
+ }
114
+ }
115
+ //# sourceMappingURL=watch-roots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-roots.js","sourceRoot":"","sources":["../src/watch-roots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Tests for the watch-root planner.
3
+ *
4
+ * The invariant under test is the one the whole change exists for: the watcher
5
+ * must only register OS watches over paths that can actually upload. Before
6
+ * this planner, macOS/Windows placed ONE recursive `fs.watch` on hqRoot, so the
7
+ * OS delivered every event in the tree — including `repos/` (~26k dirs on a
8
+ * real HQ) and `workspace/worktrees/` (~62k dirs) — and each one was filtered
9
+ * out only AFTER it had already cost a syscall and an allocation.
10
+ *
11
+ * The planner walks the exclusion filter up front and returns the minimum set
12
+ * of watch roots that covers exactly the in-scope tree:
13
+ * - `recursive`: the dir's entire subtree is in scope → one recursive watch.
14
+ * - `shallow`: the dir contains an excluded child → watch the dir itself
15
+ * non-recursively and descend into its in-scope children.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=watch-roots.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-roots.test.d.ts","sourceRoot":"","sources":["../src/watch-roots.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Tests for the watch-root planner.
3
+ *
4
+ * The invariant under test is the one the whole change exists for: the watcher
5
+ * must only register OS watches over paths that can actually upload. Before
6
+ * this planner, macOS/Windows placed ONE recursive `fs.watch` on hqRoot, so the
7
+ * OS delivered every event in the tree — including `repos/` (~26k dirs on a
8
+ * real HQ) and `workspace/worktrees/` (~62k dirs) — and each one was filtered
9
+ * out only AFTER it had already cost a syscall and an allocation.
10
+ *
11
+ * The planner walks the exclusion filter up front and returns the minimum set
12
+ * of watch roots that covers exactly the in-scope tree:
13
+ * - `recursive`: the dir's entire subtree is in scope → one recursive watch.
14
+ * - `shallow`: the dir contains an excluded child → watch the dir itself
15
+ * non-recursively and descend into its in-scope children.
16
+ */
17
+ import { mkdtemp, mkdir, rm } from "node:fs/promises";
18
+ import { tmpdir } from "node:os";
19
+ import path from "node:path";
20
+ import { describe, expect, it } from "vitest";
21
+ import { isCoveredByRecursiveRoot, planWatchRoots } from "./watch-roots.js";
22
+ const ROOT = path.resolve("/hq");
23
+ /** Build the `listChildDirs` seam over a literal `absDir -> childNames` map. */
24
+ function treeLister(tree) {
25
+ return (dir) => (tree[dir] ?? []).map((name) => path.join(dir, name));
26
+ }
27
+ /**
28
+ * Build a filter shaped like the real one: `prefixes` are exact vault-relative
29
+ * prefixes (`repos`, `workspace/worktrees` — position-sensitive), `anySegment`
30
+ * names are excluded at any depth (`node_modules`, `.git`).
31
+ */
32
+ function makeFilter(opts) {
33
+ const prefixes = opts.prefixes ?? [];
34
+ const anySegment = new Set(opts.anySegment ?? []);
35
+ return (absolutePath) => {
36
+ const rel = path.relative(ROOT, absolutePath).split(path.sep).join("/");
37
+ if (rel === "" || rel.startsWith(".."))
38
+ return false;
39
+ if (prefixes.some((p) => rel === p || rel.startsWith(p + "/")))
40
+ return false;
41
+ if (rel.split("/").some((seg) => anySegment.has(seg)))
42
+ return false;
43
+ return true;
44
+ };
45
+ }
46
+ /** Every dir the plan asks the OS to watch, recursive roots and shallow alike. */
47
+ function allWatched(plan) {
48
+ return [...plan.recursive, ...plan.shallow];
49
+ }
50
+ describe("planWatchRoots — minimal cover of the in-scope tree", () => {
51
+ it("collapses a fully in-scope tree to ONE recursive watch at the root", () => {
52
+ const plan = planWatchRoots(ROOT, makeFilter({}), {
53
+ listChildDirs: treeLister({
54
+ [ROOT]: ["companies", "core"],
55
+ [path.join(ROOT, "companies")]: ["acme"],
56
+ }),
57
+ });
58
+ expect(plan.recursive).toEqual([ROOT]);
59
+ expect(plan.shallow).toEqual([]);
60
+ });
61
+ it("never registers a watch on an excluded dir, and never covers one from a recursive root", () => {
62
+ const filter = makeFilter({
63
+ prefixes: ["repos"],
64
+ anySegment: ["node_modules"],
65
+ });
66
+ const plan = planWatchRoots(ROOT, filter, {
67
+ listChildDirs: treeLister({
68
+ [ROOT]: ["companies", "repos", "node_modules"],
69
+ [path.join(ROOT, "companies")]: ["acme"],
70
+ [path.join(ROOT, "repos")]: ["hq-cloud"],
71
+ }),
72
+ });
73
+ // The root has excluded children, so it cannot be a recursive root.
74
+ expect(plan.shallow).toContain(ROOT);
75
+ expect(plan.recursive).not.toContain(ROOT);
76
+ // `companies/` is clean, so it collapses to one recursive watch.
77
+ expect(plan.recursive).toContain(path.join(ROOT, "companies"));
78
+ // The point of the whole change: excluded trees are never watched at all.
79
+ for (const watched of allWatched(plan)) {
80
+ expect(watched).not.toContain(`${path.sep}repos`);
81
+ expect(watched).not.toContain("node_modules");
82
+ }
83
+ });
84
+ it("descends through a partially-excluded dir to reach its in-scope children", () => {
85
+ // `workspace/` is in scope but `workspace/worktrees/` (the 62k-dir bucket)
86
+ // is not — so `workspace` must be shallow and its siblings recursive.
87
+ const filter = makeFilter({ prefixes: ["workspace/worktrees"] });
88
+ const plan = planWatchRoots(ROOT, filter, {
89
+ listChildDirs: treeLister({
90
+ [ROOT]: ["workspace"],
91
+ [path.join(ROOT, "workspace")]: ["agency", "threads", "worktrees"],
92
+ [path.join(ROOT, "workspace", "worktrees")]: ["feature-a"],
93
+ }),
94
+ });
95
+ expect(plan.shallow).toEqual(expect.arrayContaining([ROOT, path.join(ROOT, "workspace")]));
96
+ expect(plan.recursive).toEqual(expect.arrayContaining([
97
+ path.join(ROOT, "workspace", "agency"),
98
+ path.join(ROOT, "workspace", "threads"),
99
+ ]));
100
+ expect(allWatched(plan)).not.toContain(path.join(ROOT, "workspace", "worktrees"));
101
+ });
102
+ it("holds the invariant: no excluded path lies under any recursive root", () => {
103
+ const filter = makeFilter({
104
+ prefixes: ["repos", "workspace/worktrees"],
105
+ anySegment: ["node_modules", ".git"],
106
+ });
107
+ const tree = {
108
+ [ROOT]: [
109
+ "companies",
110
+ "core",
111
+ "workspace",
112
+ "repos",
113
+ ".git",
114
+ "node_modules",
115
+ ],
116
+ [path.join(ROOT, "companies")]: ["acme", "indigo"],
117
+ [path.join(ROOT, "core")]: ["skills"],
118
+ [path.join(ROOT, "workspace")]: ["agency", "worktrees"],
119
+ [path.join(ROOT, "workspace", "worktrees")]: ["wt-1"],
120
+ [path.join(ROOT, "repos")]: ["hq-cloud"],
121
+ };
122
+ const plan = planWatchRoots(ROOT, filter, {
123
+ listChildDirs: treeLister(tree),
124
+ });
125
+ const excludedDirs = Object.keys(tree)
126
+ .flatMap((dir) => (tree[dir] ?? []).map((n) => path.join(dir, n)))
127
+ .filter((p) => !filter(p, true));
128
+ expect(excludedDirs.length).toBeGreaterThan(0);
129
+ for (const excluded of excludedDirs) {
130
+ // Not watched directly...
131
+ expect(allWatched(plan)).not.toContain(excluded);
132
+ // ...and not swept in as a descendant of some recursive root either.
133
+ for (const root of plan.recursive) {
134
+ expect(excluded.startsWith(root + path.sep)).toBe(false);
135
+ }
136
+ }
137
+ });
138
+ it("stops descending at maxDepth and takes a recursive watch there", () => {
139
+ const filter = makeFilter({ anySegment: ["node_modules"] });
140
+ const plan = planWatchRoots(ROOT, filter, {
141
+ maxDepth: 1,
142
+ listChildDirs: treeLister({
143
+ [ROOT]: ["a", "node_modules"],
144
+ [path.join(ROOT, "a")]: ["b", "node_modules"],
145
+ [path.join(ROOT, "a", "b")]: ["c"],
146
+ }),
147
+ });
148
+ // Depth 0 has an excluded child → shallow. Depth 1 is the bound, so `a`
149
+ // takes a recursive watch even though it still contains node_modules; the
150
+ // per-event filter drops that residue. This bounds handle count on trees
151
+ // with deeply scattered exclusions.
152
+ expect(plan.shallow).toEqual([ROOT]);
153
+ expect(plan.recursive).toEqual([path.join(ROOT, "a")]);
154
+ });
155
+ it("skips a directory it cannot read instead of throwing", () => {
156
+ const plan = planWatchRoots(ROOT, makeFilter({ prefixes: ["repos"] }), {
157
+ listChildDirs: (dir) => {
158
+ if (dir === path.join(ROOT, "denied")) {
159
+ throw Object.assign(new Error("EACCES"), { code: "EACCES" });
160
+ }
161
+ return dir === ROOT
162
+ ? [path.join(ROOT, "denied"), path.join(ROOT, "repos")]
163
+ : [];
164
+ },
165
+ });
166
+ // The unreadable dir is still watched (we cannot see inside it to decide
167
+ // better) and the walk completes rather than crashing start().
168
+ expect(allWatched(plan)).toContain(path.join(ROOT, "denied"));
169
+ expect(allWatched(plan)).not.toContain(path.join(ROOT, "repos"));
170
+ });
171
+ it("reports every in-scope directory through onDirectory, and no excluded one", () => {
172
+ // TreeWatcher builds its known-kinds index from this callback instead of
173
+ // walking the same tree a second time, so the callback must cover every
174
+ // in-scope directory — including ones inside a collapsed recursive root.
175
+ const filter = makeFilter({ prefixes: ["repos"] });
176
+ const seen = [];
177
+ planWatchRoots(ROOT, filter, {
178
+ onDirectory: (dir) => seen.push(dir),
179
+ listChildDirs: treeLister({
180
+ [ROOT]: ["companies", "repos"],
181
+ [path.join(ROOT, "companies")]: ["acme"],
182
+ [path.join(ROOT, "companies", "acme")]: ["knowledge"],
183
+ [path.join(ROOT, "repos")]: ["hq-cloud"],
184
+ }),
185
+ });
186
+ expect(seen).toEqual([
187
+ path.join(ROOT, "companies"),
188
+ path.join(ROOT, "companies", "acme"),
189
+ path.join(ROOT, "companies", "acme", "knowledge"),
190
+ ]);
191
+ expect(seen).not.toContain(path.join(ROOT, "repos"));
192
+ expect(seen).not.toContain(path.join(ROOT, "repos", "hq-cloud"));
193
+ });
194
+ it("resolves coverage by walking ancestors, not by scanning every root", () => {
195
+ // This runs on EVERY rename event, in the hot path of a change whose whole
196
+ // point is cutting per-event cost. A linear scan is O(number of roots) —
197
+ // 685 on a real HQ tree — where an ancestor walk is O(path depth), ~10.
198
+ // The behavior must be identical, including the prefix trap below.
199
+ const roots = new Set([path.join(ROOT, "a", "b"), path.join(ROOT, "c")]);
200
+ expect(isCoveredByRecursiveRoot(path.join(ROOT, "a", "b"), roots)).toBe(true);
201
+ expect(isCoveredByRecursiveRoot(path.join(ROOT, "a", "b", "deep", "x.md"), roots)).toBe(true);
202
+ expect(isCoveredByRecursiveRoot(path.join(ROOT, "a"), roots)).toBe(false);
203
+ expect(isCoveredByRecursiveRoot(path.join(ROOT, "d"), roots)).toBe(false);
204
+ // The prefix trap: `/hq/a/bc` shares a string prefix with root `/hq/a/b`
205
+ // but is NOT under it. A naive startsWith without the separator would say
206
+ // covered, and the whole subtree would go unwatched.
207
+ expect(isCoveredByRecursiveRoot(path.join(ROOT, "a", "bc"), roots)).toBe(false);
208
+ expect(isCoveredByRecursiveRoot(path.join(ROOT, "a", "bc", "x.md"), roots)).toBe(false);
209
+ });
210
+ it("reports nothing as covered when there are no recursive roots", () => {
211
+ expect(isCoveredByRecursiveRoot(path.join(ROOT, "a", "b"), new Set())).toBe(false);
212
+ });
213
+ it("plans over a real directory tree using the default reader", async () => {
214
+ const root = await mkdtemp(path.join(tmpdir(), "hqcloud-planroots-"));
215
+ try {
216
+ await mkdir(path.join(root, "companies", "acme"), { recursive: true });
217
+ await mkdir(path.join(root, "repos", "hq-cloud", "src"), {
218
+ recursive: true,
219
+ });
220
+ const filter = (abs) => {
221
+ const rel = path.relative(root, abs).split(path.sep).join("/");
222
+ if (rel === "" || rel.startsWith(".."))
223
+ return false;
224
+ return rel !== "repos" && !rel.startsWith("repos/");
225
+ };
226
+ const plan = planWatchRoots(root, filter);
227
+ expect(plan.shallow).toContain(root);
228
+ expect(plan.recursive).toContain(path.join(root, "companies"));
229
+ expect(allWatched(plan)).not.toContain(path.join(root, "repos"));
230
+ }
231
+ finally {
232
+ await rm(root, { recursive: true, force: true });
233
+ }
234
+ });
235
+ });
236
+ //# sourceMappingURL=watch-roots.test.js.map