blume 2.1.1 → 2.1.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 (171) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cli/{chunk-ncj7w596.js → chunk-0pmb4tr4.js} +22 -18
  3. package/dist/cli/{chunk-ncj7w596.js.map → chunk-0pmb4tr4.js.map} +3 -3
  4. package/dist/cli/{chunk-nq1d20w2.js → chunk-0w6hs479.js} +15 -15
  5. package/dist/cli/{chunk-ehweg4fr.js → chunk-124fvmzq.js} +1031 -903
  6. package/dist/cli/{chunk-ehweg4fr.js.map → chunk-124fvmzq.js.map} +20 -18
  7. package/dist/cli/{chunk-kma9f6sf.js → chunk-1f882900.js} +2 -2
  8. package/dist/cli/{chunk-e8xw9qkh.js → chunk-297ajdcv.js} +4 -4
  9. package/dist/cli/{chunk-e6atmn4h.js → chunk-32khwcb6.js} +7 -7
  10. package/dist/cli/{chunk-073rdvgb.js → chunk-36bxs9c7.js} +16 -16
  11. package/dist/cli/{chunk-mrcccgnh.js → chunk-53jqw8z0.js} +3 -3
  12. package/dist/cli/{chunk-ft9vfys6.js → chunk-58bt3hag.js} +4 -4
  13. package/dist/cli/{chunk-sds923fa.js → chunk-5cmts6dv.js} +3 -3
  14. package/dist/cli/{chunk-cfyg47zg.js → chunk-60hz265r.js} +4 -4
  15. package/dist/cli/{chunk-j134vrp2.js → chunk-74wfhv79.js} +1 -1
  16. package/dist/cli/{chunk-nrns10mj.js → chunk-9qzgg6mj.js} +3 -3
  17. package/dist/cli/{chunk-tphac74f.js → chunk-a57yh0h9.js} +5 -5
  18. package/dist/cli/{chunk-hebn0tpx.js → chunk-ave1wcbr.js} +1 -1
  19. package/dist/cli/{chunk-htrwgabr.js → chunk-bqxaqn5p.js} +6 -6
  20. package/dist/cli/{chunk-5vjtgs6e.js → chunk-bxwhtvw8.js} +5 -5
  21. package/dist/cli/{chunk-66w9j7p6.js → chunk-ckrcm08h.js} +5 -3
  22. package/dist/cli/{chunk-66w9j7p6.js.map → chunk-ckrcm08h.js.map} +3 -3
  23. package/dist/cli/{chunk-n0v7m8ry.js → chunk-desvm72z.js} +3 -3
  24. package/dist/cli/{chunk-3v3ffbrj.js → chunk-dhwtqnnd.js} +2 -2
  25. package/dist/cli/{chunk-gb420vvz.js → chunk-dpy8qdjf.js} +7 -4
  26. package/dist/cli/chunk-dpy8qdjf.js.map +17 -0
  27. package/dist/cli/{chunk-c1y538kd.js → chunk-dqhg54mr.js} +1 -1
  28. package/dist/cli/{chunk-42t4jxdx.js → chunk-dv2z0rzf.js} +1 -1
  29. package/dist/cli/{chunk-cm89scdv.js → chunk-es8h0v3j.js} +9 -11
  30. package/dist/cli/{chunk-cm89scdv.js.map → chunk-es8h0v3j.js.map} +3 -3
  31. package/dist/cli/{chunk-hx3xqnk9.js → chunk-gfc5fqvf.js} +14 -14
  32. package/dist/cli/{chunk-7ppf1rva.js → chunk-gxtg6ed2.js} +16 -16
  33. package/dist/cli/{chunk-8y2kmjv8.js → chunk-hvcxng5f.js} +6 -6
  34. package/dist/cli/{chunk-54ztw1nj.js → chunk-j1x92mx9.js} +1 -1
  35. package/dist/cli/{chunk-313vnn40.js → chunk-k3gr1nm9.js} +11 -9
  36. package/dist/cli/chunk-k3gr1nm9.js.map +10 -0
  37. package/dist/cli/{chunk-c887fj0s.js → chunk-kdpzw38a.js} +2 -2
  38. package/dist/cli/{chunk-t2m5j4pr.js → chunk-ms9z66nz.js} +2 -2
  39. package/dist/cli/{chunk-t2m5j4pr.js.map → chunk-ms9z66nz.js.map} +2 -2
  40. package/dist/cli/{chunk-ep6nd0rn.js → chunk-nbyvgnnm.js} +26 -14
  41. package/dist/cli/{chunk-ep6nd0rn.js.map → chunk-nbyvgnnm.js.map} +7 -7
  42. package/dist/cli/{chunk-w1r4vase.js → chunk-s0bdnc7v.js} +2 -2
  43. package/dist/cli/{chunk-fdrkhpjy.js → chunk-sc93apfs.js} +14 -14
  44. package/dist/cli/{chunk-dzwehpy7.js → chunk-tfycddbt.js} +2 -2
  45. package/dist/cli/{chunk-3x6x3pph.js → chunk-twy7psdz.js} +7 -7
  46. package/dist/cli/{chunk-e9q7a2ak.js → chunk-y4msrwm9.js} +15 -15
  47. package/dist/cli/{chunk-tdqhyxfz.js → chunk-ydp3065p.js} +5 -5
  48. package/dist/cli/index.js +18 -18
  49. package/dist/types/ai/ask.d.ts +24 -5
  50. package/dist/types/analytics/clics.d.ts +37 -0
  51. package/dist/types/analytics/index.d.ts +2 -0
  52. package/dist/types/analytics/schema.d.ts +18 -0
  53. package/dist/types/astro/integration.d.ts +6 -0
  54. package/dist/types/core/config-input.d.ts +7 -3
  55. package/dist/types/core/powered-by.d.ts +12 -0
  56. package/dist/types/core/schema.d.ts +109 -3
  57. package/dist/types/core/sources/lower.d.ts +10 -2
  58. package/dist/types/core/sources/notion.d.ts +8 -0
  59. package/dist/types/deploy/cloudflare-negotiation.d.ts +5 -2
  60. package/dist/types/deploy/node-headers.d.ts +12 -4
  61. package/dist/types/deploy/platforms/vercel.d.ts +2 -2
  62. package/dist/types/deploy/vercel-negotiation.d.ts +4 -2
  63. package/dist/types/narration/build.d.ts +34 -12
  64. package/dist/types/narration/provider.d.ts +96 -8
  65. package/dist/types/openapi/sentence.d.ts +11 -1
  66. package/dist/types/seo/jsonld.d.ts +11 -6
  67. package/dist/types/sources/notion.d.ts +8 -0
  68. package/dist/types/sources/registry.d.ts +9 -0
  69. package/docs/02-deployment.mdx +29 -1
  70. package/docs/03-upgrading.mdx +2 -1
  71. package/docs/04-migrating.mdx +9 -9
  72. package/docs/08-faq.mdx +12 -12
  73. package/docs/advanced/changelog.mdx +19 -2
  74. package/docs/advanced/custom-pages.mdx +1 -1
  75. package/docs/cli/doctor.mdx +1 -1
  76. package/docs/configuration/analytics.mdx +19 -1
  77. package/docs/configuration/index.mdx +1 -0
  78. package/docs/configuration/narration.mdx +43 -6
  79. package/docs/content/navigation.mdx +4 -2
  80. package/docs/content/sources/contentful.mdx +2 -0
  81. package/docs/content/sources/github-releases.mdx +2 -0
  82. package/docs/content/sources/notion.mdx +16 -1
  83. package/docs/content/sources/obsidian.mdx +2 -0
  84. package/docs/content/sources/payload.mdx +2 -0
  85. package/docs/content/sources/remote-mdx.mdx +2 -0
  86. package/docs/content/sources/sanity.mdx +2 -0
  87. package/docs/content/sources/strapi.mdx +2 -0
  88. package/docs/discoverability/mcp.mdx +2 -0
  89. package/docs/discoverability/structured-data.mdx +8 -6
  90. package/docs/references/asyncapi.mdx +2 -0
  91. package/docs/references/graphql.mdx +2 -0
  92. package/docs/references/openapi.mdx +14 -0
  93. package/package.json +7 -6
  94. package/skills/blume/SKILL.md +1 -1
  95. package/skills/blume-migrate/SKILL.md +1 -1
  96. package/skills/blume-migrate/assets/{oxfmt@0.67.0.patch → oxfmt@0.71.0.patch} +7 -7
  97. package/skills/blume-migrate/references/monorepo.md +5 -5
  98. package/src/ai/ask.ts +24 -6
  99. package/src/analytics/clics.ts +58 -0
  100. package/src/analytics/head.ts +5 -0
  101. package/src/analytics/index.ts +2 -0
  102. package/src/analytics/schema.ts +2 -0
  103. package/src/astro/generate.ts +13 -8
  104. package/src/astro/integration.ts +56 -9
  105. package/src/astro/render-deps.ts +10 -5
  106. package/src/astro/runtime-deps.ts +23 -2
  107. package/src/astro/templates.ts +4 -1
  108. package/src/cli/init/scaffold.ts +6 -3
  109. package/src/cli/required-secrets.ts +2 -1
  110. package/src/components/content/view-switcher.ts +7 -4
  111. package/src/components/layout/NavTree.astro +49 -5
  112. package/src/components/layout/NavTreeScript.astro +18 -0
  113. package/src/components/layout/PageLayout.astro +13 -3
  114. package/src/components/layout/RootLayout.astro +17 -12
  115. package/src/components/layout/analytics-client.ts +8 -8
  116. package/src/components/openapi/playground-client.ts +53 -53
  117. package/src/components/powered-by-middleware.ts +33 -0
  118. package/src/core/config-input.ts +11 -3
  119. package/src/core/powered-by.ts +12 -0
  120. package/src/core/schema.ts +5 -4
  121. package/src/core/sources/lower.ts +19 -3
  122. package/src/core/sources/notion.ts +27 -9
  123. package/src/deploy/cloudflare-negotiation.ts +36 -7
  124. package/src/deploy/headers.ts +15 -1
  125. package/src/deploy/node-headers.ts +32 -20
  126. package/src/deploy/platforms/cloudflare.ts +1 -0
  127. package/src/deploy/platforms/vercel.ts +4 -3
  128. package/src/deploy/vercel-negotiation.ts +38 -4
  129. package/src/markdown/base-links.ts +15 -14
  130. package/src/markdown/package-commands.ts +9 -8
  131. package/src/narration/build.ts +218 -40
  132. package/src/narration/provider.ts +89 -9
  133. package/src/openapi/render-mdx.ts +68 -8
  134. package/src/openapi/sentence.ts +29 -2
  135. package/src/registry/eject.ts +5 -1
  136. package/src/seo/jsonld.ts +38 -20
  137. package/src/sources/notion.ts +7 -0
  138. package/src/theme/color.ts +9 -10
  139. package/src/theme/entry.ts +14 -3
  140. package/dist/cli/chunk-313vnn40.js.map +0 -10
  141. package/dist/cli/chunk-gb420vvz.js.map +0 -17
  142. /package/dist/cli/{chunk-nq1d20w2.js.map → chunk-0w6hs479.js.map} +0 -0
  143. /package/dist/cli/{chunk-kma9f6sf.js.map → chunk-1f882900.js.map} +0 -0
  144. /package/dist/cli/{chunk-e8xw9qkh.js.map → chunk-297ajdcv.js.map} +0 -0
  145. /package/dist/cli/{chunk-e6atmn4h.js.map → chunk-32khwcb6.js.map} +0 -0
  146. /package/dist/cli/{chunk-073rdvgb.js.map → chunk-36bxs9c7.js.map} +0 -0
  147. /package/dist/cli/{chunk-mrcccgnh.js.map → chunk-53jqw8z0.js.map} +0 -0
  148. /package/dist/cli/{chunk-ft9vfys6.js.map → chunk-58bt3hag.js.map} +0 -0
  149. /package/dist/cli/{chunk-sds923fa.js.map → chunk-5cmts6dv.js.map} +0 -0
  150. /package/dist/cli/{chunk-cfyg47zg.js.map → chunk-60hz265r.js.map} +0 -0
  151. /package/dist/cli/{chunk-j134vrp2.js.map → chunk-74wfhv79.js.map} +0 -0
  152. /package/dist/cli/{chunk-nrns10mj.js.map → chunk-9qzgg6mj.js.map} +0 -0
  153. /package/dist/cli/{chunk-tphac74f.js.map → chunk-a57yh0h9.js.map} +0 -0
  154. /package/dist/cli/{chunk-hebn0tpx.js.map → chunk-ave1wcbr.js.map} +0 -0
  155. /package/dist/cli/{chunk-htrwgabr.js.map → chunk-bqxaqn5p.js.map} +0 -0
  156. /package/dist/cli/{chunk-5vjtgs6e.js.map → chunk-bxwhtvw8.js.map} +0 -0
  157. /package/dist/cli/{chunk-n0v7m8ry.js.map → chunk-desvm72z.js.map} +0 -0
  158. /package/dist/cli/{chunk-3v3ffbrj.js.map → chunk-dhwtqnnd.js.map} +0 -0
  159. /package/dist/cli/{chunk-c1y538kd.js.map → chunk-dqhg54mr.js.map} +0 -0
  160. /package/dist/cli/{chunk-42t4jxdx.js.map → chunk-dv2z0rzf.js.map} +0 -0
  161. /package/dist/cli/{chunk-hx3xqnk9.js.map → chunk-gfc5fqvf.js.map} +0 -0
  162. /package/dist/cli/{chunk-7ppf1rva.js.map → chunk-gxtg6ed2.js.map} +0 -0
  163. /package/dist/cli/{chunk-8y2kmjv8.js.map → chunk-hvcxng5f.js.map} +0 -0
  164. /package/dist/cli/{chunk-54ztw1nj.js.map → chunk-j1x92mx9.js.map} +0 -0
  165. /package/dist/cli/{chunk-c887fj0s.js.map → chunk-kdpzw38a.js.map} +0 -0
  166. /package/dist/cli/{chunk-w1r4vase.js.map → chunk-s0bdnc7v.js.map} +0 -0
  167. /package/dist/cli/{chunk-fdrkhpjy.js.map → chunk-sc93apfs.js.map} +0 -0
  168. /package/dist/cli/{chunk-dzwehpy7.js.map → chunk-tfycddbt.js.map} +0 -0
  169. /package/dist/cli/{chunk-3x6x3pph.js.map → chunk-twy7psdz.js.map} +0 -0
  170. /package/dist/cli/{chunk-e9q7a2ak.js.map → chunk-y4msrwm9.js.map} +0 -0
  171. /package/dist/cli/{chunk-tdqhyxfz.js.map → chunk-ydp3065p.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  asciiSlugify
4
- } from "./chunk-ehweg4fr.js";
4
+ } from "./chunk-124fvmzq.js";
5
5
 
