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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  packageRoot
4
- } from "./chunk-6kzzpsx8.js";
4
+ } from "./index.js";
5
5
 
6
6
  // src/registry/registry.ts
7
7
  import { join } from "pathe";
@@ -218,4 +218,4 @@ var findItem = (name) => registry.find((item) => item.name === name);
218
218
  export { packageSrc, registry, findItem };
219
219
 
220
220
  //# debugId=2BDCE672B82B453C64756E2164756E21
221
- //# sourceMappingURL=chunk-3r94j3tc.js.map
221
+ //# sourceMappingURL=chunk-nn13znc2.js.map
@@ -1,27 +1,30 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- API_CATALOG_PATH,
4
3
  OPENAPI_PATH,
5
- hasApiCatalog
6
- } from "./chunk-qvvpnwaz.js";
7
- import {
8
- searchProviderMeta
9
- } from "./chunk-wd27zjcz.js";
4
+ API_CATALOG_PATH,
5
+ hasApiCatalog,
6
+ AI_CATALOG_PATH,
7
+ AI_CATALOG_TYPE,
8
+ hasAiCatalog
9
+ } from "./chunk-0qymqwzz.js";
10
10
  import {
11
- BLUME_IGNORE_DIRS,
12
- TOC_HIDDEN_KEY
13
- } from "./chunk-12dzsn9b.js";
11
+ TOC_HIDDEN_KEY,
12
+ BLUME_IGNORE_DIRS
13
+ } from "./chunk-1jefwnfs.js";
14
14
  import {
15
- buildFontEntries,
15
+ hasScalarReferences,
16
16
  fontLocaleCodes,
17
- hasScalarReferences
18
- } from "./chunk-r99hynxh.js";
17
+ buildFontEntries
18
+ } from "./chunk-7s8hm3b6.js";
19
+ import {
20
+ searchProviderMeta
21
+ } from "./chunk-q4rae3bg.js";
19
22
  import {
20
- normalizeBasePath,
21
23
  trimChar,
24
+ normalizeBasePath,
22
25
  withBasePath,
23
26
  withComposedBasePath
24
- } from "./chunk-27gtm2ym.js";
27
+ } from "./chunk-2mzebbbz.js";
25
28
 
26
29
  // src/deploy/adapter-output.ts
27
30
  import { existsSync } from "node:fs";
