@redocly/realm 0.135.0-next.7 → 0.136.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/dist/cli/build/analytics/collect-analytics.js +1 -1
  3. package/dist/cli/build/analytics/collectors/get-skills-usage.d.ts +3 -0
  4. package/dist/cli/build/analytics/collectors/get-skills-usage.js +1 -0
  5. package/dist/client/templates/openapi-docs/helpers.js +1 -1
  6. package/dist/constants/common.d.ts +8 -0
  7. package/dist/constants/common.js +1 -1
  8. package/dist/server/config/env-config.d.ts +2 -0
  9. package/dist/server/config/env-schema.d.ts +5 -0
  10. package/dist/server/config/env-schemas/feature-flags.d.ts +4 -0
  11. package/dist/server/config/env-schemas/feature-flags.js +1 -1
  12. package/dist/server/constants/plugins/search.d.ts +1 -2
  13. package/dist/server/constants/plugins/search.js +1 -1
  14. package/dist/server/esbuild/plugins/on-rebuild.js +1 -1
  15. package/dist/server/fs/fs.js +1 -1
  16. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -1
  17. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  18. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  19. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  20. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  21. package/dist/server/plugins/config-parser/loaders/redocly-config-loader.js +1 -1
  22. package/dist/server/plugins/lifecycle.js +2 -2
  23. package/dist/server/plugins/mcp/{docs-mcp/codemode → codemode}/build-tool-type-declarations.d.ts +1 -1
  24. package/dist/server/plugins/mcp/codemode/capabilities/fetch/index.d.ts +4 -0
  25. package/dist/server/plugins/mcp/codemode/capabilities/fetch/index.js +4 -0
  26. package/dist/server/plugins/mcp/codemode/capabilities/index.d.ts +3 -0
  27. package/dist/server/plugins/mcp/codemode/capabilities/index.js +1 -0
  28. package/dist/server/plugins/mcp/codemode/capabilities/registry.d.ts +4 -0
  29. package/dist/server/plugins/mcp/codemode/capabilities/registry.js +1 -0
  30. package/dist/server/plugins/mcp/codemode/capabilities/types.d.ts +13 -0
  31. package/dist/server/plugins/mcp/codemode/capabilities/utils.d.ts +13 -0
  32. package/dist/server/plugins/mcp/codemode/capabilities/utils.js +7 -0
  33. package/dist/server/plugins/mcp/codemode/constants.d.ts +5 -0
  34. package/dist/server/plugins/mcp/codemode/constants.js +1 -0
  35. package/dist/server/plugins/mcp/codemode/invoke-tool.d.ts +4 -0
  36. package/dist/server/plugins/mcp/codemode/invoke-tool.js +1 -0
  37. package/dist/server/plugins/mcp/codemode/prompts.d.ts +6 -0
  38. package/dist/server/plugins/mcp/codemode/prompts.js +4 -0
  39. package/dist/server/plugins/mcp/codemode/sandbox/sandbox-polyfills.d.ts +3 -0
  40. package/dist/server/plugins/mcp/codemode/sandbox/sandbox-polyfills.js +100 -0
  41. package/dist/server/plugins/mcp/{docs-mcp/codemode → codemode/sandbox}/sandbox.d.ts +1 -1
  42. package/dist/server/plugins/mcp/codemode/sandbox/sandbox.js +15 -0
  43. package/dist/server/plugins/mcp/codemode/tools/describe-tools.d.ts +7 -0
  44. package/dist/server/plugins/mcp/codemode/tools/describe-tools.js +1 -0
  45. package/dist/server/plugins/mcp/codemode/tools/execute-schema.d.ts +5 -0
  46. package/dist/server/plugins/mcp/codemode/tools/execute-schema.js +1 -0
  47. package/dist/server/plugins/mcp/codemode/tools/execute.js +1 -0
  48. package/dist/server/plugins/mcp/codemode/types.d.ts +24 -0
  49. package/dist/server/plugins/mcp/codemode/types.js +0 -0
  50. package/dist/server/plugins/mcp/constants.d.ts +2 -0
  51. package/dist/server/plugins/mcp/constants.js +1 -1
  52. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.d.ts +0 -4
  53. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
  54. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/list-apis.js +1 -1
  55. package/dist/server/plugins/mcp/docs-mcp/utils.js +1 -1
  56. package/dist/server/plugins/mcp/gateway-mcp/eligibility.d.ts +30 -0
  57. package/dist/server/plugins/mcp/gateway-mcp/eligibility.js +1 -0
  58. package/dist/server/plugins/mcp/gateway-mcp/fetch/allowed-hosts.d.ts +13 -0
  59. package/dist/server/plugins/mcp/gateway-mcp/fetch/allowed-hosts.js +1 -0
  60. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.d.ts +12 -0
  61. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.js +1 -0
  62. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-guard.d.ts +9 -0
  63. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-guard.js +1 -0
  64. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.d.ts +6 -0
  65. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.js +1 -0
  66. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  67. package/dist/server/plugins/mcp/handlers/errors.d.ts +3 -21
  68. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  69. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -1
  70. package/dist/server/plugins/mcp/index.js +1 -1
  71. package/dist/server/plugins/mcp/servers/docs-server.d.ts +5 -10
  72. package/dist/server/plugins/mcp/servers/docs-server.js +1 -3
  73. package/dist/server/plugins/mcp/servers/mcp-server.d.ts +18 -0
  74. package/dist/server/plugins/mcp/servers/mcp-server.js +1 -0
  75. package/dist/server/plugins/mcp/types.d.ts +23 -8
  76. package/dist/server/plugins/mcp/utils/mode.d.ts +7 -0
  77. package/dist/server/plugins/mcp/utils/mode.js +1 -0
  78. package/dist/server/plugins/mcp/utils/xmcp-utils.d.ts +12 -60
  79. package/dist/server/plugins/mcp/utils/xmcp-utils.js +1 -1
  80. package/dist/server/plugins/mcp/utils.d.ts +8 -0
  81. package/dist/server/plugins/mcp/utils.js +1 -1
  82. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
  83. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.d.ts +15 -3
  84. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.js +1 -1
  85. package/dist/server/plugins/openapi-docs/index.js +1 -1
  86. package/dist/server/plugins/search/engines/search-engine.d.ts +2 -1
  87. package/dist/server/plugins/search/index.js +1 -1
  88. package/dist/server/plugins/skills/discover-skills.d.ts +17 -0
  89. package/dist/server/plugins/skills/discover-skills.js +1 -0
  90. package/dist/server/plugins/skills/index.d.ts +3 -0
  91. package/dist/server/plugins/skills/index.js +1 -0
  92. package/dist/server/plugins/skills/utils/parse-skill.d.ts +18 -0
  93. package/dist/server/plugins/skills/utils/parse-skill.js +1 -0
  94. package/dist/server/plugins/sso/index.js +1 -1
  95. package/dist/server/store.d.ts +4 -0
  96. package/dist/server/store.js +1 -1
  97. package/dist/server/types/plugins/common.d.ts +3 -0
  98. package/dist/server/types/plugins/search.d.ts +0 -1
  99. package/dist/server/types/plugins/skills.d.ts +16 -0
  100. package/dist/server/types/plugins/skills.js +0 -0
  101. package/dist/server/utils/cookie.d.ts +3 -0
  102. package/dist/server/utils/cookie.js +1 -1
  103. package/dist/server/utils/skills/can-access-skill.d.ts +9 -0
  104. package/dist/server/utils/skills/can-access-skill.js +1 -0
  105. package/dist/server/utils/skills/get-accessible-skills.d.ts +5 -0
  106. package/dist/server/utils/skills/get-accessible-skills.js +1 -0
  107. package/dist/server/utils/skills/get-skill-url.d.ts +2 -0
  108. package/dist/server/utils/skills/get-skill-url.js +1 -0
  109. package/dist/server/web-server/auth.js +4 -4
  110. package/dist/server/web-server/middleware/corsMiddleware.d.ts +1 -0
  111. package/dist/server/web-server/middleware/corsMiddleware.js +1 -1
  112. package/dist/server/web-server/middleware/ensureSearchData.js +1 -1
  113. package/dist/server/web-server/routes/auth.js +1 -1
  114. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +305 -256
  115. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +46 -39
  116. package/dist/server/web-server/routes/health.js +1 -1
  117. package/dist/server/web-server/routes/index.js +1 -1
  118. package/dist/server/web-server/routes/mcp-routes/a2a.d.ts +10 -0
  119. package/dist/server/web-server/routes/mcp-routes/a2a.js +1 -0
  120. package/dist/server/web-server/routes/mcp-routes/agent-card.d.ts +4 -0
  121. package/dist/server/web-server/routes/mcp-routes/agent-card.js +1 -0
  122. package/dist/server/web-server/routes/mcp-routes/constants.d.ts +14 -0
  123. package/dist/server/web-server/routes/mcp-routes/constants.js +1 -0
  124. package/dist/server/web-server/routes/mcp-routes/mcp-routes.d.ts +1 -1
  125. package/dist/server/web-server/routes/mcp-routes/mcp-routes.js +1 -1
  126. package/dist/server/web-server/routes/mcp-routes/mcp-server-card.d.ts +4 -0
  127. package/dist/server/web-server/routes/mcp-routes/mcp-server-card.js +1 -0
  128. package/dist/server/web-server/routes/mcp-routes/types.d.ts +34 -0
  129. package/dist/server/web-server/routes/mcp-routes/types.js +0 -0
  130. package/dist/server/web-server/routes/mcp-routes/utils/build-agent-card.d.ts +10 -0
  131. package/dist/server/web-server/routes/mcp-routes/utils/build-agent-card.js +1 -0
  132. package/dist/server/web-server/routes/page-data.js +1 -1
  133. package/dist/server/web-server/routes/skills/build-skills-index.d.ts +4 -0
  134. package/dist/server/web-server/routes/skills/build-skills-index.js +1 -0
  135. package/dist/server/web-server/routes/skills/constants.d.ts +4 -0
  136. package/dist/server/web-server/routes/skills/constants.js +1 -0
  137. package/dist/server/web-server/routes/skills/skill-markdown.d.ts +4 -0
  138. package/dist/server/web-server/routes/skills/skill-markdown.js +1 -0
  139. package/dist/server/web-server/routes/skills/skills-index.d.ts +4 -0
  140. package/dist/server/web-server/routes/skills/skills-index.js +1 -0
  141. package/dist/server/web-server/routes/skills/skills-routes.d.ts +4 -0
  142. package/dist/server/web-server/routes/skills/skills-routes.js +1 -0
  143. package/dist/server/web-server/routes/skills/types.d.ts +12 -0
  144. package/dist/server/web-server/routes/skills/types.js +0 -0
  145. package/dist/server/web-server/utils/resolve-public-base-url.d.ts +4 -0
  146. package/dist/server/web-server/utils/resolve-public-base-url.js +1 -0
  147. package/dist/server/web-server/utils.js +1 -1
  148. package/dist/server/workers/api-routes-worker-pool.js +1 -1
  149. package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
  150. package/dist/server/workers/scorecards-worker-pool.js +1 -1
  151. package/dist/server/workers/worker-pool.d.ts +1 -0
  152. package/dist/server/workers/worker-pool.js +1 -1
  153. package/package.json +10 -10
  154. package/dist/server/plugins/mcp/docs-mcp/codemode/prompts.d.ts +0 -5
  155. package/dist/server/plugins/mcp/docs-mcp/codemode/prompts.js +0 -4
  156. package/dist/server/plugins/mcp/docs-mcp/codemode/sandbox.js +0 -7
  157. package/dist/server/plugins/mcp/docs-mcp/codemode/types.d.ts +0 -9
  158. package/dist/server/plugins/mcp/docs-mcp/tools/execute.js +0 -1
  159. package/dist/server/plugins/mcp/mode.d.ts +0 -9
  160. package/dist/server/plugins/mcp/mode.js +0 -1
  161. /package/dist/server/plugins/mcp/{docs-mcp/codemode → codemode}/build-tool-type-declarations.js +0 -0
  162. /package/dist/server/plugins/mcp/{docs-mcp/codemode → codemode/capabilities}/types.js +0 -0
  163. /package/dist/server/plugins/mcp/{docs-mcp → codemode}/tools/execute.d.ts +0 -0