6
6
  // src/ai/site-skill.ts
7
7
  var NAME_MAX = 64;
@@ -15,4 +15,4 @@ var siteSkillName = (project) => {
15
15
  export { siteSkillName };
16
16
 
17
17
  //# debugId=D5EE89A8D7931D3164756E2164756E21
18
- //# sourceMappingURL=chunk-w1r4vase.js.map
18
+ //# sourceMappingURL=chunk-s0bdnc7v.js.map
@@ -16,31 +16,31 @@ import {
16
16
  applyPlan,
17
17
  readExistingPackage,
18
18
  nextSteps
19
- } from "./chunk-ehweg4fr.js";
19
+ } from "./chunk-124fvmzq.js";
20
20
  import"./chunk-zccbjcj0.js";
21
- import"./chunk-ep6nd0rn.js";
21
+ import"./chunk-nbyvgnnm.js";
22
22
  import {
23
23
  commandMeta,
24
24
  logger
25
25
  } from "./index.js";
26
- import"./chunk-n0v7m8ry.js";
27
- import"./chunk-ncj7w596.js";
28
- import"./chunk-gb420vvz.js";
29
- import"./chunk-66w9j7p6.js";
30
- import"./chunk-54ztw1nj.js";
26
+ import"./chunk-desvm72z.js";
27
+ import"./chunk-0pmb4tr4.js";
28
+ import"./chunk-dpy8qdjf.js";
29
+ import"./chunk-ckrcm08h.js";
30
+ import"./chunk-j1x92mx9.js";
31
31
  import"./chunk-jq5n4avg.js";
