blume 1.1.4 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +1 -1
  3. package/dist/cli/index.js +1319 -66
  4. package/dist/cli/index.js.map +34 -23
  5. package/dist/types/core/config-input.d.ts +18 -0
  6. package/dist/types/core/config.d.ts +4 -0
  7. package/dist/types/core/data.d.ts +1 -0
  8. package/dist/types/core/schema.d.ts +132 -17
  9. package/dist/types/core/types.d.ts +5 -3
  10. package/dist/types/openapi/references.d.ts +6 -0
  11. package/docs/advanced/api-reference.mdx +27 -0
  12. package/docs/advanced/changelog.mdx +10 -0
  13. package/docs/configuration/ai.mdx +38 -2
  14. package/docs/configuration/customization.mdx +27 -0
  15. package/docs/configuration/index.mdx +5 -0
  16. package/docs/configuration/search.mdx +15 -0
  17. package/docs/content/navigation.mdx +12 -0
  18. package/docs/reference/cli.mdx +17 -13
  19. package/docs/reference/eval.mdx +106 -0
  20. package/docs/reference/meta.ts +1 -1
  21. package/package.json +2 -2
  22. package/src/ai/agent-readability.ts +19 -1
  23. package/src/ai/ask-context.ts +7 -1
  24. package/src/ai/ask-data.ts +1 -0
  25. package/src/ai/llms.ts +9 -4
  26. package/src/ai/mcp/data.ts +7 -0
  27. package/src/ai/mcp/server.ts +24 -8
  28. package/src/ai/mcp/stdio.ts +38 -0
  29. package/src/astro/generate.ts +25 -2
  30. package/src/astro/templates.ts +129 -26
  31. package/src/cli/commands/eval.ts +291 -0
  32. package/src/cli/commands/init.ts +9 -4
  33. package/src/cli/commands/mcp-stdio.ts +36 -0
  34. package/src/cli/index.ts +4 -0
  35. package/src/cli/required-secrets.ts +1 -1
  36. package/src/components/content/AccordionItem.astro +2 -2
  37. package/src/components/content/TreeFolder.astro +1 -2
  38. package/src/components/islands/AskAI.astro +9 -2
  39. package/src/components/islands/ask-ai.tsx +4 -2
  40. package/src/components/islands/hooks.ts +10 -4
  41. package/src/components/layout/NavTree.astro +38 -20
  42. package/src/components/layout/ReferenceLayout.astro +4 -0
  43. package/src/components/layout/RootLayout.astro +2 -2
  44. package/src/components/layout/search/orama.ts +5 -2
  45. package/src/components/openapi/SchemaProperty.astro +3 -3
  46. package/src/core/config-input.ts +18 -0
  47. package/src/core/config.ts +4 -0
  48. package/src/core/data.ts +1 -0
  49. package/src/core/graph.ts +1 -0
  50. package/src/core/navigation.ts +9 -2
  51. package/src/core/schema.ts +51 -4
  52. package/src/core/server-features.ts +1 -1
  53. package/src/core/types.ts +5 -3
  54. package/src/eval/agents.ts +340 -0
  55. package/src/eval/findings.ts +103 -0
  56. package/src/eval/prompts.ts +78 -0
  57. package/src/eval/report.ts +214 -0
  58. package/src/eval/run.ts +290 -0
  59. package/src/eval/schema.ts +124 -0
  60. package/src/openapi/references.ts +23 -2
  61. package/src/openapi/render-mdx.ts +27 -4
  62. package/src/openapi/scalar.ts +1 -0
  63. package/src/openapi/source.ts +11 -4
  64. package/src/registry/eject.ts +23 -1
  65. package/src/search/build.ts +4 -3
  66. package/src/search/orama-index.ts +55 -5
@@ -1,3 +1,4 @@
1
+ import type { AstroIntegration } from "astro";
1
2
  import type { ComponentMarkdown } from "../ai/component-markdown.ts";
2
3
  import type { CodeTheme } from "../markdown/themes.ts";
3
4
  import type { FontSlug } from "../theme/fonts.ts";
@@ -241,6 +242,15 @@ export interface NavTabItem {
241
242
  }
242
243
  /** A top-level tab in the header, optionally opening a dropdown of items. */
