blume 1.7.1 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cli/chunk-0qymqwzz.js +164 -0
  3. package/dist/cli/chunk-0qymqwzz.js.map +15 -0
  4. package/dist/cli/{chunk-8gnpdsn1.js → chunk-0xjyb285.js} +2 -2
  5. package/dist/cli/{chunk-12dzsn9b.js → chunk-1jefwnfs.js} +82 -81
  6. package/dist/cli/{chunk-12dzsn9b.js.map → chunk-1jefwnfs.js.map} +3 -3
  7. package/dist/cli/{chunk-27gtm2ym.js → chunk-2mzebbbz.js} +1 -1
  8. package/dist/cli/{chunk-s5e5jt53.js → chunk-2z47ypj8.js} +1 -1
  9. package/dist/cli/{chunk-jtb45atp.js → chunk-3r45185y.js} +10 -12
  10. package/dist/cli/{chunk-jtb45atp.js.map → chunk-3r45185y.js.map} +2 -2
  11. package/dist/cli/{chunk-6mq7qkve.js → chunk-4x36ddpw.js} +18 -24
  12. package/dist/cli/{chunk-6mq7qkve.js.map → chunk-4x36ddpw.js.map} +2 -2
  13. package/dist/cli/{chunk-he2zfgah.js → chunk-5093q3n7.js} +22 -30
  14. package/dist/cli/{chunk-he2zfgah.js.map → chunk-5093q3n7.js.map} +2 -2
  15. package/dist/cli/{chunk-k0v1f8bb.js → chunk-5g0w1e2c.js} +21 -28
  16. package/dist/cli/{chunk-k0v1f8bb.js.map → chunk-5g0w1e2c.js.map} +2 -2
  17. package/dist/cli/{chunk-5gfw0q4j.js → chunk-5qk08vmp.js} +26 -34
  18. package/dist/cli/{chunk-5gfw0q4j.js.map → chunk-5qk08vmp.js.map} +2 -2
  19. package/dist/cli/{chunk-r99hynxh.js → chunk-7s8hm3b6.js} +41 -9
  20. package/dist/cli/{chunk-r99hynxh.js.map → chunk-7s8hm3b6.js.map} +3 -3
  21. package/dist/cli/{chunk-vyqj481z.js → chunk-8cjtbafj.js} +68 -66
  22. package/dist/cli/chunk-8cjtbafj.js.map +13 -0
  23. package/dist/cli/{chunk-aqjvpd03.js → chunk-97r59kpr.js} +27 -33
  24. package/dist/cli/{chunk-aqjvpd03.js.map → chunk-97r59kpr.js.map} +2 -2
  25. package/dist/cli/{chunk-np8dmfb0.js → chunk-ahnw3kxw.js} +26 -33
  26. package/dist/cli/{chunk-np8dmfb0.js.map → chunk-ahnw3kxw.js.map} +2 -2
  27. package/dist/cli/{chunk-j5f2wrj5.js → chunk-b27xqwn9.js} +10 -15
  28. package/dist/cli/{chunk-j5f2wrj5.js.map → chunk-b27xqwn9.js.map} +2 -2
  29. package/dist/cli/{chunk-kmx2mydj.js → chunk-bf6bt1xt.js} +8 -8
  30. package/dist/cli/{chunk-kmx2mydj.js.map → chunk-bf6bt1xt.js.map} +1 -1
  31. package/dist/cli/{chunk-90pdhkpm.js → chunk-bvwwhd84.js} +23 -32
  32. package/dist/cli/{chunk-90pdhkpm.js.map → chunk-bvwwhd84.js.map} +2 -2
  33. package/dist/cli/{chunk-mfm4sjwx.js → chunk-cjtn640a.js} +32 -43
  34. package/dist/cli/{chunk-mfm4sjwx.js.map → chunk-cjtn640a.js.map} +2 -2
  35. package/dist/cli/{chunk-pxj10x8y.js → chunk-ct47dqpx.js} +14 -3
  36. package/dist/cli/{chunk-pxj10x8y.js.map → chunk-ct47dqpx.js.map} +4 -3
  37. package/dist/cli/{chunk-x66c5yjn.js → chunk-dwgcp5sm.js} +2 -2
  38. package/dist/cli/{chunk-4trphnvy.js → chunk-e7f42gdj.js} +10 -13
  39. package/dist/cli/{chunk-4trphnvy.js.map → chunk-e7f42gdj.js.map} +2 -2
  40. package/dist/cli/{chunk-82atea4k.js → chunk-esphfr8p.js} +14 -18
  41. package/dist/cli/{chunk-82atea4k.js.map → chunk-esphfr8p.js.map} +2 -2
  42. package/dist/cli/{chunk-q56730e0.js → chunk-ex56aa81.js} +53 -53
  43. package/dist/cli/chunk-ex56aa81.js.map +13 -0
  44. package/dist/cli/{chunk-ywn7t0pb.js → chunk-garjf5z9.js} +3 -3
  45. package/dist/cli/{chunk-ev67ycx0.js → chunk-jq5n4avg.js} +1 -1
  46. package/dist/cli/{chunk-ka5k7cz9.js → chunk-js7saxwm.js} +35 -39
  47. package/dist/cli/{chunk-ka5k7cz9.js.map → chunk-js7saxwm.js.map} +4 -6
  48. package/dist/cli/{chunk-x1wvw7a8.js → chunk-k79xp7av.js} +168 -208
  49. package/dist/cli/chunk-k79xp7av.js.map +39 -0
  50. package/dist/cli/{chunk-3r94j3tc.js → chunk-nn13znc2.js} +2 -2
  51. package/dist/cli/{chunk-4ae4f395.js → chunk-ps4m1xh4.js} +60 -35
  52. package/dist/cli/chunk-ps4m1xh4.js.map +15 -0
  53. package/dist/cli/{chunk-wd27zjcz.js → chunk-q4rae3bg.js} +1 -1
  54. package/dist/cli/{chunk-pdwg3q9g.js → chunk-rqy0s5wh.js} +21 -30
  55. package/dist/cli/{chunk-pdwg3q9g.js.map → chunk-rqy0s5wh.js.map} +2 -2
  56. package/dist/cli/{chunk-52cwcqvp.js → chunk-rz9jmfhz.js} +15 -24
  57. package/dist/cli/{chunk-52cwcqvp.js.map → chunk-rz9jmfhz.js.map} +2 -2
  58. package/dist/cli/{chunk-8p3xe5jv.js → chunk-vacwm2hv.js} +3 -3
  59. package/dist/cli/{chunk-cbjnx4s8.js → chunk-vh9w1sgp.js} +1 -1
  60. package/dist/cli/{chunk-sbdqrjbb.js → chunk-vrfp10qk.js} +1 -1
  61. package/dist/cli/{chunk-h9ekmtz7.js → chunk-yg63d42r.js} +28 -35
  62. package/dist/cli/{chunk-h9ekmtz7.js.map → chunk-yg63d42r.js.map} +2 -2
  63. package/dist/cli/{chunk-5hs6gb7n.js → chunk-yzhm0j9q.js} +1 -1
  64. package/dist/cli/index.js +397 -34
  65. package/dist/cli/index.js.map +12 -4
  66. package/dist/types/core/config-input.d.ts +59 -0
  67. package/dist/types/core/data.d.ts +2 -0
  68. package/dist/types/core/schema.d.ts +47 -3
  69. package/dist/types/core/types.d.ts +5 -0
  70. package/docs/configuration/ask-ai.mdx +61 -0
  71. package/docs/configuration/index.mdx +3 -1
  72. package/docs/content/navigation.mdx +3 -0
  73. package/docs/content/syntax.mdx +10 -0
  74. package/docs/discoverability/agent-discovery.mdx +82 -1
  75. package/docs/discoverability/index.mdx +1 -1
  76. package/docs/discoverability/llms-txt.mdx +1 -1
  77. package/docs/reference/frontmatter.mdx +2 -0
  78. package/package.json +1 -1
  79. package/src/ai/agent-readability.ts +5 -0
  80. package/src/ai/ai-catalog.ts +241 -0
  81. package/src/ai/cors.ts +87 -0
  82. package/src/ai/link-headers.ts +12 -0
  83. package/src/ai/llms.ts +6 -0
  84. package/src/ai/mcp/discovery.ts +1 -1
  85. package/src/astro/generate.ts +4 -0
  86. package/src/astro/templates.ts +88 -23
  87. package/src/cli/commands/build.ts +3 -1
  88. package/src/components/islands/hooks.ts +50 -1
  89. package/src/components/layout/NavTree.astro +75 -66
  90. package/src/components/layout/RootLayout.astro +28 -2
  91. package/src/components/layout/analytics-client.ts +36 -7
  92. package/src/components/layout/nav-utils.ts +17 -3
  93. package/src/core/adapter.ts +61 -0
  94. package/src/core/config-input.ts +60 -0
  95. package/src/core/data.ts +2 -0
  96. package/src/core/navigation.ts +22 -3
  97. package/src/core/schema.ts +88 -0
  98. package/src/core/types.ts +5 -0
  99. package/src/deploy/artifacts.ts +12 -1
  100. package/src/deploy/headers.ts +6 -0
  101. package/src/deploy/vercel-negotiation.ts +25 -2
  102. package/src/registry/eject.ts +2 -0
  103. package/src/search/build.ts +25 -3
  104. package/src/theme/entry.ts +23 -0
  105. package/dist/cli/chunk-2aj8ddew.js +0 -72
  106. package/dist/cli/chunk-2aj8ddew.js.map +0 -10
  107. package/dist/cli/chunk-4ae4f395.js.map +0 -15
  108. package/dist/cli/chunk-4xyggvgf.js +0 -21
  109. package/dist/cli/chunk-4xyggvgf.js.map +0 -10
  110. package/dist/cli/chunk-6kzzpsx8.js +0 -26
  111. package/dist/cli/chunk-6kzzpsx8.js.map +0 -10
  112. package/dist/cli/chunk-bcy492zc.js +0 -16
  113. package/dist/cli/chunk-bcy492zc.js.map +0 -10
  114. package/dist/cli/chunk-btfr9yvw.js +0 -41
  115. package/dist/cli/chunk-btfr9yvw.js.map +0 -10
  116. package/dist/cli/chunk-ey89bjj1.js +0 -209
  117. package/dist/cli/chunk-ey89bjj1.js.map +0 -11
  118. package/dist/cli/chunk-q56730e0.js.map +0 -13
  119. package/dist/cli/chunk-qvvpnwaz.js +0 -69
  120. package/dist/cli/chunk-qvvpnwaz.js.map +0 -11
  121. package/dist/cli/chunk-vt8fgygt.js +0 -23
  122. package/dist/cli/chunk-vt8fgygt.js.map +0 -10
  123. package/dist/cli/chunk-vxv4x1n8.js +0 -17
  124. package/dist/cli/chunk-vxv4x1n8.js.map +0 -10
  125. package/dist/cli/chunk-vyqj481z.js.map +0 -13
  126. package/dist/cli/chunk-x1wvw7a8.js.map +0 -40
  127. /package/dist/cli/{chunk-8gnpdsn1.js.map → chunk-0xjyb285.js.map} +0 -0
  128. /package/dist/cli/{chunk-27gtm2ym.js.map → chunk-2mzebbbz.js.map} +0 -0
  129. /package/dist/cli/{chunk-s5e5jt53.js.map → chunk-2z47ypj8.js.map} +0 -0
  130. /package/dist/cli/{chunk-x66c5yjn.js.map → chunk-dwgcp5sm.js.map} +0 -0
  131. /package/dist/cli/{chunk-ywn7t0pb.js.map → chunk-garjf5z9.js.map} +0 -0
  132. /package/dist/cli/{chunk-ev67ycx0.js.map → chunk-jq5n4avg.js.map} +0 -0
  133. /package/dist/cli/{chunk-3r94j3tc.js.map → chunk-nn13znc2.js.map} +0 -0
  134. /package/dist/cli/{chunk-wd27zjcz.js.map → chunk-q4rae3bg.js.map} +0 -0
  135. /package/dist/cli/{chunk-8p3xe5jv.js.map → chunk-vacwm2hv.js.map} +0 -0
  136. /package/dist/cli/{chunk-cbjnx4s8.js.map → chunk-vh9w1sgp.js.map} +0 -0
  137. /package/dist/cli/{chunk-sbdqrjbb.js.map → chunk-vrfp10qk.js.map} +0 -0
  138. /package/dist/cli/{chunk-5hs6gb7n.js.map → chunk-yzhm0j9q.js.map} +0 -0
