@indigoai-us/hq-cloud 6.15.41 → 6.15.43

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 (50) hide show
  1. package/dist/bin/sync-runner-company.d.ts.map +1 -1
  2. package/dist/bin/sync-runner-company.js +48 -3
  3. package/dist/bin/sync-runner-company.js.map +1 -1
  4. package/dist/bin/sync-runner-company.test.js +135 -0
  5. package/dist/bin/sync-runner-company.test.js.map +1 -1
  6. package/dist/bin/sync-runner-watch-loop.d.ts.map +1 -1
  7. package/dist/bin/sync-runner-watch-loop.js +22 -6
  8. package/dist/bin/sync-runner-watch-loop.js.map +1 -1
  9. package/dist/bin/sync-runner.d.ts +2 -0
  10. package/dist/bin/sync-runner.d.ts.map +1 -1
  11. package/dist/bin/sync-runner.js.map +1 -1
  12. package/dist/bin/sync-runner.test.js +93 -16
  13. package/dist/bin/sync-runner.test.js.map +1 -1
  14. package/dist/cli/share.d.ts +5 -17
  15. package/dist/cli/share.d.ts.map +1 -1
  16. package/dist/cli/share.js +16 -62
  17. package/dist/cli/share.js.map +1 -1
  18. package/dist/cli/share.test.js +57 -89
  19. package/dist/cli/share.test.js.map +1 -1
  20. package/dist/cli/sync.d.ts +16 -5
  21. package/dist/cli/sync.d.ts.map +1 -1
  22. package/dist/cli/sync.js +16 -63
  23. package/dist/cli/sync.js.map +1 -1
  24. package/dist/cli/sync.test.js +28 -54
  25. package/dist/cli/sync.test.js.map +1 -1
  26. package/dist/local-path-codec.test.js +20 -0
  27. package/dist/local-path-codec.test.js.map +1 -1
  28. package/dist/s3.d.ts +1 -1
  29. package/dist/s3.d.ts.map +1 -1
  30. package/dist/s3.js +7 -23
  31. package/dist/s3.js.map +1 -1
  32. package/dist/s3.test.js +13 -20
  33. package/dist/s3.test.js.map +1 -1
  34. package/dist/sync-core.d.ts +16 -0
  35. package/dist/sync-core.d.ts.map +1 -1
  36. package/dist/sync-core.js +38 -0
  37. package/dist/sync-core.js.map +1 -1
  38. package/dist/sync-progress.d.ts +18 -1
  39. package/dist/sync-progress.d.ts.map +1 -1
  40. package/dist/sync-progress.js +113 -7
  41. package/dist/sync-progress.js.map +1 -1
  42. package/dist/sync-progress.test.js +32 -2
  43. package/dist/sync-progress.test.js.map +1 -1
  44. package/dist/watcher.d.ts +26 -5
  45. package/dist/watcher.d.ts.map +1 -1
  46. package/dist/watcher.js +93 -13
  47. package/dist/watcher.js.map +1 -1
  48. package/dist/watcher.test.js +45 -1
  49. package/dist/watcher.test.js.map +1 -1
  50. package/package.json +1 -1
@@ -10,6 +10,7 @@ import type { ConflictStrategy } from "./conflict.js";
10
10
  import type { SyncProgressEvent } from "./sync.js";
11
11
  import { type CompanyTombstone } from "./tombstones.js";
12
12
  import { type ScopePrefixInput } from "../prefix-coalesce.js";
13
+ import { type TransferSemaphore } from "../sync-core.js";
13
14
  /**
14
15
  * Local-only ephemeral artifacts: conflict-side files written whenever a
15
16
  * 3-way merge preserves the displaced side for inspection. Depending on the
@@ -131,23 +132,6 @@ export declare function isEphemeralPath(p: string): boolean;
131
132
  * (skip-excluded-policy), symmetric with the ephemeral-mirror filter above.
132
133
  */
