@modelprofile.com/authswitch 6.5.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/authority-contract.d.ts +302 -6
  3. package/dist_ts/authority-contract.js +1 -1
  4. package/dist_ts/authority-runtime-contract.d.ts +13 -0
  5. package/dist_ts/authorityrehearsal.child.d.ts +1 -0
  6. package/dist_ts/authorityrehearsal.child.js +395 -0
  7. package/dist_ts/classes.accountlist.js +4 -3
  8. package/dist_ts/classes.authoritybackup.d.ts +134 -0
  9. package/dist_ts/classes.authoritybackup.js +769 -0
  10. package/dist_ts/classes.authoritybroker.d.ts +25 -5
  11. package/dist_ts/classes.authoritybroker.js +392 -123
  12. package/dist_ts/classes.authoritycli.d.ts +24 -0
  13. package/dist_ts/classes.authoritycli.js +675 -0
  14. package/dist_ts/classes.authorityclient.d.ts +19 -7
  15. package/dist_ts/classes.authorityclient.js +51 -14
  16. package/dist_ts/classes.authoritydaemon.d.ts +28 -1
  17. package/dist_ts/classes.authoritydaemon.js +482 -36
  18. package/dist_ts/classes.authoritydatabase.d.ts +175 -10
  19. package/dist_ts/classes.authoritydatabase.js +1100 -52
  20. package/dist_ts/classes.authoritymodels.d.ts +223 -1
  21. package/dist_ts/classes.authoritymodels.js +798 -9
  22. package/dist_ts/classes.authoritypreuse.d.ts +47 -0
  23. package/dist_ts/classes.authoritypreuse.js +278 -0
  24. package/dist_ts/classes.authorityregistry.d.ts +24 -0
  25. package/dist_ts/classes.authorityregistry.js +88 -0
  26. package/dist_ts/classes.authorityrehearsal.d.ts +127 -0
  27. package/dist_ts/classes.authorityrehearsal.js +632 -0
  28. package/dist_ts/classes.authorityusage.d.ts +160 -0
  29. package/dist_ts/classes.authorityusage.js +429 -0
  30. package/dist_ts/classes.claudeauthority.d.ts +66 -0
  31. package/dist_ts/classes.claudeauthority.js +532 -0
  32. package/dist_ts/classes.claudecodeharness.js +3 -2
  33. package/dist_ts/classes.claudecodelocks.d.ts +13 -0
  34. package/dist_ts/classes.claudecodelocks.js +75 -3
  35. package/dist_ts/classes.claudenative.d.ts +137 -0
  36. package/dist_ts/classes.claudenative.js +731 -0
  37. package/dist_ts/classes.claudestatus.d.ts +9 -0
  38. package/dist_ts/classes.claudestatus.js +26 -9
  39. package/dist_ts/classes.claudetokenrefresh.d.ts +15 -1
  40. package/dist_ts/classes.claudetokenrefresh.js +74 -21
  41. package/dist_ts/classes.codexharness.js +4 -2
  42. package/dist_ts/classes.codexmanaged.d.ts +11 -0
  43. package/dist_ts/classes.codexmanaged.js +75 -14
  44. package/dist_ts/classes.codexpreuse.d.ts +8 -0
  45. package/dist_ts/classes.codexpreuse.js +24 -6
  46. package/dist_ts/classes.fileharness.d.ts +2 -0
  47. package/dist_ts/classes.fileharness.js +6 -4
  48. package/dist_ts/classes.limits.js +12 -7
  49. package/dist_ts/classes.opencodeharness.js +2 -2
  50. package/dist_ts/claudehttp.d.ts +10 -0
  51. package/dist_ts/claudehttp.js +29 -3
  52. package/dist_ts/index.d.ts +1 -0
  53. package/dist_ts/index.js +7 -1
  54. package/dist_ts/interfaces.harness.d.ts +6 -0
  55. package/dist_ts/interfaces.list.d.ts +9 -3
  56. package/dist_ts/plugins.d.ts +5 -2
  57. package/dist_ts/plugins.js +7 -3
  58. package/dist_ts/ts_migration/0001_authority_meta.d.ts +3 -0
  59. package/dist_ts/ts_migration/0001_authority_meta.js +32 -0
  60. package/dist_ts/ts_migration/index.d.ts +3 -0
  61. package/dist_ts/ts_migration/index.js +6 -0
  62. package/package.json +4 -1
  63. package/readme.md +181 -14
  64. package/ts/00_commitinfo_data.ts +1 -1
  65. package/ts/authority-contract.ts +264 -9
  66. package/ts/authority-runtime-contract.ts +14 -0
  67. package/ts/authorityrehearsal.child.ts +330 -0
  68. package/ts/classes.accountlist.ts +3 -2
  69. package/ts/classes.authoritybackup.ts +780 -0
  70. package/ts/classes.authoritybroker.ts +389 -121
  71. package/ts/classes.authoritycli.ts +719 -0
  72. package/ts/classes.authorityclient.ts +75 -18
  73. package/ts/classes.authoritydaemon.ts +449 -36
  74. package/ts/classes.authoritydatabase.ts +1147 -55
  75. package/ts/classes.authoritymodels.ts +541 -6
  76. package/ts/classes.authoritypreuse.ts +297 -0
  77. package/ts/classes.authorityregistry.ts +118 -0
  78. package/ts/classes.authorityrehearsal.ts +625 -0
  79. package/ts/classes.authorityusage.ts +527 -0
  80. package/ts/classes.claudeauthority.ts +541 -0
  81. package/ts/classes.claudecodeharness.ts +2 -1
  82. package/ts/classes.claudecodelocks.ts +70 -1
  83. package/ts/classes.claudenative.ts +816 -0
  84. package/ts/classes.claudestatus.ts +38 -9
  85. package/ts/classes.claudetokenrefresh.ts +82 -19
  86. package/ts/classes.codexharness.ts +3 -1
  87. package/ts/classes.codexmanaged.ts +75 -12
  88. package/ts/classes.codexpreuse.ts +33 -5
  89. package/ts/classes.fileharness.ts +7 -3
  90. package/ts/classes.limits.ts +11 -6
  91. package/ts/classes.opencodeharness.ts +1 -1
  92. package/ts/claudehttp.ts +31 -2
  93. package/ts/index.ts +6 -0
  94. package/ts/interfaces.harness.ts +6 -0
  95. package/ts/interfaces.list.ts +9 -3
  96. package/ts/plugins.ts +7 -2
  97. package/ts/ts_migration/0001_authority_meta.ts +33 -0
  98. package/ts/ts_migration/index.ts +7 -0
