@sentropic/h2a 0.98.1 → 0.98.3
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-command-map.d.ts.map +1 -1
- package/dist/cli-command-map.js +1 -0
- package/dist/cli-command-map.js.map +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 +79 -12
- package/dist/cli.js.map +1 -1
- package/dist/hosts/plugin.d.ts +2 -2
- package/dist/hosts/plugin.d.ts.map +1 -1
- package/dist/hosts/plugin.js +16 -1
- package/dist/hosts/plugin.js.map +1 -1
- package/dist/hosts/vibe.d.ts +15 -0
- package/dist/hosts/vibe.d.ts.map +1 -0
- package/dist/hosts/vibe.js +40 -0
- package/dist/hosts/vibe.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.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 +29 -15
- package/dist/runtime/local-files/store.js.map +1 -1
- package/dist/runtime/loop/index.d.ts +1 -1
- package/dist/runtime/loop/index.d.ts.map +1 -1
- package/dist/runtime/loop/index.js.map +1 -1
- package/dist/runtime/mcp/agent-launch.d.ts +1 -1
- package/dist/runtime/mcp/agent-launch.d.ts.map +1 -1
- package/dist/runtime/mcp/agent-launch.js +9 -3
- package/dist/runtime/mcp/agent-launch.js.map +1 -1
- package/dist/runtime/mcp/handlers.js +1 -1
- package/dist/runtime/mcp/handlers.js.map +1 -1
- package/dist/runtime/mcp/tools.js +5 -5
- package/dist/runtime/mcp/tools.js.map +1 -1
- package/dist/runtime/version/agent-version.d.ts.map +1 -1
- package/dist/runtime/version/agent-version.js +2 -1
- package/dist/runtime/version/agent-version.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 +4 -4
- package/skills/h2a/SKILL.md +4 -0
- package/skills/h2a-run/SKILL.md +11 -9
- package/skills/harness/review/SKILL.md +8 -4
- 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
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/runtime/local-files/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { appendFileSync, openSync, closeSync, fsyncSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { appendFileSync, openSync, closeSync, fsyncSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { H2A_ARTIFACT_KINDS, H2A_AUTHORITY_MATRIX, H2A_DECLARATION_INTERET_BODY_KIND, H2A_DEFAULT_MAX_SKEW_MS, appendJournalEntry, assertValidNegotiationState, canSignArtifactKind, computeHash, createJournalEntry, deriveDecisionDossier as deriveDecisionDossierCore, derivePostureConflit, derivePostureConfiance as derivePostureConfianceCore, evaluatePresenterBias, isH2AEnvelope, validateH2AEnvelope, isH2ADeclarationInteret, validateSubagentBinding, verifyCanonical, verifyJournalChain } from "@sentropic/h2a";
|
|
4
4
|
import { MCP_IDENTITY_TIMEOUT_MS } from '../mcp/identity-state.js';
|
|
@@ -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";
|
|
@@ -92,7 +93,18 @@ function ensureSchemaSentinel(root, options) {
|
|
|
92
93
|
createdAt: new Date().toISOString(),
|
|
93
94
|
createdBy: readCliPackageVersion()
|
|
94
95
|
};
|
|
95
|
-
|
|
96
|
+
// Atomic create, not a plain writeFileSync: on a fresh store root several
|
|
97
|
+
// concurrent processes (e.g. the F2 mixed sync-CLI + async-MCP writer
|
|
98
|
+
// burst) all pass the existsSync check together, and the first writer's
|
|
99
|
+
// truncate-then-write is observable mid-write by the others — an empty
|
|
100
|
+
// or partial JSON read lands here as StoreSchemaMismatchError
|
|
101
|
+
// "<unparseable>". A pid-suffixed temp file in the SAME directory plus
|
|
102
|
+
// rename(2) is atomic: a reader either sees no file or the complete
|
|
103
|
+
// sentinel, never a torn one. Losers of the create race overwrite the
|
|
104
|
+
// winner with equivalent content, which is idempotent.
|
|
105
|
+
const tmpPath = `${sentinelPath}.${process.pid}.tmp`;
|
|
106
|
+
writeFileSync(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
|
|
107
|
+
renameSync(tmpPath, sentinelPath);
|
|
96
108
|
return;
|
|
97
109
|
}
|
|
98
110
|
let parsed;
|
|
@@ -236,6 +248,11 @@ export function createLocalStore(options) {
|
|
|
236
248
|
}));
|
|
237
249
|
}
|
|
238
250
|
function findInstance(id) {
|
|
251
|
+
const indexed = lookupLaunchRows(paths.instances, "instances", launchLookupKey(id));
|
|
252
|
+
if (indexed !== undefined) {
|
|
253
|
+
const reg = indexed[0];
|
|
254
|
+
return reg ? { ...reg, roles: toArray(reg.roles), scopes: toArray(reg.scopes) } : undefined;
|
|
255
|
+
}
|
|
239
256
|
return listInstances().find((entry) => entry.id === id);
|
|
240
257
|
}
|
|
241
258
|
function registerInstance(reg) {
|
|
@@ -244,7 +261,7 @@ export function createLocalStore(options) {
|
|
|
244
261
|
if (findInstance(reg.id)) {
|
|
245
262
|
return;
|
|
246
263
|
}
|
|
247
|
-
|
|
264
|
+
appendLaunchRow(paths.instances, "instances", reg);
|
|
248
265
|
}, lockOpts);
|
|
249
266
|
}
|
|
250
267
|
// DEC-078: the active public keys for an instance = the keys baked into its
|
|
@@ -252,7 +269,7 @@ export function createLocalStore(options) {
|
|
|
252
269
|
// from append-only sources so a rotation never rewrites a registration.
|
|
253
270
|
function listInstanceKeys(instanceId) {
|
|
254
271
|
const fromRegistration = findInstance(instanceId)?.publicKeys ?? [];
|
|
255
|
-
const events = readJsonl(paths.keys).filter((e) => e.instance === instanceId);
|
|
272
|
+
const events = (lookupLaunchRows(paths.keys, "keys", launchLookupKey(instanceId)) ?? readJsonl(paths.keys)).filter((e) => e.instance === instanceId);
|
|
256
273
|
const revoked = new Set(events.filter((e) => e.type === "revoked").map((e) => e.publicKey));
|
|
257
274
|
const active = new Set();
|
|
258
275
|
for (const pem of fromRegistration)
|
|
@@ -279,7 +296,7 @@ export function createLocalStore(options) {
|
|
|
279
296
|
if (listInstanceKeys(instanceId).includes(publicKeyPem)) {
|
|
280
297
|
throw new Error(`Key already registered for ${instanceId}`);
|
|
281
298
|
}
|
|
282
|
-
|
|
299
|
+
appendLaunchRow(paths.keys, "keys", {
|
|
283
300
|
instance: instanceId,
|
|
284
301
|
publicKey: publicKeyPem,
|
|
285
302
|
type: "added",
|
|
@@ -295,7 +312,7 @@ export function createLocalStore(options) {
|
|
|
295
312
|
if (!listInstanceKeys(instanceId).includes(publicKeyPem)) {
|
|
296
313
|
throw new Error(`Key not active for ${instanceId}`);
|
|
297
314
|
}
|
|
298
|
-
|
|
315
|
+
appendLaunchRow(paths.keys, "keys", {
|
|
299
316
|
instance: instanceId,
|
|
300
317
|
publicKey: publicKeyPem,
|
|
301
318
|
type: "revoked",
|
|
@@ -1282,14 +1299,11 @@ export function createLocalStore(options) {
|
|
|
1282
1299
|
// legacyInstance (earliest alias `at`). `adoptedKeyring` can't gate this — a
|
|
1283
1300
|
// fresh first connect has adoptedKeyring:false too. This keeps the legit
|
|
1284
1301
|
// "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
|
-
})
|
|
1302
|
+
const indexedAliases = lookupLaunchRows(join(paths.root, "identity", "aliases.jsonl"), "aliases", launchLookupKey("instance", actor));
|
|
1303
|
+
// Without an index, retain the original single full read for both filters.
|
|
1304
|
+
const allAliases = indexedAliases === undefined ? listIdentityAliases(paths.root) : undefined;
|
|
1305
|
+
const ownedLegacy = (indexedAliases ?? allAliases.filter(a => a.instance === actor))
|
|
1306
|
+
.filter((a) => legacyAliasOwner(paths.root, a.legacyInstance, allAliases)?.instance === actor)
|
|
1293
1307
|
.map((a) => a.legacyInstance);
|
|
1294
1308
|
const dirs = new Set();
|
|
1295
1309
|
for (const handle of [actor, ...ownedLegacy]) {
|