borgmcp 2.10.2 → 2.12.1

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 (86) hide show
  1. package/README.md +7 -3
  2. package/dist/assimilate-cmd.d.ts +5 -2
  3. package/dist/assimilate-cmd.d.ts.map +1 -1
  4. package/dist/assimilate-cmd.js +3 -1
  5. package/dist/assimilate-cmd.js.map +1 -1
  6. package/dist/assimilate-deps.d.ts.map +1 -1
  7. package/dist/assimilate-deps.js +2 -2
  8. package/dist/assimilate-deps.js.map +1 -1
  9. package/dist/claude.js +3 -3
  10. package/dist/claude.js.map +1 -1
  11. package/dist/cli-help.js +3 -3
  12. package/dist/cli-help.js.map +1 -1
  13. package/dist/cli-platform.d.ts +1 -0
  14. package/dist/cli-platform.d.ts.map +1 -1
  15. package/dist/cli-platform.js +10 -1
  16. package/dist/cli-platform.js.map +1 -1
  17. package/dist/cli-tool-approval.d.ts +3 -1
  18. package/dist/cli-tool-approval.d.ts.map +1 -1
  19. package/dist/cli-tool-approval.js +8 -14
  20. package/dist/cli-tool-approval.js.map +1 -1
  21. package/dist/config.d.ts +34 -9
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/config.js +487 -105
  24. package/dist/config.js.map +1 -1
  25. package/dist/enrollment-lock.d.ts +10 -0
  26. package/dist/enrollment-lock.d.ts.map +1 -0
  27. package/dist/enrollment-lock.js +49 -0
  28. package/dist/enrollment-lock.js.map +1 -0
  29. package/dist/enrollment-types.d.ts +47 -0
  30. package/dist/enrollment-types.d.ts.map +1 -0
  31. package/dist/enrollment-types.js +2 -0
  32. package/dist/enrollment-types.js.map +1 -0
  33. package/dist/index.js +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/invitation-artifact.d.ts +3 -1
  36. package/dist/invitation-artifact.d.ts.map +1 -1
  37. package/dist/invitation-artifact.js +3 -1
  38. package/dist/invitation-artifact.js.map +1 -1
  39. package/dist/parse-assimilate-args.d.ts +1 -1
  40. package/dist/parse-assimilate-args.d.ts.map +1 -1
  41. package/dist/parse-assimilate-args.js +5 -2
  42. package/dist/parse-assimilate-args.js.map +1 -1
  43. package/dist/recover-enrollment-cmd.d.ts.map +1 -1
  44. package/dist/recover-enrollment-cmd.js +34 -15
  45. package/dist/recover-enrollment-cmd.js.map +1 -1
  46. package/dist/remote-client.d.ts +3 -2
  47. package/dist/remote-client.d.ts.map +1 -1
  48. package/dist/remote-client.js +32 -11
  49. package/dist/remote-client.js.map +1 -1
  50. package/dist/server-errors.d.ts +4 -0
  51. package/dist/server-errors.d.ts.map +1 -1
  52. package/dist/server-errors.js +8 -0
  53. package/dist/server-errors.js.map +1 -1
  54. package/dist/server-handshake.d.ts +11 -3
  55. package/dist/server-handshake.d.ts.map +1 -1
  56. package/dist/server-handshake.js +103 -45
  57. package/dist/server-handshake.js.map +1 -1
  58. package/dist/server-trust.d.ts +14 -1
  59. package/dist/server-trust.d.ts.map +1 -1
  60. package/dist/server-trust.js +363 -66
  61. package/dist/server-trust.js.map +1 -1
  62. package/dist/tool-manifest.d.ts.map +1 -1
  63. package/dist/tool-manifest.js +4 -10
  64. package/dist/tool-manifest.js.map +1 -1
  65. package/docs/EXTRACTION_PROVENANCE.md +5 -5
  66. package/docs/LOCAL_SERVER.md +1 -1
  67. package/docs/RELEASING.md +10 -5
  68. package/package.json +3 -3
  69. package/src/assimilate-cmd.ts +10 -3
  70. package/src/assimilate-deps.ts +3 -2
  71. package/src/claude.ts +4 -3
  72. package/src/cli-help.ts +3 -3
  73. package/src/cli-platform.ts +16 -2
  74. package/src/cli-tool-approval.ts +9 -16
  75. package/src/config.ts +544 -101
  76. package/src/enrollment-lock.ts +53 -0
  77. package/src/enrollment-types.ts +51 -0
  78. package/src/index.ts +1 -1
  79. package/src/invitation-artifact.ts +7 -1
  80. package/src/parse-assimilate-args.ts +4 -2
  81. package/src/recover-enrollment-cmd.ts +39 -15
  82. package/src/remote-client.ts +36 -10
  83. package/src/server-errors.ts +7 -0
  84. package/src/server-handshake.ts +130 -52
  85. package/src/server-trust.ts +392 -66
  86. package/src/tool-manifest.ts +4 -10
@@ -1,7 +1,7 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import { createHash, timingSafeEqual, X509Certificate } from 'node:crypto';
3
3
  import { constants } from 'node:fs';
4
- import { access, mkdir, open, rename, rm, writeFile } from 'node:fs/promises';
4
+ import { access, lstat, mkdir, open, rename, rm, unlink, writeFile } from 'node:fs/promises';
5
5
  import { request as httpsRequest } from 'node:https';
