@indigoai-us/hq-cloud 6.11.8 → 6.11.10
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.map +1 -1
- package/dist/bin/sync-runner.js +4 -0
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/bin/sync-runner.test.js +72 -0
- package/dist/bin/sync-runner.test.js.map +1 -1
- package/dist/cli/reindex.test.js +44 -0
- package/dist/cli/reindex.test.js.map +1 -1
- package/dist/cli/rescue-classify-ordering.test.js +25 -0
- package/dist/cli/rescue-classify-ordering.test.js.map +1 -1
- package/dist/company-resolver.d.ts +77 -0
- package/dist/company-resolver.d.ts.map +1 -0
- package/dist/company-resolver.js +124 -0
- package/dist/company-resolver.js.map +1 -0
- package/dist/company-resolver.test.d.ts +7 -0
- package/dist/company-resolver.test.d.ts.map +1 -0
- package/dist/company-resolver.test.js +120 -0
- package/dist/company-resolver.test.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/personal-vault.d.ts +24 -0
- package/dist/personal-vault.d.ts.map +1 -1
- package/dist/personal-vault.js +36 -1
- package/dist/personal-vault.js.map +1 -1
- package/dist/personal-vault.test.js +46 -1
- package/dist/personal-vault.test.js.map +1 -1
- package/dist/skill-telemetry.d.ts.map +1 -1
- package/dist/skill-telemetry.js +22 -3
- package/dist/skill-telemetry.js.map +1 -1
- package/dist/skill-telemetry.test.js +101 -1
- package/dist/skill-telemetry.test.js.map +1 -1
- package/dist/sync/event-sync.test.js +18 -0
- package/dist/sync/event-sync.test.js.map +1 -1
- package/dist/sync/feature-flags.test.js +37 -4
- package/dist/sync/feature-flags.test.js.map +1 -1
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/logger.test.js +1 -0
- package/dist/sync/logger.test.js.map +1 -1
- package/dist/sync/metrics.test.js +1 -0
- package/dist/sync/metrics.test.js.map +1 -1
- package/dist/sync/pull-scope.d.ts +1 -0
- package/dist/sync/pull-scope.d.ts.map +1 -1
- package/dist/sync/pull-scope.js +26 -0
- package/dist/sync/pull-scope.js.map +1 -1
- package/dist/sync/push-event.d.ts +23 -11
- package/dist/sync/push-event.d.ts.map +1 -1
- package/dist/sync/push-event.js +15 -8
- package/dist/sync/push-event.js.map +1 -1
- package/dist/sync/push-event.test.js +39 -3
- package/dist/sync/push-event.test.js.map +1 -1
- package/dist/sync/push-receiver.test.js +1 -0
- package/dist/sync/push-receiver.test.js.map +1 -1
- package/dist/telemetry.d.ts +18 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +28 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/telemetry.test.js +93 -1
- package/dist/telemetry.test.js.map +1 -1
- package/dist/vault-client.d.ts +4 -2
- package/dist/vault-client.d.ts.map +1 -1
- package/dist/vault-client.js.map +1 -1
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +25 -9
- package/dist/watcher.js.map +1 -1
- package/dist/watcher.test.js +65 -1
- package/dist/watcher.test.js.map +1 -1
- package/package.json +1 -1
- package/src/bin/sync-runner.test.ts +90 -0
- package/src/bin/sync-runner.ts +4 -0
- package/src/cli/reindex.test.ts +53 -0
- package/src/cli/rescue-classify-ordering.test.ts +28 -0
- package/src/company-resolver.test.ts +136 -0
- package/src/company-resolver.ts +147 -0
- package/src/index.ts +1 -0
- package/src/personal-vault.test.ts +56 -0
- package/src/personal-vault.ts +36 -1
- package/src/skill-telemetry.test.ts +126 -1
- package/src/skill-telemetry.ts +26 -3
- package/src/sync/event-sync.test.ts +21 -0
- package/src/sync/feature-flags.test.ts +40 -4
- package/src/sync/index.ts +5 -1
- package/src/sync/logger.test.ts +1 -0
- package/src/sync/metrics.test.ts +1 -0
- package/src/sync/pull-scope.ts +26 -1
- package/src/sync/push-event.test.ts +45 -3
- package/src/sync/push-event.ts +28 -12
- package/src/sync/push-receiver.test.ts +1 -0
- package/src/telemetry.test.ts +118 -1
- package/src/telemetry.ts +50 -2
- package/src/vault-client.ts +4 -2
- package/src/watcher.test.ts +81 -0
- package/src/watcher.ts +27 -9
- package/test/e2e/sync/cross-tenant-isolation.test.ts +2 -0
package/dist/watcher.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.test.js","sourceRoot":"","sources":["../src/watcher.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watcher.test.js","sourceRoot":"","sources":["../src/watcher.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3285,11 +3285,101 @@ describe("resolvePullScope", () => {
|
|
|
3285
3285
|
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
3286
3286
|
}) as never;
|
|
3287
3287
|
|
|
3288
|
+
const ownerMembership = (companyUid: string, membershipKey: string) =>
|
|
3289
|
+
({
|
|
3290
|
+
membershipKey,
|
|
3291
|
+
personUid: "prs_1",
|
|
3292
|
+
companyUid,
|
|
3293
|
+
role: "owner",
|
|
3294
|
+
status: "active",
|
|
3295
|
+
invitedBy: "prs_0",
|
|
3296
|
+
invitedAt: "2026-01-01T00:00:00.000Z",
|
|
3297
|
+
createdAt: "2026-01-01T00:00:00.000Z",
|
|
3298
|
+
updatedAt: "2026-01-01T00:00:00.000Z",
|
|
3299
|
+
}) as never;
|
|
3300
|
+
|
|
3288
3301
|
it("returns all when the client has no getMembershipSyncConfig", async () => {
|
|
3289
3302
|
const scope = await resolvePullScope(stubClient({}), "cmp_a", "acme");
|
|
3290
3303
|
expect(scope).toEqual({ syncMode: "all" });
|
|
3291
3304
|
});
|
|
3292
3305
|
|
|
3306
|
+
// OWNER role-bypass regression (feedback_67bdb8a4 / feedback_a46c3b37).
|
|
3307
|
+
// An owner owns the whole vault by ROLE; the grants endpoint deliberately
|
|
3308
|
+
// excludes that role bypass, so deriving `shared` scope from explicit grants
|
|
3309
|
+
// collapses an owner to an empty prefixSet — the push then uploads nothing
|
|
3310
|
+
// and in-role writes (incl. brand-new top-level prefixes) draw a server
|
|
3311
|
+
// 403 SCOPE_EXCEEDS_PARENT. An owner must always resolve to `all`.
|
|
3312
|
+
it("returns all for an OWNER even when a stray shared config exists (never narrows an owner to explicit grants)", async () => {
|
|
3313
|
+
let grantsCalled = false;
|
|
3314
|
+
const scope = await resolvePullScope(
|
|
3315
|
+
stubClient({
|
|
3316
|
+
listMyMemberships: async () => [ownerMembership("cmp_a", "mk_owner")],
|
|
3317
|
+
getMembershipSyncConfig: async () => ({
|
|
3318
|
+
membershipId: "mk_owner",
|
|
3319
|
+
syncMode: "shared",
|
|
3320
|
+
isDefault: false,
|
|
3321
|
+
}),
|
|
3322
|
+
// Owners typically hold NO explicit FILE_ACL grants — they own by
|
|
3323
|
+
// role. If the resolver consulted this list it would resolve an empty
|
|
3324
|
+
// prefixSet and break the owner's sync entirely.
|
|
3325
|
+
listMyExplicitGrants: async () => {
|
|
3326
|
+
grantsCalled = true;
|
|
3327
|
+
return [];
|
|
3328
|
+
},
|
|
3329
|
+
}),
|
|
3330
|
+
"cmp_a",
|
|
3331
|
+
"acme",
|
|
3332
|
+
);
|
|
3333
|
+
expect(scope).toEqual({ syncMode: "all" });
|
|
3334
|
+
// The short-circuit must fire BEFORE any grant resolution.
|
|
3335
|
+
expect(grantsCalled).toBe(false);
|
|
3336
|
+
});
|
|
3337
|
+
|
|
3338
|
+
it("returns all for an OWNER short-circuiting BEFORE the sync-config fetch", async () => {
|
|
3339
|
+
let configCalled = false;
|
|
3340
|
+
const scope = await resolvePullScope(
|
|
3341
|
+
stubClient({
|
|
3342
|
+
listMyMemberships: async () => [ownerMembership("cmp_a", "mk_owner")],
|
|
3343
|
+
getMembershipSyncConfig: async () => {
|
|
3344
|
+
configCalled = true;
|
|
3345
|
+
return {
|
|
3346
|
+
membershipId: "mk_owner",
|
|
3347
|
+
syncMode: "custom",
|
|
3348
|
+
customPaths: ["projects/x/"],
|
|
3349
|
+
isDefault: false,
|
|
3350
|
+
};
|
|
3351
|
+
},
|
|
3352
|
+
}),
|
|
3353
|
+
"cmp_a",
|
|
3354
|
+
"acme",
|
|
3355
|
+
);
|
|
3356
|
+
// Even a `custom` row cannot scope an owner below their role on the sync
|
|
3357
|
+
// path (the server would 403 their own writes), so `all` wins and the
|
|
3358
|
+
// config fetch is never needed.
|
|
3359
|
+
expect(scope).toEqual({ syncMode: "all" });
|
|
3360
|
+
expect(configCalled).toBe(false);
|
|
3361
|
+
});
|
|
3362
|
+
|
|
3363
|
+
it("still narrows a NON-owner (member) to explicit grants — the fix is owner-scoped", async () => {
|
|
3364
|
+
const scope = await resolvePullScope(
|
|
3365
|
+
stubClient({
|
|
3366
|
+
listMyMemberships: async () => [membership("cmp_a", "mk_member")],
|
|
3367
|
+
getMembershipSyncConfig: async () => ({
|
|
3368
|
+
membershipId: "mk_member",
|
|
3369
|
+
syncMode: "shared",
|
|
3370
|
+
isDefault: false,
|
|
3371
|
+
}),
|
|
3372
|
+
listMyExplicitGrants: async () =>
|
|
3373
|
+
[
|
|
3374
|
+
{ companyUid: "cmp_a", path: "knowledge/", permission: "read", source: "person" },
|
|
3375
|
+
] as never,
|
|
3376
|
+
}),
|
|
3377
|
+
"cmp_a",
|
|
3378
|
+
"acme",
|
|
3379
|
+
);
|
|
3380
|
+
expect(scope).toEqual({ syncMode: "shared", prefixSet: ["knowledge/"] });
|
|
3381
|
+
});
|
|
3382
|
+
|
|
3293
3383
|
it("returns all for an all-mode membership (no prefixSet)", async () => {
|
|
3294
3384
|
const scope = await resolvePullScope(
|
|
3295
3385
|
stubClient({
|
package/src/bin/sync-runner.ts
CHANGED
|
@@ -833,6 +833,10 @@ export async function defaultCollectTelemetry(
|
|
|
833
833
|
client: client as unknown as Parameters<typeof collectAndSendTelemetry>[0]["client"],
|
|
834
834
|
machineId,
|
|
835
835
|
installerVersion,
|
|
836
|
+
// Resolve each event's cwd → owning company via <hqRoot>/companies/
|
|
837
|
+
// manifest.yaml and stamp companyUid (US-002). Unmatched cwds stay
|
|
838
|
+
// unattributed (field omitted).
|
|
839
|
+
hqRoot,
|
|
836
840
|
});
|
|
837
841
|
} catch {
|
|
838
842
|
// Fire-and-forget; nothing escapes the boundary.
|
package/src/cli/reindex.test.ts
CHANGED
|
@@ -133,6 +133,59 @@ describe("reindex", () => {
|
|
|
133
133
|
expect(fs.lstatSync(path.join(wrapper, "SKILL.md")).isSymbolicLink()).toBe(true);
|
|
134
134
|
});
|
|
135
135
|
|
|
136
|
+
// ── symlink-to-directory reindex links (feedback_731b88d9) ──────────────
|
|
137
|
+
// reindex emits two kinds of link whose TARGET is a directory:
|
|
138
|
+
// (a) a skill folder that contains a sub-directory (e.g. `agents/`) → the
|
|
139
|
+
// wrapper gets a per-entry symlink that resolves to a directory;
|
|
140
|
+
// (b) a personal/<type>/<entry> that is itself a directory → mirrored into
|
|
141
|
+
// core/<type>/<entry> as a directory symlink (the DEV-1767 shape:
|
|
142
|
+
// `core/knowledge/<kb> -> ../../personal/knowledge/<kb>`).
|
|
143
|
+
// The bash-era reindex followed these into the directory and aborted with
|
|
144
|
+
// ERR_FS_EISDIR, dropping the link. These lock that they are created,
|
|
145
|
+
// resolve to the directory, survive an idempotent re-run, and never crash.
|
|
146
|
+
|
|
147
|
+
it("creates a symlink-to-DIR wrapper entry for a skill sub-directory and preserves it", () => {
|
|
148
|
+
writeSkill("core/skills/demo");
|
|
149
|
+
// A sub-directory inside the skill folder → its wrapper link targets a dir.
|
|
150
|
+
fs.mkdirSync(path.join(root, "core/skills/demo/agents"), { recursive: true });
|
|
151
|
+
fs.writeFileSync(path.join(root, "core/skills/demo/agents/helper.md"), "h\n");
|
|
152
|
+
|
|
153
|
+
expect(reindex({ repoRoot: root }).status).toBe(0);
|
|
154
|
+
|
|
155
|
+
const agentsLink = path.join(root, ".claude/skills/core:demo/agents");
|
|
156
|
+
expect(fs.lstatSync(agentsLink).isSymbolicLink()).toBe(true);
|
|
157
|
+
expect(fs.readlinkSync(agentsLink)).toBe("../../../core/skills/demo/agents");
|
|
158
|
+
// The link resolves to the directory (the EISDIR-prone dereference path).
|
|
159
|
+
expect(fs.statSync(agentsLink).isDirectory()).toBe(true);
|
|
160
|
+
expect(fs.readFileSync(path.join(agentsLink, "helper.md"), "utf-8")).toBe("h\n");
|
|
161
|
+
|
|
162
|
+
// Idempotent re-run: the prune pass walks the symlink-to-dir and must not
|
|
163
|
+
// follow it / drop it / throw EISDIR.
|
|
164
|
+
expect(reindex({ repoRoot: root }).status).toBe(0);
|
|
165
|
+
expect(fs.lstatSync(agentsLink).isSymbolicLink()).toBe(true);
|
|
166
|
+
expect(fs.readlinkSync(agentsLink)).toBe("../../../core/skills/demo/agents");
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it("mirrors a personal/<type> DIRECTORY entry as a directory symlink into core/ and preserves it", () => {
|
|
170
|
+
// personal/knowledge/<kb>/ is a directory of notes — the exact DEV-1767
|
|
171
|
+
// reindex artifact shape that rescue/update-hq used to choke on.
|
|
172
|
+
fs.mkdirSync(path.join(root, "personal/knowledge/my-kb"), { recursive: true });
|
|
173
|
+
fs.writeFileSync(path.join(root, "personal/knowledge/my-kb/note.md"), "owned by personal\n");
|
|
174
|
+
|
|
175
|
+
expect(reindex({ repoRoot: root }).status).toBe(0);
|
|
176
|
+
|
|
177
|
+
const link = path.join(root, "core/knowledge/my-kb");
|
|
178
|
+
expect(fs.lstatSync(link).isSymbolicLink()).toBe(true);
|
|
179
|
+
expect(fs.readlinkSync(link)).toBe("../../personal/knowledge/my-kb");
|
|
180
|
+
expect(fs.statSync(link).isDirectory()).toBe(true);
|
|
181
|
+
expect(fs.readFileSync(path.join(link, "note.md"), "utf-8")).toBe("owned by personal\n");
|
|
182
|
+
|
|
183
|
+
// Idempotent re-run: existing directory symlink recognised, left in place.
|
|
184
|
+
expect(reindex({ repoRoot: root }).status).toBe(0);
|
|
185
|
+
expect(fs.readlinkSync(link)).toBe("../../personal/knowledge/my-kb");
|
|
186
|
+
expect(fs.readFileSync(path.join(link, "note.md"), "utf-8")).toBe("owned by personal\n");
|
|
187
|
+
});
|
|
188
|
+
|
|
136
189
|
// ── operation lock (mutual exclusion with sync/rescue) ──────────────────
|
|
137
190
|
|
|
138
191
|
it("refuses (OPERATION_LOCKED_EXIT) when another op holds this root's lock (lockTimeoutSec:0)", () => {
|
|
@@ -197,6 +197,34 @@ exec ${JSON.stringify(realGit)} "$@"
|
|
|
197
197
|
expect(fs.existsSync(path.join(hqRoot, "core/b.md"))).toBe(true);
|
|
198
198
|
});
|
|
199
199
|
|
|
200
|
+
it("classifies a NON-personal DIRECTORY symlink under core/ without following it (no crash, left in place)", () => {
|
|
201
|
+
// A directory symlink whose target is NOT a reindex/personal artifact —
|
|
202
|
+
// e.g. a user-made alias `core/aliasdir -> realdir`. It is not a
|
|
203
|
+
// master-sync symlink, so rescue must NOT drop it, but it also must never
|
|
204
|
+
// be followed/read (the EISDIR / "Path is a directory" trap from DEV-1767
|
|
205
|
+
// applies to ANY directory symlink the walk meets, not just personal ones).
|
|
206
|
+
const hqRoot = makeHqRoot();
|
|
207
|
+
fs.mkdirSync(path.join(hqRoot, "core/realdir"), { recursive: true });
|
|
208
|
+
fs.writeFileSync(path.join(hqRoot, "core/realdir/x.md"), "real\n");
|
|
209
|
+
const link = path.join(hqRoot, "core/aliasdir");
|
|
210
|
+
fs.symlinkSync("realdir", link); // points at a sibling DIRECTORY
|
|
211
|
+
|
|
212
|
+
const r = runRescueCapture(liveArgs(hqRoot), baseEnv);
|
|
213
|
+
const out = `${r.stdout}\n${r.stderr}`;
|
|
214
|
+
|
|
215
|
+
expect(r.threw, out).toBeUndefined();
|
|
216
|
+
expect(r.status, out).toBe(0);
|
|
217
|
+
// The crash signatures must never appear for a dir-symlink of any flavour.
|
|
218
|
+
expect(out).not.toMatch(/Path is a directory/);
|
|
219
|
+
expect(out).not.toMatch(/EISDIR/);
|
|
220
|
+
// Not a reindex artifact → not counted as a dropped symlink, left on disk,
|
|
221
|
+
// and its directory target is untouched.
|
|
222
|
+
expect(out).toMatch(/reindex symlinks dropped:\s+0 entries/);
|
|
223
|
+
expect(lexists(link)).toBe(true);
|
|
224
|
+
expect(fs.lstatSync(link).isSymbolicLink()).toBe(true);
|
|
225
|
+
expect(fs.readFileSync(path.join(hqRoot, "core/realdir/x.md"), "utf-8")).toBe("real\n");
|
|
226
|
+
});
|
|
227
|
+
|
|
200
228
|
it("drops a FILE symlink under core/ the same way (file-symlink behavior unchanged)", () => {
|
|
201
229
|
const hqRoot = makeHqRoot();
|
|
202
230
|
fs.writeFileSync(path.join(hqRoot, "personal/knowledge/note.md"), "personal note\n");
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the cwd → owning-company resolver (surface-hq-console-telemetry
|
|
3
|
+
* US-002). Covers manifest parsing, cmp_* extraction, longest-prefix matching,
|
|
4
|
+
* the trailing-slash sibling boundary, and the unattributed (no-match) path.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
8
|
+
import * as fs from "fs";
|
|
9
|
+
import * as os from "os";
|
|
10
|
+
import * as path from "path";
|
|
11
|
+
import {
|
|
12
|
+
buildRepoCompanyMap,
|
|
13
|
+
resolveCompanyForCwd,
|
|
14
|
+
} from "./company-resolver.js";
|
|
15
|
+
|
|
16
|
+
const INDIGO = "cmp_01INDIGO";
|
|
17
|
+
const HPO = "cmp_01HPO";
|
|
18
|
+
|
|
19
|
+
const MANIFEST = `companies:
|
|
20
|
+
personal:
|
|
21
|
+
name: Personal
|
|
22
|
+
repos: []
|
|
23
|
+
indigo:
|
|
24
|
+
name: Indigo
|
|
25
|
+
repos:
|
|
26
|
+
- repos/private/hq-cloud
|
|
27
|
+
- repos/public/hq-core
|
|
28
|
+
cloud_uid: ${INDIGO}
|
|
29
|
+
hpo:
|
|
30
|
+
name: HPO
|
|
31
|
+
repos:
|
|
32
|
+
- repos/private/hpo-jobs
|
|
33
|
+
cloud_uid: ${HPO}
|
|
34
|
+
liverecover:
|
|
35
|
+
name: LiveRecover
|
|
36
|
+
repos:
|
|
37
|
+
- repos/private/liverecover-site
|
|
38
|
+
`;
|
|
39
|
+
|
|
40
|
+
function setupHqRoot(manifest: string = MANIFEST): string {
|
|
41
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "hq-resolver-test-"));
|
|
42
|
+
fs.mkdirSync(path.join(root, "companies"), { recursive: true });
|
|
43
|
+
fs.writeFileSync(path.join(root, "companies", "manifest.yaml"), manifest);
|
|
44
|
+
return root;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
describe("buildRepoCompanyMap + resolveCompanyForCwd", () => {
|
|
48
|
+
let hqRoot: string;
|
|
49
|
+
afterEach(() => {
|
|
50
|
+
if (hqRoot) fs.rmSync(hqRoot, { recursive: true, force: true });
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("resolves a cwd inside a company repo to that company's cmp_ uid", async () => {
|
|
54
|
+
hqRoot = setupHqRoot();
|
|
55
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
56
|
+
const cwd = path.join(hqRoot, "repos/private/hq-cloud/src");
|
|
57
|
+
expect(resolveCompanyForCwd(cwd, map)).toBe(INDIGO);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("resolves the repo root itself (exact match, no trailing slash)", async () => {
|
|
61
|
+
hqRoot = setupHqRoot();
|
|
62
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
63
|
+
const cwd = path.join(hqRoot, "repos/public/hq-core");
|
|
64
|
+
expect(resolveCompanyForCwd(cwd, map)).toBe(INDIGO);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("maps each repo to its own company", async () => {
|
|
68
|
+
hqRoot = setupHqRoot();
|
|
69
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
70
|
+
expect(resolveCompanyForCwd(path.join(hqRoot, "repos/private/hpo-jobs/x"), map)).toBe(HPO);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("returns undefined for a cwd outside any company repo (unattributed)", async () => {
|
|
74
|
+
hqRoot = setupHqRoot();
|
|
75
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
76
|
+
expect(resolveCompanyForCwd("/Users/x/random-repo", map)).toBeUndefined();
|
|
77
|
+
expect(resolveCompanyForCwd(path.join(hqRoot, "companies/indigo"), map)).toBeUndefined();
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("does NOT attribute a company that lacks a cloud_uid (not cloud-backed)", async () => {
|
|
81
|
+
hqRoot = setupHqRoot();
|
|
82
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
83
|
+
// liverecover-site has no cloud_uid → unattributed.
|
|
84
|
+
expect(resolveCompanyForCwd(path.join(hqRoot, "repos/private/liverecover-site"), map)).toBeUndefined();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("does not match a sibling that merely shares a path prefix", async () => {
|
|
88
|
+
hqRoot = setupHqRoot();
|
|
89
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
90
|
+
// `<repo>-other` shares the string prefix but must NOT match (slash boundary).
|
|
91
|
+
expect(resolveCompanyForCwd(path.join(hqRoot, "repos/private/hq-cloud-other"), map)).toBeUndefined();
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("handles a trailing slash on the cwd", async () => {
|
|
95
|
+
hqRoot = setupHqRoot();
|
|
96
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
97
|
+
expect(resolveCompanyForCwd(path.join(hqRoot, "repos/private/hq-cloud") + "/", map)).toBe(INDIGO);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("returns undefined for an undefined/empty cwd", async () => {
|
|
101
|
+
hqRoot = setupHqRoot();
|
|
102
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
103
|
+
expect(resolveCompanyForCwd(undefined, map)).toBeUndefined();
|
|
104
|
+
expect(resolveCompanyForCwd("", map)).toBeUndefined();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("never returns the reserved 'unattributed' sentinel", async () => {
|
|
108
|
+
hqRoot = setupHqRoot(`companies:
|
|
109
|
+
bad:
|
|
110
|
+
repos:
|
|
111
|
+
- repos/x
|
|
112
|
+
cloud_uid: unattributed
|
|
113
|
+
`);
|
|
114
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
115
|
+
// `unattributed` is not a cmp_* uid → not added to the map → no match.
|
|
116
|
+
expect(map.entries).toHaveLength(0);
|
|
117
|
+
expect(resolveCompanyForCwd(path.join(hqRoot, "repos/x"), map)).toBeUndefined();
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it("yields an empty map for a missing manifest", async () => {
|
|
121
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "hq-resolver-empty-"));
|
|
122
|
+
try {
|
|
123
|
+
const map = await buildRepoCompanyMap(root);
|
|
124
|
+
expect(map.entries).toHaveLength(0);
|
|
125
|
+
expect(resolveCompanyForCwd(path.join(root, "repos/private/hq-cloud"), map)).toBeUndefined();
|
|
126
|
+
} finally {
|
|
127
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("yields an empty map for an unparseable manifest", async () => {
|
|
132
|
+
hqRoot = setupHqRoot(":\n not: [valid: yaml");
|
|
133
|
+
const map = await buildRepoCompanyMap(hqRoot);
|
|
134
|
+
expect(map.entries).toHaveLength(0);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cwd → owning-company resolution for telemetry edge attribution
|
|
3
|
+
* (surface-hq-console-telemetry US-002).
|
|
4
|
+
*
|
|
5
|
+
* Both telemetry collectors (`./telemetry.ts`, `./skill-telemetry.ts`) stamp an
|
|
6
|
+
* optional `companyUid` on each event so the server can attribute usage to the
|
|
7
|
+
* company that owns the repo the event was produced in. The mapping comes from
|
|
8
|
+
* `<hqRoot>/companies/manifest.yaml`, whose shape is:
|
|
9
|
+
*
|
|
10
|
+
* companies:
|
|
11
|
+
* indigo:
|
|
12
|
+
* repos:
|
|
13
|
+
* - repos/private/hq-cloud
|
|
14
|
+
* - repos/public/hq-core
|
|
15
|
+
* cloud_uid: cmp_01KQWRSQTCTES1SEFKXKDZAAK1
|
|
16
|
+
* liverecover:
|
|
17
|
+
* repos:
|
|
18
|
+
* - repos/private/liverecover-site
|
|
19
|
+
* # (no cloud_uid — not cloud-backed)
|
|
20
|
+
*
|
|
21
|
+
* companyUid source: the value stamped is the manifest's `cloud_uid`. That is a
|
|
22
|
+
* `cmp_*` entity uid — the SAME value the server membership-keys on
|
|
23
|
+
* (`membershipKey = '<personUid>#<companyUid>'`, where companyUid is the cmp_*
|
|
24
|
+
* uid; see hq-pro `vault-service/handlers/usage.ts` + `skill-invocations.ts`).
|
|
25
|
+
* So no slug→uid round-trip is needed: the manifest already carries the uid the
|
|
26
|
+
* server expects. A company entry WITHOUT a `cloud_uid` (not cloud-backed, e.g.
|
|
27
|
+
* `liverecover`/`temple`) contributes no mapping — its repos resolve to no
|
|
28
|
+
* companyUid and the event is sent unattributed (field omitted).
|
|
29
|
+
*
|
|
30
|
+
* The reserved sentinel `unattributed` is NEVER produced here — "no match"
|
|
31
|
+
* means "return undefined / omit the field", which the server treats as
|
|
32
|
+
* unattributed/personal.
|
|
33
|
+
*
|
|
34
|
+
* Cost: `buildRepoCompanyMap()` parses the manifest ONCE per sync run; the
|
|
35
|
+
* resulting map is reused for every event via `resolveCompanyForCwd()`. No
|
|
36
|
+
* per-event manifest reads.
|
|
37
|
+
*
|
|
38
|
+
* Privacy: this module only ever returns a `cmp_*` uid (or undefined). It never
|
|
39
|
+
* adds a raw path to any payload — the collectors add exactly one new field,
|
|
40
|
+
* `companyUid`.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import { promises as fs } from "node:fs";
|
|
44
|
+
import * as path from "node:path";
|
|
45
|
+
|
|
46
|
+
import yaml from "js-yaml";
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* A repo-path → companyUid lookup, built once per run. Keys are ABSOLUTE,
|
|
50
|
+
* normalized repo roots (`<hqRoot>/repos/private/hq-cloud`); values are the
|
|
51
|
+
* owning company's `cmp_*` uid. An event `cwd` is attributed to the entry whose
|
|
52
|
+
* repo root is the longest prefix of (or equal to) the cwd.
|
|
53
|
+
*/
|
|
54
|
+
export interface RepoCompanyMap {
|
|
55
|
+
/** Absolute, normalized repo root → owning company `cmp_*` uid. */
|
|
56
|
+
entries: Array<{ repoRoot: string; companyUid: string }>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface ManifestCompany {
|
|
60
|
+
repos?: unknown;
|
|
61
|
+
cloud_uid?: unknown;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface ManifestShape {
|
|
65
|
+
companies?: Record<string, ManifestCompany>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Drop a trailing slash (keeping a bare "/"). Mirrors the scope-path
|
|
69
|
+
* normalization in `./skill-telemetry.ts` so prefix matching is consistent. */
|
|
70
|
+
function normalizePath(p: string): string {
|
|
71
|
+
return p.length > 1 ? p.replace(/\/+$/, "") : p;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Parse `<hqRoot>/companies/manifest.yaml` ONCE and build the repo-path →
|
|
76
|
+
* companyUid lookup. Best-effort: a missing/unparseable manifest yields an
|
|
77
|
+
* empty map (every event then resolves to no company → unattributed), so a
|
|
78
|
+
* telemetry run never fails on a manifest problem.
|
|
79
|
+
*
|
|
80
|
+
* Only companies that carry a `cloud_uid` (`cmp_*`) contribute entries — a
|
|
81
|
+
* company without one is not cloud-backed and its repos stay unattributed.
|
|
82
|
+
*/
|
|
83
|
+
export async function buildRepoCompanyMap(hqRoot: string): Promise<RepoCompanyMap> {
|
|
84
|
+
const manifestPath = path.join(hqRoot, "companies", "manifest.yaml");
|
|
85
|
+
let doc: ManifestShape;
|
|
86
|
+
try {
|
|
87
|
+
const raw = await fs.readFile(manifestPath, "utf-8");
|
|
88
|
+
const parsed = yaml.load(raw);
|
|
89
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
90
|
+
return { entries: [] };
|
|
91
|
+
}
|
|
92
|
+
doc = parsed as ManifestShape;
|
|
93
|
+
} catch {
|
|
94
|
+
// Missing / unreadable / unparseable — no attribution this run.
|
|
95
|
+
return { entries: [] };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const companies = doc.companies;
|
|
99
|
+
if (!companies || typeof companies !== "object") return { entries: [] };
|
|
100
|
+
|
|
101
|
+
const entries: Array<{ repoRoot: string; companyUid: string }> = [];
|
|
102
|
+
for (const company of Object.values(companies)) {
|
|
103
|
+
if (!company || typeof company !== "object") continue;
|
|
104
|
+
const cloudUid = company.cloud_uid;
|
|
105
|
+
// Only cloud-backed companies (with a cmp_* uid) attribute events.
|
|
106
|
+
if (typeof cloudUid !== "string" || !cloudUid.startsWith("cmp_")) continue;
|
|
107
|
+
const repos = company.repos;
|
|
108
|
+
if (!Array.isArray(repos)) continue;
|
|
109
|
+
for (const repo of repos) {
|
|
110
|
+
if (typeof repo !== "string" || repo.trim().length === 0) continue;
|
|
111
|
+
// Manifest repo paths are relative to the HQ root (e.g.
|
|
112
|
+
// `repos/private/hq-cloud`). Resolve to an absolute, normalized root.
|
|
113
|
+
const repoRoot = normalizePath(path.resolve(hqRoot, repo));
|
|
114
|
+
entries.push({ repoRoot, companyUid: cloudUid });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Longest repoRoot first so the first containment match is the most specific
|
|
119
|
+
// (handles nested repo layouts where one repo path prefixes another).
|
|
120
|
+
entries.sort((a, b) => b.repoRoot.length - a.repoRoot.length);
|
|
121
|
+
return { entries };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Resolve an event's `cwd` to the owning company's `cmp_*` uid, or `undefined`
|
|
126
|
+
* when the cwd is inside no cloud-backed company repo (→ omit `companyUid`;
|
|
127
|
+
* the server treats absence as unattributed/personal).
|
|
128
|
+
*
|
|
129
|
+
* Matching is by path containment: the cwd must equal a repo root or sit
|
|
130
|
+
* beneath it (`<repoRoot>/...`). A trailing-slash boundary prevents a sibling
|
|
131
|
+
* that merely shares a string prefix (`<repoRoot>-other`) from matching.
|
|
132
|
+
* Entries are pre-sorted longest-first, so the first match is the most
|
|
133
|
+
* specific.
|
|
134
|
+
*/
|
|
135
|
+
export function resolveCompanyForCwd(
|
|
136
|
+
cwd: string | undefined,
|
|
137
|
+
map: RepoCompanyMap,
|
|
138
|
+
): string | undefined {
|
|
139
|
+
if (typeof cwd !== "string" || cwd.length === 0) return undefined;
|
|
140
|
+
const c = normalizePath(cwd);
|
|
141
|
+
for (const { repoRoot, companyUid } of map.entries) {
|
|
142
|
+
if (c === repoRoot || c.startsWith(`${repoRoot}/`)) {
|
|
143
|
+
return companyUid;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -20,6 +20,8 @@ import {
|
|
|
20
20
|
computePersonalCompanySubdirs,
|
|
21
21
|
computePersonalVaultPaths,
|
|
22
22
|
CONTINUITY_POINTER_REL,
|
|
23
|
+
computeAgencySyncPaths,
|
|
24
|
+
AGENCY_SYNC_REL,
|
|
23
25
|
PERSONAL_VAULT_COMPANY_EXCLUDED_SLUGS,
|
|
24
26
|
PERSONAL_VAULT_EXCLUDED_TOP_LEVEL,
|
|
25
27
|
} from "./personal-vault.js";
|
|
@@ -522,3 +524,57 @@ describe("personal-vault: continuity-pointer carve-out", () => {
|
|
|
522
524
|
]);
|
|
523
525
|
});
|
|
524
526
|
});
|
|
527
|
+
|
|
528
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
529
|
+
// workspace/agency carve-out — sync the agency-team workspace across machines.
|
|
530
|
+
//
|
|
531
|
+
// Like the continuity pointer, this pierces the workspace/ top-level exclusion
|
|
532
|
+
// for ONE subtree: workspace/agency/<company>/<team>/ (hq-pack-agency chat
|
|
533
|
+
// inboxes + roster/state), so an agency team picked up on a second machine sees
|
|
534
|
+
// the same conversation it had on the first. The rest of workspace/ stays local.
|
|
535
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
536
|
+
describe("personal-vault: agency-workspace carve-out", () => {
|
|
537
|
+
let hqRoot: string;
|
|
538
|
+
beforeEach(() => {
|
|
539
|
+
hqRoot = fs.mkdtempSync(path.join(os.tmpdir(), "hq-agency-test-"));
|
|
540
|
+
});
|
|
541
|
+
afterEach(() => {
|
|
542
|
+
fs.rmSync(hqRoot, { recursive: true, force: true });
|
|
543
|
+
});
|
|
544
|
+
const relAll = (abs: string[]): string[] =>
|
|
545
|
+
abs.map((p) => path.relative(hqRoot, p)).sort();
|
|
546
|
+
|
|
547
|
+
it("constant: AGENCY_SYNC_REL is workspace/agency", () => {
|
|
548
|
+
expect(AGENCY_SYNC_REL).toBe("workspace/agency");
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
it("includes workspace/agency when it exists", () => {
|
|
552
|
+
fs.mkdirSync(path.join(hqRoot, "workspace", "agency", "acme", "growth"), {
|
|
553
|
+
recursive: true,
|
|
554
|
+
});
|
|
555
|
+
expect(relAll(computeAgencySyncPaths(hqRoot))).toEqual([
|
|
556
|
+
path.join("workspace", "agency"),
|
|
557
|
+
]);
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
it("empty when workspace/agency is absent (fail-soft)", () => {
|
|
561
|
+
fs.mkdirSync(path.join(hqRoot, "workspace"), { recursive: true });
|
|
562
|
+
expect(computeAgencySyncPaths(hqRoot)).toEqual([]);
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
it("composes into computePersonalVaultPaths without broadening workspace/", () => {
|
|
566
|
+
fs.mkdirSync(path.join(hqRoot, "workspace", "agency", "acme", "growth"), {
|
|
567
|
+
recursive: true,
|
|
568
|
+
});
|
|
569
|
+
fs.mkdirSync(path.join(hqRoot, "workspace", "locks"), { recursive: true });
|
|
570
|
+
fs.writeFileSync(path.join(hqRoot, "workspace", "locks", "x.lock"), "1");
|
|
571
|
+
fs.mkdirSync(path.join(hqRoot, ".claude"), { recursive: true });
|
|
572
|
+
|
|
573
|
+
const out = relAll(computePersonalVaultPaths(hqRoot));
|
|
574
|
+
expect(out).toContain(path.join("workspace", "agency"));
|
|
575
|
+
expect(out).toContain(".claude");
|
|
576
|
+
expect(out.some((p) => p.startsWith(path.join("workspace", "locks")))).toBe(
|
|
577
|
+
false,
|
|
578
|
+
);
|
|
579
|
+
});
|
|
580
|
+
});
|