32
- import"./chunk-cm89scdv.js";
33
- import"./chunk-c1y538kd.js";
32
+ import"./chunk-es8h0v3j.js";
33
+ import"./chunk-dqhg54mr.js";
34
34
  import {
35
35
  eject
36
- } from "./chunk-313vnn40.js";
36
+ } from "./chunk-k3gr1nm9.js";
37
37
  import {
38
38
  updatePackageScripts
39
- } from "./chunk-mrcccgnh.js";
39
+ } from "./chunk-53jqw8z0.js";
40
40
  import {
41
41
  installDependencies
42
- } from "./chunk-3v3ffbrj.js";
43
- import"./chunk-w1r4vase.js";
42
+ } from "./chunk-dhwtqnnd.js";
43
+ import"./chunk-s0bdnc7v.js";
44
44
 
45
45
  // src/cli/commands/init.ts
46
46
  import * as clack from "@clack/prompts";
@@ -332,4 +332,4 @@ export {
332
332
  };
333
333
 
334
334
  //# debugId=937A77D93EDC0DE164756E2164756E21
335
- //# sourceMappingURL=chunk-fdrkhpjy.js.map
335
+ //# sourceMappingURL=chunk-sc93apfs.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveRuntimeDir
4
- } from "./chunk-ehweg4fr.js";
4
+ } from "./chunk-124fvmzq.js";
5
5
  import {
6
6
  logger
7
7
  } from "./index.js";