@@ -58,12 +58,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
58
58
  readonly type: 'string';
59
59
  };
60
60
  };
61
- readonly required: readonly ['name'];
61
+ readonly required: readonly ["name"];
62
62
  readonly additionalProperties: false;
63
63
  };
64
64
  };
65
65
  };
66
- readonly required: readonly ['channels'];
66
+ readonly required: readonly ["channels"];
67
67
  readonly additionalProperties: false;
68
68
  };
69
69
  };
@@ -85,7 +85,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
85
85
  readonly type: 'string';
86
86
  };
87
87
  };
88
- readonly required: readonly ['label', 'url'];
88
+ readonly required: readonly ["label", "url"];
89
89
  readonly additionalProperties: false;
90
90
  };
91
91
  };
@@ -112,7 +112,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
112
112
  readonly type: 'string';
113
113
  };
114
114
  };
115
- readonly required: readonly ['type', 'key'];
115
+ readonly required: readonly ["type", "key"];
116
116
  readonly additionalProperties: false;
117
117
  };
118
118
  };
@@ -207,12 +207,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
207
207
  readonly type: 'string';
208
208
  };
209
209
  };
210
- readonly required: readonly ['name'];
210
+ readonly required: readonly ["name"];
211
211
  readonly additionalProperties: false;
212
212
  };
213
213
  };
214
214
  };
215
- readonly required: readonly ['channels'];
215
+ readonly required: readonly ["channels"];
216
216
  readonly additionalProperties: false;
217
217
  };
218
218
  };
@@ -234,7 +234,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
234
234
  readonly type: 'string';
235
235
  };
236
236
  };
237
- readonly required: readonly ['label', 'url'];
237
+ readonly required: readonly ["label", "url"];
238
238
  readonly additionalProperties: false;
239
239
  };
240
240
  };
@@ -261,11 +261,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
261
261
  readonly type: 'string';
262
262
  };
263
263
  };
264
- readonly required: readonly ['type', 'key'];
264
+ readonly required: readonly ["type", "key"];
265
265
  readonly additionalProperties: false;
266
266
  };
267
267
  };
268
268
  type: {
269
+ readonly type: 'string';
269
270
  readonly const: 'user';
270
271
  };
271
272
  metadata: {
@@ -277,7 +278,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
277
278
  readonly description: 'Email of the user';
278
279
  };
279
280
  };
280
- readonly required: readonly ['email'];
281
+ readonly required: readonly ["email"];
281
282
  readonly additionalProperties: true;
282
283
  };
283
284
  revision: {
@@ -340,12 +341,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
340
341
  readonly type: 'string';
341
342
  };
342
343
  };
343
- readonly required: readonly ['name'];
344
+ readonly required: readonly ["name"];
344
345
  readonly additionalProperties: false;
345
346
  };
346
347
  };
347
348
  };
348
- readonly required: readonly ['channels'];
349
+ readonly required: readonly ["channels"];
349
350
  readonly additionalProperties: false;
350
351
  };
351
352
  };
@@ -367,7 +368,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
367
368
  readonly type: 'string';
368
369
  };
369
370
  };
370
- readonly required: readonly ['label', 'url'];
371
+ readonly required: readonly ["label", "url"];
371
372
  readonly additionalProperties: false;
372
373
  };
373
374
  };
@@ -394,11 +395,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
394
395
  readonly type: 'string';
395
396
  };
396
397
  };
397
- readonly required: readonly ['type', 'key'];
398
+ readonly required: readonly ["type", "key"];
398
399
  readonly additionalProperties: false;
399
400
  };
400
401
  };
401
402
  type: {
403
+ readonly type: 'string';
402
404
  readonly const: 'api-operation';
403
405
  };
404
406
  metadata: {
@@ -407,7 +409,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
407
409
  readonly properties: {
408
410
  readonly method: {
409
411
  readonly type: 'string';
410
- readonly enum: readonly ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'MUTATION', 'QUERY', 'SUBSCRIBE', 'PUBLISH'];
412
+ readonly enum: readonly ["GET", "POST", "PUT", "DELETE", "PATCH", "MUTATION", "QUERY", "SUBSCRIBE", "PUBLISH"];
411
413
  readonly description: 'HTTP method of the API operation';
412
414
  };
413
415
  readonly path: {
@@ -429,7 +431,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
429
431
  };
430
432
  };
431
433
  };
432
- readonly required: readonly ['method', 'path'];
434
+ readonly required: readonly ["method", "path"];
433
435
  readonly additionalProperties: true;
434
436
  };
435
437
  revision: {
@@ -492,12 +494,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
492
494
  readonly type: 'string';
493
495
  };
494
496
  };
495
- readonly required: readonly ['name'];
497
+ readonly required: readonly ["name"];
496
498
  readonly additionalProperties: false;
497
499
  };
498
500
  };
499
501
  };
500
- readonly required: readonly ['channels'];
502
+ readonly required: readonly ["channels"];
501
503
  readonly additionalProperties: false;
502
504
  };
503
505
  };
@@ -519,7 +521,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
519
521
  readonly type: 'string';
520
522
  };
521
523
  };
522
- readonly required: readonly ['label', 'url'];
524
+ readonly required: readonly ["label", "url"];
523
525
  readonly additionalProperties: false;