@@ -1,131 +1,127 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- buildMcpData,
4
- buildRawMarkdown,
5
- buildRssFeeds,
6
- buildSearchDocuments,
7
- markdownRoutePaths,
8
- renderRssFeed
9
- } from "./chunk-ka5k7cz9.js";
3
+ packageRoot,
4
+ getBlumeVersion,
5
+ BlumeError,
6
+ enrichDiagnostic
7
+ } from "./index.js";
10
8
  import {
11
- MCP_TOOLS
12
- } from "./chunk-pxj10x8y.js";
9
+ resolveReferences,
10
+ referenceRoutes,
11
+ hasScalarReferences,
12
+ builtinProxyKinds,
13
+ needsPlaygroundProxy,
14
+ GOOGLE_FONTS,
15
+ isFontSlug,
16
+ fontLocaleCodes,
17
+ buildFontsCss,
18
+ configuredFonts,
19
+ repoUrl,
20
+ editBaseUrl,
21
+ apiUrl,
22
+ EN_UI,
23
+ resolveUIStrings
24
+ } from "./chunk-7s8hm3b6.js";
13
25
  import {
14
- customOgRoutes,
15
- discoverPages,
16
- hasGeneratedChangelog,
17
- routeIsTaken
18
- } from "./chunk-sbdqrjbb.js";
26
+ resolveFallbackLocale,
27
+ validateSearchPopularIcons,
28
+ validateNavTargets,
29
+ buildIncludeGraph,
30
+ apiNamePhrase,
31
+ isOpenApiSource,
32
+ resolveDocsCollection
33
+ } from "./chunk-1jefwnfs.js";
19
34
  import {
20
- collectContentAssets,
21
- rewriteRelativeImages
22
- } from "./chunk-kmx2mydj.js";
35
+ siteRoot,
36
+ absoluteUrl
37
+ } from "./chunk-ct47dqpx.js";
23
38
  import {
24
- writeTextAtomic
25
- } from "./chunk-ev67ycx0.js";
39
+ buildRssFeeds,
40
+ renderRssFeed,
41
+ buildRawMarkdown,
42
+ markdownRoutePaths,
43
+ buildSearchDocuments,
44
+ buildMcpData
45
+ } from "./chunk-js7saxwm.js";
26
46
  import {
27
- registry
28
- } from "./chunk-3r94j3tc.js";
47
+ OPENAPI_PATH,
48
+ API_PAGES_PATH,
49
+ API_PAGE_PATH,
50
+ API_NAVIGATION_PATH,
51
+ API_SEARCH_PATH,
52
+ buildMcpDiscovery,
53
+ buildMcpServerCard,
54
+ hasAiCatalog
55
+ } from "./chunk-0qymqwzz.js";
29
56
  import {
30
- apiNavigationTemplate,
31
- apiNotFoundTemplate,
32
- apiPageTemplate,
33
- apiPagesIndexTemplate,
34
- apiSearchTemplate,
57
+ rewriteRelativeImages,
58
+ collectContentAssets
59
+ } from "./chunk-bf6bt1xt.js";
60
+ import {
61
+ resolveAskBackend,
35
62
  askBackendRuntimeDep,
36
- askComponentTemplate,
37
- askEndpointTemplate,
38
- astroConfigTemplate,
39
63
  buildHomeLinkHeader,
40
- catchAllPageTemplate,
41
- changelogIndexTemplate,
42
- contentAssetsEndpointTemplate,
64
+ publishRuntimeModules,
65
+ runtimeDependencies,
66
+ astroConfigTemplate,
67
+ stagedContentDir,
43
68
  contentConfigTemplate,
44
- exampleMapTemplate,
45
- exampleSlug,
46
- exampleWrapperTemplate,
47
- examplesPageTemplate,
69
+ askEndpointTemplate,
70
+ askComponentTemplate,
71
+ searchEndpointTemplate,
48
72
  featuresTemplate,
49
- islandMapTemplate,
50
- islandWrapperTemplate,
51
- mcpEndpointTemplate,
52
- mcpPageFile,
73
+ searchClientTemplate,
53
74
  mixedbreadSearchEndpointTemplate,
54
- navFragmentTemplate,
55
- notFoundJsonTemplate,
56
- notFoundMarkdownTemplate,
57
- notFoundPageTemplate,
58
- ogEndpointTemplate,
59
- playgroundProxyTemplate,
60
- publishRuntimeModules,
61
75
  rawMarkdownEndpointTemplate,
62
- resolveAskBackend,
76
+ contentAssetsEndpointTemplate,
77
+ mcpPageFile,
78
+ mcpEndpointTemplate,
79
+ playgroundProxyTemplate,
80
+ staticJsonEndpointTemplate,
63
81
  rssEndpointTemplate,
64
- runtimeDependencies,
65
- runtimePackageTemplate,
66
- runtimeTsconfigTemplate,
82
+ navFragmentTemplate,
83
+ ogEndpointTemplate,
67
84
  scalarReferenceTemplate,
68
- searchClientTemplate,
69
- searchEndpointTemplate,
70
- stagedContentDir,
71
- staticJsonEndpointTemplate
72
- } from "./chunk-4ae4f395.js";
85
+ catchAllPageTemplate,
86
+ changelogIndexTemplate,
87
+ notFoundPageTemplate,
88
+ notFoundMarkdownTemplate,
89
+ notFoundJsonTemplate,
90
+ apiPagesIndexTemplate,
91
+ apiPageTemplate,
92
+ apiNavigationTemplate,
93
+ apiSearchTemplate,
94
+ apiNotFoundTemplate,
95
+ islandWrapperTemplate,
96
+ islandMapTemplate,
97
+ exampleSlug,
98
+ exampleWrapperTemplate,
99
+ exampleMapTemplate,
100
+ examplesPageTemplate,
101
+ runtimePackageTemplate,
102
+ runtimeTsconfigTemplate
103
+ } from "./chunk-ps4m1xh4.js";
73
104
  import {
74
- API_NAVIGATION_PATH,
75
- API_PAGES_PATH,
76
- API_PAGE_PATH,
77
- API_SEARCH_PATH,
78
- OPENAPI_PATH
79
- } from "./chunk-qvvpnwaz.js";
105
+ discoverPages,
106
+ routeIsTaken,
107
+ hasGeneratedChangelog,
108
+ customOgRoutes
109
+ } from "./chunk-vrfp10qk.js";
80
110
  import {
81
- absoluteUrl,
82
- siteRoot
83
- } from "./chunk-vxv4x1n8.js";
111
+ writeTextAtomic
112
+ } from "./chunk-jq5n4avg.js";
113
+ import {
114
+ registry
115
+ } from "./chunk-nn13znc2.js";
84
116
  import {
85
117
  searchProviderMeta,
86
118
  servesStaticIndex
87
- } from "./chunk-wd27zjcz.js";
88
- import {
89
- apiNamePhrase,
90
- buildIncludeGraph,
91
- isOpenApiSource,
92
- resolveDocsCollection,
93
- resolveFallbackLocale,
94
- validateNavTargets,
95
- validateSearchPopularIcons
96
- } from "./chunk-12dzsn9b.js";
97
- import {
98
- EN_UI,
99
- GOOGLE_FONTS,
100
- apiUrl,
101
- buildFontsCss,
102
- builtinProxyKinds,
103
- configuredFonts,
104
- editBaseUrl,
105
- fontLocaleCodes,
106
- hasScalarReferences,
107
- isFontSlug,
108
- needsPlaygroundProxy,
109
- referenceRoutes,
110
- repoUrl,
111
- resolveReferences,
112
- resolveUIStrings
113
- } from "./chunk-r99hynxh.js";
119
+ } from "./chunk-q4rae3bg.js";
114
120
  import {
115
- normalizeBasePath,
116
121
  trimChar,
122
+ normalizeBasePath,
117
123
  withBasePath
118
- } from "./chunk-27gtm2ym.js";
119
- import {
120
- getBlumeVersion
121
- } from "./chunk-4xyggvgf.js";
122
- import {
123
- packageRoot
124
- } from "./chunk-6kzzpsx8.js";
125
- import {
126
- BlumeError,
127
- enrichDiagnostic
128
- } from "./chunk-ey89bjj1.js";
124
+ } from "./chunk-2mzebbbz.js";
129
125
 