@@ -197,4 +197,4 @@ var refuseIfDevRunning = (root, action, options = {}) => {
197
197
  export { readDevLock, DevLockHeldError, acquireDevLock, updateDevLockPort, describeDevLock, refuseIfDevRunning };
198
198
 
199
199
  //# debugId=BA0F0BBCC7BD124F64756E2164756E21
200
- //# sourceMappingURL=chunk-dzwehpy7.js.map
200
+ //# sourceMappingURL=chunk-tfycddbt.js.map
@@ -4,11 +4,11 @@ import {
4
4
  discoverIslands,
5
5
  discoverExamples,
6
6
  missingDependencyDiagnostic
7
- } from "./chunk-66w9j7p6.js";
7
+ } from "./chunk-ckrcm08h.js";
8
8
  import {
9
9
  discoverPages,
10
10
  navTargetRoutes
11
- } from "./chunk-ehweg4fr.js";
11
+ } from "./chunk-124fvmzq.js";
12
12
  import {
13
13
  packageRoot,
14
14
  commandMeta,
@@ -23,20 +23,20 @@ import {
23
23
  import {
24
24
  ComponentOverridesError,
25
25
  analyzeComponentOverrides
26
- } from "./chunk-54ztw1nj.js";
26
+ } from "./chunk-j1x92mx9.js";
27
27
  import {
28
28
  validateNavTargets,
29
29
  scanProject
30
- } from "./chunk-ncj7w596.js";
30
+ } from "./chunk-0pmb4tr4.js";
31
31
  import"./chunk-zccbjcj0.js";
32
32
  import"./chunk-jq5n4avg.js";
33
33
  import {
34
34
  unregisteredSnapshotDiagnostics
35
- } from "./chunk-sds923fa.js";
35
+ } from "./chunk-5cmts6dv.js";
36
36
  import {
37
37
  serverFeatures,
38
38
  checkRequiredSecrets
39
- } from "./chunk-t2m5j4pr.js";
39
+ } from "./chunk-ms9z66nz.js";
40
40
 
41
41
  // src/cli/commands/doctor.ts
42
42
  import { readFileSync } from "node:fs";
@@ -167,4 +167,4 @@ export {
167
167
  };
168
168
 
169
169
  //# debugId=A6107CD821E0AA4B64756E2164756E21
170
- //# sourceMappingURL=chunk-3x6x3pph.js.map
170
+ //# sourceMappingURL=chunk-twy7psdz.js.map
@@ -3,7 +3,7 @@ import {
3
3
  resolveRuntimeDir,
4
4
  resolveProjectContext,
5
5
  loadConfig
6
- } from "./chunk-ehweg4fr.js";
6
+ } from "./chunk-124fvmzq.js";
7
7
  import"./chunk-zccbjcj0.js";