243
244
  export interface NavTab {
245
+ /**
246
+ * Where the tab links to, when that differs from `path`. `path` scopes the
247
+ * sidebar section and matches the active tab; without `href`, a section whose
248
+ * `path` isn't itself a page falls back to the section's first page, or keeps
249
+ * `path` when the section has no linkable page at all. Set this to send
250
+ * readers somewhere else — e.g. a generated `/changelog` index, or a custom
251
+ * `.astro` landing page, neither of which is part of the content tree.
252
+ */
253
+ href?: string;
244
254
  /** Lucide icon name shown beside the label. */
245
255
  icon?: string;
246
256
  /** Dropdown items; omit for a plain link tab. */
@@ -444,6 +454,12 @@ export interface AskConfig {
444
454
  baseUrl?: string;
445
455
  /** Turn Ask AI on. Defaults to `false`. */
446
456
  enabled?: boolean;
457
+ /**
458
+ * Existing Ask AI endpoint to call instead of generating one. This keeps a
459
+ * Blume site static while an API backend owns retrieval, model access, rate
460
+ * limiting, and streaming. Accepts an absolute URL or root-relative path.
461
+ */
462
+ endpoint?: string;
447
463
  /** Model id to use. Defaults to `openai/gpt-5.5`. */
448
464
  model?: string;
449
465
  /** Which backend routes the request. Defaults to `gateway`. */
@@ -961,6 +977,8 @@ export interface BlumeConfig {
961
977
  github?: GithubConfig;
962
978
  /** Internationalization (opt-in multi-locale). */
963
979
  i18n?: I18nConfig;
980
+ /** Astro integrations appended after Blume's built-ins, in declaration order. */
981
+ integrations?: AstroIntegration[];
964
982
  /** "Last updated" timestamps from git history or frontmatter. Defaults to `false`. */
965
983
  lastModified?: LastModifiedConfig;
966
984
  /** Site logo / brand mark. */
@@ -76,6 +76,10 @@ import type { Diagnostic } from "./types.ts";
76
76
  * - `analytics` — PostHog, Vercel, or arbitrary `scripts` (Plausible, Fathom,
77
77
  * GA, …).
78
78
  *
79
+ * **Astro**
80
+ * - `integrations` — Astro integrations appended after Blume's built-ins, in
81
+ * declaration order. Install and maintain each integration in the site.
82
+ *
79
83
  * **Deployment & i18n**
80
84
  * - `deployment` — `site` URL (needed for absolute links, sitemaps, and OG),
81
85
  * `adapter` (`vercel`/`node`/`netlify`/`cloudflare`), `output`
@@ -95,6 +95,7 @@ export interface BlumeDataConfig {
95
95
  appleIcon: BlumeFavicon | null;
96
96
  /** Ask AI empty-state suggestions, or `null` when Ask AI is off. */
97
97
  ask: {
98
+ endpoint: string | null;
98
99
  suggestions: NonNullable<ResolvedConfig["ai"]["ask"]>["suggestions"];
99
100
  } | null;
100
101
  banner: BlumeBanner | null;
@@ -1,3 +1,4 @@
1
+ import type { AstroIntegration } from "astro";
1
2
  import { z } from "zod";
2
3
  import type { ComponentMarkdown } from "../ai/component-markdown.ts";
3
4
  import type { CodeTheme } from "../markdown/themes.ts";
@@ -7,6 +8,14 @@ declare const hydrationMode: z.ZodEnum<["load", "idle", "visible", "media", "onl
7
8
  export type HydrationMode = z.infer<typeof hydrationMode>;
8
9
  /** Frontmatter accepted on any content page. */
9
10
  declare const pageMetaBaseSchema: z.ZodObject<{
11
+ ai: z.ZodDefault<z.ZodObject<{
12
+ /** Exclude this page from llms.txt and llms-full.txt. */
13
+ exclude: z.ZodDefault<z.ZodBoolean>;
14
+ }, "strict", z.ZodTypeAny, {
15
+ exclude: boolean;
16
+ }, {
17
+ exclude?: boolean | undefined;
18
+ }>>;
10
19
  /** Post author(s) for blog/changelog content; preserved, not yet rendered. */
11
20
  authors: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodObject<{
12
21
  avatar: z.ZodOptional<z.ZodString>;
@@ -99,6 +108,7 @@ declare const pageMetaBaseSchema: z.ZodObject<{
99
108
  } | undefined;
100
109
  canonical?: string | undefined;
101
110
  }, {
111
+ noindex?: boolean | undefined;
102
112
  description?: string | undefined;
103
113
  title?: string | undefined;
104
114
  image?: string | undefined;
@@ -106,7 +116,6 @@ declare const pageMetaBaseSchema: z.ZodObject<{
106
116
  creator?: string | undefined;
107
117
  } | undefined;
108
118
  canonical?: string | undefined;
109
- noindex?: boolean | undefined;
110
119
  }>>;
111
120
  sidebar: z.ZodDefault<z.ZodObject<{
112
121
  badge: z.ZodOptional<z.ZodString>;
@@ -131,6 +140,10 @@ declare const pageMetaBaseSchema: z.ZodObject<{
131
140
  title: z.ZodOptional<z.ZodString>;
132
141
  type: z.ZodOptional<z.ZodString>;
133
142
  }, "strict", z.ZodTypeAny, {
143
+ ai: {
144
+ exclude: boolean;
145
+ };
146
+ noindex: boolean;
134
147
  sidebar: {
135
148
  hidden: boolean;
136
149
  icon?: string | undefined;
@@ -155,7 +168,6 @@ declare const pageMetaBaseSchema: z.ZodObject<{
155
168
  };
156
169
  deprecated: boolean;
157
170
  hidden: boolean;
158
- noindex: boolean;
159
171
  draft: boolean;
160
172
  type?: string | undefined;
161
173
  date?: string | undefined;
@@ -184,6 +196,10 @@ declare const pageMetaBaseSchema: z.ZodObject<{
184
196
  type?: string | undefined;
185
197
  date?: string | Date | undefined;
186
198
  icon?: string | undefined;
199
+ ai?: {
200
+ exclude?: boolean | undefined;
201
+ } | undefined;
202
+ noindex?: boolean | undefined;
187
203
  description?: string | undefined;
188
204
  lastModified?: string | Date | undefined;
189
205
  slug?: string | undefined;
@@ -206,6 +222,7 @@ declare const pageMetaBaseSchema: z.ZodObject<{
206
222
  category?: string | undefined;
207
223
  } | undefined;
208
224
  seo?: {
225
+ noindex?: boolean | undefined;
209
226
  description?: string | undefined;
210
227
  title?: string | undefined;
211
228
  image?: string | undefined;
@@ -213,11 +230,9 @@ declare const pageMetaBaseSchema: z.ZodObject<{
213
230
  creator?: string | undefined;
214
231
  } | undefined;
215
232
  canonical?: string | undefined;
216
- noindex?: boolean | undefined;
217
233
  } | undefined;
218
234
  deprecated?: boolean | undefined;
219
235
  hidden?: boolean | undefined;
220
- noindex?: boolean | undefined;
221
236
  authors?: string | z.objectInputType<{
222
237
  avatar: z.ZodOptional<z.ZodString>;
223
238
  image: z.ZodOptional<z.ZodString>;
@@ -232,6 +247,14 @@ declare const pageMetaBaseSchema: z.ZodObject<{
232
247
  draft?: boolean | undefined;
233
248
  }>;
234
249
  export declare const pageMetaSchema: z.ZodObject<{
250
+ ai: z.ZodDefault<z.ZodObject<{
251
+ /** Exclude this page from llms.txt and llms-full.txt. */
252
+ exclude: z.ZodDefault<z.ZodBoolean>;
253
+ }, "strict", z.ZodTypeAny, {
254
+ exclude: boolean;
255
+ }, {
256
+ exclude?: boolean | undefined;
257
+ }>>;
235
258
  /** Post author(s) for blog/changelog content; preserved, not yet rendered. */
236
259
  authors: z.ZodOptional<z.ZodUnion<[z.ZodUnion<[z.ZodString, z.ZodObject<{
237
260
  avatar: z.ZodOptional<z.ZodString>;
@@ -324,6 +347,7 @@ export declare const pageMetaSchema: z.ZodObject<{
324
347
  } | undefined;
325
348
  canonical?: string | undefined;
326
349
  }, {
350
+ noindex?: boolean | undefined;
327
351
  description?: string | undefined;
328
352
  title?: string | undefined;
329
353
  image?: string | undefined;
@@ -331,7 +355,6 @@ export declare const pageMetaSchema: z.ZodObject<{
331
355
  creator?: string | undefined;
332
356
  } | undefined;
333
357
  canonical?: string | undefined;
334
- noindex?: boolean | undefined;
335
358
  }>>;
336
359
  sidebar: z.ZodDefault<z.ZodObject<{
337
360
  badge: z.ZodOptional<z.ZodString>;
@@ -356,6 +379,10 @@ export declare const pageMetaSchema: z.ZodObject<{
356
379
  title: z.ZodOptional<z.ZodString>;
357
380
  type: z.ZodOptional<z.ZodString>;
358
381
  }, "strict", z.ZodTypeAny, {
382
+ ai: {
383
+ exclude: boolean;
384
+ };
385
+ noindex: boolean;
359
386
  sidebar: {
360
387
  hidden: boolean;
361
388
  icon?: string | undefined;
@@ -380,7 +407,6 @@ export declare const pageMetaSchema: z.ZodObject<{
380
407
  };
381
408
  deprecated: boolean;
382
409
  hidden: boolean;
383
- noindex: boolean;
384
410
  draft: boolean;
385
411
  type?: string | undefined;
386
412
  date?: string | undefined;
@@ -409,6 +435,10 @@ export declare const pageMetaSchema: z.ZodObject<{
409
435
  type?: string | undefined;
410
436
  date?: string | Date | undefined;
411
437
  icon?: string | undefined;
438
+ ai?: {
439
+ exclude?: boolean | undefined;
440
+ } | undefined;
441
+ noindex?: boolean | undefined;
412
442
  description?: string | undefined;
413
443
  lastModified?: string | Date | undefined;
414
444
  slug?: string | undefined;
@@ -431,6 +461,7 @@ export declare const pageMetaSchema: z.ZodObject<{
431
461
  category?: string | undefined;
432
462
  } | undefined;
433
463
  seo?: {
464
+ noindex?: boolean | undefined;
434
465
  description?: string | undefined;
435
466
  title?: string | undefined;
436
467
  image?: string | undefined;
@@ -438,11 +469,9 @@ export declare const pageMetaSchema: z.ZodObject<{
438
469
  creator?: string | undefined;
439
470
  } | undefined;
440
471
  canonical?: string | undefined;
441
- noindex?: boolean | undefined;
442
472
  } | undefined;
443
473
  deprecated?: boolean | undefined;
444
474
  hidden?: boolean | undefined;
445
- noindex?: boolean | undefined;
446
475
  authors?: string | z.objectInputType<{
447
476
  avatar: z.ZodOptional<z.ZodString>;
448
477
  image: z.ZodOptional<z.ZodString>;
@@ -746,6 +775,7 @@ declare const aiConfigSchema: z.ZodObject<{
746
775
  apiKeyEnv: z.ZodOptional<z.ZodString>;
747
776
  baseUrl: z.ZodOptional<z.ZodString>;
748
777
  enabled: z.ZodDefault<z.ZodBoolean>;
778
+ endpoint: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
749
779
  model: z.ZodDefault<z.ZodString>;
750
780
  provider: z.ZodDefault<z.ZodEnum<["gateway", "openrouter", "llmgateway", "inkeep", "openai-compatible"]>>;
751
781
  suggestions: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -768,10 +798,12 @@ declare const aiConfigSchema: z.ZodObject<{
768
798
  }[];
769
799
  apiKeyEnv?: string | undefined;
770
800
  baseUrl?: string | undefined;
801
+ endpoint?: string | undefined;
771
802
  }, {
772
803
  apiKeyEnv?: string | undefined;
773
804
  baseUrl?: string | undefined;
774
805
  enabled?: boolean | undefined;
806
+ endpoint?: string | undefined;
775
807
  model?: string | undefined;
776
808
  provider?: "gateway" | "openrouter" | "llmgateway" | "inkeep" | "openai-compatible" | undefined;
777
809
  suggestions?: {
@@ -788,10 +820,12 @@ declare const aiConfigSchema: z.ZodObject<{
788
820
  }[];
789
821
  apiKeyEnv?: string | undefined;
790
822
  baseUrl?: string | undefined;
823
+ endpoint?: string | undefined;
791
824
  }, {
792
825
  apiKeyEnv?: string | undefined;
793
826
  baseUrl?: string | undefined;
794
827
  enabled?: boolean | undefined;
828
+ endpoint?: string | undefined;
795
829
  model?: string | undefined;
796
830
  provider?: "gateway" | "openrouter" | "llmgateway" | "inkeep" | "openai-compatible" | undefined;
797
831
  suggestions?: {
@@ -866,12 +900,14 @@ declare const aiConfigSchema: z.ZodObject<{
866
900
  }[];
867
901
  apiKeyEnv?: string | undefined;
868
902
  baseUrl?: string | undefined;
903
+ endpoint?: string | undefined;
869
904
  } | undefined;
870
905
  }, {
871
906
  ask?: {
872
907
  apiKeyEnv?: string | undefined;
873
908
  baseUrl?: string | undefined;
874
909
  enabled?: boolean | undefined;
910
+ endpoint?: string | undefined;
875
911
  model?: string | undefined;
876
912
  provider?: "gateway" | "openrouter" | "llmgateway" | "inkeep" | "openai-compatible" | undefined;
877
913
  suggestions?: {
@@ -1083,13 +1119,22 @@ declare const dateFormatConfigSchema: z.ZodEffects<z.ZodObject<{
1083
1119
  * `http(s)` URL (OpenAPI for the Blume renderer; OpenAPI or AsyncAPI for Scalar).
1084
1120
  */
1085
1121
  declare const openapiSourceSchema: z.ZodObject<{
1122
+ /** Include generated pages from this spec in llms.txt/llms-full.txt. */
1123
+ includeInLlms: z.ZodDefault<z.ZodBoolean>;
1124
+ /** Include generated pages from this spec in site search. */
1125
+ includeInSearch: z.ZodDefault<z.ZodBoolean>;
1086
1126
  /** Nav/section label for this source. */
1087
1127
  label: z.ZodOptional<z.ZodString>;
1128
+ /** Emit noindex metadata and omit generated pages from the sitemap. */
1129
+ noindex: z.ZodDefault<z.ZodBoolean>;
1088
1130
  /** Per-source route; defaults to the block's `route` (or a derived path). */
1089
1131
  route: z.ZodOptional<z.ZodString>;
1090
1132
  /** Local path or `http(s)` URL to the spec. */
1091
1133
  spec: z.ZodString;
1092
1134
  }, "strict", z.ZodTypeAny, {
1135
+ includeInLlms: boolean;
1136
+ includeInSearch: boolean;
1137
+ noindex: boolean;
1093
1138
  spec: string;
1094
1139
  label?: string | undefined;
1095
1140
  route?: string | undefined;
@@ -1097,14 +1142,18 @@ declare const openapiSourceSchema: z.ZodObject<{
1097
1142
  spec: string;
1098
1143
  label?: string | undefined;
1099
1144
  route?: string | undefined;
1145
+ includeInLlms?: boolean | undefined;
1146
+ includeInSearch?: boolean | undefined;
1147
+ noindex?: boolean | undefined;
1100
1148
  }>;
1101
- export type OpenApiSource = z.infer<typeof openapiSourceSchema>;
1149
+ export type OpenApiSource = z.input<typeof openapiSourceSchema>;
1102
1150
  export declare const blumeConfigSchema: z.ZodObject<{
1103
1151
  ai: z.ZodDefault<z.ZodObject<{
1104
1152
  ask: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1105
1153
  apiKeyEnv: z.ZodOptional<z.ZodString>;
1106
1154
  baseUrl: z.ZodOptional<z.ZodString>;
1107
1155
  enabled: z.ZodDefault<z.ZodBoolean>;
1156
+ endpoint: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
1108
1157
  model: z.ZodDefault<z.ZodString>;
1109
1158
  provider: z.ZodDefault<z.ZodEnum<["gateway", "openrouter", "llmgateway", "inkeep", "openai-compatible"]>>;
1110
1159
  suggestions: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -1127,10 +1176,12 @@ export declare const blumeConfigSchema: z.ZodObject<{
1127
1176
  }[];
1128
1177
  apiKeyEnv?: string | undefined;
1129
1178
  baseUrl?: string | undefined;
1179
+ endpoint?: string | undefined;
1130
1180
  }, {
1131
1181
  apiKeyEnv?: string | undefined;
1132
1182
  baseUrl?: string | undefined;
1133
1183
  enabled?: boolean | undefined;
1184
+ endpoint?: string | undefined;
1134
1185
  model?: string | undefined;
1135
1186
  provider?: "gateway" | "openrouter" | "llmgateway" | "inkeep" | "openai-compatible" | undefined;
1136
1187
  suggestions?: {
@@ -1147,10 +1198,12 @@ export declare const blumeConfigSchema: z.ZodObject<{
1147
1198
  }[];
1148
1199
  apiKeyEnv?: string | undefined;
1149
1200
  baseUrl?: string | undefined;
1201
+ endpoint?: string | undefined;
1150
1202
  }, {
1151
1203
  apiKeyEnv?: string | undefined;
1152
1204
  baseUrl?: string | undefined;
1153
1205
  enabled?: boolean | undefined;
1206
+ endpoint?: string | undefined;
1154
1207
  model?: string | undefined;
1155
1208
  provider?: "gateway" | "openrouter" | "llmgateway" | "inkeep" | "openai-compatible" | undefined;
1156
1209
  suggestions?: {
@@ -1225,12 +1278,14 @@ export declare const blumeConfigSchema: z.ZodObject<{
1225
1278
  }[];
1226
1279
  apiKeyEnv?: string | undefined;
1227
1280
  baseUrl?: string | undefined;
1281
+ endpoint?: string | undefined;
1228
1282
  } | undefined;
1229
1283
  }, {
1230
1284
  ask?: {
1231
1285
  apiKeyEnv?: string | undefined;
1232
1286
  baseUrl?: string | undefined;
1233
1287
  enabled?: boolean | undefined;
1288
+ endpoint?: string | undefined;
1234
1289
  model?: string | undefined;
1235
1290
  provider?: "gateway" | "openrouter" | "llmgateway" | "inkeep" | "openai-compatible" | undefined;
1236
1291
  suggestions?: {
@@ -1319,13 +1374,22 @@ export declare const blumeConfigSchema: z.ZodObject<{
1319
1374
  /** Extra Scalar config forwarded to `<ScalarComponent>`. */
1320
1375
  scalar: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1321
1376
  sources: z.ZodDefault<z.ZodArray<z.ZodObject<{
1377
+ /** Include generated pages from this spec in llms.txt/llms-full.txt. */
1378
+ includeInLlms: z.ZodDefault<z.ZodBoolean>;
1379
+ /** Include generated pages from this spec in site search. */
1380
+ includeInSearch: z.ZodDefault<z.ZodBoolean>;
1322
1381
  /** Nav/section label for this source. */
1323
1382
  label: z.ZodOptional<z.ZodString>;
1383
+ /** Emit noindex metadata and omit generated pages from the sitemap. */
1384
+ noindex: z.ZodDefault<z.ZodBoolean>;
1324
1385
  /** Per-source route; defaults to the block's `route` (or a derived path). */
1325
1386
  route: z.ZodOptional<z.ZodString>;
1326
1387
  /** Local path or `http(s)` URL to the spec. */
1327
1388
  spec: z.ZodString;
1328
1389
  }, "strict", z.ZodTypeAny, {
1390
+ includeInLlms: boolean;
1391
+ includeInSearch: boolean;
1392
+ noindex: boolean;
1329
1393
  spec: string;
1330
1394
  label?: string | undefined;
1331
1395
  route?: string | undefined;
@@ -1333,6 +1397,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
1333
1397
  spec: string;
1334
1398
  label?: string | undefined;
1335
1399
  route?: string | undefined;
1400
+ includeInLlms?: boolean | undefined;
1401
+ includeInSearch?: boolean | undefined;
1402
+ noindex?: boolean | undefined;
1336
1403
  }>, "many">>;
1337
1404
  spec: z.ZodOptional<z.ZodString>;
1338
1405
  theme: z.ZodOptional<z.ZodString>;
@@ -1340,6 +1407,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
1340
1407
  enabled: boolean;
1341
1408
  route: string;
1342
1409
  sources: {
1410
+ includeInLlms: boolean;
1411
+ includeInSearch: boolean;
1412
+ noindex: boolean;
1343
1413
  spec: string;
1344
1414
  label?: string | undefined;
1345
1415
  route?: string | undefined;
@@ -1356,6 +1426,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
1356
1426
  spec: string;
1357
1427
  label?: string | undefined;
1358
1428
  route?: string | undefined;
1429
+ includeInLlms?: boolean | undefined;
1430
+ includeInSearch?: boolean | undefined;
1431
+ noindex?: boolean | undefined;
1359
1432
  }[] | undefined;
1360
1433
  theme?: string | undefined;
1361
1434
  }>>;
@@ -1991,6 +2064,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
1991
2064
  parser?: "dir" | "dot" | undefined;
1992
2065
  ui?: Record<string, Record<string, Record<string, string>>> | undefined;
1993
2066
  }>>;
2067
+ integrations: z.ZodDefault<z.ZodArray<z.ZodType<AstroIntegration, z.ZodTypeDef, AstroIntegration>, "many">>;
1994
2068
  lastModified: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodObject<{
1995
2069
  type: z.ZodDefault<z.ZodEnum<["git", "frontmatter"]>>;
1996
2070
  }, "strict", z.ZodTypeAny, {
@@ -2194,6 +2268,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
2194
2268
  display?: "flat" | "group" | "page" | undefined;
2195
2269
  } | undefined>;
2196
2270
  tabs: z.ZodDefault<z.ZodArray<z.ZodObject<{
2271
+ href: z.ZodOptional<z.ZodString>;
2197
2272
  icon: z.ZodOptional<z.ZodString>;
2198
2273
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
2199
2274
  description: z.ZodOptional<z.ZodString>;
@@ -2220,6 +2295,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
2220
2295
  path: string;
2221
2296
  label: string;
2222
2297
  icon?: string | undefined;
2298
+ href?: string | undefined;
2223
2299
  items?: {
2224
2300
  path: string;
2225
2301
  label: string;
@@ -2231,6 +2307,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
2231
2307
  path: string;
2232
2308
  label: string;
2233
2309
  icon?: string | undefined;
2310
+ href?: string | undefined;
2234
2311
  items?: {
2235
2312
  path: string;
2236
2313
  label: string;
@@ -2265,6 +2342,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
2265
2342
  path: string;
2266
2343
  label: string;
2267
2344
  icon?: string | undefined;
2345
+ href?: string | undefined;
2268
2346
  items?: {
2269
2347
  path: string;
2270
2348
  label: string;
@@ -2299,6 +2377,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
2299
2377
  path: string;
2300
2378
  label: string;
2301
2379
  icon?: string | undefined;
2380
+ href?: string | undefined;
2302
2381
  items?: {
2303
2382
  path: string;
2304
2383
  label: string;
@@ -2322,13 +2401,22 @@ export declare const blumeConfigSchema: z.ZodObject<{
2322
2401
  scalar: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2323
2402
  /** One or more specs; each renders on its own route by default. */
2324
2403
  sources: z.ZodDefault<z.ZodArray<z.ZodObject<{
2404
+ /** Include generated pages from this spec in llms.txt/llms-full.txt. */
2405
+ includeInLlms: z.ZodDefault<z.ZodBoolean>;
2406
+ /** Include generated pages from this spec in site search. */
2407
+ includeInSearch: z.ZodDefault<z.ZodBoolean>;
2325
2408
  /** Nav/section label for this source. */
2326
2409
  label: z.ZodOptional<z.ZodString>;
2410
+ /** Emit noindex metadata and omit generated pages from the sitemap. */
2411
+ noindex: z.ZodDefault<z.ZodBoolean>;
2327
2412
  /** Per-source route; defaults to the block's `route` (or a derived path). */
2328
2413
  route: z.ZodOptional<z.ZodString>;
2329
2414
  /** Local path or `http(s)` URL to the spec. */
2330
2415
  spec: z.ZodString;
2331
2416
  }, "strict", z.ZodTypeAny, {
2417
+ includeInLlms: boolean;
2418
+ includeInSearch: boolean;
2419
+ noindex: boolean;
2332
2420
  spec: string;
2333
2421
  label?: string | undefined;
2334
2422
  route?: string | undefined;
@@ -2336,6 +2424,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
2336
2424
  spec: string;
2337
2425
  label?: string | undefined;
2338
2426
  route?: string | undefined;
2427
+ includeInLlms?: boolean | undefined;
2428
+ includeInSearch?: boolean | undefined;
2429
+ noindex?: boolean | undefined;
2339
2430
  }>, "many">>;
2340
2431
  /** Shorthand for a single source: `sources: [{ spec }]`. */
2341
2432
  spec: z.ZodOptional<z.ZodString>;
@@ -2345,6 +2436,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
2345
2436
  enabled: boolean;
2346
2437
  route: string;
2347
2438
  sources: {
2439
+ includeInLlms: boolean;
2440
+ includeInSearch: boolean;
2441
+ noindex: boolean;
2348
2442
  spec: string;
2349
2443
  label?: string | undefined;
2350
2444
  route?: string | undefined;
@@ -2364,6 +2458,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
2364
2458
  spec: string;
2365
2459
  label?: string | undefined;
2366
2460
  route?: string | undefined;
2461
+ includeInLlms?: boolean | undefined;
2462
+ includeInSearch?: boolean | undefined;
2463
+ noindex?: boolean | undefined;
2367
2464
  }[] | undefined;
2368
2465
  theme?: string | undefined;
2369
2466
  codeSamples?: string[] | undefined;
@@ -2430,12 +2527,12 @@ export declare const blumeConfigSchema: z.ZodObject<{
2430
2527
  /** Index id used by the build-time sync (with `ORAMA_PRIVATE_API_KEY`). */
2431
2528
  indexId: z.ZodOptional<z.ZodString>;
2432
2529
  }, "strict", z.ZodTypeAny, {
2433
- apiKey: string;
2434
2530
  endpoint: string;
2531
+ apiKey: string;
2435
2532
  indexId?: string | undefined;
2436
2533
  }, {
2437
- apiKey: string;
2438
2534
  endpoint: string;
2535
+ apiKey: string;
2439
2536
  indexId?: string | undefined;
2440
2537
  }>>;
2441
2538
  /** Curated links for the Cmd+K empty state; defaults to the first sidebar pages. */
@@ -2491,8 +2588,8 @@ export declare const blumeConfigSchema: z.ZodObject<{
2491
2588
  storeId: string;
2492
2589
  } | undefined;
2493
2590
  oramaCloud?: {
2494
- apiKey: string;
2495
2591
  endpoint: string;
2592
+ apiKey: string;
2496
2593
  indexId?: string | undefined;
2497
2594
  } | undefined;
2498
2595
  typesense?: {
@@ -2516,8 +2613,8 @@ export declare const blumeConfigSchema: z.ZodObject<{
2516
2613
  storeId: string;
2517
2614
  } | undefined;
2518
2615
  oramaCloud?: {
2519
- apiKey: string;
2520
2616
  endpoint: string;
2617
+ apiKey: string;
2521
2618
  indexId?: string | undefined;
2522
2619
  } | undefined;
2523
2620
  popular?: {
@@ -2551,8 +2648,8 @@ export declare const blumeConfigSchema: z.ZodObject<{
2551
2648
  storeId: string;
2552
2649
  } | undefined;
2553
2650
  oramaCloud?: {
2554
- apiKey: string;
2555
2651
  endpoint: string;
2652
+ apiKey: string;
2556
2653
  indexId?: string | undefined;
2557
2654
  } | undefined;
2558
2655
  typesense?: {
@@ -2576,8 +2673,8 @@ export declare const blumeConfigSchema: z.ZodObject<{
2576
2673
  storeId: string;
2577
2674
  } | undefined;
2578
2675
  oramaCloud?: {
2579
- apiKey: string;
2580
2676
  endpoint: string;
2677
+ apiKey: string;
2581
2678
  indexId?: string | undefined;
2582
2679
  } | undefined;
2583
2680
  popular?: {
@@ -2958,6 +3055,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
2958
3055
  enabled: boolean;
2959
3056
  route: string;
2960
3057
  sources: {
3058
+ includeInLlms: boolean;
3059
+ includeInSearch: boolean;
3060
+ noindex: boolean;
2961
3061
  spec: string;
2962
3062
  label?: string | undefined;
2963
3063
  route?: string | undefined;
@@ -2973,6 +3073,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
2973
3073
  enabled: boolean;
2974
3074
  route: string;
2975
3075
  sources: {
3076
+ includeInLlms: boolean;
3077
+ includeInSearch: boolean;
3078
+ noindex: boolean;
2976
3079
  spec: string;
2977
3080
  label?: string | undefined;
2978
3081
  route?: string | undefined;
@@ -3003,6 +3106,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
3003
3106
  }[];
3004
3107
  apiKeyEnv?: string | undefined;
3005
3108
  baseUrl?: string | undefined;
3109
+ endpoint?: string | undefined;
3006
3110
  } | undefined;
3007
3111
  };
3008
3112
  content: {
@@ -3129,6 +3233,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
3129
3233
  frontmatter: {
3130
3234
  extend: Record<string, StandardSchema<unknown, unknown>>;
3131
3235
  };
3236
+ integrations: AstroIntegration[];
3132
3237
  markdown: {
3133
3238
  code: {
3134
3239
  icons: boolean;
@@ -3169,6 +3274,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
3169
3274
  path: string;
3170
3275
  label: string;
3171
3276
  icon?: string | undefined;
3277
+ href?: string | undefined;
3172
3278
  items?: {
3173
3279
  path: string;
3174
3280
  label: string;
@@ -3205,8 +3311,8 @@ export declare const blumeConfigSchema: z.ZodObject<{
3205
3311
  storeId: string;
3206
3312
  } | undefined;
3207
3313
  oramaCloud?: {
3208
- apiKey: string;
3209
3314
  endpoint: string;
3315
+ apiKey: string;
3210
3316
  indexId?: string | undefined;
3211
3317
  } | undefined;
3212
3318
  typesense?: {
@@ -3319,6 +3425,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
3319
3425
  spec: string;
3320
3426
  label?: string | undefined;
3321
3427
  route?: string | undefined;
3428
+ includeInLlms?: boolean | undefined;
3429
+ includeInSearch?: boolean | undefined;
3430
+ noindex?: boolean | undefined;
3322
3431
  }[] | undefined;
3323
3432
  theme?: string | undefined;
3324
3433
  codeSamples?: string[] | undefined;
@@ -3334,6 +3443,9 @@ export declare const blumeConfigSchema: z.ZodObject<{
3334
3443
  spec: string;
3335
3444
  label?: string | undefined;
3336
3445
  route?: string | undefined;
3446
+ includeInLlms?: boolean | undefined;
3447
+ includeInSearch?: boolean | undefined;
3448
+ noindex?: boolean | undefined;
3337
3449
  }[] | undefined;
3338
3450
  theme?: string | undefined;
3339
3451
  } | undefined;
@@ -3342,6 +3454,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
3342
3454
  apiKeyEnv?: string | undefined;
3343
3455
  baseUrl?: string | undefined;
3344
3456
  enabled?: boolean | undefined;
3457
+ endpoint?: string | undefined;
3345
3458
  model?: string | undefined;
3346
3459
  provider?: "gateway" | "openrouter" | "llmgateway" | "inkeep" | "openai-compatible" | undefined;
3347
3460
  suggestions?: {
@@ -3526,6 +3639,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
3526
3639
  parser?: "dir" | "dot" | undefined;
3527
3640
  ui?: Record<string, Record<string, Record<string, string>>> | undefined;
3528
3641
  } | undefined;
3642
+ integrations?: AstroIntegration[] | undefined;
3529
3643
  logo?: string | {
3530
3644
  href?: string | undefined;
3531
3645
  text?: string | undefined;
@@ -3575,6 +3689,7 @@ export declare const blumeConfigSchema: z.ZodObject<{
3575
3689
  path: string;
3576
3690
  label: string;
3577
3691
  icon?: string | undefined;
3692
+ href?: string | undefined;
3578
3693
  items?: {
3579
3694
  path: string;
3580
3695
  label: string;
@@ -3606,8 +3721,8 @@ export declare const blumeConfigSchema: z.ZodObject<{
3606
3721
  storeId: string;
3607
3722
  } | undefined;
3608
3723
  oramaCloud?: {
3609
- apiKey: string;
3610
3724
  endpoint: string;
3725
+ apiKey: string;
3611
3726
  indexId?: string | undefined;
3612
3727
  } | undefined;
3613
3728
  popular?: {
@@ -190,9 +190,11 @@ export interface NavTab {
190
190
  */
191
191
  path: string;
192
192
  /**
193
- * The clickable target. Equals `path` when the section has an index page;
194
- * otherwise it's resolved to the section's first page so the tab never links
195
- * to a 404. Absent when it matches `path`.
193
+ * The clickable target. Author-declared when the config sets it; otherwise
194
+ * equals `path` when the section has an index page, and resolves to the
195
+ * section's first page when it doesn't, so the tab doesn't link to a 404 as
196
+ * long as the section has a page to offer — a section with no linkable page at
197
+ * all keeps `path`. Absent when a resolved target matches `path`.
196
198
  */
197
199
  href?: string;
198
200
  icon?: string;