@indigoai-us/hq-cloud 6.14.35 → 6.14.37

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.
@@ -130,6 +130,23 @@ export declare function isEphemeralPath(p: string): boolean;
130
130
  * (skip-excluded-policy), symmetric with the ephemeral-mirror filter above.
131
131
  */
132
132
  export declare function isMalformedVaultKey(key: string): boolean;
133
+ /**
134
+ * A remote key that begins with `companies/<slug>/` is legitimate ONLY in a
135
+ * PERSONAL vault, where it is handled by the dedicated `personalMode` branch
136
+ * in `computePullPlan` (companies/* content a peer machine pushed into the
137
+ * personal bucket). A COMPANY-scoped vault is already anchored at its company
138
+ * root, so its keys are bucket-relative — a `companies/...` key there is a
139
+ * doubly-scoped corrupt object. The vault-service refuses to presign such a
140
+ * key on GET/HEAD with `INVALID_KEY_COMPANIES_SCOPED`, so the puller can
141
+ * never materialize it and the whole company sync wedges at `errored` (runner
142
+ * exit 2) on every run. Verified live 2026-06-16: frogbear's
143
+ * `companies/frogbear/drafts/reports/frogbear-signals-report-2026-06-15.html`
144
+ * was uploaded with a doubled key and broke every sync thereafter. The pull
145
+ * and tombstone walkers refuse these keys (skip-excluded-policy), symmetric
146
+ * with the malformed-(backslash)-key filter above; the bogus objects
147
+ * themselves are cleaned server-side.
148
+ */
149
+ export declare function isForbiddenCompanyVaultKey(key: string, personalMode: boolean): boolean;
133
150
  /**
134
151
  * Test-only export. Kept under a `_testing` namespace so the module's public
135
152
  * surface stays focused on `share()` / `ShareOptions` / `ShareResult` while
@@ -143,6 +160,8 @@ export declare const _testing: {
143
160
  EPHEMERAL_PATH_PATTERN: RegExp;
144
161
  wrapFilterWithIgnoreVisibility: typeof wrapFilterWithIgnoreVisibility;
145
162
  collectFiles: typeof collectFiles;
163
+ resolveNamedPath: typeof resolveNamedPath;
164
+ isWithinLexicalOrReal: typeof isWithinLexicalOrReal;
146
165
  };
147
166
  export interface ShareOptions {
148
167
  /** Path(s) to share (files or directories) */
@@ -345,6 +364,42 @@ export interface ShareOptions {
345
364
  * the network. See the consult in the Stage-2 classification pass.
346
365
  */
347
366
  fileTombstones?: Map<string, CompanyTombstone>;
367
+ /**
368
+ * What to do when a path the caller EXPLICITLY named cannot be shipped —
369
+ * it does not resolve under any base, or it resolves outside the company
370
+ * folder (see `ShareResult.unreachablePaths`).
371
+ *
372
+ * - `"error"` (DEFAULT): a path that EXISTS on disk but resolves outside the
373
+ * company folder throws {@link UnreachablePushPathsError} BEFORE any upload
374
+ * runs, so the push is an atomic no-op and the CLI exits nonzero. This is
375
+ * ask #2 of feedback_a51cb63d — "error, not warn-skip, when the named file
376
+ * exists locally but is unreachable by the resolver". A user who typed a
377
+ * path and got "✓ Pushed 0 file(s)" had no way to know their content never
378
+ * left the machine. A path that resolves to NOTHING under any base is still
379
+ * only warn-recorded (see `collectFatalUnreachablePaths` for why bulk
380
+ * membership fanout depends on that).
381
+ * - `"warn"`: record it on the result + emit the `not-shipped` event and
382
+ * carry on, never throwing. For callers whose `paths` are INTERNAL walk
383
+ * roots rather than user input — the background sync runner — where a path
384
+ * disappearing mid-run is a benign race (a directory removed between the
385
+ * scan and the push) and must never fail an unattended sync.
386
+ */
387
+ unreachablePathPolicy?: "error" | "warn";
388
+ }
389
+ /** Why an explicitly-named push path could not be shipped. */
390
+ export type UnreachablePathReason = "missing" | "outside-company";
391
+ /**
392
+ * Thrown by `share()` when a caller-named path cannot be pushed and
393
+ * `unreachablePathPolicy` is `"error"` (the default). Raised while the plans
394
+ * are still being built, so NOTHING has been uploaded, journaled, or deleted
395
+ * when it surfaces — the failed push leaves no partial state behind.
396
+ */
397
+ export declare class UnreachablePushPathsError extends Error {
398
+ /** Caller's original spellings, verbatim (see the CollectHooks contract). */
399
+ readonly paths: string[];
400
+ /** Per-path reason, keyed by the same original spelling. */
401
+ readonly reasons: Record<string, UnreachablePathReason>;
402
+ constructor(unreachable: ReadonlyMap<string, UnreachablePathReason>, syncRoot: string);
348
403
  }
