@revealui/mcp 0.7.1 → 0.8.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.
@@ -31,10 +31,42 @@
31
31
  * via `setCredentials()`. Falls back to `REVEALUI_API_URL` +
32
32
  * `REVEALUI_API_KEY` env vars when no override is set.
33
33
  */
34
+ import { createHash } from 'node:crypto';
34
35
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
35
36
  import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
36
37
  import { z } from 'zod/v4';
37
38
  import { validateToolArgs } from '../../validate-tool-args.js';
39
+ /** sha256 (hex) of the canonical JSON of an arbitrary argument object. */
40
+ function digestArgs(args) {
41
+ return createHash('sha256').update(canonicalJson(args)).digest('hex');
42
+ }
43
+ /**
44
+ * Deterministic JSON with object keys sorted, so the digest of the same
45
+ * logical arguments is stable regardless of key order. No regex; a manual
46
+ * recursive serializer over the parsed value.
47
+ */
48
+ function canonicalJson(value) {
49
+ if (value === null || typeof value !== 'object')
50
+ return JSON.stringify(value) ?? 'null';
51
+ if (Array.isArray(value))
52
+ return `[${value.map(canonicalJson).join(',')}]`;
53
+ const entries = Object.entries(value).sort((a, b) => a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0);
54
+ return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(',')}}`;
55
+ }
56
+ /** Allowlisted, non-secret scalars safe to store in a receipt in the clear. */
57
+ const AUDIT_SCALAR_ALLOWLIST = ['collection', 'site_id'];
58
+ function pickAuditScalars(args) {
59
+ const out = {};
60
+ if (!args || typeof args !== 'object')
61
+ return out;
62
+ const record = args;
63
+ for (const key of AUDIT_SCALAR_ALLOWLIST) {
64
+ const raw = record[key];
65
+ if (typeof raw === 'string' && raw.length > 0)
66
+ out[key] = raw;
67
+ }
68
+ return out;
69
+ }
38
70
  // ---------------------------------------------------------------------------
39
71
  // Credential overrides (set by hypervisor / HTTP launcher)
40
72
  // ---------------------------------------------------------------------------
@@ -77,9 +109,9 @@ async function apiGet(baseUrl, apiKey, path, params) {
77
109
  const res = await fetch(url.toString(), { headers: apiHeaders(apiKey) });
78
110
  const body = await res.json();
79
111
  if (!res.ok) {
80
- throw new Error(body.error ??
112
+ throw new ApiRequestError(body.error ??
81
113
  body.message ??
82
- `API ${res.status}`);
114
+ `API ${res.status}`, res.status);
83
115
  }
84
116
  return body;
85
117
  }
@@ -195,6 +227,15 @@ const TOOLS = [
195
227
  },
196
228
  },
197
229
  ];
230
+ /** Error carrying the upstream HTTP status, for audit `httpStatus`. */
231
+ class ApiRequestError extends Error {
232
+ status;
233
+ constructor(message, status) {
234
+ super(message);
235
+ this.status = status;
236
+ this.name = 'ApiRequestError';
237
+ }
238
+ }
198
239
  /**
199
240
  * Curated fallback used when neither an injected provider nor HTTP
200
241
  * introspection is available. These four collections exist in every admin
@@ -328,7 +369,15 @@ async function fetchCollectionsFromAdmin(apiUrl, apiKey) {
328
369
  * consume this factory; the factory itself is transport-agnostic.
329
370
  */
330
371
  export function createRevealuiContentServer(options) {
331
- const server = new Server({ name: 'revealui-content', version: '1.0.0' }, { capabilities: { tools: {}, resources: {} } });
372
+ // A `credentialsProvider` marks the governed/hosted mount (`/api/mcp`). On
373
+ // that path Phase 1 exposes ONLY the five read tools (design §4-D): the
374
+ // resource handlers below resolve the ambient service credential rather than
375
+ // the caller's token and write no receipt, so on a multi-tenant mount they
376
+ // would be a cross-tenant, unaudited read channel. The capability is therefore
377
+ // structurally absent when governed — not merely credential-gated. The stdio /
378
+ // local mount (no options) keeps resources unchanged (single-operator trust).
379
+ const governed = options?.credentialsProvider !== undefined;
380
+ const server = new Server({ name: 'revealui-content', version: '1.0.0' }, { capabilities: governed ? { tools: {} } : { tools: {}, resources: {} } });
332
381
  // Per-server memoization: resolve the effective collection set once and
333
382
  // reuse across `resources/list` + `resources/read` for the lifetime of the
334
383
  // server instance. Avoids double-fetching on every read.
@@ -357,80 +406,232 @@ export function createRevealuiContentServer(options) {
357
406
  cachedCollections = [...CURATED_FALLBACK];
358
407
  return cachedCollections;
359
408
  }
360
- server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
409
+ server.setRequestHandler(ListToolsRequestSchema, async (_request, extra) => {
410
+ const authorizer = options?.toolAuthorizer;
411
+ if (!authorizer)
412
+ return { tools: TOOLS };
413
+ // Filtered discovery (I-7): advertise only tools this caller may execute.
414
+ // This is UX; execution authz below is the security control — a tool hidden
415
+ // here is still independently denied on a direct `tools/call`.
416
+ const ctx = {
417
+ authInfo: extra?.authInfo,
418
+ sessionId: extra?.sessionId,
419
+ };
420
+ return { tools: TOOLS.filter((tool) => authorizer(ctx, tool.name)) };
421
+ });
361
422
  // -------------------------------------------------------------------------
362
423
  // Resources (Stage 4.1 + 4.2)
424
+ //
425
+ // Registered ONLY on the ungoverned (stdio / local) path. These handlers use
426
+ // the process-global `resolveCredentials()` and emit no receipt, so on the
427
+ // governed mount they are omitted entirely (see capability gate above,
428
+ // design §4-D). The guard and the capability advertisement must stay in
429
+ // lockstep: a registered handler with no advertised capability, or vice
430
+ // versa, reintroduces the bypass.
363
431
  // -------------------------------------------------------------------------
364
- server.setRequestHandler(ListResourcesRequestSchema, async () => {
365
- const { apiUrl, apiKey } = resolveCredentials();
366
- if (!(apiUrl && apiKey)) {
367
- // Without credentials the server can't enumerate rows; advertise an
368
- // empty list rather than erroring clients still see the resources
369
- // capability and can retry once creds are set.
370
- return { resources: [] };
432
+ if (!governed) {
433
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
434
+ const { apiUrl, apiKey } = resolveCredentials();
435
+ if (!(apiUrl && apiKey)) {
436
+ // Without credentials the server can't enumerate rows; advertise an
437
+ // empty list rather than erroring clients still see the resources
438
+ // capability and can retry once creds are set.
439
+ return { resources: [] };
440
+ }
441
+ const collections = await resolveCollections();
442
+ const resources = [];
443
+ for (const collection of collections) {
444
+ try {
445
+ const body = await apiGet(apiUrl, apiKey, `/api/${collection.slug}`, {
446
+ limit: String(DEFAULT_RESOURCE_PAGE_SIZE),
447
+ page: '1',
448
+ });
449
+ for (const row of extractDocs(body)) {
450
+ resources.push(resourceForRow(collection, row));
451
+ }
452
+ }
453
+ catch {
454
+ // empty-catch-ok: an unavailable collection shouldn't blank-out the entire resource list
455
+ }
456
+ }
457
+ return { resources };
458
+ });
459
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
460
+ const parsed = parseResourceUri(request.params.uri);
461
+ if (!parsed) {
462
+ throw new Error(`Unknown resource URI (expected ${RESOURCE_URI_PREFIX}<collection>/<id>): ${request.params.uri}`);
463
+ }
464
+ const collections = await resolveCollections();
465
+ const collection = collections.find((c) => c.slug === parsed.collection);
466
+ if (!collection) {
467
+ throw new Error(`Collection is not exposed as a resource: ${parsed.collection}`);
468
+ }
469
+ const { apiUrl, apiKey } = resolveCredentials();
470
+ if (!(apiUrl && apiKey)) {
471
+ throw new Error('REVEALUI_API_URL and REVEALUI_API_KEY must be set');
472
+ }
473
+ const row = await apiGet(apiUrl, apiKey, `/api/${parsed.collection}/${parsed.id}`);
474
+ return {
475
+ contents: [
476
+ {
477
+ uri: request.params.uri,
478
+ mimeType: 'application/json',
479
+ text: JSON.stringify(row, null, 2),
480
+ },
481
+ ],
482
+ };
483
+ });
484
+ }
485
+ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
486
+ const startTime = Date.now();
487
+ const toolName = request.params.name;
488
+ const rawArgs = request.params.arguments;
489
+ const ctx = {
490
+ authInfo: extra?.authInfo,
491
+ sessionId: extra?.sessionId,
492
+ };
493
+ const auditSink = options?.auditSink;
494
+ const mutating = options?.mutatingTools?.has(toolName) ?? false;
495
+ // Write a receipt for this call. Returns whether the write succeeded; the
496
+ // sink itself classifies + logs a failure, so callers only decide between
497
+ // fail-closed (mutations) and degrade (reads). No-op when no sink is wired
498
+ // (the stdio path).
499
+ async function writeReceipt(outcome, opts) {
500
+ if (!auditSink)
501
+ return true;
502
+ const client = server.getClientVersion();
503
+ const record = {
504
+ outcome,
505
+ tool: toolName,
506
+ argsDigest: digestArgs(rawArgs ?? null),
507
+ scalars: pickAuditScalars(rawArgs),
508
+ durationMs: Date.now() - startTime,
509
+ httpStatus: opts?.httpStatus,
510
+ reason: opts?.reason,
511
+ clientInfo: client ? { name: client.name, version: client.version } : undefined,
512
+ context: ctx,
513
+ };
514
+ try {
515
+ await auditSink(record);
516
+ return true;
517
+ }
518
+ catch {
519
+ return false;
520
+ }
371
521
  }
372
- const collections = await resolveCollections();
373
- const resources = [];
374
- for (const collection of collections) {
522
+ // A call rejected before it executes (unknown tool, invalid args, authz or
523
+ // rate-limit denial). Records a `denied` receipt (best-effort — a denial
524
+ // that mutates nothing degrades like a read) and returns the client error.
525
+ async function denied(response, reason) {
526
+ await writeReceipt('denied', reason ? { reason } : undefined);
527
+ return response;
528
+ }
529
+ // Deny-by-default collection allowlist. The content tools interpolate the
530
+ // `collection` arg into `/api/<collection>`, so a free-string collection
531
+ // would let one tool reach another tool's endpoint (e.g. `/api/users`,
532
+ // bypassing the admin gate on `revealui_list_users`). A collection outside
533
+ // the RESOLVED exposed set is denied before any REST call — the backend is
534
+ // never reached for an unexposed collection.
535
+ async function denyIfCollectionNotExposed(collection) {
536
+ const exposed = await resolveCollections();
537
+ const slugs = new Set(exposed.map((c) => c.slug));
538
+ if (slugs.has(collection))
539
+ return null;
540
+ return denied({
541
+ content: [{ type: 'text', text: `Error: collection is not exposed: ${collection}` }],
542
+ isError: true,
543
+ }, 'collection-not-exposed');
544
+ }
545
+ // Emit one usage-meter event for a call that actually executed. Swallows
546
+ // sink errors so metering can never break the tool call.
547
+ async function fireMeter(errored) {
548
+ if (!options?.meterSink)
549
+ return;
375
550
  try {
376
- const body = await apiGet(apiUrl, apiKey, `/api/${collection.slug}`, {
377
- limit: String(DEFAULT_RESOURCE_PAGE_SIZE),
378
- page: '1',
551
+ await options.meterSink(ctx, {
552
+ tool: toolName,
553
+ durationMs: Date.now() - startTime,
554
+ errored,
379
555
  });
380
- for (const row of extractDocs(body)) {
381
- resources.push(resourceForRow(collection, row));
382
- }
383
556
  }
384
557
  catch {
385
- // empty-catch-ok: an unavailable collection shouldn't blank-out the entire resource list
558
+ // empty-catch-ok: metering is best-effort and must not affect the call
386
559
  }
387
560
  }
388
- return { resources };
389
- });
390
- server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
391
- const parsed = parseResourceUri(request.params.uri);
392
- if (!parsed) {
393
- throw new Error(`Unknown resource URI (expected ${RESOURCE_URI_PREFIX}<collection>/<id>): ${request.params.uri}`);
561
+ // Deny-by-default per-tool authorization (I-7). Runs before credentials are
562
+ // resolved, so an unauthorized caller never triggers a credential lookup or
563
+ // a REST call. A tool hidden from `tools/list` is still denied here.
564
+ if (options?.toolAuthorizer && !options.toolAuthorizer(ctx, toolName)) {
565
+ return denied({
566
+ content: [{ type: 'text', text: `Error: not authorized to call tool: ${toolName}` }],
567
+ isError: true,
568
+ }, 'authz');
394
569
  }
395
- const collections = await resolveCollections();
396
- const collection = collections.find((c) => c.slug === parsed.collection);
397
- if (!collection) {
398
- throw new Error(`Collection is not exposed as a resource: ${parsed.collection}`);
570
+ // Per-user + tier rate limit (I-8). Consumed only for an authorized call,
571
+ // before any credential resolution or execution. A denial is audited with
572
+ // `reason: 'rate-limit'` and never meters (a rejected call is not usage).
573
+ if (options?.rateLimiter) {
574
+ const allowed = await options.rateLimiter(ctx, toolName);
575
+ if (!allowed) {
576
+ return denied({
577
+ content: [{ type: 'text', text: `Error: rate limit exceeded for tool: ${toolName}` }],
578
+ isError: true,
579
+ }, 'rate-limit');
580
+ }
399
581
  }
400
- const { apiUrl, apiKey } = resolveCredentials();
401
- if (!(apiUrl && apiKey)) {
402
- throw new Error('REVEALUI_API_URL and REVEALUI_API_KEY must be set');
582
+ // Resolve credentials. Governed path: the injected provider is the sole
583
+ // source and may throw when no per-request credential exists (I-4). Env
584
+ // path is unchanged for stdio.
585
+ let apiUrl;
586
+ let apiKey;
587
+ try {
588
+ if (options?.credentialsProvider) {
589
+ const resolved = await options.credentialsProvider(ctx);
590
+ apiUrl = resolved.apiUrl;
591
+ apiKey = resolved.apiKey;
592
+ }
593
+ else {
594
+ const resolved = resolveCredentials();
595
+ if (!(resolved.apiUrl && resolved.apiKey)) {
596
+ return {
597
+ content: [
598
+ { type: 'text', text: 'Error: REVEALUI_API_URL and REVEALUI_API_KEY must be set' },
599
+ ],
600
+ isError: true,
601
+ };
602
+ }
603
+ apiUrl = resolved.apiUrl;
604
+ apiKey = resolved.apiKey;
605
+ }
403
606
  }
404
- const row = await apiGet(apiUrl, apiKey, `/api/${parsed.collection}/${parsed.id}`);
405
- return {
406
- contents: [
407
- {
408
- uri: request.params.uri,
409
- mimeType: 'application/json',
410
- text: JSON.stringify(row, null, 2),
411
- },
412
- ],
413
- };
414
- });
415
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
416
- const startTime = Date.now();
417
- const toolName = request.params.name;
418
- const { apiUrl, apiKey } = resolveCredentials();
419
- if (!(apiUrl && apiKey)) {
607
+ catch (err) {
608
+ await writeReceipt('failed');
420
609
  return {
421
610
  content: [
422
- { type: 'text', text: 'Error: REVEALUI_API_URL and REVEALUI_API_KEY must be set' },
611
+ { type: 'text', text: `Error: ${err instanceof Error ? err.message : String(err)}` },
423
612
  ],
424
613
  isError: true,
425
614
  };
426
615
  }
616
+ // Fail-closed for mutations: the receipt is written BEFORE the tool runs,
617
+ // so a state change can never happen without a durable record of it. If
618
+ // the write fails, refuse the call — nothing executes.
619
+ if (mutating) {
620
+ const recorded = await writeReceipt('invoked');
621
+ if (!recorded) {
622
+ return {
623
+ content: [{ type: 'text', text: 'Error: audit log unavailable; mutating tool refused' }],
624
+ isError: true,
625
+ };
626
+ }
627
+ }
427
628
  try {
428
629
  let data;
429
630
  switch (toolName) {
430
631
  case 'revealui_list_sites': {
431
- const parsed = validateToolArgs(ListSitesArgsSchema, request.params.arguments, toolName);
632
+ const parsed = validateToolArgs(ListSitesArgsSchema, rawArgs, toolName);
432
633
  if (!parsed.ok)
433
- return parsed.error;
634
+ return denied(parsed.error);
434
635
  const { limit = 20, page = 1 } = parsed.value;
435
636
  data = await apiGet(apiUrl, apiKey, '/api/sites', {
436
637
  limit: String(limit),
@@ -439,10 +640,13 @@ export function createRevealuiContentServer(options) {
439
640
  break;
440
641
  }
441
642
  case 'revealui_list_content': {
442
- const parsed = validateToolArgs(ListContentArgsSchema, request.params.arguments, toolName);
643
+ const parsed = validateToolArgs(ListContentArgsSchema, rawArgs, toolName);
443
644
  if (!parsed.ok)
444
- return parsed.error;
645
+ return denied(parsed.error);
445
646
  const { site_id, collection, limit = 20, page = 1, status } = parsed.value;
647
+ const notExposed = await denyIfCollectionNotExposed(collection);
648
+ if (notExposed)
649
+ return notExposed;
446
650
  const params = {
447
651
  limit: String(limit),
448
652
  page: String(page),
@@ -455,17 +659,20 @@ export function createRevealuiContentServer(options) {
455
659
  break;
456
660
  }
457
661
  case 'revealui_get_content': {
458
- const parsed = validateToolArgs(GetContentArgsSchema, request.params.arguments, toolName);
662
+ const parsed = validateToolArgs(GetContentArgsSchema, rawArgs, toolName);
459
663
  if (!parsed.ok)
460
- return parsed.error;
664
+ return denied(parsed.error);
461
665
  const { collection, id } = parsed.value;
666
+ const notExposed = await denyIfCollectionNotExposed(collection);
667
+ if (notExposed)
668
+ return notExposed;
462
669
  data = await apiGet(apiUrl, apiKey, `/api/${collection}/${id}`);
463
670
  break;
464
671
  }
465
672
  case 'revealui_list_users': {
466
- const parsed = validateToolArgs(ListUsersArgsSchema, request.params.arguments, toolName);
673
+ const parsed = validateToolArgs(ListUsersArgsSchema, rawArgs, toolName);
467
674
  if (!parsed.ok)
468
- return parsed.error;
675
+ return denied(parsed.error);
469
676
  const { site_id, limit = 20, page = 1 } = parsed.value;
470
677
  const params = {
471
678
  limit: String(limit),
@@ -477,9 +684,9 @@ export function createRevealuiContentServer(options) {
477
684
  break;
478
685
  }
479
686
  case 'revealui_site_stats': {
480
- const parsed = validateToolArgs(SiteStatsArgsSchema, request.params.arguments, toolName);
687
+ const parsed = validateToolArgs(SiteStatsArgsSchema, rawArgs, toolName);
481
688
  if (!parsed.ok)
482
- return parsed.error;
689
+ return denied(parsed.error);
483
690
  const { site_id } = parsed.value;
484
691
  const params = {};
485
692
  if (site_id)
@@ -488,11 +695,17 @@ export function createRevealuiContentServer(options) {
488
695
  break;
489
696
  }
490
697
  default:
491
- return {
698
+ return denied({
492
699
  content: [{ type: 'text', text: `Error: Unknown tool: ${toolName}` }],
493
700
  isError: true,
494
- };
701
+ });
495
702
  }
703
+ // Read tools record the receipt AFTER a successful call and degrade on a
704
+ // write failure (the data is already fetched; the sink logs + marks the
705
+ // degraded write). Mutations already recorded their receipt above.
706
+ if (!mutating)
707
+ await writeReceipt('invoked');
708
+ await fireMeter(false);
496
709
  return {
497
710
  content: [
498
711
  {
@@ -511,6 +724,9 @@ export function createRevealuiContentServer(options) {
511
724
  };
512
725
  }
513
726
  catch (err) {
727
+ const httpStatus = err instanceof ApiRequestError ? err.status : undefined;
728
+ await writeReceipt('failed', { httpStatus });
729
+ await fireMeter(true);
514
730
  return {
515
731
  content: [
516
732
  { type: 'text', text: `Error: ${err instanceof Error ? err.message : String(err)}` },
@@ -1 +1 @@
1
- {"version":3,"file":"revealui-content.js","sourceRoot":"","sources":["../../../src/servers/factories/revealui-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAEL,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EAEtB,yBAAyB,GAG1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAE9E,IAAI,oBAAoB,GAA2B,EAAE,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,KAA6B;IAC1D,oBAAoB,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAG,CAAC,oBAAoB,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAC7F,KAAK,EACL,EAAE,CACH,CAAC;IACF,MAAM,MAAM,GAAG,oBAAoB,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACrF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO;QACL,aAAa,EAAE,UAAU,MAAM,EAAE;QACjC,cAAc,EAAE,kBAAkB;QAClC,YAAY,EAAE,kBAAkB;KACjC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CACnB,OAAe,EACf,MAAc,EACd,IAAY,EACZ,MAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACZ,IAA6C,CAAC,KAAK;YACjD,IAA6B,CAAC,OAAO;YACtC,OAAO,GAAG,CAAC,MAAM,EAAE,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACtB,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,KAAK,GAAW;IACpB;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC1F,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yCAAyC;oBACtD,OAAO,EAAE,CAAC;iBACX;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,wFAAwF;QAC1F,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;gBACzE,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;gBACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,OAAO,EAAE,EAAE,EAAE;gBAChF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,EAAE;gBAC7E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;aACxF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,yCAAyC;QACtD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBAC7E,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;aACxD;YACD,QAAQ,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC;SAC/B;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,6DAA6D;YAC7D,0CAA0C;QAC5C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;gBACnE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,OAAO,EAAE,EAAE,EAAE;gBAChF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,EAAE;aAC9E;SACF;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,sGAAsG;QACxG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oDAAoD;iBAClE;aACF;SACF;KACF;CACF,CAAC;AAwCF;;;;GAIG;AACH,MAAM,gBAAgB,GAAwC;IAC5D,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;IACzE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;IACzE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE;IAClF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;CACrD,CAAC;AAEF;;;;GAIG;AACH,MAAM,qBAAqB,GAA2B;IACpD,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAE5E;8EAC8E;AAC9E,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAElD,8EAA8E;AAC9E,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAYtC,6EAA6E;AAC7E,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjD,MAAM,CAAC,GAAG,IAA+E,CAAC;IAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC,IAA2B,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/F,OAAQ,CAAC,CAAC,IAA+B,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,GAAe,EAAE,cAAsB;IACxD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CAAC,OAA6B,EAAE,GAAe;IACpE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,OAAO,CAAC,KAAK,aAAa,CAAC;IACzE,OAAO;QACL,GAAG,EAAE,GAAG,mBAAmB,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;QAClD,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;QACvD,WAAW,EAAE,GAAG,WAAW,SAAS,EAAE,GAAG;QACzC,QAAQ,EAAE,kBAAkB;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,yBAAyB,CACtC,MAAc,EACd,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,sBAAsB,EAAE;YACvD,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA8B,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,SAAS;YAC9C,MAAM,CAAC,GAAG,GAAoC,CAAC;YAC/C,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChE,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAClE,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,SAAS;gBAAE,SAAS;YACjD,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAC1E,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;QACX,sEAAsE;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAA4C;IACtF,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC9C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAC/C,CAAC;IAEF,wEAAwE;IACxE,2EAA2E;IAC3E,yDAAyD;IACzD,IAAI,iBAAiB,GAAkC,IAAI,CAAC;IAE5D,KAAK,UAAU,kBAAkB;QAC/B,IAAI,iBAAiB;YAAE,OAAO,iBAAiB,CAAC;QAEhD,oDAAoD;QACpD,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC3E,IAAI,YAAY,EAAE,CAAC;gBACjB,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC9D,OAAO,iBAAiB,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAChD,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjE,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC1D,OAAO,iBAAiB,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,iBAAiB,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAC1C,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAEjF,4EAA4E;IAC5E,8BAA8B;IAC9B,4EAA4E;IAE5E,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAChD,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;YACxB,oEAAoE;YACpE,oEAAoE;YACpE,+CAA+C;YAC/C,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAU,CAAC,IAAI,EAAE,EAAE;oBACnE,KAAK,EAAE,MAAM,CAAC,0BAA0B,CAAC;oBACzC,IAAI,EAAE,GAAG;iBACV,CAAC,CAAC;gBACH,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yFAAyF;YAC3F,CAAC;QACH,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAA4B,EAAE,EAAE;QACzF,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,kCAAkC,mBAAmB,uBAAuB,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CACjG,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,4CAA4C,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAChD,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;oBACvB,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnC;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAwB,EAAE,EAAE;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAErC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAEhD,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0DAA0D,EAAE;iBACnF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,IAAa,CAAC;YAElB,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,qBAAqB,CAAC,CAAC,CAAC;oBAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACzF,IAAI,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;oBACpC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC9C,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;wBAChD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;wBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;qBACnB,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;oBAC7B,MAAM,MAAM,GAAG,gBAAgB,CAC7B,qBAAqB,EACrB,OAAO,CAAC,MAAM,CAAC,SAAS,EACxB,QAAQ,CACT,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;oBACpC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC3E,MAAM,MAAM,GAA2B;wBACrC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;wBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;qBACnB,CAAC;oBACF,IAAI,OAAO;wBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;oBACrC,IAAI,MAAM;wBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;oBAEnC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;oBAClE,MAAM;gBACR,CAAC;gBAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;oBAC5B,MAAM,MAAM,GAAG,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC1F,IAAI,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;oBACpC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;oBACxC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;oBAChE,MAAM;gBACR,CAAC;gBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;oBAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACzF,IAAI,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;oBACpC,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;oBACvD,MAAM,MAAM,GAA2B;wBACrC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;wBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;qBACnB,CAAC;oBACF,IAAI,OAAO;wBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;oBAErC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;oBAC1D,MAAM;gBACR,CAAC;gBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;oBAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACzF,IAAI,CAAC,MAAM,CAAC,EAAE;wBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;oBACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;oBACjC,MAAM,MAAM,GAA2B,EAAE,CAAC;oBAC1C,IAAI,OAAO;wBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;oBAErC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;oBAC3D,MAAM;gBACR,CAAC;gBAED;oBACE,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,QAAQ,EAAE,EAAE,CAAC;wBACrE,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,IAAI;4BACJ,KAAK,EAAE;gCACL,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gCAClC,MAAM,EAAE,kBAAkB;gCAC1B,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;6BACpC;yBACF,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;iBACrF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"revealui-content.js","sourceRoot":"","sources":["../../../src/servers/factories/revealui-content.ts"],"names":[],"mappings":"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"}
@@ -27,9 +27,9 @@ export declare const PublishFactArgsSchema: z.ZodObject<{
27
27
  agent_id: z.ZodString;
28
28
  content: z.ZodString;
29
29
  fact_type: z.ZodEnum<{
30
+ decision: "decision";
30
31
  warning: "warning";
31
32
  discovery: "discovery";
32
- decision: "decision";
33
33
  bug: "bug";
34
34
  question: "question";
35
35
  answer: "answer";
@@ -67,7 +67,6 @@ export declare const ShareMemoryArgsSchema: z.ZodObject<{
67
67
  site_id: z.ZodString;
68
68
  content: z.ZodString;
69
69
  type: z.ZodEnum<{
70
- warning: "warning";
71
70
  skill: "skill";
72
71
  fact: "fact";
73
72
  preference: "preference";
@@ -75,6 +74,7 @@ export declare const ShareMemoryArgsSchema: z.ZodObject<{
75
74
  feedback: "feedback";
76
75
  example: "example";
77
76
  correction: "correction";
77
+ warning: "warning";
78
78
  }>;
79
79
  source: z.ZodRecord<z.ZodString, z.ZodUnknown>;
80
80
  }, z.core.$strict>;
@@ -29,8 +29,13 @@ export type StreamableHttpHandlerOptions = {
29
29
  createServer: () => Server | Promise<Server>;
30
30
  /** Generate session IDs. Default: `crypto.randomUUID()`. */
31
31
  sessionIdGenerator?: () => string;
32
- /** Called when a new session is initialized. */
33
- onSessionInitialized?: (sessionId: string) => void | Promise<void>;
32
+ /**
33
+ * Called when a new session is initialized, with the initializing request so
34
+ * a caller can bind the session to that request's authenticated identity
35
+ * (GAP-371 I-3). Fires synchronously within the initialize request's own
36
+ * handling — the `req` is exactly the request that created the session.
37
+ */
38
+ onSessionInitialized?: (sessionId: string, req: IncomingMessage) => void | Promise<void>;
34
39
  /** Called when a session is terminated (DELETE or transport close). */
35
40
  onSessionClosed?: (sessionId: string) => void | Promise<void>;
36
41
  /**
@@ -49,8 +54,26 @@ export type StreamableHttpHandlerOptions = {
49
54
  * serverless request/response platforms). Default: false.
50
55
  */
51
56
  enableJsonResponse?: boolean;
57
+ /**
58
+ * Called once, synchronously, during handler construction with a control
59
+ * surface for the handler's session map. A governed mount uses it to
60
+ * terminate a session whose bound identity no longer matches the presented
61
+ * credential (GAP-371 I-3). Optional — stdio / unauthenticated callers omit it.
62
+ */
63
+ onControl?: (control: StreamableHttpControl) => void;
52
64
  };
53
65
  export type StreamableHttpHandler = (req: IncomingMessage, res: ServerResponse) => Promise<void>;
66
+ /** Control surface over a handler's live session map. */
67
+ export interface StreamableHttpControl {
68
+ /** Whether a session id currently has a live transport. */
69
+ hasSession(sessionId: string): boolean;
70
+ /**
71
+ * Close and forget a session. The transport's own `onsessionclosed` fires,
72
+ * so any external binding keyed on the id is cleaned up through the normal
73
+ * path. Idempotent — a no-op for an unknown id.
74
+ */
75
+ terminateSession(sessionId: string): Promise<void>;
76
+ }
54
77
  /**
55
78
  * Build a Node HTTP request handler that routes MCP Streamable HTTP traffic
56
79
  * to per-session `Server` + `Transport` pairs, allocating new sessions on
@@ -1 +1 @@
1
- {"version":3,"file":"streamable-http.d.ts","sourceRoot":"","sources":["../src/streamable-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWxE,MAAM,MAAM,4BAA4B,GAAG;IACzC;;;;OAIG;IACH,YAAY,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC;IAElC,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,uEAAuE;IACvE,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAWjG;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAqDvB"}
1
+ {"version":3,"file":"streamable-http.d.ts","sourceRoot":"","sources":["../src/streamable-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWxE,MAAM,MAAM,4BAA4B,GAAG;IACzC;;;;OAIG;IACH,YAAY,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC;IAElC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzF,uEAAuE;IACvE,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjG,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC;;;;OAIG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAoEvB"}
@@ -44,6 +44,21 @@ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
44
44
  export function createNodeStreamableHttpHandler(options) {
45
45
  const sessions = new Map();
46
46
  const generateSessionId = options.sessionIdGenerator ?? (() => randomUUID());
47
+ options.onControl?.({
48
+ hasSession(sessionId) {
49
+ return sessions.has(sessionId);
50
+ },
51
+ async terminateSession(sessionId) {
52
+ const entry = sessions.get(sessionId);
53
+ if (!entry)
54
+ return;
55
+ // Removing the entry first makes termination idempotent even if close()
56
+ // re-enters via onsessionclosed.
57
+ sessions.delete(sessionId);
58
+ await entry.transport.close();
59
+ await options.onSessionClosed?.(sessionId);
60
+ },
61
+ });
47
62
  return async function mcpStreamableHttpHandler(req, res) {
48
63
  const body = req.method === 'POST' ? await readJsonBody(req) : undefined;
49
64
  const rawSession = req.headers['mcp-session-id'];
@@ -75,7 +90,7 @@ export function createNodeStreamableHttpHandler(options) {
75
90
  allowedOrigins: options.allowedOrigins,
76
91
  onsessioninitialized: async (id) => {
77
92
  sessions.set(id, { server, transport });
78
- await options.onSessionInitialized?.(id);
93
+ await options.onSessionInitialized?.(id, req);
79
94
  },
80
95
  onsessionclosed: async (id) => {
81
96
  sessions.delete(id);