@@ -74,6 +77,9 @@ var buildHomeLinkHeader = (config, routePaths) => {
74
77
  if (hasApiCatalog(config)) {
75
78
  links.push(`<${deployBase}${API_CATALOG_PATH}>; rel="api-catalog"; type="application/linkset+json"`);
76
79
  }
80
+ if (hasAiCatalog(config)) {
81
+ links.push(`<${deployBase}${AI_CATALOG_PATH}>; rel="ai-catalog"; type="${AI_CATALOG_TYPE}"`);
82
+ }
77
83
  if (config.ai.api) {
78
84
  links.push(`<${deployBase}${OPENAPI_PATH}>; rel="service-desc"; type="application/json"`);
79
85
  }
@@ -715,8 +721,21 @@ export const collections = { docs${options.staged ? ", staged" : ""} };
715
721
  `;
716
722
  };
717
723
  var ASK_FALLBACK_PROMPT = "You are a helpful documentation assistant. Answer using the project's documentation.";
724
+ var askCorsTemplate = (cors = []) => cors.length > 0 ? {
725
+ close: "});",
726
+ imports: [
727
+ 'import { preflightResponse, withCors } from "blume/ai/cors.ts";'
728
+ ],
729
+ open: "withCors(ALLOWED_ORIGINS, async ({ request }) => {",
730
+ setup: `
731
+ const ALLOWED_ORIGINS = ${JSON.stringify(cors)};
732
+
733
+ export const OPTIONS: APIRoute = ({ request }) =>
734
+ preflightResponse(request, ALLOWED_ORIGINS);
735
+ `
736
+ } : { close: "};", imports: [], open: "async ({ request }) => {", setup: "" };
718
737
  var askEndpointTemplate = (backend, grounded, options) => {
719
- const instructions = options?.instructions;
738
+ const { instructions, reasoning, retrieval } = options ?? {};
720
739
  const fallbackPrompt = instructions ? `${ASK_FALLBACK_PROMPT}
721
740
 
722
741
  ${instructions}` : ASK_FALLBACK_PROMPT;
@@ -743,7 +762,8 @@ const openrouter = createOpenRouter({
743
762
  apiKey: getSecret(${JSON.stringify(backend.apiKeyEnv)}),${headersField}
744
763
  });
745
764
  `;
746
- modelExpr = `openrouter(${JSON.stringify(backend.model)})`;
765
+ const settings = reasoning ? `, { reasoning: { effort: ${JSON.stringify(reasoning)} } }` : "";
766
+ modelExpr = `openrouter(${JSON.stringify(backend.model)}${settings})`;
747
767
  } else if (backend.kind === "openai-compatible") {
748
768
  imports.push('import { createOpenAICompatible } from "@ai-sdk/openai-compatible";');
749
769
  setup = `
@@ -761,14 +781,16 @@ const provider = createOpenAICompatible({
761
781
  if (instructions) {
762
782
  groundFields.push(`instructions: ${JSON.stringify(instructions)}`);
763
783
  }
764
- if (options?.retrieval) {
765
- groundFields.push(`retrieval: ${JSON.stringify(options.retrieval)}`);
784
+ if (retrieval) {
785
+ groundFields.push(`retrieval: ${JSON.stringify(retrieval)}`);
766
786
  }
767
787
  const groundOptions = groundFields.length > 0 ? `, { ${groundFields.join(", ")} }` : "";
768
788
  setup += `
769
789
  const ground = createAskContext(askData${groundOptions});
770
790
  `;
771
791
  }
792
+ const cors = askCorsTemplate(options?.cors);
793
+ imports.push(...cors.imports);
772
794
  const validate = ` const body = await request.json().catch(() => null);
773
795
  const raw = body?.messages;
774
796
  const valid =
@@ -809,22 +831,25 @@ const ground = createAskContext(askData${groundOptions});
809
831
  const onError = ` onError({ error }) {
810
832
  console.error("Ask AI provider error:", error);
811
833
  },`;
834
+ const streamFields = [
835
+ `model: ${modelExpr}`,
836
+ grounded ? "instructions" : `instructions:
837
+ ${JSON.stringify(fallbackPrompt)}`,
838
+ "messages"
839
+ ];
840
+ if (reasoning && backend.kind !== "openrouter") {
841
+ streamFields.push(`reasoning: ${JSON.stringify(reasoning)}`);
842
+ }
843
+ const call = ` const result = streamText({
844
+ ${streamFields.join(`,
845
+ `)},
846
+ ${onError}
847
+ });`;
812
848
  const stream = grounded ? ` const instructions =
813
849
  (await ground(messages, body.page)) ??
814
850
  ${JSON.stringify(fallbackPrompt)};
815
- const result = streamText({
816
- model: ${modelExpr},
817
- instructions,
818
- messages,
819
- ${onError}
820
- });` : ` const result = streamText({
821
- model: ${modelExpr},
822
- instructions:
823
- ${JSON.stringify(fallbackPrompt)},
824
- messages,
825
- ${onError}
826
- });`;
827
- const handler = `export const POST: APIRoute = async ({ request }) => {
851
+ ${call}` : call;
852
+ const handler = `export const POST: APIRoute = ${cors.open}
828
853
  ${validate}
829
854
  ${keyCheck}
830
855
  try {
@@ -833,13 +858,13 @@ ${stream}
833
858
  } catch {
834
859
  return new Response("Failed to generate a response.", { status: 500 });
835
860
  }
836
- };`;
861
+ ${cors.close}`;
837
862
  return `// Generated by Blume. Do not edit.
838
863
  ${imports.join(`
839
864
  `)}
840
865
 
841
866
  export const prerender = false;
842
- ${setup}
867
+ ${setup}${cors.setup}
843
868
  ${handler}
844
869
  `;
845
870
  };
@@ -2479,5 +2504,5 @@ var runtimeTsconfigTemplate = () => `${JSON.stringify({
2479
2504
 
2480
2505
  export { ADAPTER_IGNORE_DIRS, servesClientSubdir, deployStaticDir, surfaceAdapterOutput, resolveAskBackend, askBackendRuntimeDep, buildHomeLinkHeader, platformRedirects, publishRuntimeModules, runtimeDependencies, astroConfigTemplate, stagedContentDir, contentConfigTemplate, askEndpointTemplate, askComponentTemplate, searchEndpointTemplate, featuresTemplate, searchClientTemplate, mixedbreadSearchEndpointTemplate, rawMarkdownEndpointTemplate, contentAssetsEndpointTemplate, mcpPageFile, mcpEndpointTemplate, playgroundProxyTemplate, staticJsonEndpointTemplate, rssEndpointTemplate, navFragmentTemplate, ogEndpointTemplate, scalarReferenceTemplate, catchAllPageTemplate, changelogIndexTemplate, notFoundPageTemplate, notFoundMarkdownTemplate, notFoundJsonTemplate, apiPagesIndexTemplate, apiPageTemplate, apiNavigationTemplate, apiSearchTemplate, apiNotFoundTemplate, islandWrapperTemplate, islandMapTemplate, exampleSlug, exampleWrapperTemplate, examplesRouteBase, exampleMapTemplate, examplesPageTemplate, runtimePackageTemplate, runtimeTsconfigTemplate };
2481
2506
 
2482
- //# debugId=5A77D8072A1C21F564756E2164756E21
2483
- //# sourceMappingURL=chunk-4ae4f395.js.map
2507
+ //# debugId=27833C6A2810E0DD64756E2164756E21
2508
+ //# sourceMappingURL=chunk-ps4m1xh4.js.map