6
6
  import { connect as tlsConnect } from 'node:tls';
7
7
  import { homedir } from 'node:os';
@@ -9,6 +9,9 @@ import { join, resolve } from 'node:path';
9
9
  import { Readable } from 'node:stream';
10
10
  import { BorgServerTrustError } from './server-errors.js';
11
11
  import { InvitationArtifactCompatibilityError, InvitationArtifactRecoveryError, InvitationArtifactStorageError, InvitationArtifactTransportError, InvitationArtifactTrustError, } from './invitation-artifact.js';
12
+ import { atomicWrite0600 } from './seat-store.js';
13
+ import { withEnrollmentOriginLock } from './enrollment-lock.js';
14
+ import { finalizeAcceptedEnrollment, getAcceptedEnrollmentMarker, restoreAcceptedEnrollmentAccounts, } from './config.js';
12
15
  // CR5 TLS LATTICE: OpenSSL/Node TLS certificate-verification error codes. A raw
13
16
  // CA / cert-chain / SAN failure from the pinned transport is a potential MITM and
14
17
  // MUST be a TERMINAL trust-mismatch verdict — never a transient 'restart' blip.
@@ -40,6 +43,18 @@ function isPinnedTransportTrustFailure(code) {
40
43
  TLS_TRUST_ERROR_CODES.has(code));
41
44
  }
42
45
  const trustCache = new Map();
46
+ let enrollmentTrustFaultsForTest = new Set();
47
+ function injectEnrollmentTrustFault(point) {
48
+ if (enrollmentTrustFaultsForTest.has(point))
49
+ throw new Error(`injected ${point} failure`);
50
+ }
51
+ function invalidateOriginTrustCache(origin) {
52
+ for (const key of trustCache.keys()) {
53
+ if (key === origin || key.startsWith(`${origin}\0`) || key.endsWith(`\0${origin}`)) {
54
+ trustCache.delete(key);
55
+ }
56
+ }
57
+ }
43
58
  function serverDataDirectory() {
44
59
  return resolve(process.env.BORG_SERVER_DATA_DIR ?? join(homedir(), '.borg', 'server'));
45
60
  }
@@ -47,6 +62,20 @@ function remoteTrustDirectory(origin) {
47
62
  const key = createHash('sha256').update(origin).digest('hex');
48
63
  return join(homedir(), '.borg', 'server-trust', key);
49
64
  }