133
134
  export declare function isMalformedVaultKey(key: string): boolean;
134
- /**
135
- * A remote key that begins with `companies/<slug>/` is legitimate ONLY in a
136
- * PERSONAL vault, where it is handled by the dedicated `personalMode` branch
137
- * in `computePullPlan` (companies/* content a peer machine pushed into the
138
- * personal bucket). A COMPANY-scoped vault is already anchored at its company
139
- * root, so its keys are bucket-relative — a `companies/...` key there is a
140
- * doubly-scoped corrupt object. The vault-service refuses to presign such a
141
- * key on GET/HEAD with `INVALID_KEY_COMPANIES_SCOPED`, so the puller can
142
- * never materialize it and the whole company sync wedges at `errored` (runner
143
- * exit 2) on every run. Verified live 2026-06-16: frogbear's
144
- * `companies/frogbear/drafts/reports/frogbear-signals-report-2026-06-15.html`
145
- * was uploaded with a doubled key and broke every sync thereafter. The pull
146
- * and tombstone walkers refuse these keys (skip-excluded-policy), symmetric
147
- * with the malformed-(backslash)-key filter above; the bogus objects
148
- * themselves are cleaned server-side.
149
- */
150
- export declare function isForbiddenCompanyVaultKey(key: string, personalMode: boolean): boolean;
151
135
  /**
152
136
  * Test-only export. Kept under a `_testing` namespace so the module's public
153
137
  * surface stays focused on `share()` / `ShareOptions` / `ShareResult` while
@@ -287,6 +271,10 @@ export interface ShareOptions {
287
271
  * This is the seam `hq-sync-runner` uses to stream ndjson for push events.
288
272
  */
289
273
  onEvent?: (event: SyncProgressEvent) => void;