8
8
  import {
9
9
  commandMeta,
@@ -11,24 +11,24 @@ import {
11
11
  } from "./index.js";
12
12
  import {
13
13
  readDevLock
14
- } from "./chunk-dzwehpy7.js";
15
- import"./chunk-gb420vvz.js";
14
+ } from "./chunk-tfycddbt.js";
15
+ import"./chunk-dpy8qdjf.js";
16
16
  import {
17
17
  refuseIfEjected
18
- } from "./chunk-mrcccgnh.js";
19
- import"./chunk-ep6nd0rn.js";
20
- import"./chunk-n0v7m8ry.js";
21
- import"./chunk-ncj7w596.js";
22
- import"./chunk-66w9j7p6.js";
23
- import"./chunk-54ztw1nj.js";
18
+ } from "./chunk-53jqw8z0.js";
19
+ import"./chunk-nbyvgnnm.js";
20
+ import"./chunk-desvm72z.js";
21
+ import"./chunk-0pmb4tr4.js";
22
+ import"./chunk-ckrcm08h.js";
23
+ import"./chunk-j1x92mx9.js";
24
24
  import"./chunk-jq5n4avg.js";
25
- import"./chunk-cm89scdv.js";
26
- import"./chunk-c1y538kd.js";
25
+ import"./chunk-es8h0v3j.js";
26
+ import"./chunk-dqhg54mr.js";
27
27
  import {
28
28
  prepareProject
29
- } from "./chunk-e8xw9qkh.js";
30
- import"./chunk-t2m5j4pr.js";
31
- import"./chunk-w1r4vase.js";
29
+ } from "./chunk-297ajdcv.js";
30
+ import"./chunk-ms9z66nz.js";
31
+ import"./chunk-s0bdnc7v.js";
32
32
 
33
33
  // src/cli/commands/sync.ts
34
34
  import { rm } from "node:fs/promises";
@@ -74,4 +74,4 @@ export {
74
74
  };
75
75
 
76
76
  //# debugId=67B7B6A961A6206764756E2164756E21
77
- //# sourceMappingURL=chunk-e9q7a2ak.js.map
77
+ //# sourceMappingURL=chunk-y4msrwm9.js.map
@@ -3,7 +3,7 @@ import {
3
3
  deployPlatform,
4
4
  resolveProjectContext,
5
5
  loadConfig
6
- } from "./chunk-ehweg4fr.js";
6
+ } from "./chunk-124fvmzq.js";
7
7
  import"./chunk-zccbjcj0.js";
8
8
  import {
9
9
  commandMeta,
@@ -12,13 +12,13 @@ import {
12
12
  } from "./index.js";
13
13
  import {
14
14
  deployOutputDir
15
- } from "./chunk-gb420vvz.js";
15
+ } from "./chunk-dpy8qdjf.js";
16
16
  import {
17
17
  parsePort
18
- } from "./chunk-j134vrp2.js";
18
+ } from "./chunk-74wfhv79.js";
19
19
  import {
20
20
  refuseIfEjected
21
- } from "./chunk-mrcccgnh.js";
21
+ } from "./chunk-53jqw8z0.js";
22
22
 
23
23
  // src/cli/commands/preview.ts
24
24
  import { existsSync } from "node:fs";
@@ -61,4 +61,4 @@ export {
61
61
  };
62
62
 
63
63
  //# debugId=062E50A4A26E603564756E2164756E21