524
526
  };
525
527
  };
@@ -546,11 +548,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
546
548
  readonly type: 'string';
547
549
  };
548
550
  };
549
- readonly required: readonly ['type', 'key'];
551
+ readonly required: readonly ["type", "key"];
550
552
  readonly additionalProperties: false;
551
553
  };
552
554
  };
553
555
  type: {
556
+ readonly type: 'string';
554
557
  readonly const: 'data-schema';
555
558
  };
556
559
  metadata: {
@@ -559,7 +562,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
559
562
  readonly properties: {
560
563
  readonly specType: {
561
564
  readonly type: 'string';
562
- readonly enum: readonly ['jsonschema', 'openapi', 'asyncapi', 'avro', 'zod', 'graphql', 'protobuf', 'arazzo'];
565
+ readonly enum: readonly ["jsonschema", "openapi", "asyncapi", "avro", "zod", "graphql", "protobuf", "arazzo"];
563
566
  readonly description: 'Specification type of the data schema';
564
567
  };
565
568
  readonly schema: {
@@ -571,7 +574,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
571
574
  readonly description: 'SDL of the data structure';
572
575
  };
573
576
  };
574
- readonly required: readonly ['specType'];
577
+ readonly required: readonly ["specType"];
575
578
  readonly additionalProperties: true;
576
579
  };
577
580
  revision: {
@@ -634,12 +637,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
634
637
  readonly type: 'string';
635
638
  };
636
639
  };
637
- readonly required: readonly ['name'];
640
+ readonly required: readonly ["name"];
638
641
  readonly additionalProperties: false;
639
642
  };
640
643
  };
641
644
  };
642
- readonly required: readonly ['channels'];
645
+ readonly required: readonly ["channels"];
643
646
  readonly additionalProperties: false;
644
647
  };
645
648
  };
@@ -661,7 +664,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
661
664
  readonly type: 'string';
662
665
  };
663
666
  };
664
- readonly required: readonly ['label', 'url'];
667
+ readonly required: readonly ["label", "url"];
665
668
  readonly additionalProperties: false;
666
669
  };
667
670
  };
@@ -688,11 +691,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
688
691
  readonly type: 'string';
689
692
  };
690
693
  };
691
- readonly required: readonly ['type', 'key'];
694
+ readonly required: readonly ["type", "key"];
692
695
  readonly additionalProperties: false;
693
696
  };
694
697
  };
695
698
  type: {
699
+ readonly type: 'string';
696
700
  readonly const: 'api-description';
697
701
  };
698
702
  metadata: {
@@ -701,7 +705,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
701
705
  readonly properties: {
702
706
  readonly specType: {
703
707
  readonly type: 'string';
704
- readonly enum: readonly ['jsonschema', 'openapi', 'asyncapi', 'avro', 'zod', 'graphql', 'protobuf', 'arazzo'];
708
+ readonly enum: readonly ["jsonschema", "openapi", "asyncapi", "avro", "zod", "graphql", "protobuf", "arazzo"];
705
709
  readonly description: 'Type of the API description';
706
710
  };
707
711
  readonly descriptionFile: {
@@ -709,7 +713,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
709
713
  readonly description: 'Path to the file containing the API description';
710
714
  };
711
715
  };
712
- readonly required: readonly ['specType', 'descriptionFile'];
716
+ readonly required: readonly ["specType", "descriptionFile"];
713
717
  readonly additionalProperties: true;
714
718
  };
715
719
  revision: {
@@ -772,12 +776,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
772
776
  readonly type: 'string';
773
777
  };
774
778
  };
775
- readonly required: readonly ['name'];
779
+ readonly required: readonly ["name"];
776
780
  readonly additionalProperties: false;
777
781
  };
778
782
  };
779
783
  };
780
- readonly required: readonly ['channels'];
784
+ readonly required: readonly ["channels"];
781
785
  readonly additionalProperties: false;
782
786
  };
783
787
  };
@@ -799,7 +803,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
799
803
  readonly type: 'string';
800
804
  };
801
805
  };
802
- readonly required: readonly ['label', 'url'];
806
+ readonly required: readonly ["label", "url"];
803
807
  readonly additionalProperties: false;
804
808
  };
805
809
  };
@@ -826,7 +830,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
826
830
  readonly type: 'string';
827
831
  };
828
832
  };
829
- readonly required: readonly ['type', 'key'];
833
+ readonly required: readonly ["type", "key"];
830
834
  readonly additionalProperties: false;
831
835
  };
832
836
  };
@@ -837,6 +841,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
837
841
  readonly additionalProperties: true;
838
842
  };
839
843
  type: {
844
+ readonly type: 'string';
840
845
  readonly const: 'service';
841
846
  };
842
847
  revision: {
@@ -899,12 +904,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
899
904
  readonly type: 'string';
900
905
  };
901
906
  };
902
- readonly required: readonly ['name'];
907
+ readonly required: readonly ["name"];
903
908
  readonly additionalProperties: false;
904
909
  };
905
910
  };
906
911
  };
907
- readonly required: readonly ['channels'];
912
+ readonly required: readonly ["channels"];
908
913
  readonly additionalProperties: false;
909
914
  };
910
915
  };
@@ -926,7 +931,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
926
931
  readonly type: 'string';
927
932
  };
928
933
  };
929
- readonly required: readonly ['label', 'url'];
934
+ readonly required: readonly ["label", "url"];
930
935
  readonly additionalProperties: false;
931
936
  };
932
937
  };
@@ -953,7 +958,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
953
958
  readonly type: 'string';
954
959
  };
955
960
  };
956
- readonly required: readonly ['type', 'key'];
961
+ readonly required: readonly ["type", "key"];
957
962
  readonly additionalProperties: false;
958
963
  };
959
964
  };
@@ -964,6 +969,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
964
969
  readonly additionalProperties: true;
965
970
  };
966
971
  type: {
972
+ readonly type: 'string';
967
973
  readonly const: 'domain';
968
974
  };
969
975
  revision: {
@@ -1026,12 +1032,12 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
1026
1032
  readonly type: 'string';
1027
1033
  };
1028
1034
  };
1029
- readonly required: readonly ['name'];
1035
+ readonly required: readonly ["name"];
1030
1036
  readonly additionalProperties: false;
1031
1037
  };
1032
1038
  };
1033
1039
  };
1034
- readonly required: readonly ['channels'];
1040
+ readonly required: readonly ["channels"];
1035
1041
  readonly additionalProperties: false;
1036
1042
  };
1037
1043
  };
@@ -1053,7 +1059,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
1053
1059
  readonly type: 'string';
1054
1060
  };
1055
1061
  };
1056
- readonly required: readonly ['label', 'url'];
1062
+ readonly required: readonly ["label", "url"];
1057
1063
  readonly additionalProperties: false;
1058
1064
  };
1059
1065
  };
@@ -1080,7 +1086,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
1080
1086
  readonly type: 'string';
1081
1087
  };
1082
1088
  };
1083
- readonly required: readonly ['type', 'key'];
1089
+ readonly required: readonly ["type", "key"];
1084
1090
  readonly additionalProperties: false;
1085
1091
  };
1086
1092
  };
@@ -1091,6 +1097,7 @@ export declare function createEntityUpdateSchema(catalogConfig: EntitiesCatalogC
1091
1097
  readonly additionalProperties: true;
1092
1098
  };
1093
1099
  type: {
1100
+ readonly type: 'string';
1094
1101
  readonly const: 'team';
1095
1102
  };