274
+ /** See SyncOptions.transferSemaphore: shared across concurrent fanout legs. */
275
+ transferSemaphore?: TransferSemaphore;
276
+ /** See SyncOptions.progressRecorder: fanout writes one aggregate snapshot. */
277
+ progressRecorder?: (event: SyncProgressEvent) => void;
290
278
  /**
291
279
  * Watch-runner liveness callback for long synchronous file walks and hash
292
280
  * planning. The caller owns throttling; one-shot CLI callers omit it.
@@ -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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"}
package/dist/cli/share.js CHANGED
@@ -202,25 +202,6 @@ export function isEphemeralPath(p) {
202
202
  export function isMalformedVaultKey(key) {
203
203
  return key.includes("\\");
204
204
  }
205
- /**
206
- * A remote key that begins with `companies/<slug>/` is legitimate ONLY in a
207
- * PERSONAL vault, where it is handled by the dedicated `personalMode` branch
208
- * in `computePullPlan` (companies/* content a peer machine pushed into the
209
- * personal bucket). A COMPANY-scoped vault is already anchored at its company
210
- * root, so its keys are bucket-relative — a `companies/...` key there is a
211
- * doubly-scoped corrupt object. The vault-service refuses to presign such a
212
- * key on GET/HEAD with `INVALID_KEY_COMPANIES_SCOPED`, so the puller can
213
- * never materialize it and the whole company sync wedges at `errored` (runner
214
- * exit 2) on every run. Verified live 2026-06-16: frogbear's
215
- * `companies/frogbear/drafts/reports/frogbear-signals-report-2026-06-15.html`
216
- * was uploaded with a doubled key and broke every sync thereafter. The pull
217
- * and tombstone walkers refuse these keys (skip-excluded-policy), symmetric
218
- * with the malformed-(backslash)-key filter above; the bogus objects
219
- * themselves are cleaned server-side.
220
- */
221
- export function isForbiddenCompanyVaultKey(key, personalMode) {
222
- return !personalMode && key.startsWith("companies/");
223
- }
224
205
  /**
225
206
  * Test-only export. Kept under a `_testing` namespace so the module's public
226
207
  * surface stays focused on `share()` / `ShareOptions` / `ShareResult` while
@@ -780,7 +761,7 @@ async function createPushRunContext(options) {
780
761
  // Mirror push progress into the shared cross-process snapshot (see sync.ts).
781
762
  // Record the friendly company slug, or null for the personal vault so the
782
763
  // menubar shows "Personal" — never the raw prs_/cmp_ UID.
783
- const recordProgress = createSyncProgressRecorder({
764
+ const recordProgress = options.progressRecorder ?? createSyncProgressRecorder({
784
765
  company: ctx.uid.startsWith("prs_") || options.personalMode === true
785
766
  ? null
786
767
  : ctx.slug,
@@ -955,17 +936,10 @@ async function buildSharePlans(run) {
955
936
  });
956
937
  return false;
957
938
  });
958
- // Scope-invalid key filter (incident 2026-07-11). In company mode the sync
959
- // root IS the company folder, so a local entry whose vault key starts with
960
- // `companies/` can only come from a stale doubled local tree
961
- // (companies/{slug}/companies/{slug}/…). Uploading it poisons the bucket
962
- // with keys the server validator rejects (INVALID_KEY_COMPANIES_SCOPED) —
963
- // the direct-S3 STS transport bypasses server validation. Refuse them here
964
- // with a per-key warning; uploadFile/uploadSymlink's validateVaultUploadKey
965
- // is the belt-and-suspenders backstop. The pull leg's journal-tombstone
966
- // path then CLEANS the doubled tree (local delete + journal drop) instead
967
- // of this leg ever re-uploading it. Personal vaults legitimately carry
968
- // `companies/{slug}/…` keys, so this only applies in company mode.
939
+ // `companies/` is an ordinary directory name below a company vault root.
940
+ // The walker derives every key from that root, so it cannot select another
941
+ // company. Keep the generic control-character admission check for both
942
+ // vault kinds; uploadFile/uploadSymlink enforce the remaining grammar.
969
943
  const filesToShare = run.options.personalMode === true
970
944
  ? controlCharFiltered.filter((entry) => {
971
945
  // `core/<type>` symlinks are generated projections of canonical
@@ -987,15 +961,7 @@ async function buildSharePlans(run) {
987
961
  }
988
962
  return false;
989
963
  })
990
- : controlCharFiltered.filter((entry) => {
991
- if (!entry.relativePath.startsWith("companies/"))
992
- return true;
993
- run.emit({
994
- type: "skip-invalid-scoped-key",
995
- path: entry.relativePath,
996
- });
997
- return false;
998
- });
964
+ : controlCharFiltered;
999
965
  const pushPlan = computePushPlan(filesToShare, run.journal, run.skipUnchanged === true, run.options.onHeartbeat);
1000
966
  const deleteScopeRoots = run.propagateDeletes === true
1001
967
  ? resolveDeleteScopeRoots(run.paths, run.hqRoot, run.syncRoot, run.options.deleteScopeRoots)
@@ -1506,7 +1472,10 @@ async function executeUploads(run, pushPlan, counters, conflictPaths) {
1506
1472
  break;
1507
1473
  queue.shift();
1508
1474
  inFlightBytes += nextBytes;
1509
- const p = processUploadItem(item)
1475
+ const upload = () => processUploadItem(item);
1476
+ const p = (run.options.transferSemaphore
1477
+ ? run.options.transferSemaphore.withPermit(upload)
1478
+ : upload())
1510
1479
  .catch((err) => {
1511
1480
  hadUploadFailure = true;
1512
1481
  // The journal is no longer persistable, so continuing would upload
@@ -1765,7 +1734,7 @@ async function executeDeletes(run, deletePlan, decommissionPlan, counters, files
1765
1734
  run.emit({
1766
1735
  type: "error",
1767
1736
  path: relativePath,
1768
- message: "scope-invalid tombstone skipped: local doubled-tree copy diverged from journal",
1737
+ message: "tombstone skipped: local copy diverged from journal",
1769
1738
  });
1770
1739
  continue;
1771
1740
  }
@@ -1787,7 +1756,7 @@ async function executeDeletes(run, deletePlan, decommissionPlan, counters, files
1787
1756
  run.emit({
1788
1757
  type: "error",
1789
1758
  path: relativePath,
1790
- message: "scope-invalid tombstone skipped: local doubled-tree copy diverged from journal",
1759
+ message: "tombstone skipped: local copy diverged from journal",
1791
1760
  });
1792
1761
  continue;
1793
1762
  }
@@ -2216,7 +2185,7 @@ function defaultConsoleLogger(event) {
2216
2185
  ` To proceed anyway: re-run with HQ_SYNC_DELETE_BULK_OVERRIDE=1 (or propagateDeletePolicy:"all").`);
2217
2186
  }
2218
2187
  else if (event.type === "skip-invalid-scoped-key") {
2219
- console.warn(` ! ${event.path} skipped — 'companies/'-prefixed key is invalid in a company-scoped vault (stale doubled local tree? remove the inner companies/<slug> copy)`);
2188
+ console.warn(` ! ${event.path} skipped — invalid vault key (${event.errorCode ?? "INVALID_KEY_CONTROL_CHARS"})`);
2220
2189
  }
2221
2190
  else if (event.type === "skip-symlink-privilege") {
2222
2191
  console.warn(` ! ${event.path} skipped — could not create the symbolic link on this Windows host (missing privilege). ${event.remedy}`);
@@ -3027,10 +2996,9 @@ const DELETE_PLAN_HEAD_CONCURRENCY = 16;
3027
2996
  * Empty `scopeRoots` ⇒ empty plan (caller didn't opt in).
3028
2997
  */
