diff --git a/astro.config.mjs b/astro.config.mjs index 4e59a3eb3..4271d6181 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -120,7 +120,20 @@ export default defineConfig({ ...(!process.env.NETLIFY ? [ starlightLinksValidator({ - exclude: ['/apis/**'], + // Blog listing, tag, and author pages are injected routes rather + // than content entries, so the validator cannot resolve them. + // Individual posts are real entries and stay validated. + exclude: [ + '/apis/**', + '/agentkit/cookbooks/', + '/saaskit/cookbooks/', + '/agentkit/how-to/', + '/saaskit/how-to/', + '/agentkit/cookbooks/tags/**', + '/saaskit/cookbooks/tags/**', + '/agentkit/how-to/tags/**', + '/saaskit/how-to/tags/**', + ], }), ] : []), @@ -140,14 +153,50 @@ export default defineConfig({ }, // No baseUrl — prevents llms.txt generation (already handled by starlight-llms-txt) }), - starlightBlog({ - prefix: 'cookbooks', - rss: false, - metrics: { - readingTime: true, - words: 'total', + // Array form: starlight-blog 0.28+ supports multiple blog instances, one + // per prefix. Posts map to an instance by directory (src/content/docs//). + // `navigation: 'none'` keeps each instance out of the header — with several + // instances the default ('header-end') stacks a link per blog beside the + // theme switcher. Discovery goes through the secondary nav instead. + starlightBlog([ + { + prefix: 'agentkit/cookbooks', + title: 'AgentKit cookbooks', + navigation: 'none', + rss: false, + metrics: { + readingTime: true, + words: 'total', + }, }, - }), + { + prefix: 'saaskit/cookbooks', + title: 'Auth for SaaS cookbooks', + navigation: 'none', + rss: false, + metrics: { + readingTime: true, + words: 'total', + }, + }, + // How-to shelves carry short dashboard and workspace answers. Reading + // time is blog furniture that reads wrong on a two-minute "delete my + // account" answer, so it stays off here. + { + prefix: 'agentkit/how-to', + title: 'AgentKit how-to guides', + navigation: 'none', + rss: false, + metrics: { readingTime: false, words: false }, + }, + { + prefix: 'saaskit/how-to', + title: 'Auth for SaaS how-to guides', + navigation: 'none', + rss: false, + metrics: { readingTime: false, words: false }, + }, + ]), ], head: [ { diff --git a/package.json b/package.json index ac0d848ea..6684b0668 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "react": "^19.2.5", "react-dom": "^19.2.5", "sharp": "^0.35.3", - "starlight-blog": "^0.26.1", + "starlight-blog": "^0.28.0", "starlight-image-zoom": "^0.14.2", "starlight-links-validator": "^0.24.1", "starlight-llms-txt": "^0.10.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 97f2225d4..743a470cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -108,8 +108,8 @@ importers: specifier: ^0.35.3 version: 0.35.3(@types/node@25.6.0) starlight-blog: - specifier: ^0.26.1 - version: 0.26.1(@astrojs/starlight@0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3))(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3)) + specifier: ^0.28.0 + version: 0.28.0(@astrojs/markdown-satteri@0.3.3)(@astrojs/starlight@0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3))(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3) starlight-image-zoom: specifier: ^0.14.2 version: 0.14.2(@astrojs/starlight@0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3)) @@ -3623,10 +3623,6 @@ packages: peerDependencies: astro: ^5.0.0 || ^6.0.0-alpha - astro-remote@0.3.4: - resolution: {integrity: sha512-jL5skNQLA0YBc1R3bVGXyHew3FqGqsT7AgLzWAVeTLzFkwVMUYvs4/lKJSmS7ygcF1GnHnoKG6++8GL9VtWwGQ==} - engines: {node: '>=18.14.1'} - astro-theme-toggle@0.8.1: resolution: {integrity: sha512-cUQDnMpRrGwWQ0C6dj1x3y3e3ULlikvoc6Tb6FkIQkL1Ropyd6jQ/IZ9GdhSogWEVpNodPckOKeItIh89EDwkg==} @@ -5806,31 +5802,6 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked-footnote@1.4.0: - resolution: {integrity: sha512-fZTxAhI1TcLEs5UOjCfYfTHpyKGaWQevbxaGTEA68B51l7i87SctPFtHETYqPkEN0ka5opvy4Dy1l/yXVC+hmg==} - peerDependencies: - marked: '>=7.0.0' - - marked-plaintify@1.1.1: - resolution: {integrity: sha512-r3kMKArhfo2H3lD4ctFq/OJTzM0uNvXHh7FBTI1hMDpf4Ac1djjtq4g8NfTBWMxWLmaEz3KL1jCkLygik3gExA==} - peerDependencies: - marked: '>=13.0.0' - - marked-smartypants@1.1.12: - resolution: {integrity: sha512-Z0QL2GpihbSeG5aaCrQxMEoqvngMftF/gq1SrdlCnbecUSrX3HYgPtCZzCW+OyNe2ideQqaFdxfGryqQX1MBDA==} - peerDependencies: - marked: '>=4 <19' - - marked@12.0.2: - resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} - engines: {node: '>= 18'} - hasBin: true - - marked@17.0.6: - resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==} - engines: {node: '>= 20'} - hasBin: true - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -7130,6 +7101,15 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + schema-dts-lib@1.0.0: + resolution: {integrity: sha512-9MEO5vpQH9JdBioUupqluzxSYxPLjhmqRUudk15adUl/ypnRsM2/M1kN3AmVJQeG7nZqcL68H8JlGqQQT6vy9A==} + engines: {node: '>=14.0.0'} + peerDependencies: + typescript: '>=4.9.5' + + schema-dts@2.0.0: + resolution: {integrity: sha512-t7NoCy3Rn5GHGx6p7s1qIYK/AeIb8ZxJNR9WUNFkwMv2CiiGZBmqqYWc2FlZVm5ZbiHMY4OvBWhj7QtyrFO2Jw==} + secure-json-parse@4.1.0: resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} @@ -7261,10 +7241,6 @@ packages: resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} engines: {node: '>=20'} - smartypants@0.2.2: - resolution: {integrity: sha512-TzobUYoEft/xBtb2voRPryAUIvYguG0V7Tt3de79I1WfXgCwelqVsGuZSnu3GFGRZhXR90AeEYIM+icuB/S06Q==} - hasBin: true - smol-toml@1.6.1: resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} @@ -7322,11 +7298,11 @@ packages: stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - starlight-blog@0.26.1: - resolution: {integrity: sha512-c2aLtkVTNFKHDJrh1DwlxBj+VyOrLqJeHmGkKKHwL6oowUoaqUiC/vyOZLXNmZL1kcYI0hgHDw1t4G/lkg8mZg==} + starlight-blog@0.28.0: + resolution: {integrity: sha512-tKddmNbbUd20lV/m4Giih2RtDEegpnzPbrNdiwgI29XOCzVKXjtt9T9ckxTJU+cxwG1f0ii++J8duN9iBzw7Iw==} engines: {node: '>=22.12.0'} peerDependencies: - '@astrojs/starlight': '>=0.38.0' + '@astrojs/starlight': '>=0.41.0' starlight-image-zoom@0.14.2: resolution: {integrity: sha512-YBvE724gFMiVjObGtXmfIDi3zAxVBsvGukeRXOiWLNnESFOBZFfO9DpC/reHohrCxFrO+5ot0XR8EimbE0LpsA==} @@ -12675,14 +12651,6 @@ snapshots: deterministic-object-hash: 2.0.2 entities: 7.0.1 - astro-remote@0.3.4: - dependencies: - entities: 4.5.0 - marked: 12.0.2 - marked-footnote: 1.4.0(marked@12.0.2) - marked-smartypants: 1.1.12(marked@12.0.2) - ultrahtml: 1.6.0 - astro-theme-toggle@0.8.1: {} astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3): @@ -15151,23 +15119,6 @@ snapshots: markdown-table@3.0.4: {} - marked-footnote@1.4.0(marked@12.0.2): - dependencies: - marked: 12.0.2 - - marked-plaintify@1.1.1(marked@17.0.6): - dependencies: - marked: 17.0.6 - - marked-smartypants@1.1.12(marked@12.0.2): - dependencies: - marked: 12.0.2 - smartypants: 0.2.2 - - marked@12.0.2: {} - - marked@17.0.6: {} - math-intrinsics@1.1.0: {} maxstache-stream@1.0.4: @@ -17020,6 +16971,16 @@ snapshots: scheduler@0.27.0: {} + schema-dts-lib@1.0.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + + schema-dts@2.0.0(typescript@6.0.3): + dependencies: + schema-dts-lib: 1.0.0(typescript@6.0.3) + transitivePeerDependencies: + - typescript + secure-json-parse@4.1.0: {} semver@6.3.1: {} @@ -17240,8 +17201,6 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - smartypants@0.2.2: {} - smol-toml@1.6.1: {} sonic-boom@4.2.1: @@ -17291,26 +17250,27 @@ snapshots: stackframe@1.3.4: {} - starlight-blog@0.26.1(@astrojs/starlight@0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3))(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3)): + starlight-blog@0.28.0(@astrojs/markdown-satteri@0.3.3)(@astrojs/starlight@0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3))(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3): dependencies: '@astrojs/markdown-remark': 7.2.1 - '@astrojs/mdx': 5.0.4(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3)) + '@astrojs/mdx': 7.0.2(@astrojs/markdown-satteri@0.3.3)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3)) '@astrojs/rss': 4.0.19 '@astrojs/starlight': 0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3) - astro-remote: 0.3.4 github-slugger: 2.0.0 hast-util-from-html: 2.0.3 hast-util-to-html: 9.0.5 hast-util-to-string: 3.0.1 - marked: 17.0.6 - marked-plaintify: 1.1.1(marked@17.0.6) mdast-util-mdx-expression: 2.0.1 + satteri: 0.9.4 + schema-dts: 2.0.0(typescript@6.0.3) unist-util-is: 6.0.1 unist-util-remove: 4.0.0 unist-util-visit: 5.1.0 transitivePeerDependencies: + - '@astrojs/markdown-satteri' - astro - supports-color + - typescript starlight-image-zoom@0.14.2(@astrojs/starlight@0.41.3(@astrojs/markdown-remark@7.2.1)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@netlify/blobs@10.7.9)(@types/node@25.6.0)(jiti@2.7.0)(rollup@4.60.1)(terser@5.46.1)(yaml@2.8.3))(typescript@6.0.3)): dependencies: diff --git a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg b/public/d2/docs/agentkit/cookbooks/litellm-agentkit-inbox-triage-0.svg similarity index 99% rename from public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg rename to public/d2/docs/agentkit/cookbooks/litellm-agentkit-inbox-triage-0.svg index afa63f056..abffc50ef 100644 --- a/public/d2/docs/cookbooks/litellm-agentkit-inbox-triage-0.svg +++ b/public/d2/docs/agentkit/cookbooks/litellm-agentkit-inbox-triage-0.svg @@ -1,4 +1,4 @@ -