@sentropic/h2a 0.98.1 → 0.98.2
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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/dist/cli-contract.d.ts.map +1 -1
- package/dist/cli-contract.js +8 -0
- package/dist/cli-contract.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -2
- package/dist/cli.js.map +1 -1
- package/dist/runtime/identity/bindings.d.ts.map +1 -1
- package/dist/runtime/identity/bindings.js +13 -3
- package/dist/runtime/identity/bindings.js.map +1 -1
- package/dist/runtime/identity/migration.d.ts +2 -0
- package/dist/runtime/identity/migration.d.ts.map +1 -1
- package/dist/runtime/identity/migration.js +19 -3
- package/dist/runtime/identity/migration.js.map +1 -1
- package/dist/runtime/local-files/launch-index.d.ts +14 -0
- package/dist/runtime/local-files/launch-index.d.ts.map +1 -0
- package/dist/runtime/local-files/launch-index.js +279 -0
- package/dist/runtime/local-files/launch-index.js.map +1 -0
- package/dist/runtime/local-files/store.d.ts.map +1 -1
- package/dist/runtime/local-files/store.js +16 -13
- package/dist/runtime/local-files/store.js.map +1 -1
- package/focus-app/client/_app/immutable/chunks/unQroC_0.js +2 -0
- package/focus-app/client/_app/immutable/chunks/unQroC_0.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/unQroC_0.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/{app.Dfo3Ymae.js → app.75Uzo4oj.js} +2 -2
- package/focus-app/client/_app/immutable/entry/app.75Uzo4oj.js.br +0 -0
- package/focus-app/client/_app/immutable/entry/app.75Uzo4oj.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/start.BmwiFFoe.js +1 -0
- package/focus-app/client/_app/immutable/entry/start.BmwiFFoe.js.br +2 -0
- package/focus-app/client/_app/immutable/entry/start.BmwiFFoe.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/{1.B83XRsuv.js → 1.hqfmE-jM.js} +1 -1
- package/focus-app/client/_app/immutable/nodes/1.hqfmE-jM.js.br +3 -0
- package/focus-app/client/_app/immutable/nodes/1.hqfmE-jM.js.gz +0 -0
- package/focus-app/client/_app/version.json +1 -1
- package/focus-app/client/_app/version.json.br +0 -0
- package/focus-app/client/_app/version.json.gz +0 -0
- package/focus-app/h2a-focus.json +29 -29
- package/focus-app/handler.js +4 -4
- package/focus-app/index.js +4 -4
- package/focus-app/server/chunks/chunks/{internal.js-BDHE9Kn1.js → internal.js-vq85iWAx.js} +2 -2
- package/focus-app/server/chunks/chunks/{internal.js-BDHE9Kn1.js.map → internal.js-vq85iWAx.js.map} +1 -1
- package/focus-app/server/chunks/{handler-BidpBSFZ.js → handler-f-0S9j72.js} +3 -3
- package/focus-app/server/chunks/{handler-BidpBSFZ.js.map → handler-f-0S9j72.js.map} +1 -1
- package/focus-app/server/chunks/{index.js-BNQ-AMZE.js → index.js-DlbaFcic.js} +2 -2
- package/focus-app/server/chunks/{index.js-BNQ-AMZE.js.map → index.js-DlbaFcic.js.map} +1 -1
- package/focus-app/server/chunks/{manifest.js-CAtvBIjA.js → manifest.js-CxrShg-z.js} +3 -3
- package/focus-app/server/chunks/{manifest.js-CAtvBIjA.js.map → manifest.js-CxrShg-z.js.map} +1 -1
- package/focus-app/server/chunks/nodes/{1.js-C16cgDY2.js → 1.js-O2SZgyXK.js} +2 -2
- package/focus-app/server/chunks/nodes/{1.js-C16cgDY2.js.map → 1.js-O2SZgyXK.js.map} +1 -1
- package/package.json +3 -3
- package/focus-app/client/_app/immutable/chunks/zL3j6erO.js +0 -2
- package/focus-app/client/_app/immutable/chunks/zL3j6erO.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/zL3j6erO.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/app.Dfo3Ymae.js.br +0 -0
- package/focus-app/client/_app/immutable/entry/app.Dfo3Ymae.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/start.BSQLtKUn.js +0 -1
- package/focus-app/client/_app/immutable/entry/start.BSQLtKUn.js.br +0 -0
- package/focus-app/client/_app/immutable/entry/start.BSQLtKUn.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/1.B83XRsuv.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/1.B83XRsuv.js.gz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMpE;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,8BAA8B,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAYD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAa/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,SAAS,CAUjG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAST;AAED,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAClD,2EAA2E;IAC3E,IAAI,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,GAAG,IAAI,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,CAoCrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CACvB,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,KACnC,IAAI,CAAC;CACX;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA6C9B"}
|
|
@@ -24,12 +24,13 @@
|
|
|
24
24
|
* identity, not the victim's inbox). The read → decide → append runs in ONE lock
|
|
25
25
|
* (no reclaim/mint race, F3).
|
|
26
26
|
*/
|
|
27
|
-
import {
|
|
27
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
28
28
|
import { randomUUID } from "node:crypto";
|
|
29
29
|
import { join } from "node:path";
|
|
30
30
|
import { verifyCanonical } from "@sentropic/h2a";
|
|
31
31
|
import { localStorePaths, withLock, withLockSync } from "../local-files/index.js";
|
|
32
32
|
import { getActiveMcpTrace } from "../mcp/phase-trace.js";
|
|
33
|
+
import { appendLaunchRow, launchLookupKey, lookupLaunchRows } from "../local-files/launch-index.js";
|
|
33
34
|
/**
|
|
34
35
|
* The one protocol accepted by the DEF identity-binding writer. The cull
|
|
35
36
|
* executor uses the same sentinel and refuses a writer inventory that cannot
|
|
@@ -75,6 +76,9 @@ export function listBindings(root) {
|
|
|
75
76
|
* `reclaimOrMint`.
|
|
76
77
|
*/
|
|
77
78
|
export function findBinding(root, key) {
|
|
79
|
+
const indexed = lookupLaunchRows(bindingsFile(root), "bindings", launchLookupKey(key.host, key.providerSessionId));
|
|
80
|
+
if (indexed !== undefined)
|
|
81
|
+
return indexed.at(-1);
|
|
78
82
|
let found;
|
|
79
83
|
for (const b of listBindings(root)) {
|
|
80
84
|
if (b.host === key.host && b.providerSessionId === key.providerSessionId) {
|
|
@@ -126,7 +130,10 @@ export function reclaimOrMint(root, key, deps) {
|
|
|
126
130
|
return { action: "reclaim", instance: existing.instance, agentUuid: existing.agentUuid };
|
|
127
131
|
}
|
|
128
132
|
const minted = deps.mint();
|
|
129
|
-
|
|
133
|
+
appendLaunchRow(bindingsFile(root), "bindings", {
|
|
134
|
+
...key, instance: minted.instance, agentUuid: minted.agentUuid,
|
|
135
|
+
at: new Date(deps.now()).toISOString()
|
|
136
|
+
});
|
|
130
137
|
return { action: "mint", instance: minted.instance, agentUuid: minted.agentUuid };
|
|
131
138
|
}, {
|
|
132
139
|
ownerMetadata: {
|
|
@@ -174,7 +181,10 @@ export async function reclaimOrMintAsync(root, key, deps, options = {}) {
|
|
|
174
181
|
// Publish keys / registration / alias BEFORE the binding row so no reader
|
|
175
182
|
// can observe a binding whose keyring is not yet provable.
|
|
176
183
|
options.beforePublish?.(result, { identity: true });
|
|
177
|
-
|
|
184
|
+
appendLaunchRow(bindingsFile(root), "bindings", {
|
|
185
|
+
...key, instance: minted.instance, agentUuid: minted.agentUuid,
|
|
186
|
+
at: new Date(deps.now()).toISOString()
|
|
187
|
+
});
|
|
178
188
|
return result;
|
|
179
189
|
}, {
|
|
180
190
|
ownerMetadata: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../src/runtime/identity/bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,5 +51,7 @@ export interface H2AIdentityAlias {
|
|
|
51
51
|
}
|
|
52
52
|
export declare function listIdentityAliases(root: string, instance?: string): H2AIdentityAlias[];
|
|
53
53
|
export declare function legacyAliasAlreadyAdopted(root: string, legacyInstance: string): boolean;
|
|
54
|
+
/** Earliest claimant owns the shared legacy inbox; equal timestamps keep log order. */
|
|
55
|
+
export declare function legacyAliasOwner(root: string, legacyInstance: string, allAliases?: readonly H2AIdentityAlias[]): H2AIdentityAlias | undefined;
|
|
54
56
|
export declare function recordIdentityAlias(root: string, alias: H2AIdentityAlias): void;
|
|
55
57
|
//# sourceMappingURL=migration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/runtime/identity/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/runtime/identity/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,CAAC,SAAS,WAAW,EAAE,CAAC,GAC1C,WAAW,EAAE,CAUf;AAED,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,sBAAsB,CAoBvF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAUD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAkBvF;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAMvF;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,gBAAgB,GAAG,SAAS,CAK7I;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAS/E"}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* Pure + total: the impure part (which dirs to read) belongs to the caller; this
|
|
13
13
|
* is the deterministic merge that is unit-tested in isolation.
|
|
14
14
|
*/
|
|
15
|
-
import {
|
|
15
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
16
|
+
import { appendLaunchRow, launchLookupKey, lookupLaunchRows } from "../local-files/launch-index.js";
|
|
16
17
|
import { join } from "node:path";
|
|
17
18
|
/**
|
|
18
19
|
* Merge envelope sets, deduplicated by `envelope.id`. Pass the CURRENT inbox
|
|
@@ -70,6 +71,11 @@ function aliasesFile(root) {
|
|
|
70
71
|
}
|
|
71
72
|
export function listIdentityAliases(root, instance) {
|
|
72
73
|
const f = aliasesFile(root);
|
|
74
|
+
if (instance !== undefined) {
|
|
75
|
+
const indexed = lookupLaunchRows(f, "aliases", launchLookupKey("instance", instance));
|
|
76
|
+
if (indexed !== undefined)
|
|
77
|
+
return indexed;
|
|
78
|
+
}
|
|
73
79
|
if (!existsSync(f))
|
|
74
80
|
return [];
|
|
75
81
|
const out = [];
|
|
@@ -88,13 +94,23 @@ export function listIdentityAliases(root, instance) {
|
|
|
88
94
|
return out;
|
|
89
95
|
}
|
|
90
96
|
export function legacyAliasAlreadyAdopted(root, legacyInstance) {
|
|
97
|
+
const indexed = lookupLaunchRows(aliasesFile(root), "aliases", launchLookupKey("adopted", legacyInstance));
|
|
98
|
+
if (indexed !== undefined)
|
|
99
|
+
return indexed.length > 0;
|
|
91
100
|
return listIdentityAliases(root).some((alias) => alias.legacyInstance === legacyInstance && alias.adoptedKeyring);
|
|
92
101
|
}
|
|
102
|
+
/** Earliest claimant owns the shared legacy inbox; equal timestamps keep log order. */
|
|
103
|
+
export function legacyAliasOwner(root, legacyInstance, allAliases) {
|
|
104
|
+
const indexed = allAliases ? undefined : lookupLaunchRows(aliasesFile(root), "aliases", launchLookupKey("owner", legacyInstance));
|
|
105
|
+
const claimants = indexed ?? (allAliases ?? listIdentityAliases(root)).filter(alias => alias.legacyInstance === legacyInstance);
|
|
106
|
+
return claimants.reduce((first, alias) => !first || alias.at < first.at ? alias : first, undefined);
|
|
107
|
+
}
|
|
93
108
|
export function recordIdentityAlias(root, alias) {
|
|
94
109
|
mkdirSync(identityDir(root), { recursive: true });
|
|
95
|
-
const
|
|
110
|
+
const indexed = lookupLaunchRows(aliasesFile(root), "aliases", launchLookupKey("pair", alias.instance, alias.legacyInstance));
|
|
111
|
+
const exists = (indexed ?? listIdentityAliases(root)).some((entry) => entry.instance === alias.instance && entry.legacyInstance === alias.legacyInstance);
|
|
96
112
|
if (exists)
|
|
97
113
|
return;
|
|
98
|
-
|
|
114
|
+
appendLaunchRow(aliasesFile(root), "aliases", alias);
|
|
99
115
|
}
|
|
100
116
|
//# sourceMappingURL=migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/runtime/identity/migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/runtime/identity/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type LaunchLogKind = "instances" | "bindings" | "aliases" | "keys";
|
|
2
|
+
export declare const launchLookupKey: (...parts: unknown[]) => string;
|
|
3
|
+
/** undefined means no valid index: callers retain their original read policy. */
|
|
4
|
+
export declare function lookupLaunchRows<T>(file: string, kind: LaunchLogKind, key: string): T[] | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Build/refresh only derived files. Publication is atomic; previous bucket
|
|
7
|
+
* generations remain available for in-flight readers and rollback. A repeated
|
|
8
|
+
* command on unchanged logs is a no-op. Must not be called under registry or
|
|
9
|
+
* identity locks: the initial scan belongs to explicit maintenance.
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildLaunchIndex(file: string, kind: LaunchLogKind, incremental?: boolean): void;
|
|
12
|
+
/** Append audit first. A crash/failed index update is recovered by tail replay. */
|
|
13
|
+
export declare function appendLaunchRow(file: string, kind: LaunchLogKind, row: unknown): void;
|
|
14
|
+
//# sourceMappingURL=launch-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-index.d.ts","sourceRoot":"","sources":["../../../src/runtime/local-files/launch-index.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAY1E,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,OAAO,EAAE,KAAG,MAA+B,CAAC;AAsFtF,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,SAAS,CAwDnG;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,UAAQ,GAAG,IAAI,CA6D7F;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAMrF"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reversible point indexes for the append-only launch logs. Offsets reference
|
|
3
|
+
* the ORIGINAL records: no registration, binding, alias or audit is rewritten.
|
|
4
|
+
* Old writers remain compatible: bytes after the indexed prefix are replayed.
|
|
5
|
+
* Replacing a log or observing a truncation invalidates its index; corruption falls back to
|
|
6
|
+
* the original reader. Immutable bucket generations and tail replay give a
|
|
7
|
+
* complete snapshot even when another writer publishes a newer manifest.
|
|
8
|
+
*/
|
|
9
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
10
|
+
import { appendFileSync, closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, renameSync, statSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { withLockSync } from "./locks.js";
|
|
13
|
+
import { getActiveMcpTrace } from "../mcp/phase-trace.js";
|
|
14
|
+
const digest = (text) => createHash("sha256").update(text).digest("hex");
|
|
15
|
+
const directory = (file) => `${file}.launch-index-v1`;
|
|
16
|
+
const manifestPath = (file) => join(directory(file), "current.json");
|
|
17
|
+
export const launchLookupKey = (...parts) => JSON.stringify(parts);
|
|
18
|
+
function parseManifest(raw) {
|
|
19
|
+
const envelope = JSON.parse(raw);
|
|
20
|
+
if (!envelope.data || digest(JSON.stringify(envelope.data)) !== envelope.hash)
|
|
21
|
+
throw new Error("corrupt launch manifest");
|
|
22
|
+
return envelope.data;
|
|
23
|
+
}
|
|
24
|
+
function keys(kind, row) {
|
|
25
|
+
switch (kind) {
|
|
26
|
+
case "instances": return [launchLookupKey(row.id)];
|
|
27
|
+
case "bindings": return [launchLookupKey(row.host, row.providerSessionId)];
|
|
28
|
+
case "keys": return [launchLookupKey(row.instance)];
|
|
29
|
+
case "aliases": return [
|
|
30
|
+
launchLookupKey("instance", row.instance),
|
|
31
|
+
launchLookupKey("pair", row.instance, row.legacyInstance),
|
|
32
|
+
launchLookupKey("owner", row.legacyInstance),
|
|
33
|
+
...(row.adoptedKeyring ? [launchLookupKey("adopted", row.legacyInstance)] : [])
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function decode(kind, line) {
|
|
38
|
+
if (!line.trim())
|
|
39
|
+
return undefined;
|
|
40
|
+
let row;
|
|
41
|
+
try {
|
|
42
|
+
row = JSON.parse(line);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (kind === "instances" || kind === "keys")
|
|
46
|
+
throw error;
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
// Do not silently index away a valid JSON primitive that the authoritative
|
|
50
|
+
// reader might reject. Refuse the derived view and retain its original policy.
|
|
51
|
+
if (row === null || typeof row !== "object" || Array.isArray(row))
|
|
52
|
+
throw new Error("invalid launch row shape");
|
|
53
|
+
return row;
|
|
54
|
+
}
|
|
55
|
+
function prefixValid(manifest, kind, st) {
|
|
56
|
+
return manifest.version === 1 && manifest.kind === kind &&
|
|
57
|
+
manifest.dev === st.dev && manifest.ino === st.ino &&
|
|
58
|
+
Number.isSafeInteger(manifest.size) && manifest.size >= 0 && st.size >= manifest.size &&
|
|
59
|
+
// Same-size rewrites (including a truncate/regrow) are not appends.
|
|
60
|
+
(st.size > manifest.size || st.mtimeMs === manifest.mtimeMs && st.ctimeMs === manifest.ctimeMs);
|
|
61
|
+
}
|
|
62
|
+
function readRange(fd, start, end) {
|
|
63
|
+
const buffer = Buffer.alloc(end - start);
|
|
64
|
+
let read = 0;
|
|
65
|
+
while (read < buffer.length) {
|
|
66
|
+
const n = readSync(fd, buffer, read, buffer.length - read, start + read);
|
|
67
|
+
if (!n)
|
|
68
|
+
throw new Error("launch log changed during read");
|
|
69
|
+
read += n;
|
|
70
|
+
}
|
|
71
|
+
return buffer;
|
|
72
|
+
}
|
|
73
|
+
function scan(buffer, start, kind) {
|
|
74
|
+
const rows = [];
|
|
75
|
+
let begin = 0;
|
|
76
|
+
for (let end = buffer.indexOf(10); end !== -1; end = buffer.indexOf(10, begin)) {
|
|
77
|
+
const row = decode(kind, buffer.subarray(begin, end).toString("utf8"));
|
|
78
|
+
if (row)
|
|
79
|
+
rows.push({ row, offset: start + begin });
|
|
80
|
+
begin = end + 1;
|
|
81
|
+
}
|
|
82
|
+
return rows;
|
|
83
|
+
}
|
|
84
|
+
function readRow(fd, offset, end, kind) {
|
|
85
|
+
if (!Number.isSafeInteger(offset) || offset < 0 || offset >= end)
|
|
86
|
+
throw new Error("invalid launch offset");
|
|
87
|
+
const chunks = [];
|
|
88
|
+
for (let pos = offset; pos < end;) {
|
|
89
|
+
const chunk = readRange(fd, pos, Math.min(pos + 4096, end));
|
|
90
|
+
const lf = chunk.indexOf(10);
|
|
91
|
+
chunks.push(lf === -1 ? chunk : chunk.subarray(0, lf));
|
|
92
|
+
if (lf !== -1)
|
|
93
|
+
return decode(kind, Buffer.concat(chunks).toString("utf8"));
|
|
94
|
+
pos += chunk.length;
|
|
95
|
+
}
|
|
96
|
+
throw new Error("incomplete indexed launch row");
|
|
97
|
+
}
|
|
98
|
+
function readBucket(file, manifest, shard) {
|
|
99
|
+
const entry = manifest.buckets[shard];
|
|
100
|
+
if (!entry)
|
|
101
|
+
return Object.create(null);
|
|
102
|
+
if (!/^[0-9a-f-]+\.json$/.test(entry.file))
|
|
103
|
+
throw new Error("invalid launch bucket path");
|
|
104
|
+
const text = readFileSync(join(directory(file), entry.file), "utf8");
|
|
105
|
+
if (digest(text) !== entry.hash)
|
|
106
|
+
throw new Error("corrupt launch bucket");
|
|
107
|
+
return JSON.parse(text);
|
|
108
|
+
}
|
|
109
|
+
/** undefined means no valid index: callers retain their original read policy. */
|
|
110
|
+
export function lookupLaunchRows(file, kind, key) {
|
|
111
|
+
const trace = getActiveMcpTrace();
|
|
112
|
+
const read = () => {
|
|
113
|
+
let fd;
|
|
114
|
+
try {
|
|
115
|
+
{
|
|
116
|
+
const raw = readFileSync(manifestPath(file), "utf8");
|
|
117
|
+
const manifest = parseManifest(raw);
|
|
118
|
+
fd = openSync(file, "r");
|
|
119
|
+
const st = fstatSync(fd);
|
|
120
|
+
if (!prefixValid(manifest, kind, st))
|
|
121
|
+
return undefined;
|
|
122
|
+
if (kind === "aliases" && JSON.parse(key)[0] === "owner" && !manifest.aliasOwner)
|
|
123
|
+
return undefined;
|
|
124
|
+
const bucket = readBucket(file, manifest, digest(key).slice(0, 2));
|
|
125
|
+
const offsets = bucket[key] ?? [];
|
|
126
|
+
if (!Array.isArray(offsets))
|
|
127
|
+
throw new Error("invalid launch offsets");
|
|
128
|
+
const result = new Map();
|
|
129
|
+
// Binding routing is last-wins; registration is first-wins. Repeated
|
|
130
|
+
// rows for one conversation/agent must not recreate the historical
|
|
131
|
+
// scan, even when reading an older index containing every offset.
|
|
132
|
+
const selected = kind === "bindings" ? offsets.slice(-1) : kind === "instances" ? offsets.slice(0, 1) : offsets;
|
|
133
|
+
for (const offset of selected) {
|
|
134
|
+
if (offset >= manifest.size)
|
|
135
|
+
throw new Error("offset outside indexed prefix");
|
|
136
|
+
const row = readRow(fd, offset, st.size, kind);
|
|
137
|
+
if (!row || !keys(kind, row).includes(key))
|
|
138
|
+
throw new Error("launch offset/key mismatch");
|
|
139
|
+
result.set(offset, row);
|
|
140
|
+
}
|
|
141
|
+
// A partial trailing append is not published yet. Replay only complete
|
|
142
|
+
// lines, and retain the original log's source order / first-last policy.
|
|
143
|
+
const tail = readRange(fd, manifest.size, st.size);
|
|
144
|
+
if (tail.length && tail.at(-1) !== 10)
|
|
145
|
+
return undefined;
|
|
146
|
+
for (const { row, offset } of scan(tail, manifest.size, kind)) {
|
|
147
|
+
if (!keys(kind, row).includes(key))
|
|
148
|
+
continue;
|
|
149
|
+
if (kind === "instances" && result.size > 0)
|
|
150
|
+
continue;
|
|
151
|
+
if (kind === "bindings")
|
|
152
|
+
result.clear();
|
|
153
|
+
if (kind === "aliases" && JSON.parse(key)[0] === "owner" && result.size > 0) {
|
|
154
|
+
const previous = result.values().next().value;
|
|
155
|
+
if (!(row.at < previous.at))
|
|
156
|
+
continue;
|
|
157
|
+
result.clear();
|
|
158
|
+
}
|
|
159
|
+
result.set(offset, row);
|
|
160
|
+
}
|
|
161
|
+
closeSync(fd);
|
|
162
|
+
fd = undefined;
|
|
163
|
+
// Bucket generations are immutable and retained. A newer manifest
|
|
164
|
+
// cannot invalidate this view: we replayed every complete row through
|
|
165
|
+
// st.size from the same original fd. Retrying unrelated publications
|
|
166
|
+
// caused bursts to exhaust the retries and fall back to a full scan.
|
|
167
|
+
const current = statSync(file);
|
|
168
|
+
if (current.dev !== st.dev || current.ino !== st.ino || current.size < st.size ||
|
|
169
|
+
current.size === st.size && (current.mtimeMs !== st.mtimeMs || current.ctimeMs !== st.ctimeMs))
|
|
170
|
+
return undefined;
|
|
171
|
+
return [...result.entries()].sort(([a], [b]) => a - b).map(([, row]) => row);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch { /* derived data unavailable: original log is authoritative */ }
|
|
175
|
+
finally {
|
|
176
|
+
if (fd !== undefined)
|
|
177
|
+
closeSync(fd);
|
|
178
|
+
}
|
|
179
|
+
return undefined;
|
|
180
|
+
};
|
|
181
|
+
return trace ? trace.span(`${kind}_lookup`, read) : read();
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Build/refresh only derived files. Publication is atomic; previous bucket
|
|
185
|
+
* generations remain available for in-flight readers and rollback. A repeated
|
|
186
|
+
* command on unchanged logs is a no-op. Must not be called under registry or
|
|
187
|
+
* identity locks: the initial scan belongs to explicit maintenance.
|
|
188
|
+
*/
|
|
189
|
+
export function buildLaunchIndex(file, kind, incremental = false) {
|
|
190
|
+
mkdirSync(directory(file), { recursive: true, mode: 0o700 });
|
|
191
|
+
withLockSync(join(directory(file), ".lock"), () => {
|
|
192
|
+
const fd = openSync(file, "r");
|
|
193
|
+
try {
|
|
194
|
+
const st = fstatSync(fd);
|
|
195
|
+
let previous;
|
|
196
|
+
try {
|
|
197
|
+
const candidate = parseManifest(readFileSync(manifestPath(file), "utf8"));
|
|
198
|
+
if (prefixValid(candidate, kind, st))
|
|
199
|
+
previous = candidate;
|
|
200
|
+
}
|
|
201
|
+
catch { /* first build / invalidated derived data */ }
|
|
202
|
+
if (kind === "aliases" && !previous?.aliasOwner)
|
|
203
|
+
previous = undefined;
|
|
204
|
+
if (!incremental && previous) {
|
|
205
|
+
try {
|
|
206
|
+
for (const shard of Object.keys(previous.buckets))
|
|
207
|
+
readBucket(file, previous, shard);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
previous = undefined;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (previous?.size === st.size)
|
|
214
|
+
return;
|
|
215
|
+
// The append path never initiates a full scan under the caller's lock.
|
|
216
|
+
if (incremental && (!previous || st.size - previous.size > 1024 * 1024))
|
|
217
|
+
return;
|
|
218
|
+
const start = previous?.size ?? 0;
|
|
219
|
+
const tail = readRange(fd, start, st.size);
|
|
220
|
+
const size = start + tail.lastIndexOf(10) + 1;
|
|
221
|
+
if (previous && size === previous.size)
|
|
222
|
+
return; // unchanged partial trailing row
|
|
223
|
+
const rows = scan(tail.subarray(0, size - start), start, kind);
|
|
224
|
+
const changed = new Map();
|
|
225
|
+
for (const { row, offset } of rows)
|
|
226
|
+
for (const key of keys(kind, row)) {
|
|
227
|
+
const shard = digest(key).slice(0, 2);
|
|
228
|
+
let bucket = changed.get(shard);
|
|
229
|
+
if (!bucket) {
|
|
230
|
+
bucket = previous ? readBucket(file, previous, shard) : Object.create(null);
|
|
231
|
+
changed.set(shard, bucket);
|
|
232
|
+
}
|
|
233
|
+
if (kind === "bindings")
|
|
234
|
+
bucket[key] = [offset];
|
|
235
|
+
else if (kind === "instances")
|
|
236
|
+
bucket[key] ??= [offset];
|
|
237
|
+
else if (kind === "aliases" && JSON.parse(key)[0] === "owner") {
|
|
238
|
+
const prior = bucket[key]?.[0];
|
|
239
|
+
if (prior === undefined || row.at < readRow(fd, prior, st.size, kind).at)
|
|
240
|
+
bucket[key] = [offset];
|
|
241
|
+
}
|
|
242
|
+
else
|
|
243
|
+
(bucket[key] ??= []).push(offset);
|
|
244
|
+
}
|
|
245
|
+
const current = statSync(file);
|
|
246
|
+
if (current.dev !== st.dev || current.ino !== st.ino || current.size < st.size ||
|
|
247
|
+
current.size === st.size && (current.mtimeMs !== st.mtimeMs || current.ctimeMs !== st.ctimeMs))
|
|
248
|
+
throw new Error("launch log replaced during indexing; retry maintenance");
|
|
249
|
+
const generation = randomUUID();
|
|
250
|
+
const manifest = { version: 1, kind, generation,
|
|
251
|
+
...(kind === "aliases" ? { aliasOwner: true } : {}),
|
|
252
|
+
dev: st.dev, ino: st.ino, size, mtimeMs: st.mtimeMs, ctimeMs: st.ctimeMs,
|
|
253
|
+
buckets: { ...previous?.buckets } };
|
|
254
|
+
for (const [shard, bucket] of changed) {
|
|
255
|
+
const text = JSON.stringify(bucket);
|
|
256
|
+
const name = `${generation}-${shard}.json`;
|
|
257
|
+
writeFileSync(join(directory(file), name), text, { mode: 0o600 });
|
|
258
|
+
manifest.buckets[shard] = { file: name, hash: digest(text) };
|
|
259
|
+
}
|
|
260
|
+
const temp = join(directory(file), `${generation}.tmp`);
|
|
261
|
+
writeFileSync(temp, JSON.stringify({ data: manifest, hash: digest(JSON.stringify(manifest)) }), { mode: 0o600 });
|
|
262
|
+
renameSync(temp, manifestPath(file));
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
closeSync(fd);
|
|
266
|
+
}
|
|
267
|
+
}, incremental ? { timeoutMs: 0, reclaimStale: false } : {});
|
|
268
|
+
}
|
|
269
|
+
/** Append audit first. A crash/failed index update is recovered by tail replay. */
|
|
270
|
+
export function appendLaunchRow(file, kind, row) {
|
|
271
|
+
appendFileSync(file, `${JSON.stringify(row)}\n`, "utf8");
|
|
272
|
+
if (existsSync(manifestPath(file))) {
|
|
273
|
+
try {
|
|
274
|
+
buildLaunchIndex(file, kind, true);
|
|
275
|
+
}
|
|
276
|
+
catch { /* index failure must not roll back an already published audit row */ }
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=launch-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-index.js","sourceRoot":"","sources":["../../../src/runtime/local-files/launch-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/runtime/local-files/store.ts"],"names":[],"mappings":"AAaA,OAAO,EAoBL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAEvB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAgG,KAAK,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AACjL,OAAO,EAAkB,KAAK,uBAAuB,EAAE,KAAK,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/runtime/local-files/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,10 @@ import { authorizeDrive } from '../drive/index.js';
|
|
|
7
7
|
import { withLockSync } from "./locks.js";
|
|
8
8
|
import { withLeaseSync } from "./lease.js";
|
|
9
9
|
import { getActiveMcpTrace } from "../mcp/phase-trace.js";
|
|
10
|
+
import { appendLaunchRow, launchLookupKey, lookupLaunchRows } from "./launch-index.js";
|
|
10
11
|
import { inboxDir, inboxDirRaw, localStorePaths, negotiationDir, negotiationJournalFile, outboxDir, outboxDirRaw, safePathSegment } from "./paths.js";
|
|
11
12
|
import { H2A_STORE_SCHEMA_FILE, H2A_STORE_SCHEMA_VERSION, StoreSchemaMismatchError, readCliPackageVersion } from "./schema.js";
|
|
12
|
-
import { listIdentityAliases, mergeInboxDedup } from "../identity/migration.js";
|
|
13
|
+
import { listIdentityAliases, legacyAliasOwner, mergeInboxDedup } from "../identity/migration.js";
|
|
13
14
|
/** L2: a mutator refused because the store was opened read-only. */
|
|
14
15
|
export class StorageReadonlyError extends Error {
|
|
15
16
|
code = "storage_readonly";
|
|
@@ -236,6 +237,11 @@ export function createLocalStore(options) {
|
|
|
236
237
|
}));
|
|
237
238
|
}
|
|
238
239
|
function findInstance(id) {
|
|
240
|
+
const indexed = lookupLaunchRows(paths.instances, "instances", launchLookupKey(id));
|
|
241
|
+
if (indexed !== undefined) {
|
|
242
|
+
const reg = indexed[0];
|
|
243
|
+
return reg ? { ...reg, roles: toArray(reg.roles), scopes: toArray(reg.scopes) } : undefined;
|
|
244
|
+
}
|
|
239
245
|
return listInstances().find((entry) => entry.id === id);
|
|
240
246
|
}
|
|
241
247
|
function registerInstance(reg) {
|
|
@@ -244,7 +250,7 @@ export function createLocalStore(options) {
|
|
|
244
250
|
if (findInstance(reg.id)) {
|
|
245
251
|
return;
|
|
246
252
|
}
|
|
247
|
-
|
|
253
|
+
appendLaunchRow(paths.instances, "instances", reg);
|
|
248
254
|
}, lockOpts);
|
|
249
255
|
}
|
|
250
256
|
// DEC-078: the active public keys for an instance = the keys baked into its
|
|
@@ -252,7 +258,7 @@ export function createLocalStore(options) {
|
|
|
252
258
|
// from append-only sources so a rotation never rewrites a registration.
|
|
253
259
|
function listInstanceKeys(instanceId) {
|
|
254
260
|
const fromRegistration = findInstance(instanceId)?.publicKeys ?? [];
|
|
255
|
-
const events = readJsonl(paths.keys).filter((e) => e.instance === instanceId);
|
|
261
|
+
const events = (lookupLaunchRows(paths.keys, "keys", launchLookupKey(instanceId)) ?? readJsonl(paths.keys)).filter((e) => e.instance === instanceId);
|
|
256
262
|
const revoked = new Set(events.filter((e) => e.type === "revoked").map((e) => e.publicKey));
|
|
257
263
|
const active = new Set();
|
|
258
264
|
for (const pem of fromRegistration)
|
|
@@ -279,7 +285,7 @@ export function createLocalStore(options) {
|
|
|
279
285
|
if (listInstanceKeys(instanceId).includes(publicKeyPem)) {
|
|
280
286
|
throw new Error(`Key already registered for ${instanceId}`);
|
|
281
287
|
}
|
|
282
|
-
|
|
288
|
+
appendLaunchRow(paths.keys, "keys", {
|
|
283
289
|
instance: instanceId,
|
|
284
290
|
publicKey: publicKeyPem,
|
|
285
291
|
type: "added",
|
|
@@ -295,7 +301,7 @@ export function createLocalStore(options) {
|
|
|
295
301
|
if (!listInstanceKeys(instanceId).includes(publicKeyPem)) {
|
|
296
302
|
throw new Error(`Key not active for ${instanceId}`);
|
|
297
303
|
}
|
|
298
|
-
|
|
304
|
+
appendLaunchRow(paths.keys, "keys", {
|
|
299
305
|
instance: instanceId,
|
|
300
306
|
publicKey: publicKeyPem,
|
|
301
307
|
type: "revoked",
|
|
@@ -1282,14 +1288,11 @@ export function createLocalStore(options) {
|
|
|
1282
1288
|
// legacyInstance (earliest alias `at`). `adoptedKeyring` can't gate this — a
|
|
1283
1289
|
// fresh first connect has adoptedKeyring:false too. This keeps the legit
|
|
1284
1290
|
// "read your own migrated inbox" while closing the cross-read.
|
|
1285
|
-
const
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
const earliest = claimants.reduce((m, x) => (x.at < m.at ? x : m), claimants[0]);
|
|
1291
|
-
return earliest.instance === actor;
|
|
1292
|
-
})
|
|
1291
|
+
const indexedAliases = lookupLaunchRows(join(paths.root, "identity", "aliases.jsonl"), "aliases", launchLookupKey("instance", actor));
|
|
1292
|
+
// Without an index, retain the original single full read for both filters.
|
|
1293
|
+
const allAliases = indexedAliases === undefined ? listIdentityAliases(paths.root) : undefined;
|
|
1294
|
+
const ownedLegacy = (indexedAliases ?? allAliases.filter(a => a.instance === actor))
|
|
1295
|
+
.filter((a) => legacyAliasOwner(paths.root, a.legacyInstance, allAliases)?.instance === actor)
|
|
1293
1296
|
.map((a) => a.legacyInstance);
|
|
1294
1297
|
const dirs = new Set();
|
|
1295
1298
|
for (const handle of [actor, ...ownedLegacy]) {
|