64
- //# sourceMappingURL=chunk-tdqhyxfz.js.map
64
+ //# sourceMappingURL=chunk-ydp3065p.js.map
package/dist/cli/index.js CHANGED
@@ -690,24 +690,24 @@ var main = defineCommand({
690
690
  version: getBlumeVersion()
691
691
  },
692
692
  subCommands: {
693
- add: lazyCommand(commandMeta.add, () => import("./chunk-kma9f6sf.js"), "addCommand"),
694
- audit: lazyCommand(commandMeta.audit, () => import("./chunk-e6atmn4h.js"), "auditCommand"),
695
- build: lazyCommand(commandMeta.build, () => import("./chunk-073rdvgb.js"), "buildCommand"),
696
- check: lazyCommand(commandMeta.check, () => import("./chunk-nq1d20w2.js"), "checkCommand"),
697
- dev: lazyCommand(commandMeta.dev, () => import("./chunk-7ppf1rva.js"), "devCommand"),
698
- doctor: lazyCommand(commandMeta.doctor, () => import("./chunk-3x6x3pph.js"), "doctorCommand"),
699
- eject: lazyCommand(commandMeta.eject, () => import("./chunk-hx3xqnk9.js"), "ejectCommand"),
700
- eval: lazyCommand(commandMeta.eval, () => import("./chunk-htrwgabr.js"), "evalCommand"),
701
- init: lazyCommand(commandMeta.init, () => import("./chunk-fdrkhpjy.js"), "initCommand"),
702
- "mcp-stdio": lazyCommand(commandMeta["mcp-stdio"], () => import("./chunk-hebn0tpx.js"), "mcpStdioCommand"),
703
- migrate: lazyCommand(commandMeta.migrate, () => import("./chunk-c887fj0s.js"), "migrateCommand"),
704
- preview: lazyCommand(commandMeta.preview, () => import("./chunk-tdqhyxfz.js"), "previewCommand"),
705
- skill: lazyCommand(commandMeta.skill, () => import("./chunk-tphac74f.js"), "skillCommand"),
706
- sync: lazyCommand(commandMeta.sync, () => import("./chunk-e9q7a2ak.js"), "syncCommand"),
707
- translate: lazyCommand(commandMeta.translate, () => import("./chunk-5vjtgs6e.js"), "translateCommand"),
708
- upgrade: lazyCommand(commandMeta.upgrade, () => import("./chunk-8y2kmjv8.js"), "upgradeCommand"),
709
- validate: lazyCommand(commandMeta.validate, () => import("./chunk-cfyg47zg.js"), "validateCommand"),
710
- version: lazyCommand(commandMeta.version, () => import("./chunk-ft9vfys6.js"), "versionCommand")
693
+ add: lazyCommand(commandMeta.add, () => import("./chunk-1f882900.js"), "addCommand"),
694
+ audit: lazyCommand(commandMeta.audit, () => import("./chunk-32khwcb6.js"), "auditCommand"),
695
+ build: lazyCommand(commandMeta.build, () => import("./chunk-36bxs9c7.js"), "buildCommand"),
696
+ check: lazyCommand(commandMeta.check, () => import("./chunk-0w6hs479.js"), "checkCommand"),
697
+ dev: lazyCommand(commandMeta.dev, () => import("./chunk-gxtg6ed2.js"), "devCommand"),
698
+ doctor: lazyCommand(commandMeta.doctor, () => import("./chunk-twy7psdz.js"), "doctorCommand"),
699
+ eject: lazyCommand(commandMeta.eject, () => import("./chunk-gfc5fqvf.js"), "ejectCommand"),
700
+ eval: lazyCommand(commandMeta.eval, () => import("./chunk-bqxaqn5p.js"), "evalCommand"),
701
+ init: lazyCommand(commandMeta.init, () => import("./chunk-sc93apfs.js"), "initCommand"),
702
+ "mcp-stdio": lazyCommand(commandMeta["mcp-stdio"], () => import("./chunk-ave1wcbr.js"), "mcpStdioCommand"),
703
+ migrate: lazyCommand(commandMeta.migrate, () => import("./chunk-kdpzw38a.js"), "migrateCommand"),
704
+ preview: lazyCommand(commandMeta.preview, () => import("./chunk-ydp3065p.js"), "previewCommand"),
705
+ skill: lazyCommand(commandMeta.skill, () => import("./chunk-a57yh0h9.js"), "skillCommand"),
706
+ sync: lazyCommand(commandMeta.sync, () => import("./chunk-y4msrwm9.js"), "syncCommand"),
707
+ translate: lazyCommand(commandMeta.translate, () => import("./chunk-bxwhtvw8.js"), "translateCommand"),
708
+ upgrade: lazyCommand(commandMeta.upgrade, () => import("./chunk-hvcxng5f.js"), "upgradeCommand"),
709
+ validate: lazyCommand(commandMeta.validate, () => import("./chunk-60hz265r.js"), "validateCommand"),
710
+ version: lazyCommand(commandMeta.version, () => import("./chunk-58bt3hag.js"), "versionCommand")
711
711
  }
712
712
  });
713
713
  loadEnvFiles(process.cwd());