1096
1103
  revision: {
@@ -1 +1 @@
1
- const n=async e=>e.newResponse(null,200,{});export{n as healthCheckHandler};
1
+ import{CACHE_CONTROL_NO_STORE_HEADER_VALUE as n}from"../../constants/common.js";const r=async e=>e.newResponse(null,200,{"Cache-Control":n});export{r as healthCheckHandler};
@@ -1 +1 @@
1
- import{serveStatic as c}from"hono/serve-static";import{withPathPrefix as i,withoutPathPrefix as H}from"@redocly/theme/core/utils";import{ServerRoutes as l}from"../../../constants/api.js";import{PUBLIC_STATIC_FOLDER as L}from"../../constants/common.js";import{envConfig as S}from"../../config/env-config.js";import{authMiddleware as C}from"../middleware/authMiddleware.js";import{ensureSearchData as g}from"../middleware/ensureSearchData.js";import{dynamicMiddleware as h}from"../middleware/dynamic-middleware/dynamic-middleware.js";import{installRoutes as D}from"../../plugins/dev-onboarding/api/routes/index.js";import{authorizeHandler as I,oidcCallbackHandler as P,logoutHandler as f,postLogoutHandler as w,idpLoginHandler as M,redoclyLoginCallbackHandler as v,samlCallbackHandler as N,redoclyTokenLoginHandler as B,inviteHandler as G}from"./auth.js";import{appDataHandler as F}from"./app-data.js";import{searchFacetsHandler as U,searchHandler as y}from"./search.js";import{dynamicRouteHandler as Y}from"./dynamic-route.js";import{pageDataHandler as K,sharedPageDataHandler as k}from"./page-data.js";import{pathPrefixRedirectHandler as b}from"./path-prefix-redirect.js";import{getRoutesByLineHandler as A,resolvePathHandler as s,resolvePathsHandler as V,resolveSlugHandler as E}from"./resolve-route.js";import{feedbackHandler as x}from"./feedback.js";import{loggerMiddleware as q}from"../middleware/loggerMiddleware.js";import{responseHeadersMiddleware as u}from"../middleware/responseHeadersMiddleware.js";import{idleTimeoutMiddleware as X}from"../middleware/idleTimeoutMiddleware.js";import{otelTracesHandler as $}from"./otel/otel.js";import{healthCheckHandler as j}from"./health.js";import{askAiHandler as z}from"./ask-ai.js";import{semanticSearchHandler as W}from"./semantic-search.js";import{replayOauth2RedirectCallbackHandler as Z}from"./replay-oauth2-redirect.js";import{corsProxyHandler as O}from"./cors-proxy.js";import{corsMiddleware as d}from"../middleware/corsMiddleware.js";import{installApiRoutes as J}from"./api-routes/api-routes.js";import{cookieMiddleware as Q}from"../middleware/cookieMiddleware.js";import{staticContentHandler as aa}from"../routes/static-content.js";import{infoHandler as _}from"./info.js";import{catalogHandler as ea}from"./catalog/catalog.js";import{catalogRelationsHandler as ia}from"./catalog/catalog-relations.js";import{bffCatalogHandler as la}from"./catalog/bff-catalog.js";import{bffCatalogRevisionsHandler as ta}from"./catalog/bff-catalog-revisions.js";import{bffCatalogRelatedEntitiesHandler as ma}from"./catalog/bff-catalog-related-entities.js";import{catalogAuthMiddleware as t}from"../middleware/catalogAuthMiddleware.js";import{telemetryMiddleware as oa}from"../middleware/telemetry-middleware.js";import{errorHandler as da}from"./error.js";import{installMcpAuthRoutes as na}from"./mcp-routes/mcp-routes.js";import{jsonValidatorMiddleware as T}from"../middleware/jsonValidatorMiddleware.js";import{searchFacetsRequestSchema as pa}from"../../../api-schemas/search-facets.js";import{searchRequestSchema as ra}from"../../../api-schemas/search.js";function ee(a,e,m){const{resolveRouteData:n,readStaticAsset:p}=m;a.use("*",X()),a.use("*",Q()),a.use("*",h(e)),a.use("*",C(e)),a.use("*",q()),a.use("*",u(e)),a.use("*",oa()),a.use(i("*"),c({root:`./${L}`,getContent:(o,R)=>aa(o,R,e,p),rewriteRequestPath:o=>H(o)})),a.use(i(l.FEEDBACK),d({allowMethods:["POST"]})),a.use(i(l.ASK_AI),d({allowMethods:["POST"]})),a.use(i(l.SEMANTIC_SEARCH),d({allowMethods:["POST"]})),a.use("*",fa(e));const r=g(e);a.use(i(l.INFO),_()),S.NEW_CATALOG_ENABLED&&(a.use(i(l.CATALOG_ENTITIES),t({serverOutDir:e.serverOutDir}),ea(e)),a.use(i(l.CATALOG_ENTITIES_RELATIONS),t({serverOutDir:e.serverOutDir}),ia(e)),a.get(i(l.BFF_CATALOG_ENTITIES),t({serverOutDir:e.serverOutDir,protectReadMethods:!1}),la(e)),a.get(i(l.BFF_CATALOG_RELATED_ENTITIES),t({serverOutDir:e.serverOutDir,protectReadMethods:!1}),ma(e)),a.get(i(l.BFF_CATALOG_REVISIONS),t({serverOutDir:e.serverOutDir,protectReadMethods:!1}),ta(e))),a.get(i(l.SHARED_PAGE_DATA),k(e)),a.get(i(l.PAGE_DATA),K(e,n)),a.get(i(l.APP_DATA),F(e)),a.post(i(l.SEARCH),r,T(ra),y(e)),a.post(i(l.SEARCH_FACETS),r,T(pa),U(e)),a.post(i(l.AUTHORIZATION),I),a.post(i(l.LOGOUT),f(e)),a.get(i(l.LOGOUT),f(e)),a.get(i(l.POST_LOGOUT),w(e)),a.get(i(l.OIDC_CALLBACK),P(e)),a.get(i(l.REDOCLY_TOKEN_LOGIN),B(e)),a.get(i(l.REDOCLY_LOGIN_CALLBACK),v()),a.get(i(l.IDP_LOGIN),M(e)),a.post(i(l.SAML_CALLBACK),N(e)),a.get(i(l.INVITE),G(e)),a.get(i(l.HEALTH),j),na(a,e),D(a,e),a.all(i(l.CORS_PROXY),O(e)),a.all(i(`${l.CORS_PROXY}/*`),O(e)),J(a,e),a.post(i(l.FEEDBACK),x(e)),a.post(i(l.RESOLVE_ROUTE_BY_PATH),s(e)),a.post(i(l.RESOLVE_ROUTES_BY_PATHS),V(e)),a.post(i(l.RESOLVE_ROUTE_BY_SLUG),E(e)),a.post(i(l.ASK_AI),z(e)),a.post(i(l.SEMANTIC_SEARCH),W(e)),a.get(i(l.GET_ROUTES_BY_LINE),A(e)),a.post(i(l.OTEL_TRACES),$),a.get(i(l.REPLAY_OAUTH2_CALLBACK),Z),a.all(i("/*"),Y(e,n,p)),a.get("*",b),a.onError(da)}function fa(a){return async(e,m)=>{await a.waitForPluginsLifecycle(),await m()}}function ie(a,e){a.get(i(l.INFO),_()),a.post(i(l.RESOLVE_ROUTE_BY_PATH),s(e)),a.post(i(l.RESOLVE_ROUTE_BY_SLUG),E(e)),a.get(i(l.GET_ROUTES_BY_LINE),A(e))}export{ie as installDevRoutes,ee as installProdRoutes,fa as waitForPluginsLifecycle};
1
+ import{serveStatic as c}from"hono/serve-static";import{withPathPrefix as i,withoutPathPrefix as H}from"@redocly/theme/core/utils";import{ServerRoutes as l}from"../../../constants/api.js";import{PUBLIC_STATIC_FOLDER as L}from"../../constants/common.js";import{envConfig as S}from"../../config/env-config.js";import{authMiddleware as C}from"../middleware/authMiddleware.js";import{ensureSearchData as g}from"../middleware/ensureSearchData.js";import{dynamicMiddleware as h}from"../middleware/dynamic-middleware/dynamic-middleware.js";import{installRoutes as D}from"../../plugins/dev-onboarding/api/routes/index.js";import{installSkillsRoutes as I}from"./skills/skills-routes.js";import{authorizeHandler as P,oidcCallbackHandler as w,logoutHandler as f,postLogoutHandler as M,idpLoginHandler as v,redoclyLoginCallbackHandler as N,samlCallbackHandler as B,redoclyTokenLoginHandler as G,inviteHandler as F}from"./auth.js";import{appDataHandler as U}from"./app-data.js";import{searchFacetsHandler as y,searchHandler as Y}from"./search.js";import{dynamicRouteHandler as k}from"./dynamic-route.js";import{pageDataHandler as K,sharedPageDataHandler as b}from"./page-data.js";import{pathPrefixRedirectHandler as V}from"./path-prefix-redirect.js";import{getRoutesByLineHandler as s,resolvePathHandler as A,resolvePathsHandler as x,resolveSlugHandler as E}from"./resolve-route.js";import{feedbackHandler as q}from"./feedback.js";import{loggerMiddleware as u}from"../middleware/loggerMiddleware.js";import{responseHeadersMiddleware as X}from"../middleware/responseHeadersMiddleware.js";import{idleTimeoutMiddleware as $}from"../middleware/idleTimeoutMiddleware.js";import{otelTracesHandler as j}from"./otel/otel.js";import{healthCheckHandler as z}from"./health.js";import{askAiHandler as W}from"./ask-ai.js";import{semanticSearchHandler as Z}from"./semantic-search.js";import{replayOauth2RedirectCallbackHandler as J}from"./replay-oauth2-redirect.js";import{corsProxyHandler as O}from"./cors-proxy.js";import{corsMiddleware as d}from"../middleware/corsMiddleware.js";import{installApiRoutes as Q}from"./api-routes/api-routes.js";import{cookieMiddleware as aa}from"../middleware/cookieMiddleware.js";import{staticContentHandler as ea}from"../routes/static-content.js";import{infoHandler as _}from"./info.js";import{catalogHandler as ia}from"./catalog/catalog.js";import{catalogRelationsHandler as la}from"./catalog/catalog-relations.js";import{bffCatalogHandler as ma}from"./catalog/bff-catalog.js";import{bffCatalogRevisionsHandler as ta}from"./catalog/bff-catalog-revisions.js";import{bffCatalogRelatedEntitiesHandler as oa}from"./catalog/bff-catalog-related-entities.js";import{catalogAuthMiddleware as m}from"../middleware/catalogAuthMiddleware.js";import{telemetryMiddleware as da}from"../middleware/telemetry-middleware.js";import{errorHandler as na}from"./error.js";import{installMcpRoutes as pa}from"./mcp-routes/mcp-routes.js";import{jsonValidatorMiddleware as T}from"../middleware/jsonValidatorMiddleware.js";import{searchFacetsRequestSchema as ra}from"../../../api-schemas/search-facets.js";import{searchRequestSchema as fa}from"../../../api-schemas/search.js";function le(a,e,t){const{resolveRouteData:n,readStaticAsset:p}=t;a.use("*",$()),a.use("*",aa()),a.use("*",h(e)),a.use("*",C(e)),a.use("*",u()),a.use("*",X(e)),a.use("*",da()),a.use(i("*"),c({root:`./${L}`,getContent:(o,R)=>ea(o,R,e,p),rewriteRequestPath:o=>H(o)})),a.use(i(l.FEEDBACK),d({allowMethods:["POST"]})),a.use(i(l.ASK_AI),d({allowMethods:["POST"]})),a.use(i(l.SEMANTIC_SEARCH),d({allowMethods:["POST"]})),a.use("*",sa(e));const r=g(e);a.use(i(l.INFO),_()),S.NEW_CATALOG_ENABLED&&(a.use(i(l.CATALOG_ENTITIES),m({serverOutDir:e.serverOutDir}),ia(e)),a.use(i(l.CATALOG_ENTITIES_RELATIONS),m({serverOutDir:e.serverOutDir}),la(e)),a.get(i(l.BFF_CATALOG_ENTITIES),m({serverOutDir:e.serverOutDir,protectReadMethods:!1}),ma(e)),a.get(i(l.BFF_CATALOG_RELATED_ENTITIES),m({serverOutDir:e.serverOutDir,protectReadMethods:!1}),oa(e)),a.get(i(l.BFF_CATALOG_REVISIONS),m({serverOutDir:e.serverOutDir,protectReadMethods:!1}),ta(e))),a.get(i(l.SHARED_PAGE_DATA),b(e)),a.get(i(l.PAGE_DATA),K(e,n)),a.get(i(l.APP_DATA),U(e)),a.post(i(l.SEARCH),r,T(fa),Y(e)),a.post(i(l.SEARCH_FACETS),r,T(ra),y(e)),a.post(i(l.AUTHORIZATION),P),a.post(i(l.LOGOUT),f(e)),a.get(i(l.LOGOUT),f(e)),a.get(i(l.POST_LOGOUT),M(e)),a.get(i(l.OIDC_CALLBACK),w(e)),a.get(i(l.REDOCLY_TOKEN_LOGIN),G(e)),a.get(i(l.REDOCLY_LOGIN_CALLBACK),N()),a.get(i(l.IDP_LOGIN),v(e)),a.post(i(l.SAML_CALLBACK),B(e)),a.get(i(l.INVITE),F(e)),a.get(i(l.HEALTH),z),pa(a,e),D(a,e),I(a,e),a.all(i(l.CORS_PROXY),O(e)),a.all(i(`${l.CORS_PROXY}/*`),O(e)),Q(a,e),a.post(i(l.FEEDBACK),q(e)),a.post(i(l.RESOLVE_ROUTE_BY_PATH),A(e)),a.post(i(l.RESOLVE_ROUTES_BY_PATHS),x(e)),a.post(i(l.RESOLVE_ROUTE_BY_SLUG),E(e)),a.post(i(l.ASK_AI),W(e)),a.post(i(l.SEMANTIC_SEARCH),Z(e)),a.get(i(l.GET_ROUTES_BY_LINE),s(e)),a.post(i(l.OTEL_TRACES),j),a.get(i(l.REPLAY_OAUTH2_CALLBACK),J),a.all(i("/*"),k(e,n,p)),a.get("*",V),a.onError(na)}function sa(a){return async(e,t)=>{await a.waitForPluginsLifecycle(),await t()}}function me(a,e){a.get(i(l.INFO),_()),a.post(i(l.RESOLVE_ROUTE_BY_PATH),A(e)),a.post(i(l.RESOLVE_ROUTE_BY_SLUG),E(e)),a.get(i(l.GET_ROUTES_BY_LINE),s(e))}export{me as installDevRoutes,le as installProdRoutes,sa as waitForPluginsLifecycle};
@@ -0,0 +1,10 @@
1
+ import type { Handler } from 'hono';
2
+ import type { Store } from '../../../store.js';
3
+ /**
4
+ * The agent card advertises `/a2a` as its endpoint, but we do not implement the A2A
5
+ * protocol. An agent that POSTs here (e.g. `message/send`) gets 405 plus a `Link` header
6
+ * enumerating the discovery resources we do support, so it can pivot to the MCP server
7
+ * or the skills index.
8
+ */
9
+ export declare function a2aHandler(store: Store): Handler;
10
+ //# sourceMappingURL=a2a.d.ts.map
@@ -0,0 +1 @@
1
+ import{withPathPrefix as t}from"@redocly/theme/core/utils";import{MCP_SERVER_CARD_SLUG as n}from"../../../../constants/common.js";import{telemetryTraceStep as a}from"../../../telemetry/helpers/trace-step.js";import{SKILLS_INDEX_SLUG as l}from"../skills/constants.js";function p(i){return async s=>await a("a2a",async o=>{const r=i.config.skills?.hide!==!0,e=[`<${t(n)}>; rel="mcp-server-card"`];return r&&e.push(`<${t(l)}>; rel="agent-skills"`),o?.setAttribute("skillsAdvertised",r),s.json({error:{code:"405",message:"Method not allowed"}},405,{Link:e.join(", ")})})}export{p as a2aHandler};
@@ -0,0 +1,4 @@
1
+ import type { Handler } from 'hono';
2
+ import type { Store } from '../../../store.js';
3
+ export declare function agentCardHandler(store: Store): Handler;
4
+ //# sourceMappingURL=agent-card.d.ts.map
@@ -0,0 +1 @@
1
+ import{CACHE_CONTROL_NO_STORE_HEADER_VALUE as u}from"../../../constants/common.js";import{telemetryTraceStep as m}from"../../../telemetry/helpers/trace-step.js";import{getAccessibleSkills as g}from"../../../utils/skills/get-accessible-skills.js";import{resolvePublicBaseUrl as f}from"../../../web-server/utils/resolve-public-base-url.js";import{shouldHandleMcpAuth as A}from"../../../plugins/mcp/auth/auth-handlers.js";import{buildAgentCard as d}from"./utils/build-agent-card.js";function _(e){return async i=>await m("agent_card",async t=>{if(e.config.skills?.hide===!0)return i.newResponse(null,404);const{isAuthenticated:o,teams:c,claims:{email:a}}=i.get("auth"),r=e.config.access?.rbac||{},s=!!e.config.access?.requiresLogin,n=g(e.getSkills(),{isAuthenticated:o,teams:c,email:a},r,s),l=A(s,r);return t?.setAttribute("skillsCount",n.length),t?.setAttribute("mcpAuthRequired",l),i.json(d({seo:e.getGlobalConfig("seo"),baseUrl:f(e,i),skills:n,mcpAuthRequired:l}),200,{"Cache-Control":u,"Access-Control-Allow-Origin":"*"})})}export{_ as agentCardHandler};
@@ -0,0 +1,14 @@
1
+ export declare const MCP_EXTENSION_URI = "https://modelcontextprotocol.io";
2
+ export declare const MCP_ENDPOINT_PATH: string;
3
+ export declare const MCP_AUTH_SCHEMES: string[];
4
+ export declare const A2A_PROTOCOL_VERSION = "0.3.0";
5
+ export declare const A2A_PREFERRED_TRANSPORT = "HTTP+JSON";
6
+ export declare const A2A_DEFAULT_INPUT_MODES: string[];
7
+ export declare const A2A_DEFAULT_OUTPUT_MODES: string[];
8
+ export declare const A2A_CAPABILITIES: {
9
+ streaming: boolean;
10
+ pushNotifications: boolean;
11
+ };
12
+ export declare const A2A_DEFAULT_DESCRIPTION = "Documentation agent card announcing this site's agent skills and MCP server.";
13
+ export declare const AGENT_CARD_VERSION = "0.0.1";
14
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ import{RESERVED_ROUTES as t}from"../../../plugins/get-reserved-routes.js";const e="https://modelcontextprotocol.io",n=t.mcp,s=["bearer","oauth2"],A="0.3.0",E="HTTP+JSON",_=["text/plain"],r=["text/plain"],T={streaming:!1,pushNotifications:!1},c="Documentation agent card announcing this site's agent skills and MCP server.",p="0.0.1";export{T as A2A_CAPABILITIES,c as A2A_DEFAULT_DESCRIPTION,_ as A2A_DEFAULT_INPUT_MODES,r as A2A_DEFAULT_OUTPUT_MODES,E as A2A_PREFERRED_TRANSPORT,A as A2A_PROTOCOL_VERSION,p as AGENT_CARD_VERSION,s as MCP_AUTH_SCHEMES,n as MCP_ENDPOINT_PATH,e as MCP_EXTENSION_URI};
@@ -1,4 +1,4 @@
1
1
  import type { Hono } from 'hono';
2
2
  import type { Store } from '../../../store';
3
- export declare function installMcpAuthRoutes(router: Hono, store: Store): void;
3
+ export declare function installMcpRoutes(router: Hono, store: Store): void;
4
4
  //# sourceMappingURL=mcp-routes.d.ts.map
@@ -1 +1 @@
1
- import{ServerRoutes as e}from"../../../../constants/api.js";import{EntitlementsProvider as m}from"../../../entitlements/entitlements-provider.js";import{withPathPrefix as n}from"@redocly/theme/core/utils";import{mcpOAuthProtectedResourceHandler as p,mcpOAuthAuthorizationServerHandler as s,mcpDynamicClientRegistrationHandler as A,mcpAuthorizationHandler as C,mcpTokenPortalHandler as l,mcpCallbackHandler as i}from"./mcp-oauth.js";function d(t,o){const c=o.getConfig().mcp,a=m.instance().canAccessFeature("mcp");!c?.hide&&!c?.docs?.hide&&a&&(t.get(`${e.MCP_OAUTH_PROTECTED_RESOURCE}${n("/mcp")}`,p()),t.get(e.MCP_OAUTH_AUTHORIZATION_SERVER,s()),t.post(n(e.MCP_DYNAMIC_CLIENT_REGISTRATION),A()),t.get(n(e.MCP_AUTHORIZATION),C()),t.post(n(e.MCP_TOKEN_PORTAL),l()),t.get(n(e.MCP_CALLBACK),i()),t.get(n(`${e.MCP_CALLBACK}/*`),i()))}export{d as installMcpAuthRoutes};
1
+ import{corsMiddleware as p}from"../../middleware/corsMiddleware.js";import{ServerRoutes as n}from"../../../../constants/api.js";import{EntitlementsProvider as r}from"../../../entitlements/entitlements-provider.js";import{withPathPrefix as t}from"@redocly/theme/core/utils";import{AGENT_CARD_SLUG as C,A2A_SLUG as a,MCP_SERVER_CARD_SLUG as l}from"../../../../constants/common.js";import{mcpOAuthProtectedResourceHandler as A,mcpOAuthAuthorizationServerHandler as d,mcpDynamicClientRegistrationHandler as s,mcpAuthorizationHandler as _,mcpTokenPortalHandler as R,mcpCallbackHandler as m}from"./mcp-oauth.js";import{mcpServerCardHandler as E}from"./mcp-server-card.js";import{agentCardHandler as P}from"./agent-card.js";import{a2aHandler as T}from"./a2a.js";function N(e,i){const o=i.getConfig().mcp,c=r.instance().canAccessFeature("mcp");!o?.hide&&!o?.docs?.hide&&c&&(e.get(t(l),E(i)),e.get(t(C),P(i)),e.use(t(a),p({allowMethods:["POST"],exposeHeaders:["Link"]})),e.post(t(a),T(i)),e.get(`${n.MCP_OAUTH_PROTECTED_RESOURCE}${t("/mcp")}`,A()),e.get(n.MCP_OAUTH_AUTHORIZATION_SERVER,d()),e.post(t(n.MCP_DYNAMIC_CLIENT_REGISTRATION),s()),e.get(t(n.MCP_AUTHORIZATION),_()),e.post(t(n.MCP_TOKEN_PORTAL),R()),e.get(t(n.MCP_CALLBACK),m()),e.get(t(`${n.MCP_CALLBACK}/*`),m()))}export{N as installMcpRoutes};
@@ -0,0 +1,4 @@
1
+ import type { Handler } from 'hono';
2
+ import type { Store } from '../../../store';
3
+ export declare function mcpServerCardHandler(store: Store): Handler;
4
+ //# sourceMappingURL=mcp-server-card.d.ts.map
@@ -0,0 +1 @@
1
+ import{LATEST_PROTOCOL_VERSION as f}from"@redocly/mcp-typescript-sdk/types.js";import{withPathPrefix as h}from"@redocly/theme/core/utils";import{DEFAULT_DOCS_MCP_SERVER_NAME as S}from"../../../plugins/mcp/constants.js";import{RESERVED_ROUTES as O}from"../../../plugins/get-reserved-routes.js";import{isMcpCodeModeEnabled as T}from"../../../plugins/mcp/utils/mode.js";import{CODE_MODE_TOOL_NAMES as A,DESCRIBE_TOOLS_TOOL_NAME as R,FETCH_TOOL_NAME as g}from"../../../plugins/mcp/codemode/constants.js";import{EXECUTE_TOOL_SCHEMA as M}from"../../../plugins/mcp/codemode/tools/execute-schema.js";import{describeToolsSchema as b}from"../../../plugins/mcp/codemode/tools/describe-tools.js";import{buildCodeModeInstructions as L,buildExecuteDescription as v,DESCRIBE_TOOLS_DESCRIPTION as D}from"../../../plugins/mcp/codemode/prompts.js";import{composeExecuteAnnotations as I}from"../../../plugins/mcp/codemode/capabilities/index.js";import{ALL_CAPABILITIES as P}from"../../../plugins/mcp/codemode/capabilities/registry.js";import{isGatewayCapabilityEnabled as V}from"../../../plugins/mcp/gateway-mcp/eligibility.js";import{shouldHandleMcpAuth as y}from"../../../plugins/mcp/auth/auth-handlers.js";import{resolvePublicBaseUrl as H}from"../../../web-server/utils/resolve-public-base-url.js";import{telemetryTraceStep as N}from"../../../telemetry/helpers/trace-step.js";import{MCP_AUTH_SCHEMES as U}from"./constants.js";const x="https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",w="1.0";function to(t){const r=T(),E=new Date().toISOString().slice(0,10);return async c=>await N("mcp_server_card",async s=>{const o=t.getConfig(),m=o.mcp?.docs?.name||S,a=t.getMcpTools().filter(e=>!A.has(e.name)),i=V(o.mcp)?[...P]:[],l=i.some(e=>e.id===g),n=(r?[{...M,description:v(l),annotations:I(i)},{name:R,description:D,schema:b(a,i)}]:a).map(({name:e,description:C,schema:_,annotations:p})=>({name:e,description:C,inputSchema:_,...p?{annotations:p}:{}})),u=o.skills?.hide===!0?[]:t.getSkills(),d={$schema:x,version:w,protocolVersion:f,serverInfo:{name:m,title:m,version:E},description:o.seo?.description,documentationUrl:H(t,c),transport:{type:"streamable-http",endpoint:h(O.mcp)},capabilities:{logging:{},tools:{listChanged:!0},...u.length>0?{resources:{listChanged:!0},completions:{}}:{}},authentication:y(!!o.access?.requiresLogin,o.access?.rbac)?{required:!0,schemes:U}:void 0,instructions:r?L(l):void 0,tools:n.length>0?n:["dynamic"]};return s?.setAttribute("mode",r?"code":"tools"),s?.setAttribute("toolsCount",n.length),s?.setAttribute("authRequired",d.authentication!==void 0),c.json(d,200,{"Access-Control-Allow-Origin":"*","Cache-Control":"public, max-age=3600"})})}export{to as mcpServerCardHandler};
@@ -0,0 +1,34 @@
1
+ export type AgentExtension = {
2
+ uri: string;
3
+ description?: string;
4
+ required?: boolean;
5
+ params?: Record<string, unknown>;
6
+ };
7
+ export type AgentCard = {
8
+ name: string;
9
+ description: string;
10
+ url: string;
11
+ version: string;
12
+ protocolVersion: '0.3.0';
13
+ preferredTransport: 'HTTP+JSON';
14
+ provider?: {
15
+ organization: string;
16
+ url: string;
17
+ };
18
+ documentationUrl?: string;
19
+ capabilities: {
20
+ streaming: boolean;
21
+ pushNotifications: boolean;
22
+ extensions?: AgentExtension[];
23
+ };
24
+ defaultInputModes: string[];
25
+ defaultOutputModes: string[];
26
+ skills: Array<{
27
+ id: string;
28
+ name: string;
29
+ description: string;
30
+ tags: string[];
31
+ url: string;
32
+ }>;
33
+ };
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,10 @@
1
+ import type { SeoConfig } from '@redocly/config';
2
+ import type { Skill } from '../../../../types/plugins/skills.js';
3
+ import type { AgentCard } from '../types.js';
4
+ export declare function buildAgentCard({ seo, baseUrl, skills, mcpAuthRequired }: {
5
+ seo: SeoConfig | undefined;
6
+ baseUrl: string;
7
+ skills: Skill[];
8
+ mcpAuthRequired: boolean;
9
+ }): AgentCard;
10
+ //# sourceMappingURL=build-agent-card.d.ts.map
@@ -0,0 +1 @@
1
+ import{combineUrls as e,withPathPrefix as i}from"@redocly/theme/core/utils";import{DEFAULT_TITLE as s}from"../../../../constants/common.js";import{getSkillUrl as T}from"../../../../utils/skills/get-skill-url.js";import{A2A_SLUG as E}from"../../../../../constants/common.js";import{A2A_CAPABILITIES as m,A2A_DEFAULT_DESCRIPTION as u,A2A_DEFAULT_INPUT_MODES as d,A2A_DEFAULT_OUTPUT_MODES as a,A2A_PREFERRED_TRANSPORT as c,A2A_PROTOCOL_VERSION as P,AGENT_CARD_VERSION as l,MCP_AUTH_SCHEMES as I,MCP_ENDPOINT_PATH as O,MCP_EXTENSION_URI as S}from"../constants.js";function U({seo:r,baseUrl:o,skills:n,mcpAuthRequired:A}){const _=e(o,i(E)),p=e(o,i("/"));return{name:r?.title||r?.projectTitle||s,description:r?.description||u,url:_,documentationUrl:p,version:l,protocolVersion:P,preferredTransport:c,capabilities:{...m,extensions:[{uri:S,description:"Model Context Protocol server exposing the documentation tools and skills.",params:{url:e(o,i(O)),...A?{authentication:{required:!0,schemes:I}}:{}}}]},defaultInputModes:d,defaultOutputModes:a,skills:n.map(t=>({id:t.slug,name:t.name,description:t.description,tags:t.tags,url:T(o,t.slug)}))}}export{U as buildAgentCard};
@@ -1 +1 @@
1
- import{ServerRoutes as U}from"../../../constants/api.js";import{DEV_LOGIN_SLUG as $}from"../../../constants/common.js";import{CACHE_CONTROL_NO_STORE_HEADER_VALUE as r,DEFAULT_TITLE as F}from"../../constants/common.js";import{findInIterable as N}from"../../../utils/collection/find-in-iterable.js";import{removeTrailingSlash as q}from"../../../utils/url/remove-trailing-slash.js";import{envConfig as T}from"../../config/env-config.js";import{canAccessResource as B,filterDataByAccessDeep as j,isResourcePubliclyAccessible as H}from"../../utils/rbac.js";import{getServerProps as M}from"../../ssr/index.js";import{readSharedData as G}from"../../utils/index.js";import{getRedirectLoginUrl as V}from"../utils/get-redirect-login-url.js";import{processRedirects as W}from"./helpers/process-redirects.js";import{removeErrorDetails as k}from"../utils/remove-error-details.js";import{telemetry as K}from"../../telemetry/index.js";import{MCP_NOT_ALLOWED_TEMPLATE_ID as A}from"../../plugins/mcp/constants.js";function ie(e,n){return async(t,g)=>{const m=t.get("logger"),{req:p}=t,{pathname:d}=new URL(p.url),{seo:f,ssoDirect:h}=e.getConfig(),i=f?.title||F;if(e?.compilationErrors?.length&&T.isDevelopMode)return t.json({templateId:"compilation-error",props:{compilationErrors:e?.compilationErrors},sharedDataIds:{}},500,{"Cache-Control":r});const u=d.match(/page-data(.*)data.json$/);if(!u)return g();const c=decodeURI(u[1]),s=c==="/index/"?"/":q(c),o=e.getRouteBySlug(s,{followRedirect:!1})||N(e.routesBySlug.values(),a=>a.hasClientRoutes&&c.startsWith(a.slug+"/"));if(c===U.OIDC_CALLBACK+"/")return t.json({templateId:"403OIDC",sharedDataIds:{},props:{seo:{title:`${i} - Forbidden`}}},200,{"Cache-Control":r});const{isAuthenticated:C,teams:D,claims:{name:S,picture:_,email:I}}=t.get("auth"),R={isAuthenticated:C,email:I,teams:D},l={isAuthenticated:C,name:S,picture:_,email:I,teams:D};if(s==="/mcp"&&e.templates.has(A))return t.json({templateId:A,sharedDataIds:{},props:{},userData:l},405,{"Cache-Control":r});const L=e.getRedirect(s);if(L){const a=W({redirect:L}).location;return K.sendRedirectMessage([{object:"redirect",from:s,templateId:"404"}]),t.json({templateId:"404",redirectTo:a,sharedDataIds:{},props:{}},301,{"Cache-Control":r})}if(!o){const a=e.getRouteBySlug(s,{followRedirect:!0});return m.error(`Page not found: ${d}`),t.json({templateId:"404",redirectTo:a?.slug,sharedDataIds:{},props:{seo:{title:`${i} - Not Found`}},userData:l},404,{"Cache-Control":r})}if(m.verbose(`Page viewed: ${o.slug}`),!B(o,R,e.config.access?.rbac,e.config.access?.requiresLogin)&&o.slug!==$){if(C)return t.json({templateId:"403",sharedDataIds:{},props:{seo:{title:`${i} - Forbidden`}},userData:l},403,{"Cache-Control":r});const a=Object.keys(h||{}).length>0;return t.json({templateId:"404",sharedDataIds:{},props:{seo:{title:`${i} - Not Found`}},userData:l,...a?{redirectTo:V(e,o.slug)}:{}},a?401:404,{"Cache-Control":r})}const b=j(o.versions,R,e.config.access?.rbac,e.config.access?.requiresLogin),v=e.routesSharedData.get(o.slug)||{},P=await n(o),O=await M(o,t,P,e),{sharedDataIds:y,...E}=O,w={templateId:o.templateId,versions:b,sharedDataIds:{...v,...y||{}},props:T.isProductionEnv?k(E):E,slug:o.slug,userData:l,isPublic:H(o,e.config)};return t.json(w,200,{"Cache-Control":r})}}function ce(e){return async(n,t)=>{const g=n.get("logger"),{req:m}=n,{pathname:p}=new URL(m.url),d=p.match(/\/page-data\/shared\/(.*)\.json/);if(!d)return t();const f=decodeURIComponent(d[1]),h=await G(f,e.outdir),{isAuthenticated:i,teams:u,claims:{email:c}}=n.get("auth"),s=j(h,{isAuthenticated:i,email:c,teams:u},e.config.access?.rbac,e.config.access?.requiresLogin);return s?n.json(s,200,{"Cache-Control":r}):(g.error(`Shared data not found: ${p}`),n.text("Not Found",404,{"Cache-Control":r}))}}export{ie as pageDataHandler,ce as sharedPageDataHandler};
1
+ import{ServerRoutes as w}from"../../../constants/api.js";import{DEV_LOGIN_SLUG as U}from"../../../constants/common.js";import{CACHE_CONTROL_NO_STORE_HEADER_VALUE as r,DEFAULT_TITLE as $}from"../../constants/common.js";import{findInIterable as F}from"../../../utils/collection/find-in-iterable.js";import{removeTrailingSlash as N}from"../../../utils/url/remove-trailing-slash.js";import{envConfig as b}from"../../config/env-config.js";import{canAccessResource as q,filterDataByAccessDeep as T,isResourcePubliclyAccessible as B}from"../../utils/rbac.js";import{getServerProps as H}from"../../ssr/index.js";import{readSharedData as M}from"../../utils/index.js";import{getRedirectLoginUrl as G}from"../utils/get-redirect-login-url.js";import{processRedirects as V}from"./helpers/process-redirects.js";import{removeErrorDetails as W}from"../utils/remove-error-details.js";import{telemetry as k}from"../../telemetry/index.js";import{MCP_NOT_ALLOWED_TEMPLATE_ID as K}from"../../plugins/mcp/constants.js";function ie(e,n){return async(t,g)=>{const m=t.get("logger"),{req:p}=t,{pathname:d}=new URL(p.url),{seo:f,ssoDirect:h}=e.getConfig(),i=f?.title||$;if(e?.compilationErrors?.length&&b.isDevelopMode)return t.json({templateId:"compilation-error",props:{compilationErrors:e?.compilationErrors},sharedDataIds:{}},500,{"Cache-Control":r});const u=d.match(/page-data(.*)data.json$/);if(!u)return g();const c=decodeURI(u[1]),s=c==="/index/"?"/":N(c),o=e.getRouteBySlug(s,{followRedirect:!1})||F(e.routesBySlug.values(),a=>a.hasClientRoutes&&c.startsWith(a.slug+"/"));if(c===w.OIDC_CALLBACK+"/")return t.json({templateId:"403OIDC",sharedDataIds:{},props:{seo:{title:`${i} - Forbidden`}}},200,{"Cache-Control":r});const{isAuthenticated:C,teams:D,claims:{name:j,picture:A,email:I}}=t.get("auth"),R={isAuthenticated:C,email:I,teams:D},l={isAuthenticated:C,name:j,picture:A,email:I,teams:D};if(s==="/mcp"&&e.globalData.mcpData?.docs?.enabled)return t.json({templateId:K,sharedDataIds:{},props:{},userData:l},405,{"Cache-Control":r});const L=e.getRedirect(s);if(L){const a=V({redirect:L}).location;return k.sendRedirectMessage([{object:"redirect",from:s,templateId:"404"}]),t.json({templateId:"404",redirectTo:a,sharedDataIds:{},props:{}},301,{"Cache-Control":r})}if(!o){const a=e.getRouteBySlug(s,{followRedirect:!0});return m.error(`Page not found: ${d}`),t.json({templateId:"404",redirectTo:a?.slug,sharedDataIds:{},props:{seo:{title:`${i} - Not Found`}},userData:l},404,{"Cache-Control":r})}if(m.verbose(`Page viewed: ${o.slug}`),!q(o,R,e.config.access?.rbac,e.config.access?.requiresLogin)&&o.slug!==U){if(C)return t.json({templateId:"403",sharedDataIds:{},props:{seo:{title:`${i} - Forbidden`}},userData:l},403,{"Cache-Control":r});const a=Object.keys(h||{}).length>0;return t.json({templateId:"404",sharedDataIds:{},props:{seo:{title:`${i} - Not Found`}},userData:l,...a?{redirectTo:G(e,o.slug)}:{}},a?401:404,{"Cache-Control":r})}const S=T(o.versions,R,e.config.access?.rbac,e.config.access?.requiresLogin),_=e.routesSharedData.get(o.slug)||{},v=await n(o),P=await H(o,t,v,e),{sharedDataIds:O,...E}=P,y={templateId:o.templateId,versions:S,sharedDataIds:{..._,...O||{}},props:b.isProductionEnv?W(E):E,slug:o.slug,userData:l,isPublic:B(o,e.config)};return t.json(y,200,{"Cache-Control":r})}}function ce(e){return async(n,t)=>{const g=n.get("logger"),{req:m}=n,{pathname:p}=new URL(m.url),d=p.match(/\/page-data\/shared\/(.*)\.json/);if(!d)return t();const f=decodeURIComponent(d[1]),h=await M(f,e.outdir),{isAuthenticated:i,teams:u,claims:{email:c}}=n.get("auth"),s=T(h,{isAuthenticated:i,email:c,teams:u},e.config.access?.rbac,e.config.access?.requiresLogin);return s?n.json(s,200,{"Cache-Control":r}):(g.error(`Shared data not found: ${p}`),n.text("Not Found",404,{"Cache-Control":r}))}}export{ie as pageDataHandler,ce as sharedPageDataHandler};
@@ -0,0 +1,4 @@
1
+ import type { Skill } from '../../../types/plugins/skills.js';
2
+ import type { SkillsIndex } from './types.js';
3
+ export declare function buildSkillsIndex(skills: Skill[], baseUrl: string): SkillsIndex;
4
+ //# sourceMappingURL=build-skills-index.d.ts.map
@@ -0,0 +1 @@
1
+ import{getSkillUrl as t}from"../../../utils/skills/get-skill-url.js";import{SKILLS_INDEX_SCHEMA_URL as m}from"./constants.js";function d(i,r){return{$schema:m,skills:i.map(e=>({name:e.name,type:"skill-md",description:e.description,url:t(r,e.slug),digest:e.digest}))}}export{d as buildSkillsIndex};
@@ -0,0 +1,4 @@
1
+ export declare const SKILLS_INDEX_SCHEMA_URL = "https://schemas.agentskills.io/discovery/0.2.0/schema.json";
2
+ export declare const SKILLS_INDEX_FILENAME = "index.json";
3
+ export declare const SKILLS_INDEX_SLUG = "/.well-known/agent-skills/index.json";
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ import{AGENT_SKILLS_BASE as o}from"../../../../constants/common.js";const S="https://schemas.agentskills.io/discovery/0.2.0/schema.json",s="index.json",t=`${o}/${s}`;export{s as SKILLS_INDEX_FILENAME,S as SKILLS_INDEX_SCHEMA_URL,t as SKILLS_INDEX_SLUG};
@@ -0,0 +1,4 @@
1
+ import type { Handler } from 'hono';
2
+ import type { Store } from '../../../store.js';
3
+ export declare function skillMarkdownHandler(store: Store): Handler;
4
+ //# sourceMappingURL=skill-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ import{CACHE_CONTROL_NO_STORE_HEADER_VALUE as c}from"../../../constants/common.js";import{telemetryTraceStep as a}from"../../../telemetry/helpers/trace-step.js";import{canAccessSkill as m}from"../../../utils/skills/can-access-skill.js";import{MIME_TYPES as u}from"../../mime-types.js";import{getContentTypeHeaderValue as p}from"../../utils/content-type.js";function _(n){return async e=>await a("agent_skill",async r=>{const t=e.req.param("slug")??"";if(r?.setAttribute("skill",t),n.config.skills?.hide===!0)return e.newResponse(null,404);const s=n.skills.get(t),{isAuthenticated:l,teams:i,claims:{email:o}}=e.get("auth");return s&&m(s,{isAuthenticated:l,teams:i,email:o},n.config.access?.rbac,n.config.access?.requiresLogin)?e.newResponse(s.content,200,{"Content-Type":p(u[".md"]),"Cache-Control":c,"Access-Control-Allow-Origin":"*"}):e.newResponse(null,404)})}export{_ as skillMarkdownHandler};
@@ -0,0 +1,4 @@
1
+ import type { Handler } from 'hono';
2
+ import type { Store } from '../../../store.js';
3
+ export declare function skillsIndexHandler(store: Store): Handler;
4
+ //# sourceMappingURL=skills-index.d.ts.map
@@ -0,0 +1 @@
1
+ import{CACHE_CONTROL_NO_STORE_HEADER_VALUE as o}from"../../../constants/common.js";import{telemetryTraceStep as c}from"../../../telemetry/helpers/trace-step.js";import{getAccessibleSkills as a}from"../../../utils/skills/get-accessible-skills.js";import{resolvePublicBaseUrl as u}from"../../utils/resolve-public-base-url.js";import{buildSkillsIndex as m}from"./build-skills-index.js";function b(e){return async i=>await c("agent_skills_index",async l=>{if(e.config.skills?.hide===!0)return l?.setAttribute("skillsCount",0),i.newResponse(null,404);const{isAuthenticated:t,teams:n,claims:{email:r}}=i.get("auth"),s=a(e.getSkills(),{isAuthenticated:t,teams:n,email:r},e.config.access?.rbac,e.config.access?.requiresLogin);return l?.setAttribute("skillsCount",s.length),i.json(m(s,u(e,i)),200,{"Cache-Control":o,"Access-Control-Allow-Origin":"*"})})}export{b as skillsIndexHandler};
@@ -0,0 +1,4 @@
1
+ import type { Hono } from 'hono';
2
+ import type { Store } from '../../../store.js';
3
+ export declare function installSkillsRoutes(router: Hono, store: Store): void;
4
+ //# sourceMappingURL=skills-routes.d.ts.map
@@ -0,0 +1 @@
1
+ import{withPathPrefix as r}from"@redocly/theme/core/utils";import{AGENT_SKILLS_BASE as l,USER_SKILL_FILENAME as t}from"../../../../constants/common.js";import{SKILLS_INDEX_SLUG as m}from"./constants.js";import{skillMarkdownHandler as S}from"./skill-markdown.js";import{skillsIndexHandler as L}from"./skills-index.js";function E(i,o){i.get(r(m),L(o)),i.get(r(`${l}/:slug/${t}`),S(o))}export{E as installSkillsRoutes};