130
126
  // src/ai/web-bot-auth.ts
131
127
  var SIGNATURES_DIRECTORY_PATH = "/.well-known/http-message-signatures-directory";
@@ -135,10 +131,10 @@ var SIGNATURES_DIRECTORY_TYPE = "application/http-message-signatures-directory+j
135
131
  import { join as join3, relative, resolve as resolve2 } from "pathe";
136
132
 
137
133
  // src/deploy/artifacts.ts
138
- import { dirname, join as join2, resolve } from "pathe";
134
+ import { dirname as dirname2, join as join2, resolve } from "pathe";
139
135
 
140
136
  // src/search/build.ts
141
- import { join } from "pathe";
137
+ import { dirname, join } from "pathe";
142
138
 
143
139
  // src/deploy/sitemap.ts
144
140
  import { escape as escapeXml } from "html-escaper";
@@ -223,7 +219,7 @@ import {
223
219
  rm,
224
220
  writeFile
225
221
  } from "node:fs/promises";
226
- import { dirname as dirname2, join as join4 } from "pathe";
222
+ import { dirname as dirname3, join as join4 } from "pathe";
227
223
  var ogCacheDir = (context) => existsSync(join4(context.root, "node_modules")) ? join4(context.root, "node_modules", ".cache", "blume", "og") : join4(context.outDir, ".cache", "og");