349
404
  export interface ShareResult {
350
405
  filesUploaded: number;
@@ -423,6 +478,34 @@ export interface ShareResult {
423
478
  * once if this is > 0).
424
479
  */
425
480
  filesExcludedByIgnore: number;
481
+ /**
482
+ * Paths the caller EXPLICITLY named for push that exist locally but the
483
+ * resolver could not place under the company folder (or could not find under
484
+ * any base). Empty in the common case (internal walk roots are always the
485
+ * reachable company folder). A non-empty list means the push did NOT ship
486
+ * something the caller asked for.
487
+ *
488
+ * Only ever non-empty under `unreachablePathPolicy: "warn"` — the DEFAULT
489
+ * `"error"` policy throws {@link UnreachablePushPathsError} instead of
490
+ * returning, so an interactive `hq sync push` fails loudly rather than
491
+ * reporting the pre-fix silent "Pushed 0 file(s)" success. This field is the
492
+ * warn-mode surface for unattended callers (sync runner / watcher).
493
+ *
494
+ * Entries are the caller's ORIGINAL spellings, verbatim — a relative token
495
+ * stays relative, an absolute token stays absolute — so the list is directly
496
+ * comparable to the `paths` input. See the CollectHooks spelling contract.
497
+ * Mirrors the `not-shipped` event with `reason: "unreachable-path"`.
498
+ */
499
+ unreachablePaths: string[];
500
+ /**
501
+ * Company-relative keys of directory symlinks that were recorded as links but
502
+ * NOT descended because their target lives outside the company folder — their
503
+ * contents sync via their own repo, not the vault. Surfaced so files created
504
+ * under such a link (e.g. `companies/{co}/knowledge` → a linked repo) no
505
+ * longer vanish from every push bucket without a trace. Mirrors the
506
+ * `not-shipped` event with `reason: "linked-subtree"`.
507
+ */
508
+ linkedSubtreesNotShipped: string[];
426
509
  /**
427
510
  * Paths (company-relative) that were detected as push conflicts. Mirrors
428
511
  * `SyncResult.conflictPaths` so push and pull surface conflicts the same
@@ -472,6 +555,101 @@ type CollectedEntry = {
472
555
  relativePath: string;
473
556
  target: string;
474
557
  };
558
+ /**
559
+ * Optional visibility callbacks for {@link collectFiles} / {@link walkDir}.
560
+ * They turn two previously-SILENT outcomes into surfaced signals — without
561
+ * changing WHAT gets uploaded (feedback_258e4a86 / feedback_a51cb63d):
562
+ *
563
+ * - `onUnreachablePath`: a path the caller EXPLICITLY named (never an internal
564
+ * walk root — those are always the reachable company folder) that exists on
565
+ * disk but the resolver could not place under the company folder
566
+ * (`"outside-company"`), or could not resolve to an existing file under any
567
+ * base (`"missing"`). Pre-fix this was a bare `console.error` warn-skip that
568
+ * still let the push report "Pushed 0 file(s)" — a false success. The caller
569
+ * can now turn a non-empty set into a real error / nonzero exit.
570
+ *
571
+ * SPELLING CONTRACT: `namedPath` is ALWAYS the caller's ORIGINAL token,
572
+ * verbatim — never the resolved absolute path, and never normalized. A
573
+ * relative `knowledge/agents/x.md` is reported as `knowledge/agents/x.md`;
574
+ * an absolute path is reported absolute because that is what was passed.
575
+ * Echoing the caller's own spelling is what makes the error actionable
576
+ * ("the thing you typed did not ship"), and it keeps `unreachablePaths`
577
+ * comparable to the input array without a resolution step. Both call sites
578
+ * below pass the loop variable `p` for exactly this reason.
579
+ * - `onLinkedSubtree`: a directory symlink recorded as a link but NOT
580
+ * descended because its target resolves OUTSIDE the company folder (e.g.
581
+ * `companies/{co}/knowledge` → `repos/private/knowledge-{co}/`). The link's
582
+ * contents ship via their own repo, not the vault; reporting it stops files
583
+ * created under such a link from vanishing from every push bucket silently.
584
+ */
585
+ interface CollectHooks {
586
+ onUnreachablePath?: (namedPath: string, reason: "missing" | "outside-company") => void;
587
+ onLinkedSubtree?: (rel: string) => void;
588
+ }
589
+ /**
590
+ * Resolve a caller-supplied push path to an absolute path.
591
+ *
592
+ * Relative paths were historically resolved against `hqRoot` ONLY, so a
593
+ * company-relative spelling like `knowledge/agents/x.md` became
594
+ * `<hqRoot>/knowledge/agents/x.md` and reported "does not exist" no matter the
595
+ * caller's cwd or the company being pushed (feedback_258e4a86 /
596
+ * feedback_a51cb63d — "there is no path spelling that reaches the file").
597
+ *
598
+ * PRECEDENCE (documented contract, asserted by test): `hqRoot` → `syncRoot`
599
+ * (the company folder) → `cwd`. hqRoot stays FIRST so this change is purely
600
+ * ADDITIVE to the legacy behavior: every relative spelling that resolved
601
+ * pre-fix still resolves to exactly the same file, and the two new bases only
602
+ * catch spellings that previously resolved to nothing. Probing cwd first would
603
+ * silently re-point existing callers (a `knowledge/` directory in the shell's
604
+ * cwd would win over the hq-root one), which is a behavior change no reporter
605
+ * asked for. Fall back to the hqRoot candidate so a genuine typo still surfaces
606
+ * the unchanged "does not exist" diagnostic. Absolute paths are returned
607
+ * verbatim.
608
+ *
609
+ * `cwd` is an explicit injected parameter (defaulting to `process.cwd()`)
610
+ * rather than an ambient read, so resolution is deterministic and testable
611
+ * without mutating process state.
612
+ */
613
+ declare function resolveNamedPath(p: string, hqRoot: string, syncRoot: string, cwd?: string): string;
614
+ /**
615
+ * Containment check for a regular file or directory that tolerates a symlinked
616
+ * ANCESTOR. `isWithin` canonicalizes the full child via `realpathSync`, so a
617
+ * path reached through a symlinked ancestor (`companies/{co}/knowledge` →
618
+ * `repos/private/knowledge-{co}/`) resolves OUTSIDE the company folder and was
619
+ * rejected as "outside company folder" — even though its logical path is
620
+ * in-tree and `vaultKeyForLocalPath` (also lexical) derives a correct
621
+ * company-namespaced key for it. Accept when the LEXICAL path is inside
622
+ * (honoring the same logical topology the vault key uses) OR the realpath is
623
+ * inside (preserving `isWithin`'s macOS APFS case-insensitivity tolerance).
624
+ *
625
+ * The lexical arm carries TWO bounds, because it is the only place where a
626
+ * path's bytes and its vault key come from different trees:
627
+ *
628
+ * 1. `hqRoot` — the realpath must still land inside the HQ tree, so a
629
+ * symlinked ancestor pointing at `/etc` cannot upload arbitrary machine
630
+ * state under a company-namespaced key.
631
+ * 2. The TENANT — the realpath must not land inside another company's bytes
632
+ * (`foreignTenantRoots`). The hqRoot bound alone is NOT sufficient and
633
+ * must never be mistaken for a tenant boundary: hqRoot CONTAINS every
634
+ * other company, so `companies/acme/knowledge → companies/other/secret`
635
+ * (or → `repos/private/knowledge-other`, the linked-repo topology) is
636
+ * lexically inside acme and really inside HQ, and would upload the other
637
+ * tenant's bytes into acme's bucket under the key `knowledge/…`.
638
+ *
639
+ * The motivating topology (`companies/{co}/knowledge` →
640
+ * `repos/private/knowledge-{co}`) satisfies both, so it is unaffected. A link
641
+ * that escapes HQ, or one that reaches another tenant, is refused — and under
642
+ * the default unreachable-path policy, refused LOUDLY rather than warn-skipped.
643
+ *
644
+ * Known limit, stated so it is not mistaken for a guarantee: a foreign tenant's
645
+ * externally-linked subtree can only be recognized while that company's folder
646
+ * is materialized locally and publishes the link. A machine holding
647
+ * `repos/private/knowledge-other` with no `companies/other` folder has no
648
+ * on-disk evidence of the claim, so a link into it is indistinguishable from a
649
+ * link into any other local repo. Ownership metadata (not path shape) is what
650
+ * would close that gap.
651
+ */
652
+ declare function isWithinLexicalOrReal(parent: string, child: string, hqRoot: string, tenantRootsCache?: Map<string, string[]>): boolean;
475
653
  /**
476
654
  * Collect files from paths (expanding directories recursively).
477
655
  *
@@ -484,6 +662,6 @@ type CollectedEntry = {
484
662
  * Pre-fix, statSync followed the link and the target's bytes were uploaded
485
663
  * under the link's key — silently flattening the link topology.
486
664
  */
487
- declare function collectFiles(paths: string[], hqRoot: string, syncRoot: string, filter: (p: string, isDir?: boolean) => boolean): CollectedEntry[];
665
+ declare function collectFiles(paths: string[], hqRoot: string, syncRoot: string, filter: (p: string, isDir?: boolean) => boolean, hooks?: CollectHooks): CollectedEntry[];
488
666
  export {};
489
667
  //# sourceMappingURL=share.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/cli/share.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/cli/share.ts"],"names":[],"mappings":"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"}