From 0449d037235c08d6bd25401279ef7b3d26475cda Mon Sep 17 00:00:00 2001 From: jxom <7336481+jxom@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:07:31 +1000 Subject: [PATCH] feat: enable built-in ai search --- package.json | 4 ++-- pnpm-lock.yaml | 18 ++++++++++++------ pnpm-workspace.yaml | 1 + vocs.config.ts | 17 ++++++++++++++++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index e25ecf16..80ec52bc 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "type": "module", "packageManager": "pnpm@10.28.1", "scripts": { - "dev": "NODE_OPTIONS='--import tsx' vite", + "dev": "node --env-file-if-exists=.env --import=tsx node_modules/vite/bin/vite.js", "build": "tsgo --build && vite build && vite build --config vite.marketing.config.ts", "check": "biome check --write --unsafe .", "check:types": "tsgo --project tsconfig.json --noEmit", @@ -58,7 +58,7 @@ "unplugin-auto-import": "^21.0.0", "unplugin-icons": "^23.0.1", "viem": "^2.53.1", - "vocs": "^2.2.5", + "vocs": "^2.3.0", "wagmi": "3.6.14", "waku": "^1.0.0-beta.0", "webauthx": "~0.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8aebba96..eacd4cbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -133,8 +133,8 @@ importers: specifier: ^2.53.1 version: 2.53.1(typescript@5.9.3)(zod@4.3.6) vocs: - specifier: ^2.2.5 - version: 2.2.5(@cfworker/json-schema@4.1.1)(@types/react@19.2.14)(@vue/compiler-sfc@3.5.38)(change-case@5.4.4)(idb-keyval@6.2.2)(mermaid@11.14.0)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.16(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(waku@1.0.0-beta.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^2.3.0 + version: 2.3.0(@cfworker/json-schema@4.1.1)(@types/react@19.2.14)(@vue/compiler-sfc@3.5.38)(change-case@5.4.4)(idb-keyval@6.2.2)(mermaid@11.14.0)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.16(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(waku@1.0.0-beta.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0)) wagmi: specifier: 3.6.14 version: 3.6.14(@tanstack/query-core@5.99.0)(@tanstack/react-query@5.99.0(react@19.2.6))(@types/react@19.2.14)(accounts@0.10.7)(react@19.2.6)(typescript@5.9.3)(viem@2.53.1(typescript@5.9.3)(zod@4.3.6)) @@ -2674,6 +2674,9 @@ packages: es-module-lexer@2.1.0: resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-module-lexer@2.3.0: + resolution: {integrity: sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==} + es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} @@ -4717,8 +4720,8 @@ packages: jsdom: optional: true - vocs@2.2.5: - resolution: {integrity: sha512-BSRSu4EIeHsUTo3BFP6OW/a26F87mlFW6HQASqQAW3+wB52pQMo/6l8Ui3SmuMiIiUIbkzTEYRi765lXZ0aC6Q==} + vocs@2.3.0: + resolution: {integrity: sha512-pWfoG3J2iUrllEKZi83TkR+53tXl9HAvZ47lPuwH/8r866Hp7B/zBbcaDF2hDK2BCpIsTcZb+EN+yh0ViHph7w==} hasBin: true peerDependencies: '@vocs/twoslash-rust': ^0.1.0 @@ -6710,7 +6713,7 @@ snapshots: '@vitejs/plugin-rsc@0.5.27(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(vite@8.0.16(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - es-module-lexer: 2.1.0 + es-module-lexer: 2.3.0 estree-walker: 3.0.3 magic-string: 0.30.21 react: 19.2.6 @@ -7508,6 +7511,8 @@ snapshots: es-module-lexer@2.1.0: {} + es-module-lexer@2.3.0: {} + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -9981,7 +9986,7 @@ snapshots: transitivePeerDependencies: - msw - vocs@2.2.5(@cfworker/json-schema@4.1.1)(@types/react@19.2.14)(@vue/compiler-sfc@3.5.38)(change-case@5.4.4)(idb-keyval@6.2.2)(mermaid@11.14.0)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.16(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(waku@1.0.0-beta.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0)): + vocs@2.3.0(@cfworker/json-schema@4.1.1)(@types/react@19.2.14)(@vue/compiler-sfc@3.5.38)(change-case@5.4.4)(idb-keyval@6.2.2)(mermaid@11.14.0)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.16(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0))(waku@1.0.0-beta.0(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(react-dom@19.2.6(react@19.2.6))(react-server-dom-webpack@19.2.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(webpack@5.104.1(esbuild@0.27.7)))(react@19.2.6)(terser@5.48.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@base-ui/react': 1.6.0(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@codesandbox/sandpack-react': 2.20.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -10014,6 +10019,7 @@ snapshots: cac: 6.7.14 cva: class-variance-authority@0.7.1 debug: 4.4.3 + es-module-lexer: 2.3.0 esast-util-from-js: 2.0.1 estree-util-value-to-estree: 3.5.0 estree-util-visit: 2.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 722470f2..46a2117c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,6 +13,7 @@ minimumReleaseAgeExclude: - viem - vocs - vite + - es-module-lexer - '@vocs/twoslash-rust' - '@vocs/twoslash-rust-darwin-arm64' - '@vocs/twoslash-rust-linux-x64-gnu' diff --git a/vocs.config.ts b/vocs.config.ts index 576f2672..f85d98df 100644 --- a/vocs.config.ts +++ b/vocs.config.ts @@ -1,4 +1,4 @@ -import { Changelog, defineConfig, McpSource } from 'vocs/config' +import { Changelog, defineConfig, Embedding, McpSource, Reranker, Retriever } from 'vocs/config' import { createFeedbackAdapter } from './src/lib/feedback-adapter' // Only set baseUrl in production — Vocs injects a tag from this value, @@ -64,6 +64,21 @@ export default defineConfig({ description: 'Documentation for the Tempo network and protocol specifications', renderStrategy: 'partial-static', feedback: createFeedbackAdapter(), + ai: { + retriever: process.env.CLOUDFLARE_API_TOKEN + ? Retriever.local({ + embedding: Embedding.cloudflare(), + hybrid: true, + reranker: Reranker.cloudflare(), + sources: [ + { url: 'https://viem.sh/llms.txt', label: 'viem' }, + { url: 'https://wagmi.sh/llms.txt', label: 'wagmi' }, + { url: 'https://mpp.dev/llms.txt', label: 'mpp' }, + { url: 'https://accounts.tempo.xyz/llms.txt', label: 'accounts' }, + ], + }) + : undefined, + }, search: { index: { fields: searchIndexFields,