@@ -0,0 +1,395 @@
1
+ import * as plugins from './plugins.js';
2
+ import { AuthSwitchAuthorityDatabase } from './classes.authoritydatabase.js';
3
+ import { assertStoredAuthorityMeta } from './classes.authoritymodels.js';
4
+ import { AuthorityRehearsalFramedTransport, authorityRehearsalMaximumFrameBytes, parseAuthorityRehearsalChildMessage, parseAuthorityRehearsalParentMessage, parseAuthorityRehearsalWireEntry, } from './classes.authorityrehearsal.js';
5
+ const spoolHeaderBytes = 4 + 12 + 16;
6
+ const childReceiveTimeoutMs = 24 * 60 * 60 * 1000;
7
+ const writeAll = async (file, bytes) => {
8
+ let offset = 0;
9
+ while (offset < bytes.byteLength) {
10
+ const result = await file.write(bytes, offset, bytes.byteLength - offset, null);
11
+ if (result.bytesWritten < 1)
12
+ throw new Error('Encrypted rehearsal staging stopped making progress.');
13
+ offset += result.bytesWritten;
14
+ }
15
+ };
16
+ const readExact = async (file, bytes, position) => {
17
+ let offset = 0;
18
+ while (offset < bytes.byteLength) {
19
+ const result = await file.read(bytes, offset, bytes.byteLength - offset, position + offset);
20
+ if (result.bytesRead === 0) {
21
+ if (offset === 0)
22
+ return true;
23
+ throw new Error('Encrypted rehearsal staging ended within a frame.');
24
+ }
25
+ offset += result.bytesRead;
26
+ }
27
+ return false;
28
+ };
29
+ /** Append-only encrypted staging. The key exists only in this child and every plaintext buffer is wiped. */
30
+ class EncryptedRehearsalSpool {
31
+ path;
32
+ domain;
33
+ key;
34
+ parse;
35
+ appendFile;
36
+ readFiles = new Set();
37
+ appendSequence = 0;
38
+ finished = false;
39
+ constructor(path, domain, key, parse) {
40
+ this.path = path;
41
+ this.domain = domain;
42
+ this.key = key;
43
+ this.parse = parse;
44
+ }
45
+ async open() {
46
+ if (this.appendFile)
47
+ throw new Error('Encrypted rehearsal staging is already open.');
48
+ this.appendFile = await plugins.fs.promises.open(this.path, 'wx', 0o600);
49
+ }
50
+ async append(value) {
51
+ if (!this.appendFile || this.finished)
52
+ throw new Error('Encrypted rehearsal staging is not writable.');
53
+ const plaintext = Buffer.from(JSON.stringify(value), 'utf8');
54
+ if (plaintext.byteLength < 1 || plaintext.byteLength > authorityRehearsalMaximumFrameBytes) {
55
+ plaintext.fill(0);
56
+ throw new Error('Encrypted rehearsal staging entry exceeds its size bound.');
57
+ }
58
+ const nonce = plugins.crypto.randomBytes(12);
59
+ const aad = Buffer.from(JSON.stringify(['authswitch-rehearsal-stage-v1', this.domain,
60
+ this.appendSequence]), 'utf8');
61
+ let ciphertext;
62
+ try {
63
+ const cipher = plugins.crypto.createCipheriv('aes-256-gcm', this.key, nonce);
64
+ cipher.setAAD(aad);
65
+ ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
66
+ const tag = cipher.getAuthTag();
67
+ const frame = Buffer.allocUnsafe(spoolHeaderBytes + ciphertext.byteLength);
68
+ frame.writeUInt32BE(ciphertext.byteLength, 0);
69
+ nonce.copy(frame, 4);
70
+ tag.copy(frame, 16);
71
+ ciphertext.copy(frame, spoolHeaderBytes);
72
+ try {
73
+ await writeAll(this.appendFile, frame);
74
+ }
75
+ finally {
76
+ frame.fill(0);
77
+ tag.fill(0);
78
+ }
79
+ this.appendSequence++;
80
+ }
81
+ finally {
82
+ plaintext.fill(0);
83
+ nonce.fill(0);
84
+ aad.fill(0);
85
+ ciphertext?.fill(0);
86
+ }
87
+ }
88
+ async finish() {
89
+ if (this.finished)
90
+ return;
91
+ this.finished = true;
92
+ const file = this.appendFile;
93
+ this.appendFile = undefined;
94
+ if (file)
95
+ await file.close();
96
+ }
97
+ async *values() {
98
+ if (!this.finished)
99
+ throw new Error('Encrypted rehearsal staging is not complete.');
100
+ const file = await plugins.fs.promises.open(this.path, 'r');
101
+ this.readFiles.add(file);
102
+ let position = 0;
103
+ let itemSequence = 0;
104
+ try {
105
+ while (true) {
106
+ const header = Buffer.alloc(spoolHeaderBytes);
107
+ const ended = await readExact(file, header, position);
108
+ if (ended)
109
+ return;
110
+ const length = header.readUInt32BE(0);
111
+ if (length < 1 || length > authorityRehearsalMaximumFrameBytes) {
112
+ header.fill(0);
113
+ throw new Error('Encrypted rehearsal staging frame exceeds its size bound.');
114
+ }
115
+ const ciphertext = Buffer.allocUnsafe(length);
116
+ try {
117
+ if (await readExact(file, ciphertext, position + spoolHeaderBytes)) {
118
+ throw new Error('Encrypted rehearsal staging ended within a frame.');
119
+ }
120
+ const aad = Buffer.from(JSON.stringify(['authswitch-rehearsal-stage-v1', this.domain,
121
+ itemSequence]), 'utf8');
122
+ let plaintext;
123
+ try {
124
+ const decipher = plugins.crypto.createDecipheriv('aes-256-gcm', this.key, header.subarray(4, 16));
125
+ decipher.setAAD(aad);
126
+ decipher.setAuthTag(header.subarray(16, spoolHeaderBytes));
127
+ plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
128
+ let decoded;
129
+ try {
130
+ decoded = JSON.parse(plaintext.toString('utf8'));
131
+ }
132
+ catch {
133
+ throw new Error('Encrypted rehearsal staging contains invalid JSON.');
134
+ }
135
+ yield this.parse(decoded);
136
+ }
137
+ finally {
138
+ aad.fill(0);
139
+ plaintext?.fill(0);
140
+ }
141
+ }
142
+ finally {
143
+ header.fill(0);
144
+ ciphertext.fill(0);
145
+ }
146
+ position += spoolHeaderBytes + length;
147
+ itemSequence++;
148
+ }
149
+ }
150
+ finally {
151
+ this.readFiles.delete(file);
152
+ await file.close();
153
+ }
154
+ }
155
+ async close() {
156
+ const errors = [];
157
+ const appendFile = this.appendFile;
158
+ this.appendFile = undefined;
159
+ if (appendFile)
160
+ try {
161
+ await appendFile.close();
162
+ }
163
+ catch (error) {
164
+ errors.push(error);
165
+ }
166
+ for (const file of this.readFiles) {
167
+ try {
168
+ await file.close();
169
+ }
170
+ catch (error) {
171
+ errors.push(error);
172
+ }
173
+ }
174
+ this.readFiles.clear();
175
+ if (errors.length)
176
+ throw new AggregateError(errors, 'Encrypted rehearsal staging cleanup failed.');
177
+ }
178
+ }
179
+ const validateRoot = async (rootInput) => {
180
+ if (!plugins.path.isAbsolute(rootInput))
181
+ throw new Error('Rehearsal root must be absolute.');
182
+ const root = await plugins.fs.promises.realpath(rootInput);
183
+ if (root !== rootInput)
184
+ throw new Error('Rehearsal root must be canonical.');
185
+ const stat = await plugins.fs.promises.lstat(root);
186
+ if (!stat.isDirectory() || stat.isSymbolicLink() || stat.uid !== process.getuid?.()
187
+ || (stat.mode & 0o077) !== 0)
188
+ throw new Error('Rehearsal root is not private.');
189
+ return root;
190
+ };
191
+ const recordKey = (record) => `${record.model}\u0000${record.id}`;
192
+ const parseRecord = (value) => {
193
+ const entry = parseAuthorityRehearsalWireEntry(value);
194
+ if ('kind' in entry)
195
+ throw new Error('Encrypted record staging contains a source.');
196
+ return entry;
197
+ };
198
+ const parseSource = (value) => {
199
+ const entry = parseAuthorityRehearsalWireEntry(value);
200
+ if (!('kind' in entry))
201
+ throw new Error('Encrypted source staging contains a record.');
202
+ return entry;
203
+ };
204
+ const run = async () => {
205
+ // tsrun deliberately presents script arguments from argv[0], while built Node entrypoints retain argv[0..1].
206
+ const root = await validateRoot(process.argv.at(-1) ?? '');
207
+ const reader = plugins.fs.createReadStream('', { fd: 3, autoClose: false });
208
+ const writer = plugins.fs.createWriteStream('', { fd: 4, autoClose: false });
209
+ const transport = new AuthorityRehearsalFramedTransport({ readable: reader, writable: writer,
210
+ parseIncoming: parseAuthorityRehearsalParentMessage,
211
+ validateOutgoing: parseAuthorityRehearsalChildMessage });
212
+ const key = plugins.crypto.randomBytes(32);
213
+ const metaSpool = new EncryptedRehearsalSpool(plugins.path.join(root, 'meta.stage'), 'meta', key, parseRecord);
214
+ const recordSpool = new EncryptedRehearsalSpool(plugins.path.join(root, 'records.stage'), 'records', key, parseRecord);
215
+ const sourceSpool = new EncryptedRehearsalSpool(plugins.path.join(root, 'sources.stage'), 'sources', key, parseSource);
216
+ let database;
217
+ let recordRestoreIterator;
218
+ let recordReadbackIterator;
219
+ let sourceReadbackIterator;
220
+ let expectedSequence = 0;
221
+ let metaCount = 0;
222
+ let recordsStarted = false;
223
+ let lastRecordKey = '';
224
+ let inputComplete = false;
225
+ let restored = false;
226
+ let recordsReadbackDone = false;
227
+ let phase = 'staging';
228
+ let cleanClose = false;
229
+ const cleanup = async () => {
230
+ const errors = [];
231
+ for (const iterator of [recordRestoreIterator, recordReadbackIterator, sourceReadbackIterator]) {
232
+ if (iterator?.return)
233
+ try {
234
+ await iterator.return();
235
+ }
236
+ catch (error) {
237
+ errors.push(error);
238
+ }
239
+ }
240
+ if (database)
241
+ try {
242
+ await database.stop();
243
+ }
244
+ catch (error) {
245
+ errors.push(error);
246
+ }
247
+ database = undefined;
248
+ for (const spool of [metaSpool, recordSpool, sourceSpool]) {
249
+ try {
250
+ await spool.close();
251
+ }
252
+ catch (error) {
253
+ errors.push(error);
254
+ }
255
+ }
256
+ key.fill(0);
257
+ if (errors.length)
258
+ throw new AggregateError(errors, 'Rehearsal child cleanup failed.');
259
+ };
260
+ try {
261
+ await Promise.all([metaSpool.open(), recordSpool.open(), sourceSpool.open()]);
262
+ await transport.send({ version: 1, type: 'ready' }, childReceiveTimeoutMs);
263
+ while (true) {
264
+ const message = await transport.receive(childReceiveTimeoutMs);
265
+ if (message.type === 'stage') {
266
+ phase = 'staging';
267
+ if (inputComplete || message.sequence !== expectedSequence) {
268
+ throw new Error('Rehearsal stage sequence is invalid.');
269
+ }
270
+ const entry = message.entry;
271
+ if ('kind' in entry) {
272
+ if (recordsStarted)
273
+ throw new Error('Rehearsal sources must precede records.');
274
+ await sourceSpool.append(entry);
275
+ }
276
+ else {
277
+ recordsStarted = true;
278
+ const keyValue = recordKey(entry);
279
+ if (keyValue <= lastRecordKey)
280
+ throw new Error('Rehearsal records must be strictly ordered.');
281
+ lastRecordKey = keyValue;
282
+ if (entry.model === 'authswitch_authority_meta') {
283
+ if (++metaCount !== 1)
284
+ throw new Error('Rehearsal input contains duplicate metadata.');
285
+ await metaSpool.append(entry);
286
+ }
287
+ else
288
+ await recordSpool.append(entry);
289
+ }
290
+ expectedSequence++;
291
+ await transport.send({ version: 1, type: 'staged', sequence: message.sequence }, childReceiveTimeoutMs);
292
+ continue;
293
+ }
294
+ if (message.type === 'finish') {
295
+ phase = 'staging';
296
+ if (inputComplete || message.sequence !== expectedSequence || metaCount !== 1) {
297
+ throw new Error('Rehearsal input is incomplete.');
298
+ }
299
+ await Promise.all([metaSpool.finish(), recordSpool.finish(), sourceSpool.finish()]);
300
+ inputComplete = true;
301
+ recordRestoreIterator = recordSpool.values()[Symbol.asyncIterator]();
302
+ await transport.send({ version: 1, type: 'input.complete' }, childReceiveTimeoutMs);
303
+ continue;
304
+ }
305
+ if (message.type === 'restore.next') {
306
+ phase = 'restore';
307
+ if (!inputComplete || restored)
308
+ throw new Error('Rehearsal restore state is invalid.');
309
+ if (!database) {
310
+ database = new AuthSwitchAuthorityDatabase({ dataDirectory: plugins.path.join(root, 'database'),
311
+ socketPath: plugins.path.join(root, 'run', 'database.sock') });
312
+ await database.start({ mode: 'closed_restore' });
313
+ const metaIterator = metaSpool.values()[Symbol.asyncIterator]();
314
+ try {
315
+ const first = await metaIterator.next();
316
+ const second = await metaIterator.next();
317
+ if (first.done || !second.done)
318
+ throw new Error('Rehearsal metadata staging is not singular.');
319
+ assertStoredAuthorityMeta(first.value.value);
320
+ const meta = first.value.value;
321
+ await database.restoreClosedMeta(meta);
322
+ }
323
+ finally {
324
+ await metaIterator.return?.(undefined);
325
+ }
326
+ await transport.send({ version: 1, type: 'restore.progress', done: false }, childReceiveTimeoutMs);
327
+ continue;
328
+ }
329
+ const next = await recordRestoreIterator.next();
330
+ if (!next.done) {
331
+ await database.insertClosedRestoredRecord(next.value);
332
+ await transport.send({ version: 1, type: 'restore.progress', done: false }, childReceiveTimeoutMs);
333
+ continue;
334
+ }
335
+ await database.stop();
336
+ database = new AuthSwitchAuthorityDatabase({ dataDirectory: plugins.path.join(root, 'database'),
337
+ socketPath: plugins.path.join(root, 'run', 'database.sock') });
338
+ await database.start();
339
+ recordReadbackIterator = database.readStoredRecords({ pageSize: 64 })[Symbol.asyncIterator]();
340
+ sourceReadbackIterator = sourceSpool.values()[Symbol.asyncIterator]();
341
+ restored = true;
342
+ await transport.send({ version: 1, type: 'restore.progress', done: true }, childReceiveTimeoutMs);
343
+ continue;
344
+ }
345
+ if (message.type === 'record.next') {
346
+ phase = 'readback';
347
+ if (!restored || recordsReadbackDone)
348
+ throw new Error('Rehearsal record readback state is invalid.');
349
+ const next = await recordReadbackIterator.next();
350
+ if (next.done)
351
+ recordsReadbackDone = true;
352
+ await transport.send({ version: 1, type: 'record', record: next.done ? null : next.value }, childReceiveTimeoutMs);
353
+ continue;
354
+ }
355
+ if (message.type === 'source.next') {
356
+ phase = 'readback';
357
+ if (!restored || !recordsReadbackDone)
358
+ throw new Error('Rehearsal source readback state is invalid.');
359
+ const next = await sourceReadbackIterator.next();
360
+ await transport.send({ version: 1, type: 'source', source: next.done ? null : next.value }, childReceiveTimeoutMs);
361
+ continue;
362
+ }
363
+ if (message.type === 'close') {
364
+ phase = 'cleanup';
365
+ await cleanup();
366
+ await transport.send({ version: 1, type: 'closed' }, childReceiveTimeoutMs);
367
+ await transport.finishWritable();
368
+ cleanClose = true;
369
+ return;
370
+ }
371
+ throw new Error('Unknown rehearsal request.');
372
+ }
373
+ }
374
+ catch {
375
+ try {
376
+ await cleanup();
377
+ }
378
+ catch {
379
+ phase = 'cleanup';
380
+ }
381
+ try {
382
+ await transport.send({ version: 1, type: 'failed', phase }, childReceiveTimeoutMs);
383
+ await transport.finishWritable();
384
+ }
385
+ catch { /* The parent may already have closed the control channel. */ }
386
+ process.exitCode = 1;
387
+ }
388
+ finally {
389
+ if (!cleanClose)
390
+ key.fill(0);
391
+ transport.destroy();
392
+ }
393
+ };
394
+ await run().catch(() => { process.exitCode = 1; });
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXR5cmVoZWFyc2FsLmNoaWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvYXV0aG9yaXR5cmVoZWFyc2FsLmNoaWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBNkIsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRyxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLG1DQUFtQyxFQUNuQyxtQ0FBbUMsRUFDbkMsb0NBQW9DLEVBQ3BDLGdDQUFnQyxHQUtqQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFbEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLElBQW9DLEVBQUUsS0FBaUIsRUFBaUIsRUFBRTtJQUNoRyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixPQUFPLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEYsSUFBSSxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDckcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDaEMsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxJQUFvQyxF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
@@ -25,7 +25,8 @@ export const readAccountList = async (harnessesArg) => {
25
25
  result.saveUnavailableReason = state.saveUnavailableReason;
26
26
  result.credentialDrift = state.credentialDrift ?? [];
27
27
  result.accounts = rows.map(({ account, status }) => ({
28
- id: account.id, label: account.label, isActive: account.isActive, isStashed: account.isStashed,
28
+ id: account.id, providerAccountId: account.providerAccountId, label: account.label,
29
+ isActive: account.isActive, isStashed: account.isStashed,
29
30
  savedAt: account.savedAt, details: [...account.details], ...(account.slotId === undefined ? {} : { slotId: account.slotId }),
30
31
  status: publicStatus(status),
31
32
  }));
@@ -36,9 +37,9 @@ export const readAccountList = async (harnessesArg) => {
36
37
  harnesses.push(result);
37
38
  }
38
39
  return {
39
- schemaVersion: 2, generatedAt: new Date().toISOString(),
40
+ schemaVersion: 3, generatedAt: new Date().toISOString(),
40
41
  complete: harnesses.every(harness => !harness.problems.length && harness.accounts.every(account => !account.status.problems.length)),
41
42
  harnesses,
42
43
  };
43
44
  };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hY2NvdW50bGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYWNjb3VudGxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUloRCx5R0FBeUc7QUFDekcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFnQyxFQUF5QixFQUFFO0lBQy9FLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDbEMsT0FBTztRQUNMLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzlHLFFBQVEsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRTtnQkFDMUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ3pJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUs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
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hY2NvdW50bGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYWNjb3VudGxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUloRCx5R0FBeUc7QUFDekcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFnQyxFQUF5QixFQUFFO0lBQy9FLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDbEMsT0FBTztRQUNMLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzlHLFFBQVEsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRTtnQkFDMUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ3pJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUs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
@@ -0,0 +1,134 @@
1
+ import * as plugins from './plugins.js';
2
+ import { type IAuthorityStoredRecord } from './classes.authorityregistry.js';
3
+ import type { IAuthSwitchSecretCodec } from './classes.authoritysecrets.js';
4
+ import type { IRemoteControlEnrollment } from './interfaces.js';
5
+ /** This ID preserves Codex's complete three-column enrollment key, without email matching. */
6
+ export declare const authorityEnrollmentId: (row: IRemoteControlEnrollment) => string;
7
+ export type IAuthorityBackupRecord = IAuthorityStoredRecord;
8
+ export interface IAuthorityBackupSourceCapsule {
9
+ kind: string;
10
+ id: string;
11
+ linkedModel: string;
12
+ linkedId: string;
13
+ linkedDigestField: 'sourceDigest' | 'before.credentialDigest' | 'before.configDigest';
14
+ /** Exact bytes re-read under the native owner's exclusion; the caller retains and wipes its buffer. */
15
+ bytes: Uint8Array;
16
+ }
17
+ export interface IAuthorityBackupSnapshotAttempt {
18
+ epoch: string;
19
+ revision: number;
20
+ records: AsyncIterable<IAuthorityBackupRecord>;
21
+ sources: AsyncIterable<IAuthorityBackupSourceCapsule>;
22
+ }
23
+ /** Implement with one SmartData session.withTransaction; each retry invokes visit anew. */
24
+ export interface IAuthorityBackupSnapshotSource {
25
+ capture(visit: (attempt: IAuthorityBackupSnapshotAttempt) => Promise<void>): Promise<void>;
26
+ }
27
+ export interface IAuthorityBackupObjectStore {
28
+ prepare(signal?: AbortSignal): Promise<void>;
29
+ putExact(path: string, bytes: Uint8Array, signal?: AbortSignal): Promise<void>;
30
+ get(path: string, maxBytes: number, signal?: AbortSignal): Promise<Uint8Array>;
31
+ }
32
+ /** Thin adapter over SmartBucket's provider-probed, create-only exact upload API. */
33
+ export declare class AuthoritySmartBucketStore implements IAuthorityBackupObjectStore {
34
+ private readonly bucket;
35
+ private capability?;
36
+ constructor(bucket: plugins.smartbucket.Bucket);
37
+ prepare(signal?: AbortSignal): Promise<void>;
38
+ putExact(path: string, bytes: Uint8Array, signal?: AbortSignal): Promise<void>;
39
+ get(path: string, maxBytes: number, signal?: AbortSignal): Promise<Uint8Array>;
40
+ }
41
+ export interface IAuthorityRestoredRecord extends IAuthorityBackupRecord {
42
+ }
43
+ export interface IAuthorityRestoredSource {
44
+ kind: 'source';
45
+ sourceKind: string;
46
+ sourceId: string;
47
+ sourceDigest: string;
48
+ linkedModel: string;
49
+ linkedId: string;
50
+ linkedDigestField: IAuthorityBackupSourceCapsule['linkedDigestField'];
51
+ bytes: Uint8Array;
52
+ }
53
+ export type TAuthorityRestoredEntry = IAuthorityRestoredRecord | IAuthorityRestoredSource;
54
+ export interface IAuthorityBackupRehearsalReadback {
55
+ records: AsyncIterable<IAuthorityRestoredRecord>;
56
+ sources: AsyncIterable<IAuthorityRestoredSource>;
57
+ /** Stops the isolated database and child, then removes every disposable artifact. */
58
+ close(): Promise<void>;
59
+ }
60
+ /** Must restore into an isolated, runtime-closed target and read its stored postimage back. */
61
+ export interface IAuthorityBackupRehearsal {
62
+ restoreClosed(entries: AsyncIterable<TAuthorityRestoredEntry>): Promise<IAuthorityBackupRehearsalReadback>;
63
+ }
64
+ export interface IAuthorityBackupSourceProof {
65
+ kind: string;
66
+ id: string;
67
+ linkedModel: string;
68
+ linkedId: string;
69
+ linkedDigestField: IAuthorityBackupSourceCapsule['linkedDigestField'];
70
+ digest: string;
71
+ }
72
+ /** Factual portable proof only. Production admission must additionally bind configured bucket and key custody. */
73
+ export interface IAuthorityBackupVerification {
74
+ backupId: string;
75
+ manifestPath: string;
76
+ manifestDigest: string;
77
+ snapshotDigest: string;
78
+ sourceEpoch: string;
79
+ sourceRevision: number;
80
+ restoredEpoch: string;
81
+ recordCount: number;
82
+ sources: IAuthorityBackupSourceProof[];
83
+ rehearsalDigest: string;
84
+ verifiedAt: string;
85
+ /** Portable recovery proves data integrity, never that a surviving native writer has stopped. */
86
+ restoreAdmission: 'closed_pending_codex_and_native_reconciliation';
87
+ }
88
+ /** An object locator and digest only; this carries no recoverability or deletion authority. */
89
+ export interface IAuthorityBackupPublication {
90
+ backupId: string;
91
+ manifestPath: string;
92
+ manifestDigest: string;
93
+ sourceEpoch: string;
94
+ sourceRevision: number;
95
+ snapshotDigest: string;
96
+ }
97
+ export declare class AuthorityBackupPublicationUnknownError extends Error {
98
+ readonly path: string;
99
+ constructor(path: string, cause: unknown);
100
+ }
101
+ interface IAuthorityBackupCommonOptions {
102
+ store: IAuthorityBackupObjectStore;
103
+ secrets: IAuthSwitchSecretCodec;
104
+ prefix: string;
105
+ recipientKeyId: string;
106
+ signal?: AbortSignal;
107
+ }
108
+ export interface IAuthorityBackupPublisherOptions extends IAuthorityBackupCommonOptions {
109
+ source: IAuthorityBackupSnapshotSource;
110
+ recipientPublicKey: Uint8Array;
111
+ }
112
+ export interface IAuthorityBackupVerifierOptions extends IAuthorityBackupCommonOptions {
113
+ rehearsal: IAuthorityBackupRehearsal;
114
+ recipientPrivateKey: Uint8Array;
115
+ }
116
+ export type TAuthorityBackupOptions = IAuthorityBackupPublisherOptions | IAuthorityBackupVerifierOptions;
117
+ /** Portable backup codec; the daemon's SmartData repository supplies the snapshot and persists the verified receipt. */
118
+ export declare class AuthSwitchAuthorityBackup {
119
+ private readonly options;
120
+ constructor(options: TAuthorityBackupOptions);
121
+ private publisher;
122
+ private verifier;
123
+ private secretFor;
124
+ private sourceDigestInRecord;
125
+ private assertPreparedClaudeSourceCoverage;
126
+ private stage;
127
+ private publish;
128
+ publishSnapshot(): Promise<IAuthorityBackupPublication>;
129
+ /** Rehearse a previously published object set; no caller-supplied success flag is accepted. */
130
+ rehearsePublished(input: IAuthorityBackupPublication): Promise<IAuthorityBackupVerification>;
131
+ private verifyPublished;
132
+ private restoreRecord;
133
+ }
134
+ export {};