@indigoai-us/hq-cloud 6.5.0 → 6.7.0
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.
- package/dist/bin/sync-runner.d.ts +4 -35
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +14 -104
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/bin/sync-runner.test.js +19 -0
- package/dist/bin/sync-runner.test.js.map +1 -1
- package/dist/cli/sync-scope.test.js +67 -0
- package/dist/cli/sync-scope.test.js.map +1 -1
- package/dist/cli/sync.d.ts +19 -0
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +62 -19
- package/dist/cli/sync.js.map +1 -1
- package/dist/cognito-auth.d.ts +27 -0
- package/dist/cognito-auth.d.ts.map +1 -1
- package/dist/cognito-auth.js +97 -0
- package/dist/cognito-auth.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/machine-auth.test.d.ts +14 -0
- package/dist/machine-auth.test.d.ts.map +1 -0
- package/dist/machine-auth.test.js +216 -0
- package/dist/machine-auth.test.js.map +1 -0
- package/dist/s3.d.ts.map +1 -1
- package/dist/s3.js +15 -5
- package/dist/s3.js.map +1 -1
- package/dist/s3.test.js +71 -2
- package/dist/s3.test.js.map +1 -1
- package/dist/scope-shrink.d.ts +70 -7
- package/dist/scope-shrink.d.ts.map +1 -1
- package/dist/scope-shrink.js +102 -23
- package/dist/scope-shrink.js.map +1 -1
- package/dist/scope-shrink.test.js +63 -0
- package/dist/scope-shrink.test.js.map +1 -1
- package/dist/sync/pull-scope.d.ts +50 -0
- package/dist/sync/pull-scope.d.ts.map +1 -0
- package/dist/sync/pull-scope.js +129 -0
- package/dist/sync/pull-scope.js.map +1 -0
- package/package.json +2 -2
- package/src/bin/sync-runner.test.ts +23 -0
- package/src/bin/sync-runner.ts +19 -116
- package/src/cli/sync-scope.test.ts +84 -0
- package/src/cli/sync.ts +90 -17
- package/src/cognito-auth.ts +159 -0
- package/src/index.ts +21 -1
- package/src/machine-auth.test.ts +279 -0
- package/src/s3.test.ts +91 -1
- package/src/s3.ts +15 -5
- package/src/scope-shrink.test.ts +71 -0
- package/src/scope-shrink.ts +164 -20
- package/src/sync/pull-scope.ts +161 -0
package/dist/scope-shrink.js
CHANGED
|
@@ -144,10 +144,31 @@ function classifyOrphan(relPath, entry, hqRoot) {
|
|
|
144
144
|
}
|
|
145
145
|
return { path: relPath, entry, clean: true };
|
|
146
146
|
}
|
|
147
|
+
/** Followable next-step advice for a blocked scope shrink, per entry point. */
|
|
148
|
+
function scopeShrinkAdvice(ctx) {
|
|
149
|
+
switch (ctx) {
|
|
150
|
+
case "cli":
|
|
151
|
+
return ("Re-run with `--force-scope-shrink` to disown them now (dirty files " +
|
|
152
|
+
"are KEPT on disk, only un-tracked from sync), or run " +
|
|
153
|
+
"`hq sync narrow --apply` to migrate with a confirmation prompt.");
|
|
154
|
+
case "runner":
|
|
155
|
+
return ("The menubar sync cannot take this flag — open a terminal and run " +
|
|
156
|
+
"`hq sync narrow --apply` to migrate this membership (you confirm the " +
|
|
157
|
+
"file list), or `hq sync now --force-scope-shrink` once to proceed " +
|
|
158
|
+
"(dirty files are KEPT on disk, only un-tracked).");
|
|
159
|
+
default:
|
|
160
|
+
return ("Run `hq sync narrow --apply` to migrate with confirmation, or pass " +
|
|
161
|
+
"`forceScopeShrink` (dirty files are kept on disk, only un-tracked).");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
147
164
|
/**
|
|
148
165
|
* Structured error thrown when the engine refuses to proceed because a scope
|
|
149
166
|
* shrink would orphan dirty files. The CLI catches this and renders the
|
|
150
167
|
* operator-facing message; the engine never prints directly.
|
|
168
|
+
*
|
|
169
|
+
* `adviceContext` makes the message FOLLOWABLE from each entry point — the old
|
|
170
|
+
* fixed "pass --force-scope-shrink" line was impossible to act on from the
|
|
171
|
+
* menubar runner, which rejects that flag (DEV-1768 fix #2).
|
|
151
172
|
*/
|
|
152
173
|
export class ScopeShrinkBlockedError extends Error {
|
|
153
174
|
companyUid;
|
|
@@ -155,16 +176,18 @@ export class ScopeShrinkBlockedError extends Error {
|
|
|
155
176
|
toMode;
|
|
156
177
|
dirty;
|
|
157
178
|
clean;
|
|
179
|
+
adviceContext;
|
|
158
180
|
code = "SCOPE_SHRINK_BLOCKED";
|
|
159
|
-
constructor(companyUid, fromMode, toMode, dirty, clean) {
|
|
181
|
+
constructor(companyUid, fromMode, toMode, dirty, clean, adviceContext = "engine") {
|
|
160
182
|
super(`Sync scope shrank for ${companyUid} (${fromMode} → ${toMode}); ` +
|
|
161
|
-
`${dirty.length}
|
|
162
|
-
`
|
|
183
|
+
`${dirty.length} locally-modified file(s) outside the new scope ` +
|
|
184
|
+
`would be un-tracked from sync. ${scopeShrinkAdvice(adviceContext)}`);
|
|
163
185
|
this.companyUid = companyUid;
|
|
164
186
|
this.fromMode = fromMode;
|
|
165
187
|
this.toMode = toMode;
|
|
166
188
|
this.dirty = dirty;
|
|
167
189
|
this.clean = clean;
|
|
190
|
+
this.adviceContext = adviceContext;
|
|
168
191
|
this.name = "ScopeShrinkBlockedError";
|
|
169
192
|
}
|
|
170
193
|
}
|
|
@@ -183,53 +206,109 @@ export class ScopeShrinkLargePruneError extends Error {
|
|
|
183
206
|
toMode;
|
|
184
207
|
cleanCount;
|
|
185
208
|
cap;
|
|
209
|
+
adviceContext;
|
|
186
210
|
code = "SCOPE_SHRINK_LARGE_PRUNE";
|
|
187
|
-
constructor(companyUid, toMode, cleanCount, cap) {
|
|
188
|
-
super(`Refusing to auto-
|
|
211
|
+
constructor(companyUid, toMode, cleanCount, cap, adviceContext = "engine") {
|
|
212
|
+
super(`Refusing to auto-move ${cleanCount} local file(s) for ${companyUid} ` +
|
|
189
213
|
`(${toMode} scope) in one sync — exceeds the safety cap of ${cap}. ` +
|
|
190
|
-
`
|
|
191
|
-
`HQ_SYNC_MAX_AUTO_PRUNE, or pass --force-scope-shrink.`);
|
|
214
|
+
`Raise HQ_SYNC_MAX_AUTO_PRUNE, or ${scopeShrinkAdvice(adviceContext)}`);
|
|
192
215
|
this.companyUid = companyUid;
|
|
193
216
|
this.toMode = toMode;
|
|
194
217
|
this.cleanCount = cleanCount;
|
|
195
218
|
this.cap = cap;
|
|
219
|
+
this.adviceContext = adviceContext;
|
|
196
220
|
this.name = "ScopeShrinkLargePruneError";
|
|
197
221
|
}
|
|
198
222
|
}
|
|
199
223
|
/**
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
224
|
+
* Move a clean orphan from the working tree into the quarantine tree,
|
|
225
|
+
* preserving its relative path. Same-device `rename` first (cheap, atomic);
|
|
226
|
+
* cross-device falls back to copy+unlink. A missing source is a no-op (the
|
|
227
|
+
* user already removed it — harmless). Returns true iff the file was relocated
|
|
228
|
+
* (or was already absent), false only on an unexpected error the caller should
|
|
229
|
+
* surface.
|
|
230
|
+
*/
|
|
231
|
+
function quarantineOrphan(srcAbs, destAbs) {
|
|
232
|
+
fs.mkdirSync(path.dirname(destAbs), { recursive: true });
|
|
233
|
+
try {
|
|
234
|
+
fs.renameSync(srcAbs, destAbs);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
const code = err.code;
|
|
238
|
+
if (code === "ENOENT")
|
|
239
|
+
return; // source already gone — nothing to move
|
|
240
|
+
if (code === "EXDEV") {
|
|
241
|
+
// Cross-device move: copy then unlink. cpSync handles files + symlinks.
|
|
242
|
+
fs.cpSync(srcAbs, destAbs, { recursive: true, verbatimSymlinks: true });
|
|
243
|
+
fs.rmSync(srcAbs, { recursive: true, force: true });
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
throw err;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Apply a scope-shrink plan: dispose of clean orphans (delete OR quarantine)
|
|
251
|
+
* + tombstone their journal entries. With `forceScopeShrink: true`, dirty
|
|
252
|
+
* orphans are PRESERVED on disk and only their journal entries are tombstoned
|
|
253
|
+
* (so they stop being re-flagged on every pull — the idempotent recovery seam).
|
|
203
254
|
*
|
|
204
|
-
* Returns counts
|
|
205
|
-
*
|
|
255
|
+
* Returns counts AND named paths so the caller can report exactly what moved /
|
|
256
|
+
* was un-tracked — never a silent purge (DEV-1768 fix #3).
|
|
206
257
|
*/
|
|
207
258
|
export function applyScopeShrink(input) {
|
|
208
259
|
const { journal, plan, hqRoot, forceScopeShrink } = input;
|
|
209
260
|
const reason = input.reason ?? "scope_shrink";
|
|
261
|
+
// Quarantine only when explicitly asked AND a destination is provided;
|
|
262
|
+
// otherwise fall back to delete so we always make progress.
|
|
263
|
+
const quarantining = input.cleanDisposition === "quarantine" && !!input.quarantineRoot;
|
|
210
264
|
let cleanRemoved = 0;
|
|
265
|
+
let cleanQuarantined = 0;
|
|
211
266
|
let dirtyTombstoned = 0;
|
|
267
|
+
const removedPaths = [];
|
|
268
|
+
const quarantinedPaths = [];
|
|
269
|
+
const dirtyKeptPaths = [];
|
|
212
270
|
for (const orphan of plan.clean) {
|
|
213
271
|
const absPath = path.join(hqRoot, orphan.path);
|
|
214
|
-
|
|
215
|
-
|
|
272
|
+
if (quarantining) {
|
|
273
|
+
const destAbs = path.join(input.quarantineRoot, orphan.path);
|
|
274
|
+
quarantineOrphan(absPath, destAbs);
|
|
275
|
+
tombstoneEntry(journal, orphan.path, reason);
|
|
276
|
+
cleanQuarantined++;
|
|
277
|
+
quarantinedPaths.push(orphan.path);
|
|
216
278
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
279
|
+
else {
|
|
280
|
+
try {
|
|
281
|
+
fs.unlinkSync(absPath);
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
const code = err.code;
|
|
285
|
+
if (code !== "ENOENT")
|
|
286
|
+
throw err; // missing-on-disk is fine; anything else escalates
|
|
287
|
+
}
|
|
288
|
+
tombstoneEntry(journal, orphan.path, reason);
|
|
289
|
+
cleanRemoved++;
|
|
290
|
+
removedPaths.push(orphan.path);
|
|
221
291
|
}
|
|
222
|
-
tombstoneEntry(journal, orphan.path, reason);
|
|
223
|
-
cleanRemoved++;
|
|
224
292
|
}
|
|
225
293
|
if (forceScopeShrink) {
|
|
226
294
|
for (const orphan of plan.dirty) {
|
|
227
|
-
// Do NOT delete the file —
|
|
228
|
-
//
|
|
295
|
+
// Do NOT delete the file — keep dirty content on disk, prune only the
|
|
296
|
+
// journal entry so it stops being re-flagged as an orphan on each pull.
|
|
229
297
|
tombstoneEntry(journal, orphan.path, reason);
|
|
230
298
|
dirtyTombstoned++;
|
|
299
|
+
dirtyKeptPaths.push(orphan.path);
|
|
231
300
|
}
|
|
232
301
|
}
|
|
233
|
-
return {
|
|
302
|
+
return {
|
|
303
|
+
cleanRemoved,
|
|
304
|
+
cleanQuarantined,
|
|
305
|
+
dirtyTombstoned,
|
|
306
|
+
removedPaths,
|
|
307
|
+
quarantinedPaths,
|
|
308
|
+
dirtyKeptPaths,
|
|
309
|
+
...(quarantining && quarantinedPaths.length > 0
|
|
310
|
+
? { quarantineRoot: input.quarantineRoot }
|
|
311
|
+
: {}),
|
|
312
|
+
};
|
|
234
313
|
}
|
|
235
314
|
//# sourceMappingURL=scope-shrink.js.map
|
package/dist/scope-shrink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-shrink.js","sourceRoot":"","sources":["../src/scope-shrink.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scope-shrink.js","sourceRoot":"","sources":["../src/scope-shrink.ts"],"names":[],"mappings":"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"}
|
|
@@ -438,6 +438,49 @@ describe("applyScopeShrink", () => {
|
|
|
438
438
|
});
|
|
439
439
|
expect(journal.files["companies/indigo/scratch/clean.md"]?.removedReason).toBe("narrow_apply");
|
|
440
440
|
});
|
|
441
|
+
// DEV-1768 fix #3: clean orphans are MOVED to quarantine (recoverable),
|
|
442
|
+
// not unlinked, when `cleanDisposition: "quarantine"`.
|
|
443
|
+
it("quarantines clean orphans (moves, not deletes) and reports named paths", () => {
|
|
444
|
+
const rel = "companies/indigo/scratch/clean.md";
|
|
445
|
+
const abs = path.join(hqRoot, rel);
|
|
446
|
+
fs.mkdirSync(path.dirname(abs), { recursive: true });
|
|
447
|
+
fs.writeFileSync(abs, "clean");
|
|
448
|
+
const past = Date.now() - 60_000;
|
|
449
|
+
fs.utimesSync(abs, past / 1000, past / 1000);
|
|
450
|
+
const quarantineRoot = path.join(hqRoot, ".hq", "scope-quarantine", "indigo");
|
|
451
|
+
const journal = {
|
|
452
|
+
...emptyJournal(),
|
|
453
|
+
files: {
|
|
454
|
+
[rel]: { hash: sha256("clean"), size: 5, syncedAt: new Date().toISOString(), direction: "down" },
|
|
455
|
+
},
|
|
456
|
+
};
|
|
457
|
+
const plan = buildScopeShrinkPlan({
|
|
458
|
+
journal,
|
|
459
|
+
hqRoot,
|
|
460
|
+
lastPrefixSet: ["companies/indigo/"],
|
|
461
|
+
currentPrefixSet: ["companies/indigo/meetings/"],
|
|
462
|
+
});
|
|
463
|
+
const result = applyScopeShrink({
|
|
464
|
+
journal,
|
|
465
|
+
plan,
|
|
466
|
+
hqRoot,
|
|
467
|
+
forceScopeShrink: false,
|
|
468
|
+
cleanDisposition: "quarantine",
|
|
469
|
+
quarantineRoot,
|
|
470
|
+
});
|
|
471
|
+
expect(result.cleanQuarantined).toBe(1);
|
|
472
|
+
expect(result.cleanRemoved).toBe(0);
|
|
473
|
+
expect(result.quarantinedPaths).toEqual([rel]);
|
|
474
|
+
expect(result.removedPaths).toEqual([]);
|
|
475
|
+
expect(result.quarantineRoot).toBe(quarantineRoot);
|
|
476
|
+
// Moved, not deleted: gone from the working tree, present + intact in quarantine.
|
|
477
|
+
expect(fs.existsSync(abs)).toBe(false);
|
|
478
|
+
const quarantined = path.join(quarantineRoot, rel);
|
|
479
|
+
expect(fs.existsSync(quarantined)).toBe(true);
|
|
480
|
+
expect(fs.readFileSync(quarantined, "utf-8")).toBe("clean");
|
|
481
|
+
// Journal entry tombstoned so it stops being re-flagged (idempotent).
|
|
482
|
+
expect(journal.files[rel]?.removedAt).toBeTruthy();
|
|
483
|
+
});
|
|
441
484
|
});
|
|
442
485
|
describe("ScopeShrinkBlockedError", () => {
|
|
443
486
|
it("carries from/to syncMode + dirty/clean orphan lists for the CLI", () => {
|
|
@@ -460,5 +503,25 @@ describe("ScopeShrinkBlockedError", () => {
|
|
|
460
503
|
expect(err.dirty).toHaveLength(1);
|
|
461
504
|
expect(err.name).toBe("ScopeShrinkBlockedError");
|
|
462
505
|
});
|
|
506
|
+
// DEV-1768 fix #2: advice must be FOLLOWABLE from the entry point that throws.
|
|
507
|
+
// The old message always said "pass --force-scope-shrink", which the menubar
|
|
508
|
+
// runner cannot accept.
|
|
509
|
+
const mk = (ctx) => new ScopeShrinkBlockedError("cmp_x", "all", "shared", [], [], ctx);
|
|
510
|
+
it("runner-context advice points at a terminal command, NOT an impossible flag", () => {
|
|
511
|
+
const msg = mk("runner").message;
|
|
512
|
+
// The followable path from the menubar is a terminal command.
|
|
513
|
+
expect(msg).toContain("hq sync narrow --apply");
|
|
514
|
+
// It must NOT imply the flag is acceptable to the menubar itself.
|
|
515
|
+
expect(msg).toContain("menubar sync cannot take this flag");
|
|
516
|
+
});
|
|
517
|
+
it("cli-context advice offers the flag the CLI actually accepts", () => {
|
|
518
|
+
const msg = mk("cli").message;
|
|
519
|
+
expect(msg).toContain("--force-scope-shrink");
|
|
520
|
+
expect(msg).toContain("hq sync narrow --apply");
|
|
521
|
+
});
|
|
522
|
+
it("defaults to the engine/library advice when no context is given", () => {
|
|
523
|
+
expect(mk().adviceContext).toBe("engine");
|
|
524
|
+
expect(mk().message).toContain("hq sync narrow --apply");
|
|
525
|
+
});
|
|
463
526
|
});
|
|
464
527
|
//# sourceMappingURL=scope-shrink.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-shrink.test.js","sourceRoot":"","sources":["../src/scope-shrink.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scope-shrink.test.js","sourceRoot":"","sources":["../src/scope-shrink.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ExplicitGrant, MembershipSyncConfig, SyncMode } from "../vault-client.js";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal structural surface `resolvePullScope` needs. Both the runner's
|
|
4
|
+
* `VaultClientSurface` and hq-cli's concrete `VaultClient` satisfy it, so
|
|
5
|
+
* either can be passed without an adapter.
|
|
6
|
+
*/
|
|
7
|
+
export interface PullScopeClient {
|
|
8
|
+
listMyMemberships(): Promise<Array<{
|
|
9
|
+
companyUid: string;
|
|
10
|
+
membershipKey: string;
|
|
11
|
+
}>>;
|
|
12
|
+
getMembershipSyncConfig?: (membershipId: string) => Promise<MembershipSyncConfig>;
|
|
13
|
+
listMyExplicitGrants?: (companyUid: string) => Promise<ExplicitGrant[]>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Effective download scope for one company leg (US-005). Resolved per company
|
|
17
|
+
* just before its pull, then handed to `sync()` as `{ syncMode, prefixSet }`.
|
|
18
|
+
*/
|
|
19
|
+
export interface PullScope {
|
|
20
|
+
syncMode: SyncMode;
|
|
21
|
+
/** Coalesced company-relative prefixes; omitted/undefined for `all`. */
|
|
22
|
+
prefixSet?: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the effective download scope for a company target.
|
|
26
|
+
*
|
|
27
|
+
* - `all` → no prefix set; full-bucket pull (legacy behavior).
|
|
28
|
+
* - `shared` → coalesced caller explicit grants (company-relative paths,
|
|
29
|
+
* same namespace as `RemoteFile.key`).
|
|
30
|
+
* - `custom` → coalesced `customPaths` from the sync-config row.
|
|
31
|
+
*
|
|
32
|
+
* DEGRADE-TO-`all` CONTRACT: any failure (missing client method, membership
|
|
33
|
+
* not found, network error, grant fetch error) returns `{ syncMode: "all" }`.
|
|
34
|
+
* A transient failure must NEVER silently narrow scope — that would prune the
|
|
35
|
+
* local tree. A genuinely-empty grant list (the method exists and returns `[]`)
|
|
36
|
+
* is a real "nothing shared with me" and IS allowed to narrow.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolvePullScope(client: PullScopeClient, companyUid: string, slug: string, hqRoot?: string): Promise<PullScope>;
|
|
39
|
+
/**
|
|
40
|
+
* Read the per-machine pin set (`<hqRoot>/.hq/pins.json`) and return the
|
|
41
|
+
* company-relative pinned prefixes for `slug`. These are prefixes the user
|
|
42
|
+
* materialized on demand via `hq files get` that must survive a scoped pull.
|
|
43
|
+
*
|
|
44
|
+
* Tolerant by construction: a missing, unreadable, or malformed file yields
|
|
45
|
+
* `[]` (no pins) — pins only ever widen scope, so "no pins" is the safe
|
|
46
|
+
* default. Empty-string entries are dropped (an everything-pin is meaningless
|
|
47
|
+
* here; `all` mode already covers that case).
|
|
48
|
+
*/
|
|
49
|
+
export declare function readPinnedPrefixes(hqRoot: string, slug: string): string[];
|
|
50
|
+
//# sourceMappingURL=pull-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-scope.d.ts","sourceRoot":"","sources":["../../src/sync/pull-scope.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB,IAAI,OAAO,CAC1B,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CACrD,CAAC;IACF,uBAAuB,CAAC,EAAE,CACxB,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACzE;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,MAAM,EAGlB,IAAI,EAAE,MAAM,EAGZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,CAwDpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAczE"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effective per-company PULL scope resolution (US-005), shared between
|
|
3
|
+
* `hq-sync-runner` (the menubar's background sync) and `hq sync pull|now`
|
|
4
|
+
* (the hq-cli foreground sync).
|
|
5
|
+
*
|
|
6
|
+
* BACKGROUND — why this lives in one place. The runner historically owned
|
|
7
|
+
* this resolver while hq-cli's pull paths resolved the membership's sync-mode
|
|
8
|
+
* only to drive the narrow-hint banner and then called `sync()` WITHOUT a
|
|
9
|
+
* `syncMode`/`prefixSet`. That meant every hq-cli pull silently ran
|
|
10
|
+
* `syncMode: "all"` and stamped an `all`-mode `PullRecord` (prefixSet `[""]`)
|
|
11
|
+
* — even for a membership whose real mode is `shared`/`custom`. For an owner
|
|
12
|
+
* (whose STS is wide by role-bypass) that journals the WHOLE company. The next
|
|
13
|
+
* menubar runner sync then resolves the REAL narrowed scope, scope-shrinks
|
|
14
|
+
* against the seeded `[""]`, and — if any out-of-scope file was edited locally
|
|
15
|
+
* — throws `ScopeShrinkBlockedError(all → shared)` and exits 2 on every
|
|
16
|
+
* subsequent run: a permanent wedge (DEV-1768 / feedback_f7663e92).
|
|
17
|
+
*
|
|
18
|
+
* The two surfaces drifting apart is exactly what caused the wedge, so the
|
|
19
|
+
* resolver is defined ONCE here and consumed by both. Any future change to how
|
|
20
|
+
* scope is derived now lands for the runner and the CLI in lockstep.
|
|
21
|
+
*/
|
|
22
|
+
import * as fs from "fs";
|
|
23
|
+
import * as path from "path";
|
|
24
|
+
import { coalescePrefixes, grantPathToPrefix } from "../prefix-coalesce.js";
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the effective download scope for a company target.
|
|
27
|
+
*
|
|
28
|
+
* - `all` → no prefix set; full-bucket pull (legacy behavior).
|
|
29
|
+
* - `shared` → coalesced caller explicit grants (company-relative paths,
|
|
30
|
+
* same namespace as `RemoteFile.key`).
|
|
31
|
+
* - `custom` → coalesced `customPaths` from the sync-config row.
|
|
32
|
+
*
|
|
33
|
+
* DEGRADE-TO-`all` CONTRACT: any failure (missing client method, membership
|
|
34
|
+
* not found, network error, grant fetch error) returns `{ syncMode: "all" }`.
|
|
35
|
+
* A transient failure must NEVER silently narrow scope — that would prune the
|
|
36
|
+
* local tree. A genuinely-empty grant list (the method exists and returns `[]`)
|
|
37
|
+
* is a real "nothing shared with me" and IS allowed to narrow.
|
|
38
|
+
*/
|
|
39
|
+
export async function resolvePullScope(client, companyUid,
|
|
40
|
+
// Company slug — required to normalize grant paths (which may be anchored
|
|
41
|
+
// at `companies/<slug>/` or `<slug>/`) into the company-relative namespace.
|
|
42
|
+
slug,
|
|
43
|
+
// Local HQ root — used to read the per-machine pin set (`.hq/pins.json`).
|
|
44
|
+
// When omitted, pins are simply not unioned (no behavior change).
|
|
45
|
+
hqRoot) {
|
|
46
|
+
if (!client.getMembershipSyncConfig)
|
|
47
|
+
return { syncMode: "all" };
|
|
48
|
+
try {
|
|
49
|
+
const memberships = await client.listMyMemberships();
|
|
50
|
+
const m = memberships.find((x) => x.companyUid === companyUid);
|
|
51
|
+
if (!m)
|
|
52
|
+
return { syncMode: "all" };
|
|
53
|
+
const cfg = await client.getMembershipSyncConfig(m.membershipKey);
|
|
54
|
+
if (cfg.syncMode === "all")
|
|
55
|
+
return { syncMode: "all" };
|
|
56
|
+
// Pins are company-relative prefixes a user explicitly materialized via
|
|
57
|
+
// `hq files get`. They're unioned into the scope so a scoped pull keeps
|
|
58
|
+
// them instead of pruning them as out-of-scope orphans. Pins only WIDEN
|
|
59
|
+
// scope, never narrow — and `all` mode (handled above) ignores them since
|
|
60
|
+
// it pulls everything anyway.
|
|
61
|
+
const pinPrefixes = hqRoot ? readPinnedPrefixes(hqRoot, slug) : [];
|
|
62
|
+
if (cfg.syncMode === "custom") {
|
|
63
|
+
const customPrefixes = (cfg.customPaths ?? []).map((p) => grantPathToPrefix(p, slug));
|
|
64
|
+
// A bare-everything entry ("" — e.g. a `*` path) collapses under
|
|
65
|
+
// `coalescePrefixes` (which drops empties) to "nothing", which would
|
|
66
|
+
// prune the whole tree. An everything-scope is semantically `all`.
|
|
67
|
+
if (customPrefixes.some((p) => p === ""))
|
|
68
|
+
return { syncMode: "all" };
|
|
69
|
+
return {
|
|
70
|
+
syncMode: "custom",
|
|
71
|
+
prefixSet: coalescePrefixes([...customPrefixes, ...pinPrefixes]),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// shared: scope to the caller's explicit grants. Real grant paths are
|
|
75
|
+
// inconsistent — full (`companies/<slug>/x/*`), slug-anchored
|
|
76
|
+
// (`<slug>/x/*`), company-relative (`x/*`), bare globs (`*`), and exact
|
|
77
|
+
// files all coexist in production — so each is normalized via
|
|
78
|
+
// `grantPathToPrefix` into a company-relative, startsWith-friendly prefix
|
|
79
|
+
// (the namespace the engine's `RemoteFile.key`s live in) before coalescing.
|
|
80
|
+
//
|
|
81
|
+
// SAFETY: if the client can't fetch grants, we must NOT fall through to an
|
|
82
|
+
// empty `shared` scope — that would tell the engine "nothing is in scope"
|
|
83
|
+
// and scope-shrink would prune every clean local file. Degrade to `all`
|
|
84
|
+
// instead. A genuinely-empty grant list (the method exists and returns
|
|
85
|
+
// []) is a real "nothing shared with me" and is allowed to narrow.
|
|
86
|
+
if (!client.listMyExplicitGrants)
|
|
87
|
+
return { syncMode: "all" };
|
|
88
|
+
const grants = await client.listMyExplicitGrants(companyUid);
|
|
89
|
+
const sharedPrefixes = grants.map((g) => grantPathToPrefix(g.path, slug));
|
|
90
|
+
// A wildcard grant (`*`) normalizes to "" = everything. Since
|
|
91
|
+
// `coalescePrefixes` drops empties (collapsing "everything" to "nothing"),
|
|
92
|
+
// treat any such grant as full-access `all` rather than risk pruning.
|
|
93
|
+
if (sharedPrefixes.some((p) => p === ""))
|
|
94
|
+
return { syncMode: "all" };
|
|
95
|
+
return {
|
|
96
|
+
syncMode: "shared",
|
|
97
|
+
prefixSet: coalescePrefixes([...sharedPrefixes, ...pinPrefixes]),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Degrade to `all` — never prune on a resolution failure.
|
|
102
|
+
return { syncMode: "all" };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Read the per-machine pin set (`<hqRoot>/.hq/pins.json`) and return the
|
|
107
|
+
* company-relative pinned prefixes for `slug`. These are prefixes the user
|
|
108
|
+
* materialized on demand via `hq files get` that must survive a scoped pull.
|
|
109
|
+
*
|
|
110
|
+
* Tolerant by construction: a missing, unreadable, or malformed file yields
|
|
111
|
+
* `[]` (no pins) — pins only ever widen scope, so "no pins" is the safe
|
|
112
|
+
* default. Empty-string entries are dropped (an everything-pin is meaningless
|
|
113
|
+
* here; `all` mode already covers that case).
|
|
114
|
+
*/
|
|
115
|
+
export function readPinnedPrefixes(hqRoot, slug) {
|
|
116
|
+
try {
|
|
117
|
+
const raw = fs.readFileSync(path.join(hqRoot, ".hq", "pins.json"), "utf-8");
|
|
118
|
+
const parsed = JSON.parse(raw);
|
|
119
|
+
const list = parsed?.pins?.[slug];
|
|
120
|
+
if (Array.isArray(list)) {
|
|
121
|
+
return list.filter((p) => typeof p === "string" && p.length > 0);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
/* missing / unreadable / malformed → no pins */
|
|
126
|
+
}
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=pull-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-scope.js","sourceRoot":"","sources":["../../src/sync/pull-scope.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@indigoai-us/hq-cloud",
|
|
3
|
-
"version": "6.
|
|
4
|
-
"description": "HQ by Indigo cloud sync engine
|
|
3
|
+
"version": "6.7.0",
|
|
4
|
+
"description": "HQ by Indigo cloud sync engine — bidirectional S3 sync for mobile access",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -1286,6 +1286,29 @@ describe("per-company fanout", () => {
|
|
|
1286
1286
|
expect(opts.hqRoot).toBe("/tmp/fake-hq");
|
|
1287
1287
|
});
|
|
1288
1288
|
|
|
1289
|
+
// DEV-1768 fix #1/#2: the runner's pull leg MUST request the non-throwing,
|
|
1290
|
+
// self-healing scope-shrink policy — the menubar can act on no interactive
|
|
1291
|
+
// flag, so a thrown ScopeShrinkBlockedError there means a permanent exit-2
|
|
1292
|
+
// wedge.
|
|
1293
|
+
it("pull leg forwards scopeShrinkPolicy: 'auto-recover' to sync()", async () => {
|
|
1294
|
+
const syncSpy = vi.fn().mockResolvedValue(defaultSyncResult());
|
|
1295
|
+
const deps = makeDeps({
|
|
1296
|
+
createVaultClient: () =>
|
|
1297
|
+
makeVaultStub({
|
|
1298
|
+
memberships: [{ companyUid: "cmp_a" }],
|
|
1299
|
+
entityGet: (uid: string) =>
|
|
1300
|
+
Promise.resolve({ uid, slug: "acme" } as unknown as EntityInfo),
|
|
1301
|
+
}),
|
|
1302
|
+
sync: syncSpy,
|
|
1303
|
+
});
|
|
1304
|
+
|
|
1305
|
+
const code = await runRunner(["--companies", "--hq-root", "/tmp/fake-hq"], deps);
|
|
1306
|
+
expect(code).toBe(0);
|
|
1307
|
+
expect(syncSpy).toHaveBeenCalledTimes(1);
|
|
1308
|
+
const opts = syncSpy.mock.calls[0][0] as SyncOptions;
|
|
1309
|
+
expect(opts.scopeShrinkPolicy).toBe("auto-recover");
|
|
1310
|
+
});
|
|
1311
|
+
|
|
1289
1312
|
it("continues the fanout when one company's sync throws", async () => {
|
|
1290
1313
|
const slugs: Record<string, string> = { cmp_a: "acme", cmp_b: "beta" };
|
|
1291
1314
|
const deps = makeDeps({
|