3029
2998
  async function computeDeletePlan(journal, syncRoot, scopeRoots, shouldSync, policy, ctx,
3030
- // True for a COMPANY-scoped push (personalMode !== true): the sync root is
3031
- // the company folder and journal keys are bucket-relative, so a literal
3032
- // `companies/…` key is scope-invalid (see the poisoned-key branch below).
3033
- // Personal-vault pushes legitimately journal `companies/{slug}/…` keys.
2999
+ // True for a COMPANY-scoped push (personalMode !== true). This distinguishes
3000
+ // the canonical knowledge-marker layout from the personal-vault layout; it
3001
+ // does not reinterpret ordinary vault-relative path segments.
3034
3002
  companyScoped = true) {
3035
3003
  const plan = { toDelete: [], toTombstone: [], refusedStale: [] };
3036
3004
  if (scopeRoots.length === 0)
@@ -3110,20 +3078,6 @@ companyScoped = true) {
3110
3078
  continue;
3111
3079
  inScopeJournalEntries++;
3112
3080
  const localPath = localPathForVaultKey(syncRoot, relativeKey);
3113
- // Scope-invalid journal keys (incident 2026-07-11): in a COMPANY-scoped
3114
- // context, a journal entry at a literal `companies/…` key records a
3115
- // doubled-tree poisoning upload. HEAD/DeleteObject on such a key via the
3116
- // presign transport is rejected by the server validator
3117
- // (INVALID_KEY_COMPANIES_SCOPED) and would error the push, so route it
3118
- // straight to `toTombstone` (journal drop + local doubled-tree cleanup, no
3119
- // remote call). Personal-vault pushes (personalMode) carry legitimate
3120
- // `companies/{slug}/…` keys and are unaffected (companyScoped=false).
3121
- // Checked before the presentLocally gate: the poison file lives at the
3122
- // doubled path and must drain even while still on disk.
3123
- if (companyScoped && relativeKey.startsWith("companies/")) {
3124
- plan.toTombstone.push(relativeKey);
3125
- continue;
3126
- }
3127
3081
  let presentLocally = true;
3128
3082
  try {
3129
3083
  fs.lstatSync(localPath);