@@ -57,7 +57,8 @@ export interface AssistantGatewayOptions extends AssistantAdapterOptions {
57
57
  * How much the model reasons before answering. Sent as the AI SDK's
58
58
  * top-level `reasoning` option, which the gateway maps to the model's own
59
59
  * control (OpenAI's `reasoning_effort`, for example); the model has to
60
- * offer the level you pick. Omitted keeps the model's default.
60
+ * offer the level you pick. Omitted keeps the model's default. Assistant
61
+ * only.
61
62
  */
62
63
  reasoning?: AssistantReasoning;
63
64
  /** Narration only: the speech model's voice. Defaults to `alloy`. */
@@ -91,30 +92,46 @@ export declare const gatewayAdapterSchema: z.ZodObject<{
91
92
  * Blume ships.
92
93
  */
93
94
  export declare const gateway: (options?: AssistantGatewayOptions) => AssistantGatewayAdapter;
95
+ export declare const OPENAI_API_KEY_ENV = "OPENAI_API_KEY";
94
96
  /** Options for {@link openai}. */
95
97
  export interface AssistantOpenAIOptions extends AssistantAdapterOptions {
98
+ /**
99
+ * Name of the env var holding the key. Defaults to `OPENAI_API_KEY`, except
100
+ * for narration with a `baseUrl`, which sends only a key named here.
101
+ */
102
+ apiKeyEnv?: string;
96
103
  /**
97
104
  * An OpenAI-compatible endpoint to call instead of OpenAI
98
105
  * (`https://llm.internal.example.com/v1`): a self-hosted model or an
99
106
  * internal gateway. The route then talks Chat Completions through
100
107
  * `@ai-sdk/openai-compatible`, and the docs tools are off unless
101
108
  * `ai.assistant.tools` turns them on, since the model may not call tools.
109
+ * For narration, a server with OpenAI's speech API (`/audio/speech`),
110
+ * called through `@ai-sdk/openai` and sent only the key `apiKeyEnv` names,
111
+ * if any.
102
112
  */
103
113
  baseUrl?: string;
104
- /** The model id (`gpt-5.5`). */
114
+ /**
115
+ * Narration only: how the voice should sound, for speech models that take
116
+ * instructions ("Read calmly, like a teacher").
117
+ */
118
+ instructions?: string;
119
+ /** The model id (`gpt-5.5`, or a speech model like `gpt-4o-mini-tts`). */
105
120
  model: string;
106
121
  /**
107
122
  * The provider name the AI SDK reports, which a custom endpoint also reads
108
123
  * its `providerOptions` under. Defaults to `openai`, or `openai-compatible`
109
- * with a `baseUrl`.
124
+ * with a `baseUrl`. Assistant only.
110
125
  */
111
126
  name?: string;
112
127
  /**
113
128
  * How much the model reasons before answering, sent as `reasoning_effort`;
114
129
  * with a `baseUrl`, the endpoint has to accept that parameter. Omitted
115
- * keeps the model's default.
130
+ * keeps the model's default. Assistant only.
116
131
  */
117
132
  reasoning?: AssistantReasoning;
133
+ /** Narration only: the speech model's voice. Defaults to `alloy`. */
134
+ voice?: string;
118
135
  }
119
136
  export type AssistantOpenAIAdapter = AdapterDescriptor<"openai", AssistantOpenAIOptions>;
120
137
  export declare const openaiAdapterSchema: z.ZodObject<{
@@ -142,7 +159,9 @@ export declare const openaiAdapterSchema: z.ZodObject<{
142
159
  * Route the assistant to OpenAI, or to any OpenAI-compatible endpoint with
143
160
  * `baseUrl`. Reads `OPENAI_API_KEY` and needs `@ai-sdk/openai` installed; a
144
161
  * custom endpoint needs `@ai-sdk/openai-compatible` instead, since most
145
- * don't serve OpenAI's Responses API.
162
+ * don't serve OpenAI's Responses API. Narration generates audio with it
163
+ * through `@ai-sdk/openai` either way, and with a `baseUrl` sends only the key
164
+ * `apiKeyEnv` names.
146
165
  */
147
166
  export declare const openai: (options: AssistantOpenAIOptions) => AssistantOpenAIAdapter;
148
167
  /**
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ import type { AdapterDescriptor } from "../core/adapter.ts";
3
+ import type { HeadScript } from "./head.ts";
4
+ /** The browser tracker in Clics' installation guide. */
5
+ export declare const CLICS_SCRIPT_SRC = "https://clics.dev/tracker.js";
6
+ /** Public project ID and optional tracker flags. */
7
+ export interface ClicsOptions {
8
+ /** Project ID from Configure → Tracking in the Clics dashboard. */
9
+ projectId: string;
10
+ /** Include localhost and 127.0.0.1 in a production build's reports. */
11
+ allowLocalhost?: boolean;
12
+ /** Turn off automatic outbound-link events. */
13
+ disableOutboundLinks?: boolean;
14
+ }
15
+ export declare const clicsOptionsSchema: z.ZodObject<{
16
+ allowLocalhost: z.ZodOptional<z.ZodBoolean>;
17
+ disableOutboundLinks: z.ZodOptional<z.ZodBoolean>;
18
+ projectId: z.ZodString;
19
+ }, z.core.$strict>;
20
+ export type ClicsAdapter = AdapterDescriptor<"clics", ClicsOptions>;
21
+ export declare const clicsAdapterSchema: z.ZodObject<{
22
+ kind: z.ZodLiteral<"clics">;
23
+ options: z.ZodObject<{
24
+ allowLocalhost: z.ZodOptional<z.ZodBoolean>;
25
+ disableOutboundLinks: z.ZodOptional<z.ZodBoolean>;
26
+ projectId: z.ZodString;
27
+ }, z.core.$strict>;
28
+ requiredSecrets: z.ZodArray<z.ZodString>;
29
+ runtimeDeps: z.ZodArray<z.ZodString>;
30
+ }, z.core.$strict>;
31
+ /** Clics website analytics. The project ID is public in the tracker tag. */
32
+ export declare const clics: (options: ClicsOptions) => ClicsAdapter;
33
+ /**
34
+ * The documented deferred tracker tag. Clics reads these attributes from
35
+ * `document.currentScript` and tracks history changes without a Blume hook.
36
+ */
37
+ export declare const clicsHead: (options: ClicsOptions) => HeadScript[];
@@ -28,6 +28,8 @@ export { clarity } from "./clarity.ts";
28
28
  export type { ClarityAdapter, ClarityOptions } from "./clarity.ts";
29
29
  export { clearbit } from "./clearbit.ts";
30
30
  export type { ClearbitAdapter, ClearbitOptions } from "./clearbit.ts";
31
+ export { clics } from "./clics.ts";
32
+ export type { ClicsAdapter, ClicsOptions } from "./clics.ts";
31
33
  export { cloudflare } from "./cloudflare.ts";
32
34
  export type { CloudflareAdapter, CloudflareOptions } from "./cloudflare.ts";
33
35
  export { databuddy } from "./databuddy.ts";
@@ -28,6 +28,15 @@ export declare const analyticsAdapterSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
28
28
  }, z.core.$strict>;
29
29
  requiredSecrets: z.ZodArray<z.ZodString>;
30
30
  runtimeDeps: z.ZodArray<z.ZodString>;
31
+ }, z.core.$strict>, z.ZodObject<{
32
+ kind: z.ZodLiteral<"clics">;
33
+ options: z.ZodObject<{
34
+ allowLocalhost: z.ZodOptional<z.ZodBoolean>;
35
+ disableOutboundLinks: z.ZodOptional<z.ZodBoolean>;
36
+ projectId: z.ZodString;
37
+ }, z.core.$strict>;
38
+ requiredSecrets: z.ZodArray<z.ZodString>;
39
+ runtimeDeps: z.ZodArray<z.ZodString>;
31
40
  }, z.core.$strict>, z.ZodObject<{
32
41
  kind: z.ZodLiteral<"cloudflare">;
33
42
  options: z.ZodObject<{
@@ -204,6 +213,15 @@ export declare const analyticsConfigSchema: z.ZodDefault<z.ZodArray<z.ZodDiscrim
204
213
  }, z.core.$strict>;
205
214
  requiredSecrets: z.ZodArray<z.ZodString>;
206
215
  runtimeDeps: z.ZodArray<z.ZodString>;
216
+ }, z.core.$strict>, z.ZodObject<{
217
+ kind: z.ZodLiteral<"clics">;
218
+ options: z.ZodObject<{
219
+ allowLocalhost: z.ZodOptional<z.ZodBoolean>;
220
+ disableOutboundLinks: z.ZodOptional<z.ZodBoolean>;
221
+ projectId: z.ZodString;
222
+ }, z.core.$strict>;
223
+ requiredSecrets: z.ZodArray<z.ZodString>;
224
+ runtimeDeps: z.ZodArray<z.ZodString>;
207
225
  }, z.core.$strict>, z.ZodObject<{
208
226
  kind: z.ZodLiteral<"cloudflare">;
209
227
  options: z.ZodObject<{
@@ -43,6 +43,12 @@ export declare const showBlumeErrorOverlay: (diagnostics: Diagnostic[]) => void;
43
43
  export type BlumePageRoute = CustomPageRoute;
44
44
  export interface BlumeIntegrationOptions {
45
45
  pages: BlumePageRoute[];
46
+ /**
47
+ * Whether responses name Blume in `X-Powered-By` (see
48
+ * `core/powered-by.ts`): the dev server's, and the server-rendered ones of
49
+ * a build, through the runtime middleware. Defaults to `true`.
50
+ */
51
+ poweredBy?: boolean;
46
52
  /**
47
53
  * Page routes that have a raw-Markdown variant (the content manifest). The
48
54
  * hidden runtime leaves this out: the CLI publishes the live set through
@@ -1,5 +1,5 @@
1
1
  import type { AstroIntegration } from "astro";
2
- import type { AssistantAdapter, AssistantGatewayAdapter } from "../ai/ask.ts";
2
+ import type { AssistantAdapter, AssistantGatewayAdapter, AssistantOpenAIAdapter } from "../ai/ask.ts";
3
3
  import type { ComponentMarkdown } from "../ai/component-markdown.ts";
4
4
  import type { AnalyticsAdapter } from "../analytics/schema.ts";
5
5
  import type { CaptchaAdapter } from "../captcha/schema.ts";
@@ -1255,9 +1255,11 @@ export type NarrationConfig = boolean | {
1255
1255
  /**
1256
1256
  * Generate audio at build with a speech model:
1257
1257
  * `gateway({ model: "openai/tts-1-hd", voice: "alloy" })` from
1258
- * `blume/ai`. Without it, pages are read with browser voices.
1258
+ * `blume/ai`, or `openai({ model, voice })` for OpenAI or, with a
1259
+ * `baseUrl`, any OpenAI-compatible speech endpoint. Without it, pages
1260
+ * are read with browser voices.
1259
1261
  */
1260
- provider?: AssistantGatewayAdapter;
1262
+ provider?: AssistantGatewayAdapter | AssistantOpenAIAdapter;
1261
1263
  };
1262
1264
  /**
1263
1265
  * Opt-in custom frontmatter keys. Page frontmatter is strictly validated —
@@ -1430,6 +1432,8 @@ export interface BlumeConfig {
1430
1432
  narration?: NarrationConfig;
1431
1433
  /** Header, sidebar, tabs, and switchers. */
1432
1434
  navigation?: NavigationConfig;
1435
+ /** Send `X-Powered-By: Blume` with responses. Defaults to `true`. */
1436
+ poweredBy?: boolean;
1433
1437
  /**
1434
1438
  * Limit how often one reader (by IP address) can call the server routes —
1435
1439
  * the assistant, the API playground proxy, server-side search — with an
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The header that names Blume as the framework behind a response, sent unless
3
+ * `poweredBy` is `false`. The dev server and Blume's runtime middleware
4
+ * (`components/powered-by-middleware.ts`) send it, and so does every host
5
+ * for the built site: static hosts through `deploy/headers.ts`'s rules,
6
+ * server builds through each platform's own mechanism (`deploy/platforms`).
7
+ * It lives apart from those modules so the runtime middleware can import it
8
+ * without pulling in the deploy code.
9
+ */
10
+ export declare const POWERED_BY_HEADERS: {
11
+ "X-Powered-By": string;
12
+ };