65
+ function trustGenerationsDirectory(origin) {
66
+ return join(remoteTrustDirectory(origin), 'generations');
67
+ }
68
+ function trustGenerationDirectory(origin, generationId) {
69
+ return join(trustGenerationsDirectory(origin), generationId);
70
+ }
71
+ function trustPointerPath(origin) {
72
+ return join(remoteTrustDirectory(origin), 'current.json');
73
+ }
74
+ function trustGenerationId(origin, certificate, identity) {
75
+ return createHash('sha256')
76
+ .update(origin).update('\0').update(identity).update('\0').update(certificate)
77
+ .digest('hex');
78
+ }
50
79
  async function trustFilesExist(directory) {
51
80
  try {
52
81
  await Promise.all([access(join(directory, 'ca.crt')), access(join(directory, 'server.json'))]);
@@ -56,6 +85,14 @@ async function trustFilesExist(directory) {
56
85
  return false;
57
86
  }
58
87
  }
88
+ async function remoteTrustStateExists(origin) {
89
+ try {
90
+ await access(trustPointerPath(origin));
91
+ return true;
92
+ }
93
+ catch { /* continue */ }
94
+ return trustFilesExist(remoteTrustDirectory(origin));
95
+ }
59
96
  async function readTrustFile(path) {
60
97
  let handle;
61
98
  try {
@@ -81,6 +118,15 @@ async function readTrustFile(path) {
81
118
  await handle.close();
82
119
  }
83
120
  }
121
+ async function assertPrivateDirectory(path) {
122
+ const metadata = await lstat(path);
123
+ if (!metadata.isDirectory() || metadata.isSymbolicLink() || (metadata.mode & 0o077) !== 0) {
124
+ throw new Error('Borg server trust directories must be private real directories');
125
+ }
126
+ if (typeof process.getuid === 'function' && metadata.uid !== process.getuid()) {
127
+ throw new Error('Borg server trust directories must be owned by the current user');
128
+ }
129
+ }
84
130
  async function syncPath(path) {
85
131
  const handle = await open(path, 'r');
86
132
  try {
@@ -126,6 +172,123 @@ function verifyCaIdentity(certificate, expected) {
126
172
  }
127
173
  return `spki-sha256:${actual.toString('hex')}`;
128
174
  }
175
+ async function readGeneration(origin, generationId) {
176
+ if (!/^[a-f0-9]{64}$/.test(generationId))
177
+ throw new Error('Borg server trust pointer is invalid');
178
+ const directory = trustGenerationDirectory(origin, generationId);
179
+ const [certificate, configText] = await Promise.all([
180
+ readTrustFile(join(directory, 'ca.crt')),
181
+ readTrustFile(join(directory, 'server.json')),
182
+ ]);
183
+ const config = decodeTrustConfig(configText);
184
+ const identity = verifyCaIdentity(certificate, config.ca_spki_sha256);
185
+ if (trustGenerationId(origin, certificate, identity) !== generationId) {
186
+ throw new Error('Borg server trust generation digest is invalid');
187
+ }
188
+ return { certificate, identity };
189
+ }
190
+ async function readTrustPointer(origin) {
191
+ try {
192
+ await assertPrivateDirectory(remoteTrustDirectory(origin));
193
+ }
194
+ catch (error) {
195
+ if (error.code === 'ENOENT')
196
+ return null;
197
+ throw error;
198
+ }
199
+ let raw;
200
+ try {
201
+ raw = await readTrustFile(trustPointerPath(origin));
202
+ }
203
+ catch (error) {
204
+ if (error instanceof Error && /were not found/.test(error.message))
205
+ return null;
206
+ throw error;
207
+ }
208
+ let pointer;
209
+ try {
210
+ pointer = JSON.parse(raw);
211
+ }
212
+ catch {
213
+ throw new Error('Borg server trust pointer is invalid');
214
+ }
215
+ if (pointer.version !== 1 || pointer.origin !== origin ||
216
+ typeof pointer.generationId !== 'string' || !/^[a-f0-9]{64}$/.test(pointer.generationId) ||
217
+ typeof pointer.trustIdentity !== 'string')
218
+ throw new Error('Borg server trust pointer is invalid');
219
+ return pointer;
220
+ }
221
+ async function publishTrustPointer(pointer) {
222
+ const root = remoteTrustDirectory(pointer.origin);
223
+ await mkdir(root, { recursive: true, mode: 0o700 });
224
+ await assertPrivateDirectory(root);
225
+ await atomicWrite0600(trustPointerPath(pointer.origin), `${JSON.stringify(pointer)}\n`);
226
+ invalidateOriginTrustCache(pointer.origin);
227
+ }
228
+ async function removeTrustPointer(origin) {
229
+ try {
230
+ await unlink(trustPointerPath(origin));
231
+ }
232
+ catch (error) {
233
+ if (error.code !== 'ENOENT')
234
+ throw error;
235
+ }
236
+ await syncPath(remoteTrustDirectory(origin));
237
+ invalidateOriginTrustCache(origin);
238
+ }
239
+ async function publishGeneration(origin, certificate, identity) {
240
+ const generationId = trustGenerationId(origin, certificate, identity);
241
+ const generations = trustGenerationsDirectory(origin);
242
+ const target = trustGenerationDirectory(origin, generationId);
243
+ await mkdir(generations, { recursive: true, mode: 0o700 });
244
+ await assertPrivateDirectory(resolve(remoteTrustDirectory(origin), '..'));
245
+ await assertPrivateDirectory(remoteTrustDirectory(origin));
246
+ await assertPrivateDirectory(generations);
247
+ if (await trustFilesExist(target)) {
248
+ const verified = await readGeneration(origin, generationId);
249
+ if (verified.identity !== identity)
250
+ throw new Error('Borg server trust generation identity changed');
251
+ return generationId;
252
+ }
253
+ const temporary = `${target}.tmp-${process.pid}-${Date.now()}`;
254
+ try {
255
+ await mkdir(temporary, { mode: 0o700 });
256
+ const certificatePath = join(temporary, 'ca.crt');
257
+ const configPath = join(temporary, 'server.json');
258
+ await writeFile(certificatePath, certificate, { mode: 0o600, flag: 'wx' });
259
+ await syncPath(certificatePath);
260
+ await writeFile(configPath, JSON.stringify({
261
+ ca_spki_sha256: identity.replace(/^spki-sha256:/, ''),
262
+ }), { mode: 0o600, flag: 'wx' });
263
+ await syncPath(configPath);
264
+ await syncPath(temporary);
265
+ await rename(temporary, target);
266
+ await syncPath(generations);
267
+ const verified = await readGeneration(origin, generationId);
268
+ if (verified.identity !== identity)
269
+ throw new Error('Borg server trust generation identity changed');
270
+ return generationId;
271
+ }
272
+ catch (error) {
273
+ await rm(temporary, { recursive: true, force: true }).catch(() => undefined);
274
+ throw error;
275
+ }
276
+ }
277
+ async function migrateLegacyRemoteTrust(origin) {
278
+ const directory = remoteTrustDirectory(origin);
279
+ if (!await trustFilesExist(directory))
280
+ return null;
281
+ const [certificate, configText] = await Promise.all([
282
+ readTrustFile(join(directory, 'ca.crt')),
283
+ readTrustFile(join(directory, 'server.json')),
284
+ ]);
285
+ const config = decodeTrustConfig(configText);
286
+ const identity = verifyCaIdentity(certificate, config.ca_spki_sha256);
287
+ const generationId = await publishGeneration(origin, certificate, identity);
288
+ const pointer = { version: 1, origin, generationId, trustIdentity: identity };
289
+ await publishTrustPointer(pointer);
290
+ return pointer;
291
+ }
129
292
  function responseHeaders(rawHeaders) {
130
293
  const headers = new Headers();
131
294
  for (let index = 0; index < rawHeaders.length; index += 2) {
@@ -188,6 +351,10 @@ export function createPinnedServerFetch(origin, caCertificate) {
188
351
  headers: Object.fromEntries(headers.entries()),
189
352
  ca: caCertificate,
190
353
  rejectUnauthorized: true,
354
+ // The pinned CA is the authority boundary. OpenSSL still validates
355
+ // the complete chain; only the leaf's address SAN check is skipped
356
+ // so a DHCP change does not require reissuing the leaf certificate.
357
+ checkServerIdentity: () => undefined,
191
358
  minVersion: 'TLSv1.3',
192
359
  }, (incoming) => {
193
360
  const status = incoming.statusCode ?? 500;
@@ -233,32 +400,49 @@ export function createPinnedServerFetch(origin, caCertificate) {
233
400
  });
234
401
  }
235
402
  export async function loadBorgServerTrust(origin, dataDirectory) {
236
- const requestedDirectory = dataDirectory ?? serverDataDirectory();
237
- const key = `${requestedDirectory}\0${origin}`;
238
- let pending = trustCache.get(key);
239
- if (!pending) {
240
- pending = (async () => {
241
- const remoteDirectory = remoteTrustDirectory(origin);
242
- const directory = dataDirectory === undefined && await trustFilesExist(remoteDirectory)
243
- ? remoteDirectory
244
- : dataDirectory === undefined && !(await trustFilesExist(requestedDirectory))
245
- ? remoteDirectory
246
- : requestedDirectory;
247
- const [certificate, configText] = await Promise.all([
248
- readTrustFile(join(directory, 'ca.crt')),
249
- readTrustFile(join(directory, 'server.json')),
250
- ]);
251
- const config = decodeTrustConfig(configText);
252
- const identity = verifyCaIdentity(certificate, config.ca_spki_sha256);
253
- return {
254
- identity,
255
- fetchImpl: createPinnedServerFetch(origin, certificate),
256
- };
257
- })();
258
- trustCache.set(key, pending);
259
- pending.catch(() => trustCache.delete(key));
403
+ const useRemoteState = dataDirectory === undefined && await remoteTrustStateExists(origin);
404
+ if (dataDirectory !== undefined || !useRemoteState && await trustFilesExist(serverDataDirectory())) {
405
+ const directory = dataDirectory ?? serverDataDirectory();
406
+ const key = `legacy\0${directory}\0${origin}`;
407
+ let pending = trustCache.get(key);
408
+ if (!pending) {
409
+ pending = (async () => {
410
+ const [certificate, configText] = await Promise.all([
411
+ readTrustFile(join(directory, 'ca.crt')),
412
+ readTrustFile(join(directory, 'server.json')),
413
+ ]);
414
+ const config = decodeTrustConfig(configText);
415
+ const identity = verifyCaIdentity(certificate, config.ca_spki_sha256);
416
+ return { identity, fetchImpl: createPinnedServerFetch(origin, certificate) };
417
+ })();
418
+ trustCache.set(key, pending);
419
+ pending.catch(() => trustCache.delete(key));
420
+ }
421
+ return pending;
260
422
  }
261
- return pending;
423
+ return withEnrollmentOriginLock(origin, async () => {
424
+ await recoverAcceptedEnrollment(origin);
425
+ const pointer = await readTrustPointer(origin) ?? await migrateLegacyRemoteTrust(origin);
426
+ if (!pointer)
427
+ throw new Error('Borg server trust files were not found');
428
+ const key = `${origin}\0${pointer.generationId}\0${pointer.trustIdentity}`;
429
+ let pending = trustCache.get(key);
430
+ if (!pending) {
431
+ pending = (async () => {
432
+ const generation = await readGeneration(origin, pointer.generationId);
433
+ if (generation.identity !== pointer.trustIdentity) {
434
+ throw new Error('Borg server trust pointer identity does not match its generation');
435
+ }
436
+ return {
437
+ identity: generation.identity,
438
+ fetchImpl: createPinnedServerFetch(origin, generation.certificate),
439
+ };
440
+ })();
441
+ trustCache.set(key, pending);
442
+ pending.catch(() => trustCache.delete(key));
443
+ }
444
+ return pending;
445
+ });
262
446
  }
263
447
  function pemCertificate(raw) {
264
448
  const body = raw.toString('base64').match(/.{1,64}/g)?.join('\n') ?? '';
@@ -329,67 +513,180 @@ export async function loadBorgServerTrustFromPresentedChain(origin, caSpkiSha256
329
513
  throw new InvitationArtifactTrustError();
330
514
  }
331
515
  export async function stageBorgServerTrust(origin, certificate, identity) {
332
- const directory = remoteTrustDirectory(origin);
333
- const parent = resolve(directory, '..');
334
- await mkdir(parent, { recursive: true, mode: 0o700 });
335
- const suffix = `${process.pid}-${Date.now()}`;
336
- const temporaryDirectory = `${directory}.tmp-${suffix}`;
337
- const temporaryCertificate = join(temporaryDirectory, 'ca.crt');
338
- const temporaryConfig = join(temporaryDirectory, 'server.json');
516
+ let generationId;
339
517
  try {
340
- await mkdir(temporaryDirectory, { recursive: false, mode: 0o700 });
341
- await Promise.all([
342
- writeFile(temporaryCertificate, certificate, { mode: 0o600, flag: 'wx' }),
343
- writeFile(temporaryConfig, JSON.stringify({ ca_spki_sha256: identity.replace(/^spki-sha256:/, '') }), { mode: 0o600, flag: 'wx' }),
344
- ]);
345
- await Promise.all([syncPath(temporaryCertificate), syncPath(temporaryConfig), syncPath(temporaryDirectory)]);
518
+ generationId = await withEnrollmentOriginLock(origin, () => publishGeneration(origin, certificate, identity));
346
519
  }
347
520
  catch {
348
- await rm(temporaryDirectory, { recursive: true, force: true });
349
521
  throw new InvitationArtifactStorageError();
350
522
  }
351
- let committed = false;
523
+ return stagedTrustFromGeneration(origin, generationId, identity, certificate);
524
+ }
525
+ function stagedTrustFromGeneration(origin, generationId, identity, certificate) {
526
+ let finalized = false;
352
527
  return {
353
528
  identity,
529
+ generationId,
354
530
  fetchImpl: createPinnedServerFetch(origin, certificate),
355
531
  commitTrust: async (activate) => {
356
- if (committed)
532
+ if (finalized)
357
533
  return;
358
- const backupDirectory = `${directory}.backup-${suffix}`;
359
- let backedUp = false;
360
- try {
361
- await rename(directory, backupDirectory).then(() => { backedUp = true; }).catch((error) => {
362
- if (error.code !== 'ENOENT')
534
+ await withEnrollmentOriginLock(origin, async () => {
535
+ const previousPointer = await readTrustPointer(origin) ?? await migrateLegacyRemoteTrust(origin);
536
+ let activated = false;
537
+ try {
538
+ await activate({ generationId, previousPointer });
539
+ const accepted = await getAcceptedEnrollmentMarker(origin);
540
+ if (!accepted || accepted.generationId !== generationId ||
541
+ accepted.trustIdentity !== identity)
542
+ throw new Error('Borg enrollment activation did not publish its accepted marker');
543
+ activated = true;
544
+ injectEnrollmentTrustFault('after-account-activation');
545
+ await publishTrustPointer({ version: 1, origin, generationId, trustIdentity: identity });
546
+ injectEnrollmentTrustFault('after-pointer-publish');
547
+ const verified = await readGeneration(origin, generationId);
548
+ if (verified.identity !== identity)
549
+ throw new Error('published Borg trust generation changed');
550
+ injectEnrollmentTrustFault('before-marker-finalize');
551
+ await finalizeAcceptedEnrollment(origin, identity, generationId);
552
+ finalized = true;
553
+ }
554
+ catch (error) {
555
+ let marker;
556
+ try {
557
+ marker = await getAcceptedEnrollmentMarker(origin);
558
+ }
559
+ catch {
560
+ throw new InvitationArtifactRecoveryError();
561
+ }
562
+ // Activation is one atomic account-map replacement, but a durable
563
+ // backend may report an error after rename and before/while syncing
564
+ // the parent directory. The accepted marker, not the callback's
565
+ // return value, is therefore the authority for whether rollback is
566
+ // required.
567
+ if (!marker && !activated)
363
568
  throw error;
364
- });
365
- await rename(temporaryDirectory, directory);
366
- await syncPath(resolve(directory, '..'));
367
- await activate();
368
- committed = true;
369
- await rm(backupDirectory, { recursive: true, force: true }).catch(() => undefined);
370
- }
371
- catch (error) {
372
- await rm(directory, { recursive: true, force: true });
373
- await rm(temporaryDirectory, { recursive: true, force: true });
374
- if (backedUp) {
375
- await rename(backupDirectory, directory);
376
- await syncPath(resolve(directory, '..'));
569
+ if (!marker)
570
+ throw new InvitationArtifactRecoveryError();
571
+ try {
572
+ await restoreEnrollmentPointer(marker);
573
+ await restoreAcceptedEnrollmentAccounts(marker);
574
+ }
575
+ catch {
576
+ throw new InvitationArtifactRecoveryError();
577
+ }
578
+ throw new InvitationArtifactRecoveryError();
377
579
  }
378
- throw new InvitationArtifactRecoveryError();
379
- }
580
+ });
380
581
  },
381
582
  discardTrust: async () => {
382
- if (committed)
583
+ if (finalized)
383
584
  return;
384
- await rm(temporaryDirectory, { recursive: true, force: true });
585
+ await withEnrollmentOriginLock(origin, async () => {
586
+ const pointer = await readTrustPointer(origin);
587
+ if (pointer?.generationId === generationId)
588
+ return;
589
+ await rm(trustGenerationDirectory(origin, generationId), { recursive: true, force: true });
590
+ await syncPath(trustGenerationsDirectory(origin)).catch(() => undefined);
591
+ });
385
592
  },
386
593
  };
387
594
  }
595
+ async function restoreEnrollmentPointer(marker) {
596
+ injectEnrollmentTrustFault('during-pointer-rollback');
597
+ if (marker.previousPointer === null) {
598
+ await removeTrustPointer(marker.origin);
599
+ if (await readTrustPointer(marker.origin) !== null)
600
+ throw new Error('Borg trust pointer rollback failed');
601
+ return;
602
+ }
603
+ const previous = await readGeneration(marker.origin, marker.previousPointer.generationId);
604
+ if (previous.identity !== marker.previousPointer.trustIdentity) {
605
+ throw new Error('Borg previous trust generation is invalid');
606
+ }
607
+ await publishTrustPointer(marker.previousPointer);
608
+ const restored = await readTrustPointer(marker.origin);
609
+ if (restored?.generationId !== marker.previousPointer.generationId) {
610
+ throw new Error('Borg trust pointer rollback failed');
611
+ }
612
+ }
613
+ async function recoverAcceptedEnrollment(origin) {
614
+ const marker = await getAcceptedEnrollmentMarker(origin);
615
+ if (!marker)
616
+ return;
617
+ try {
618
+ const generation = await readGeneration(origin, marker.generationId);
619
+ if (generation.identity !== marker.trustIdentity)
620
+ throw new Error('Borg enrollment generation identity changed');
621
+ await publishTrustPointer({
622
+ version: 1,
623
+ origin,
624
+ generationId: marker.generationId,
625
+ trustIdentity: marker.trustIdentity,
626
+ });
627
+ await finalizeAcceptedEnrollment(origin, marker.trustIdentity, marker.generationId);
628
+ }
629
+ catch {
630
+ try {
631
+ await restoreEnrollmentPointer(marker);
632
+ await restoreAcceptedEnrollmentAccounts(marker);
633
+ }
634
+ catch {
635
+ throw new InvitationArtifactRecoveryError();
636
+ }
637
+ throw new InvitationArtifactRecoveryError();
638
+ }
639
+ }
640
+ /** Verify the exact persisted artifact binding before any resumed network I/O. */
641
+ export async function loadStagedBorgServerTrust(origin, binding) {
642
+ return withEnrollmentOriginLock(origin, async () => {
643
+ if (binding.endpoint !== origin || binding.trustIdentity !== `spki-sha256:${binding.caSpkiSha256}`)
644
+ throw new InvitationArtifactTrustError();
645
+ let generation;
646
+ try {
647
+ generation = await readGeneration(origin, binding.stagedGenerationId);
648
+ }
649
+ catch {
650
+ throw new InvitationArtifactRecoveryError();
651
+ }
652
+ if (generation.identity !== binding.trustIdentity)
653
+ throw new InvitationArtifactTrustError();
654
+ return stagedTrustFromGeneration(origin, binding.stagedGenerationId, generation.identity, generation.certificate);
655
+ });
656
+ }
657
+ /** Explicit operator recovery restores the exact accepted journal that was reviewed. */
658
+ export async function restoreBorgServerEnrollment(expected) {
659
+ return withEnrollmentOriginLock(expected.origin, async () => {
660
+ const marker = await getAcceptedEnrollmentMarker(expected.origin);
661
+ if (!marker || JSON.stringify(marker) !== JSON.stringify(expected))
662
+ return false;
663
+ await restoreEnrollmentPointer(expected);
664
+ await restoreAcceptedEnrollmentAccounts(expected);
665
+ return true;
666
+ });
667
+ }
668
+ export async function clearStagedBorgServerTrust(origin, generationId) {
669
+ if (!generationId)
670
+ return;
671
+ await withEnrollmentOriginLock(origin, async () => {
672
+ const pointer = await readTrustPointer(origin);
673
+ if (pointer?.generationId === generationId) {
674
+ throw new InvitationArtifactRecoveryError();
675
+ }
676
+ await rm(trustGenerationDirectory(origin, generationId), { recursive: true, force: true });
677
+ await syncPath(trustGenerationsDirectory(origin)).catch(() => undefined);
678
+ });
679
+ }
388
680
  export function __clearServerTrustCacheForTest() {
389
681
  trustCache.clear();
390
682
  }
683
+ export function __setEnrollmentTrustFaultForTest(points) {
684
+ enrollmentTrustFaultsForTest = new Set(points === null ? [] : Array.isArray(points) ? points : [points]);
685
+ }
391
686
  export async function clearBorgServerTrust(origin) {
392
- await rm(remoteTrustDirectory(origin), { recursive: true, force: true });
393
- trustCache.delete(`${serverDataDirectory()}\0${origin}`);
687
+ await withEnrollmentOriginLock(origin, async () => {
688
+ await rm(remoteTrustDirectory(origin), { recursive: true, force: true });
689
+ invalidateOriginTrustCache(origin);
690
+ });
394
691
  }
395
692
  //# sourceMappingURL=server-trust.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-trust.js","sourceRoot":"","sources":["../src/server-trust.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-trust.js","sourceRoot":"","sources":["../src/server-trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,oCAAoC,EACpC,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,aAAa,CAAC;AAOrB,gFAAgF;AAChF,kFAAkF;AAClF,gFAAgF;AAChF,iFAAiF;AACjF,mFAAmF;AACnF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,mCAAmC;IACnC,iCAAiC;IACjC,gBAAgB;IAChB,qBAAqB;IACrB,mBAAmB;IACnB,8BAA8B;CAC/B,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,SAAS,6BAA6B,CAAC,IAAa;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;QAC/B,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAChC,CAAC;AACJ,CAAC;AAsBD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoC,CAAC;AAM/D,IAAI,4BAA4B,GAAG,IAAI,GAAG,EAA6B,CAAC;AAExE,SAAS,0BAA0B,CAAC,KAAgC;IAClE,IAAI,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc;IAChD,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC,EAAE,CAAC;YACnF,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAc,EAAE,YAAoB;IACpE,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,WAAmB,EAAE,QAAgB;IAC9E,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;SAC7E,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,SAAiB;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,MAAc;IAClD,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IACrF,OAAO,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,IAAY;IAChD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,WAAW,GAAI,MAAkC,CAAC,cAAc,CAAC;IACvE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,QAAgB;IAC7D,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;SAChC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SAChE,MAAM,EAAE,CAAC;IACZ,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,eAAe,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,MAAc,EACd,YAAoB;IAEpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAClG,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjE,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;KAC9C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtE,IAAI,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,YAAY,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAc;IAC5C,IAAI,CAAC;QAAC,MAAM,sBAAsB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACjF,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpE,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAChF,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,OAAwC,CAAC;IAC7C,IAAI,CAAC;QAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,IACE,OAAO,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAClD,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACxF,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ;QACzC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,OAAO,OAAiC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,OAA+B;IAChE,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAAc;IAC9C,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAC7D,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;IACD,MAAM,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAc,EACd,WAAmB,EACnB,QAAgB;IAEhB,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9D,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,sBAAsB,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1E,MAAM,sBAAsB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrG,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,MAAM,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAClD,MAAM,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;QAChC,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;YACzC,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SACtD,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3B,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrG,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7E,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,MAAc;IACpD,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,eAAe,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;KAC9C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5E,MAAM,OAAO,GAA2B,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;IACtG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,UAAoB;IAC3C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;AAChF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,aAAqB;IAC3E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,KAA6B,EAAE,OAAoB,EAAE,EAAqB,EAAE;QACzF,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtF,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;QAE7F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,MAAM,CAC1B,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAC7E,CAAC;YACF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACrD,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,cAAc,KAAK,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,MAAM,IAAI,OAAO,CAAW,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;YACnE,MAAM,OAAO,GAAG,YAAY,CAAC;gBAC3B,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;gBAClD,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG;gBACrB,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE;gBACpC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;gBAC5B,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC9C,EAAE,EAAE,aAAa;gBACjB,kBAAkB,EAAE,IAAI;gBACxB,mEAAmE;gBACnE,mEAAmE;gBACnE,oEAAoE;gBACpE,mBAAmB,EAAE,GAAG,EAAE,CAAC,SAAS;gBACpC,UAAU,EAAE,SAAS;aACtB,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACd,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC;gBAC1C,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;oBAC/D,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClB,aAAa,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACzD,OAAO;gBACT,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC;gBAC1E,MAAM,MAAM,GAAG,MAAM;oBACnB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAA+B,CAAC;gBAC3D,IAAI,MAAM;oBAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC9B,cAAc,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE;oBAClC,MAAM;oBACN,UAAU,EAAE,QAAQ,CAAC,aAAa;oBAClC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;iBAC9C,CAAC,CAAC,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,GAAS,EAAE;gBACvB,OAAO,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC,CAAC;YAChF,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,6EAA6E;gBAC7E,+EAA+E;gBAC/E,8EAA8E;gBAC9E,yEAAyE;gBACzE,oCAAoC;gBACpC,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;gBACnD,IAAI,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxC,aAAa,CACX,IAAI,oBAAoB,CACtB,wEAAwE,IAAI,GAAG,CAChF,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAgB,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,aAAsB;IAEtB,MAAM,cAAc,GAAG,aAAa,KAAK,SAAS,IAAI,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3F,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,cAAc,IAAI,MAAM,eAAe,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC;QACnG,MAAM,SAAS,GAAG,aAAa,IAAI,mBAAmB,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,WAAW,SAAS,KAAK,MAAM,EAAE,CAAC;QAC9C,IAAI,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;gBACpB,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAClD,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACxC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;iBAC9C,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;YAC/E,CAAC,CAAC,EAAE,CAAC;YACL,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,GAAG,MAAM,KAAK,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3E,IAAI,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;gBACpB,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;gBACtE,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;oBAClD,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;gBACtF,CAAC;gBACD,OAAO;oBACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,SAAS,EAAE,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC;iBACnE,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;YACL,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACxE,OAAO,gCAAgC,IAAI,+BAA+B,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAmD;IAC5E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,OAAO,EAAE,GAAG,YAAY,MAAM,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM;QACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAAc;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;YAC9C,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9C,kBAAkB,EAAE,KAAK;YACzB,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SACrD,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,gCAAgC,EAAE,CAAC,CAAC;QACtD,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;YAChC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,WAAW,CAAC,IAAI,gCAAgC,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,qCAAqC,CACzD,MAAc,EACd,YAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,EAAE;gBAAE,SAAS;YAC9B,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;iBAChC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;iBACrE,MAAM,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,MAAM,KAAK,YAAY;gBAAE,SAAS;YACtC,OAAO,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,eAAe,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;QAAC,MAAM,CAAC;YACP,kFAAkF;QACpF,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,oCAAoC,EAAE,CAAC;IAC7D,MAAM,IAAI,4BAA4B,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,WAAmB,EACnB,QAAgB;IAEhB,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,CACzD,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,8BAA8B,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,yBAAyB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,yBAAyB,CAChC,MAAc,EACd,YAAoB,EACpB,QAAgB,EAChB,WAAmB;IAEnB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO;QACL,QAAQ;QACR,YAAY;QACZ,SAAS,EAAE,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC;QACvD,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC9B,IAAI,SAAS;gBAAE,OAAO;YACtB,MAAM,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;gBAChD,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;gBACjG,IAAI,SAAS,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,CAAC;oBAClD,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,MAAM,CAAC,CAAC;oBAC3D,IACE,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY;wBACnD,QAAQ,CAAC,aAAa,KAAK,QAAQ;wBACnC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;oBACpF,SAAS,GAAG,IAAI,CAAC;oBACjB,0BAA0B,CAAC,0BAA0B,CAAC,CAAC;oBACvD,MAAM,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACzF,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;oBACpD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC5D,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;wBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;oBAC/F,0BAA0B,CAAC,wBAAwB,CAAC,CAAC;oBACrD,MAAM,0BAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;oBACjE,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,MAAM,CAAC;oBACX,IAAI,CAAC;wBAAC,MAAM,GAAG,MAAM,2BAA2B,CAAC,MAAM,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBACjE,MAAM,IAAI,+BAA+B,EAAE,CAAC;oBAC9C,CAAC;oBACD,kEAAkE;oBAClE,oEAAoE;oBACpE,gEAAgE;oBAChE,mEAAmE;oBACnE,YAAY;oBACZ,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS;wBAAE,MAAM,KAAK,CAAC;oBACvC,IAAI,CAAC,MAAM;wBAAE,MAAM,IAAI,+BAA+B,EAAE,CAAC;oBACzD,IAAI,CAAC;wBACH,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;wBACvC,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC;oBAClD,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,IAAI,+BAA+B,EAAE,CAAC;oBAC9C,CAAC;oBACD,MAAM,IAAI,+BAA+B,EAAE,CAAC;gBAC9C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,YAAY,EAAE,KAAK,IAAI,EAAE;YACvB,IAAI,SAAS;gBAAE,OAAO;YACtB,MAAM,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;gBAChD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,OAAO,EAAE,YAAY,KAAK,YAAY;oBAAE,OAAO;gBACnD,MAAM,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3F,MAAM,QAAQ,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,MAGvC;IACC,0BAA0B,CAAC,yBAAyB,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1G,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1F,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,mBAAmB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,QAAQ,EAAE,YAAY,KAAK,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,MAAc;IACrD,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjH,MAAM,mBAAmB,CAAC;YACxB,OAAO,EAAE,CAAC;YACV,MAAM;YACN,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;QACH,MAAM,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,+BAA+B,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,+BAA+B,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAc,EACd,OAAkC;IAElC,OAAO,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QACjD,IACE,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,aAAa,KAAK,eAAe,OAAO,CAAC,YAAY,EAAE;YAC9F,MAAM,IAAI,4BAA4B,EAAE,CAAC;QAC3C,IAAI,UAAqD,CAAC;QAC1D,IAAI,CAAC;YAAC,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YACpF,MAAM,IAAI,+BAA+B,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,aAAa;YAAE,MAAM,IAAI,4BAA4B,EAAE,CAAC;QAC5F,OAAO,yBAAyB,CAC9B,MAAM,EACN,OAAO,CAAC,kBAAkB,EAC1B,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,WAAW,CACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,QAAkC;IAClF,OAAO,wBAAwB,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QACjF,MAAM,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,iCAAiC,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAc,EACd,YAAgC;IAEhC,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,MAAM,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,OAAO,EAAE,YAAY,KAAK,YAAY,EAAE,CAAC;YAC3C,MAAM,IAAI,+BAA+B,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,EAAE,CAAC,wBAAwB,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,MAAM,QAAQ,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,MAAsE;IAEtE,4BAA4B,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,wBAAwB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-manifest.d.ts","sourceRoot":"","sources":["../src/tool-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KACvC,CAAC;CACH;AAED,eAAO,MAAM,aAAa,EAAE,iBAAiB,EAglB5C,CAAC"}
1
+ {"version":3,"file":"tool-manifest.d.ts","sourceRoot":"","sources":["../src/tool-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KACvC,CAAC;CACH;AAED,eAAO,MAAM,aAAa,EAAE,iBAAiB,EA0kB5C,CAAC"}
@@ -299,9 +299,9 @@ export const TOOL_MANIFEST = [
299
299
  properties: {
300
300
  name: {
301
301
  type: 'string',
302
- description: 'Cube name (lowercase letters, digits, hyphens; max 64 chars).',
303
- pattern: '^[a-z0-9-]+$',
304
- maxLength: 64,
302
+ description: 'Cube name (starts with a letter or digit; letters, digits, spaces, dots, underscores, or hyphens; max 120 UTF-8 bytes).',
303
+ pattern: '^[A-Za-z0-9][A-Za-z0-9 ._-]*$',
304
+ maxLength: 120,
305
305
  },
306
306
  cube_directive: { type: 'string', description: 'Project-specific Markdown shown to every drone when it refreshes cube context.' },
307
307
  template: {
@@ -314,17 +314,11 @@ export const TOOL_MANIFEST = [
314
314
  },
315
315
  {
316
316
  name: 'borg_update-cube',
317
- description: 'Update a cube\'s name, cube_directive, and/or message_taxonomy. Pass only what changes.',
317
+ description: 'Update a cube\'s cube_directive and/or message_taxonomy. Pass only what changes.',
318
318
  inputSchema: {
319
319
  type: 'object',
320
320
  properties: {
321
321
  cube_id: { type: 'string', description: 'UUID of the cube to update.' },
322
- name: {
323
- type: 'string',
324
- description: 'New name (optional). Lowercase letters, digits, hyphens; max 64 chars.',
325
- pattern: '^[a-z0-9-]+$',
326
- maxLength: 64,
327
- },
328
322
  cube_directive: { type: 'string', description: 'New cube directive markdown (optional).' },
329
323
  message_taxonomy: {
330
324
  type: 'array',