228
224
  var REGISTRY_KEY2 = Symbol.for("blume.og-cache");
229
225
  var registry3 = () => {
@@ -267,7 +263,7 @@ import { pathToFileURL } from "node:url";
267
263
  import pMap3 from "p-map";
268
264
  import {
269
265
  basename as basename2,
270
- dirname as dirname6,
266
+ dirname as dirname7,
271
267
  isAbsolute as isAbsolute6,
272
268
  join as join11,
273
269
  normalize,
@@ -809,68 +805,6 @@ var buildAskData = async (project) => {
809
805
  };
810
806
  };
811
807
 
812
- // src/ai/mcp/discovery.ts
813
- var serverUrl2 = (input) => {
814
- const path = withBasePath(input.base, input.route);
815
- return input.site ? absoluteUrl(input.site, path) : path;
816
- };
817
- var buildMcpDiscovery = (input) => ({
818
- servers: [
819
- {
820
- name: input.name,
821
- transport: "streamable-http",
822
- url: serverUrl2(input)
823
- }
824
- ]
825
- });
826
- var SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
827
- var CARD_TEXT_MAX = 100;
828
- var truncate = (text) => text.length > CARD_TEXT_MAX ? `${text.slice(0, CARD_TEXT_MAX - 1)}…` : text;
829
- var NON_ASCII_SLUG = /[^a-z0-9]+/gu;
830
- var COMBINING_MARKS = /\p{M}+/gu;
831
- var asciiSlugify = (text) => trimChar(text.normalize("NFKD").replace(COMBINING_MARKS, "").toLowerCase().replace(NON_ASCII_SLUG, "-"), "-");
832
- var reverseDnsName = (input) => {
833
- let namespace = "localhost";
834
- if (input.site) {
835
- try {
836
- namespace = new URL(input.site).hostname.split(".").toReversed().join(".");
837
- } catch {}
838
- }
839
- return `${namespace}/${asciiSlugify(input.name) || "docs"}`;
840
- };
841
- var HTTP_URL = /^https?:\/\//u;
842
- var buildMcpServerCard = (input) => {
843
- const url = serverUrl2(input);
844
- const card = {
845
- $schema: SERVER_CARD_SCHEMA,
846
- capabilities: {
847
- resources: { listChanged: false, subscribe: false },
848
- tools: { listChanged: false }
849
- },
850
- description: truncate(`Model Context Protocol server for the ${input.name} documentation.`),
851
- name: reverseDnsName(input),
852
- serverInfo: { name: input.name, version: input.version },
853
- title: truncate(input.name),
854
- tools: MCP_TOOLS.map((tool) => ({
855
- annotations: tool.annotations,
856
- description: tool.description,
857
- name: tool.name,
858
- title: tool.title
859
- })),
860
- transport: "streamable-http",
861
- transports: [{ endpoint: url, type: "streamable-http" }],
862
- url,
863
- version: input.version
864
- };
865
- if (HTTP_URL.test(url)) {
866
- card.remotes = [{ type: "streamable-http", url }];
867
- }
868
- if (input.site) {
869
- card.websiteUrl = siteRoot(input.site);
870
- }
871
- return card;
872
- };
873
-
874
808
  // src/components/layout/nav-utils.ts
875
809
  var hasDeferrableGroups = (sidebar) => sidebar.some((node) => node.kind === "group" && ((node.display ?? "flat") !== "flat" || hasDeferrableGroups(node.children)));
876
810
  var navVariants = (data, hiddenDefault = null) => [
@@ -953,7 +887,7 @@ var validateUsedComponents = (pages, extraTags, registryNames) => {
953
887
 
954
888
  // src/core/component-overrides.ts
955
889
  import { existsSync as existsSync2 } from "node:fs";
956
- import { dirname as dirname3, extname, isAbsolute, resolve as resolve3 } from "pathe";
890
+ import { dirname as dirname4, extname, isAbsolute, resolve as resolve3 } from "pathe";
957
891
  import ts from "typescript";
958
892
  var GROUPS = ["mdx", "layout", "islands"];
959
893
  var GROUP_SET = new Set(GROUPS);
@@ -1054,10 +988,10 @@ var probeExtension = (base) => {
1054
988
  return null;
1055
989
  };
1056
990
  var toImport = (specifier, imported, dir) => {
1057
- const relative2 = specifier.startsWith(".") || isAbsolute(specifier);
991
+ const relative = specifier.startsWith(".") || isAbsolute(specifier);
1058
992
  let path = specifier;
1059
993
  let extension = extname(specifier).slice(1).toLowerCase();
1060
- if (relative2) {
994
+ if (relative) {
1061
995
  const absolute = isAbsolute(specifier) ? specifier : resolve3(dir, specifier);
1062
996
  if (extension) {
1063
997
  path = absolute;
@@ -1209,7 +1143,7 @@ var analyzeComponentOverrides = (source, filePath) => {
1209
1143
  return result;
1210
1144
  }
1211
1145
  const imports = collectImports(sourceFile);
1212
- const dir = dirname3(filePath);
1146
+ const dir = dirname4(filePath);
1213
1147
  for (const property of object.properties) {
1214
1148
  collectGroupOverrides(property, imports, dir, result);
1215
1149
  }
@@ -1281,7 +1215,7 @@ var svgDimensions = (svg) => {
1281
1215
 
1282
1216
  // src/core/tsconfig-aliases.ts
1283
1217
  import { existsSync as existsSync3 } from "node:fs";
1284
- import { dirname as dirname4, join as join5, resolve as resolve4 } from "pathe";
1218
+ import { dirname as dirname5, join as join5, resolve as resolve4 } from "pathe";
1285
1219
  import ts2 from "typescript";
1286
1220
  var PARSE_HOST = {
1287
1221
  fileExists: ts2.sys.fileExists,
@@ -1311,7 +1245,7 @@ var resolveTsconfigAliases = (root) => {
1311
1245
  if (error) {
1312
1246
  return {};
1313
1247
  }
1314
- const configDir = dirname4(entry);
1248
+ const configDir = dirname5(entry);
1315
1249
  const { options } = ts2.parseJsonConfigFileContent(config, PARSE_HOST, configDir, undefined, entry);
1316
1250
  const { paths } = options;
1317
1251
  if (!paths) {
@@ -1577,10 +1511,10 @@ var resolveOgLogo = (project, source) => {
1577
1511
  if (!source?.toLowerCase().endsWith(".svg")) {
1578
1512
  return;
1579
1513
  }
1580
- const relative2 = source.replace(/^\//u, "");
1514
+ const relative = source.replace(/^\//u, "");
1581
1515
  const file = [
1582
- join7(project.context.root, "public", relative2),
1583
- join7(project.context.root, relative2)
1516
+ join7(project.context.root, "public", relative),
1517
+ join7(project.context.root, relative)
1584
1518
  ].find((path) => existsSync5(path));
1585
1519
  return file ? readFileSync(file, "utf-8") : undefined;
1586
1520
  };
@@ -1693,52 +1627,52 @@ var specConfiguration = async (spec, root) => {
1693
1627
  };
1694
1628
  }
1695
1629
  };
1696
- var acceptScalarReference = (ref2, seen, contentRoutes, warnings) => {
1697
- if (ref2.renderer !== "scalar") {
1630
+ var acceptScalarReference = (ref, seen, contentRoutes, warnings) => {
1631
+ if (ref.renderer !== "scalar") {
1698
1632
  return null;
1699
1633
  }
1700
- if (seen.has(ref2.route)) {
1701
- warnings.push(`Two API reference sources resolve to ${ref2.route}; keeping the first.`);
1634
+ if (seen.has(ref.route)) {
1635
+ warnings.push(`Two API reference sources resolve to ${ref.route}; keeping the first.`);
1702
1636
  return null;
1703
1637
  }
1704
- if (contentRoutes.has(ref2.route)) {
1705
- warnings.push(`API reference route ${ref2.route} collides with a content page; skipping the reference there.`);
1638
+ if (contentRoutes.has(ref.route)) {
1639
+ warnings.push(`API reference route ${ref.route} collides with a content page; skipping the reference there.`);
1706
1640
  return null;
1707
1641
  }
1708
- seen.add(ref2.route);
1709
- return ref2;
1642
+ seen.add(ref.route);
1643
+ return ref;
1710
1644
  };
1711
1645
  var buildReferenceFiles = async (options) => {
1712
1646
  const { config, root, contentRoutes } = options;
1713
1647
  const warnings = [];
1714
1648
  const seen = new Set;
1715
1649
  const accepted = [];
1716
- for (const ref2 of resolveReferences(config)) {
1717
- const next = acceptScalarReference(ref2, seen, contentRoutes, warnings);
1650
+ for (const ref of resolveReferences(config)) {
1651
+ const next = acceptScalarReference(ref, seen, contentRoutes, warnings);
1718
1652
  if (next) {
1719
1653
  accepted.push(next);
1720
1654
  }
1721
1655
  }
1722
- const built = await Promise.all(accepted.map(async (ref2) => ({
1723
- ref: ref2,
1724
- spec: await specConfiguration(ref2.spec, root)
1656
+ const built = await Promise.all(accepted.map(async (ref) => ({
1657
+ ref,
1658
+ spec: await specConfiguration(ref.spec, root)
1725
1659
  })));
1726
1660
  const files = [];
1727
- for (const { ref: ref2, spec } of built) {
1661
+ for (const { ref, spec } of built) {
1728
1662
  if (spec.warning) {
1729
1663
  warnings.push(spec.warning);
1730
1664
  }
1731
- const pagePath = referencePagePath(ref2.route);
1665
+ const pagePath = referencePagePath(ref.route);
1732
1666
  files.push({
1733
1667
  content: scalarReferenceTemplate({
1734
1668
  configuration: {
1735
1669
  ...spec.config,
1736
- ...themeConfiguration(config, ref2.theme),
1737
- ...ref2.scalar
1670
+ ...themeConfiguration(config, ref.theme),
1671
+ ...ref.scalar
1738
1672
  },
1739
- noindex: ref2.noindex,
1740
- route: ref2.route,
1741
- title: ref2.label
1673
+ noindex: ref.noindex,
1674
+ route: ref.route,
1675
+ title: ref.label
1742
1676
  }),
1743
1677
  pagePath
1744
1678
  });
@@ -2013,6 +1947,11 @@ ${THEME_MAPPING}
2013
1947
  --tw-prose-pre-bg: var(--blume-code-background);
2014
1948
  --tw-prose-th-borders: var(--blume-border);
2015
1949
  --tw-prose-td-borders: var(--blume-border);
1950
+ /* Neutralized: the plugin defaults are near-black text and shadow with no
1951
+ dark counterpart (Blume never applies prose-invert), and the kbd rule
1952
+ below draws the badge with Blume tokens instead. */
1953
+ --tw-prose-kbd: inherit;
1954
+ --tw-prose-kbd-shadows: transparent;
2016
1955
  color: var(--blume-muted-foreground);
2017
1956
  font-size: 0.875rem;
2018
1957
  line-height: 1.7;
@@ -2542,6 +2481,24 @@ pre:has(.line.focused):hover .line:not(.focused) {
2542
2481
  content: none;
2543
2482
  }
2544
2483
 
2484
+ /* Keyboard keys (<kbd>) render as the same bordered badge the search dialog
2485
+ uses for its shortcut hints. Typography's own kbd rule is scoped with
2486
+ :not(.not-prose *), so it never reaches a key inside <Steps>, <Callout>,
2487
+ <Card>, or any other not-prose component; this rule is deliberately
2488
+ unscoped from that exclusion so a key looks the same everywhere in the
2489
+ content column. Unlayered, so it outranks the plugin's layered rule. */
2490
+ .prose kbd {
2491
+ background: var(--blume-muted);
2492
+ border: 1px solid var(--blume-border);
2493
+ border-radius: 0.25rem;
2494
+ box-shadow: none;
2495
+ color: inherit;
2496
+ font-family: var(--font-mono);
2497
+ font-size: 0.85em;
2498
+ font-weight: 500;
2499
+ padding: 0.125rem 0.25rem;
2500
+ }
2501
+
2545
2502
  /* Inline code highlighting: Shiki colors the tokens of a \`code\`{:lang} snippet
2546
2503
  via the same dual-theme CSS variables as fenced blocks, keeping the inline
2547
2504
  pill background. Always on — it only fires on the trailing {:lang} marker. */
@@ -2633,10 +2590,10 @@ ${options.userCss}
2633
2590
  `;
2634
2591
 
2635
2592
  // src/theme/sources.ts
2636
- import { dirname as dirname5, isAbsolute as isAbsolute4, relative as relative2, resolve as resolve5 } from "pathe";
2593
+ import { dirname as dirname6, isAbsolute as isAbsolute4, relative as relative2, resolve as resolve5 } from "pathe";
2637
2594
  var SOURCE_DIRECTIVE = /@source(?<not>\s+not)?\s+(?<quote>["'])(?<path>[^"']+)\k<quote>/gu;
2638
2595
  var rebaseSourceDirectives = (css, options) => {
2639
- const base = dirname5(options.from);
2596
+ const base = dirname6(options.from);
2640
2597
  return css.replace(SOURCE_DIRECTIVE, (directive, not, quote, path) => {
2641
2598
  if (isAbsolute4(path)) {
2642
2599
  return directive;
@@ -3023,7 +2980,7 @@ var resolvedAstroHit = (fromDir) => {
3023
2980
  if (pkg) {
3024
2981
  return { modulesDir, pkg };
3025
2982
  }
3026
- const parent = dirname6(dir);
2983
+ const parent = dirname7(dir);
3027
2984
  if (parent === dir) {
3028
2985
  return null;
3029
2986
  }
@@ -3039,7 +2996,7 @@ var sameRealDir = (a, b) => {
3039
2996
  };
3040
2997
  var depsCandidates = (pkgDir) => [
3041
2998
  join11(pkgDir, "node_modules"),
3042
- dirname6(pkgDir)
2999
+ dirname7(pkgDir)
3043
3000
  ];
3044
3001
  var candidateHolding = (pkgDir, ...segments) => depsCandidates(pkgDir).find((dir) => existsSync6(join11(dir, ...segments))) ?? null;
3045
3002
  var symlinkDir = async (target, link) => {
@@ -3061,13 +3018,13 @@ var linkDepsJunction = async (link, depsDir) => {
3061
3018
  return;
3062
3019
  }
3063
3020
  try {
3064
- if (resolve6(dirname6(link), await readlink(link)) === resolve6(depsDir)) {
3021
+ if (resolve6(dirname7(link), await readlink(link)) === resolve6(depsDir)) {
3065
3022
  return;
3066
3023
  }
3067
3024
  } catch {}
3068
3025
  await rm2(link, { force: true });
3069
3026
  }
3070
- await mkdir2(dirname6(link), { recursive: true });
3027
+ await mkdir2(dirname7(link), { recursive: true });
3071
3028
  await symlinkDir(depsDir, link);
3072
3029
  };
3073
3030
  var readPkgVersion = (pkgJsonPath) => {
@@ -3516,6 +3473,7 @@ var buildRuntimeData = (project) => {
3516
3473
  description: config.description,
3517
3474
  discovery: {
3518
3475
  agentReadability: config.seo.agentReadability,
3476
+ aiCatalog: hasAiCatalog(config),
3519
3477
  api: config.ai.api,
3520
3478
  llmsTxt: config.ai.llmsTxt.enabled,
3521
3479
  sitemap: config.seo.sitemap && Boolean(config.deployment.site)
@@ -3762,7 +3720,9 @@ var writeAskFiles = async (project, srcDir, write, modules) => {
3762
3720
  modules.set("blume:ask-data", JSON.stringify(await buildAskData(project)));
3763
3721
  }
3764
3722
  await write(join11(srcDir, "pages", "api", "ask.ts"), askEndpointTemplate(resolveAskBackend(ask), grounded, {
3723
+ cors: ask.cors,
3765
3724
  instructions: ask.instructions,
3725
+ reasoning: ask.reasoning,
3766
3726
  retrieval: ask.retrieval
3767
3727
  }));
3768
3728
  };
@@ -4068,7 +4028,7 @@ var generateRuntime = async (project) => {
4068
4028
  return { structuralChange: structural.some(Boolean), warnings };
4069
4029
  };
4070
4030
 
4071
- export { SIGNATURES_DIRECTORY_PATH, SIGNATURES_DIRECTORY_TYPE, publishBuildProject, refreshBlumeContent, showBlumeErrorOverlay, ogCacheDir, pruneCardCache, cardCacheTally, buildAskData, buildMcpDiscovery, buildMcpServerCard, buildThemeCss, buildReferenceFiles, tailwindEntryTemplate, examplesEntryTemplate, rebaseSourceDirectives, twoslashCss, planComponentSlots, discoverIslands, EXAMPLE_SCAN_GLOB, exampleScanRoots, discoverExamples, exampleMarkdownLookup, detectNeedsReact, detectUsesMath, collectStaged, buildRuntimeData, languageIconCssFor, clientFeaturesFor, generateRuntime };
4031
+ export { SIGNATURES_DIRECTORY_PATH, SIGNATURES_DIRECTORY_TYPE, publishBuildProject, refreshBlumeContent, showBlumeErrorOverlay, ogCacheDir, pruneCardCache, cardCacheTally, buildAskData, buildThemeCss, buildReferenceFiles, tailwindEntryTemplate, examplesEntryTemplate, rebaseSourceDirectives, twoslashCss, planComponentSlots, discoverIslands, EXAMPLE_SCAN_GLOB, exampleScanRoots, discoverExamples, exampleMarkdownLookup, detectNeedsReact, detectUsesMath, collectStaged, buildRuntimeData, languageIconCssFor, clientFeaturesFor, generateRuntime };
4072
4032
 
4073
- //# debugId=29D4FE8449AF429964756E2164756E21
4074
- //# sourceMappingURL=chunk-x1wvw7a8.js.map
4033
+ //# debugId=54E9E2185852692F64756E2164756E21
4034
+ //# sourceMappingURL=chunk-k79xp7av.js.map