From 4277e86f5977f8732af399eea3ee72688370b165 Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Tue, 5 May 2026 10:54:50 +0100 Subject: [PATCH 1/4] feat(layer): add o11y for docs, mcp tools and ai assistant --- docs/app/components/content/AssistantDemo.vue | 3 +- docs/content/en/2.concepts/7.observability.md | 309 ++++++++++++++++++ docs/content/fr/2.concepts/7.observability.md | 309 ++++++++++++++++++ .../composables/useAssistantErrorReporter.ts | 55 ++++ .../runtime/components/AssistantPanel.vue | 19 +- .../assistant/runtime/server/api/search.ts | 71 +++- layer/modules/markdown-rewrite.ts | 4 +- layer/modules/skills/index.ts | 7 +- .../runtime/server/routes/skills-files.ts | 35 +- layer/nuxt.config.ts | 17 + layer/package.json | 3 +- layer/server/mcp/tools/get-page.ts | 36 +- layer/server/mcp/tools/list-pages.ts | 20 +- layer/server/plugins/evlog-drain.ts | 88 +++++ layer/server/plugins/evlog-enrich.ts | 26 ++ layer/server/plugins/evlog-keep.ts | 33 ++ layer/server/routes/sitemap.xml.ts | 40 ++- pnpm-lock.yaml | 178 +++++++++- 18 files changed, 1188 insertions(+), 65 deletions(-) create mode 100644 docs/content/en/2.concepts/7.observability.md create mode 100644 docs/content/fr/2.concepts/7.observability.md create mode 100644 layer/app/composables/useAssistantErrorReporter.ts create mode 100644 layer/server/plugins/evlog-drain.ts create mode 100644 layer/server/plugins/evlog-enrich.ts create mode 100644 layer/server/plugins/evlog-keep.ts diff --git a/docs/app/components/content/AssistantDemo.vue b/docs/app/components/content/AssistantDemo.vue index db6f2ec45..802cf3fb7 100644 --- a/docs/app/components/content/AssistantDemo.vue +++ b/docs/app/components/content/AssistantDemo.vue @@ -4,6 +4,7 @@ import { DefaultChatTransport } from 'ai' const config = useRuntimeConfig() const { t, locale } = useDocusI18n() +const { report } = useAssistantErrorReporter() const isEnabled = computed(() => config.public.assistant?.enabled ?? false) const input = ref('') @@ -30,7 +31,7 @@ const chat = isEnabled.value api: config.public.assistant.apiPath, }), onError: (error: Error) => { - console.error('AI Chat error:', error) + report(error, { action: 'assistant.demo' }) }, }) : null diff --git a/docs/content/en/2.concepts/7.observability.md b/docs/content/en/2.concepts/7.observability.md new file mode 100644 index 000000000..10a7c8746 --- /dev/null +++ b/docs/content/en/2.concepts/7.observability.md @@ -0,0 +1,309 @@ +--- +title: Observability +description: See what's happening on your MCP server and AI assistant — which agents are calling, which tools are slow or failing, token usage — and forward everything to Axiom, OTLP, Sentry or any backend. +navigation: + icon: i-lucide-activity +--- + +## Why this page exists + +A docs site looks simple from the outside, but in production it has a lot of moving parts: + +- The **AI assistant** streams answers from a model and calls tools — calls fail, latencies spike, costs grow. +- The **MCP server** is hit by external agents (Claude, Cursor, ChatGPT…) and you don't see what they ask for, or whether they get a useful answer. +- Pages may **404** because of a broken link in another doc. +- The **sitemap** can quietly miss collections after a content refactor. + +Out of the box Docus captures all of this for you and ships nothing externally — events are pretty-printed in your terminal during dev, and silent in production. To get a production view, point Docus at an observability backend and you're done. + +## What's a drain? + +A **drain** is just a destination for your logs. You set one environment variable, and every event that happens on your site (a page request, an AI tool call, a 500 error) is forwarded to that destination. Common destinations: + +- **[Axiom](https://axiom.co)** — searchable log storage with dashboards. +- **OTLP** — the OpenTelemetry standard, supported by Grafana Cloud, Honeycomb, New Relic, Datadog, self-hosted collectors… +- **[Sentry](https://sentry.io)** — error tracking specifically. +- **[Datadog](https://www.datadoghq.com)**, **[HyperDX](https://hyperdx.io)**, **[Better Stack](https://betterstack.com/logs)**, **[PostHog](https://posthog.com)** — also supported. + +Without a drain, events still get pretty-printed in dev and you can `tail` your server output in production. With a drain, you get search, dashboards, alerts. + +## Quick start + +Pick a backend, add the env var, deploy. That's it. + +::tabs + :::tabs-item{label="Axiom" icon="i-simple-icons-axiom"} + ```bash [.env] + NUXT_AXIOM_TOKEN=xaat-... + NUXT_AXIOM_DATASET=docus-logs + ``` + Create a token and dataset at [app.axiom.co](https://app.axiom.co). Events show up within seconds. + ::: + + :::tabs-item{label="OTLP" icon="i-simple-icons-opentelemetry"} + ```bash [.env] + NUXT_OTLP_ENDPOINT=https://otel.example.com:4318 + ``` + Works with any OpenTelemetry collector — Grafana Cloud, Honeycomb, otel-collector, etc. + ::: + + :::tabs-item{label="Sentry" icon="i-simple-icons-sentry"} + ```bash [.env] + NUXT_SENTRY_DSN=https://...@sentry.io/... + ``` + Errors become Sentry issues. Non-error events become breadcrumbs on the active transaction. + ::: + + :::tabs-item{label="Datadog" icon="i-simple-icons-datadog"} + ```bash [.env] + NUXT_DD_API_KEY=... + NUXT_DD_SITE=datadoghq.eu + ``` + ::: + + :::tabs-item{label="Other"} + Docus also auto-detects `NUXT_HYPERDX_API_KEY`, `NUXT_BETTER_STACK_SOURCE_TOKEN`, and `NUXT_POSTHOG_API_KEY`. The full list is in the [evlog adapters reference](https://evlog.dev/docs/adapters). + ::: +:: + +::note +The drain runs in a batched pipeline (50 events / 5s), so it never blocks the response. On Vercel and Cloudflare it uses `waitUntil` so flushing happens after the response is sent. +:: + +## What you'll see in your drain + +### MCP server calls + +Each call to your `/mcp` endpoint records the transport, session, JSON-RPC method and tool name automatically — these are added by `@nuxtjs/mcp-toolkit` whenever `evlog/nuxt` is registered: + +```json +{ + "service": "docus/mcp", + "request": { "method": "POST", "path": "/mcp" }, + "mcp": { + "transport": "streamable-http", + "route": "/mcp", + "method": "tools/call", + "tool": "get-page", + "session_id": "session_abc", + "request_id": 12 + }, + "content": { + "path": "/en/getting-started/installation", + "title": "Installation", + "contentLength": 2148 + }, + "response": { "status": 200, "duration": 84 } +} +``` + +If you set up authentication on the MCP server, `user.id` / `user.email` and `session.id` are also auto-tagged from `event.context.user` and `event.context.session`. See the [mcp-toolkit logging docs](https://mcp-toolkit.nuxt.dev/advanced/logging) for the full schema. + +This tells you which sessions are connected, which pages they fetch, whether they hit 404s, and how fast you respond. Useful when you want to know if your MCP server is being used at all, or to find content gaps (404s coming from agents tell you what's missing). + +### AI assistant conversations + +Each conversation captures the full AI run — model, tokens, tool calls, latency: + +```json +{ + "request": { "path": "/__docus__/assistant" }, + "assistant": { + "siteName": "Docus", + "model": "google/gemini-3-flash", + "tools": ["list-pages", "get-page"] + }, + "ai": { + "model": "google/gemini-3-flash", + "inputTokens": 384, + "outputTokens": 217, + "totalTokens": 601, + "toolCalls": ["list-pages", "get-page"], + "tools": [ + { "name": "list-pages", "durationMs": 92, "success": true }, + { "name": "get-page", "durationMs": 84, "success": true } + ], + "msToFirstChunk": 612, + "tokensPerSecond": 47.2, + "finishReason": "stop" + }, + "response": { "status": 200, "duration": 1840 } +} +``` + +This lets you answer: +- How many conversations happen per day? +- Which tools are slow or fail? +- How long do conversations take, and where is the latency (time-to-first-chunk vs total)? +- What's the token volume, and is it growing? + +#### Going further + +By default, the question text is **not** captured (privacy + payload size) and cost is **not** estimated. If you want either, override the assistant route in your project and add the missing context: + +```typescript [server/api/__docus__/assistant.post.ts] +import { useLogger } from 'evlog' +import { createAILogger } from 'evlog/ai' + +export default defineEventHandler(async (event) => { + const log = useLogger(event) + const ai = createAILogger(log, { + cost: { + 'google/gemini-3-flash': { input: 0.075, output: 0.3 }, // $/1M tokens + }, + }) + + const { messages } = await readBody(event) + const lastUserMessage = messages.findLast?.((m: { role: string }) => m.role === 'user') + + log.set({ + assistant: { + question: typeof lastUserMessage?.content === 'string' + ? lastUserMessage.content.slice(0, 500) + : undefined, + }, + }) + + // ... rest of the handler, using `ai.wrap(model)` as usual +}) +``` + +You then get `ai.estimatedCost` (in dollars) and `assistant.question` on every event. + +### Errors + +Any thrown error is captured with its cause chain, the route it broke on, and any context the handler had attached: + +```json +{ + "request": { "method": "POST", "path": "/mcp" }, + "mcp": { "tool": "get-page", "session_id": "session_xyz" }, + "content": { "path": "/en/typo", "collectionName": "docs_en" }, + "error": { + "message": "Page \"/en/typo\" not found in collection \"docs_en\"", + "why": "No content document matches this path", + "fix": "Call list-pages to discover available paths", + "stack": "..." + }, + "response": { "status": 404, "duration": 12 } +} +``` + +## In dev + +Run `pnpm dev` and any request prints a tree directly in your terminal: + +``` +INFO GET /__docus__/assistant 200 (1840ms) [req_abc] +├─ assistant +│ ├─ model "google/gemini-3-flash" +│ └─ tools ["get-page", "list-pages"] +└─ ai + ├─ inputTokens 384 + ├─ outputTokens 217 + ├─ msToFirstChunk 612 + └─ toolCalls ["list-pages", "get-page"] +``` + +Set `evlog.silent: true` in `nuxt.config.ts` if you want events to flow only to the drain (typical on Vercel where stdout already goes to your platform logs). + +## Customization + +Most users don't need to touch anything beyond the env var. If you do, override defaults in `nuxt.config.ts`: + +```typescript [nuxt.config.ts] +export default defineNuxtConfig({ + evlog: { + env: { service: 'my-docs' }, + sampling: { + // keep 25% of normal info events, all 4xx and any request > 1s + rates: { info: 25 }, + keep: [{ status: 400 }, { duration: 1000 }], + }, + redact: { + paths: ['headers.authorization', 'body.email'], + }, + }, +}) +``` + +Common knobs: + +| Option | When to use it | +|---|---| +| `env.service` | You run several docs sites and want them tagged separately in the drain | +| `silent: true` | Stdout already goes somewhere (Vercel, Cloudflare) — avoid double output | +| `sampling.rates` | High-traffic site, you don't need every single event | +| `sampling.keep` | Always keep slow / errored requests regardless of sampling | +| `redact` | Add custom paths on top of the built-in PII redaction | +| `enabled: false` | Turn the whole thing off | + +## Custom drain (advanced) + +If the env-var detection doesn't fit (multiple drains, internal pipeline, conditional routing), drop a server plugin in your project: + +```typescript [server/plugins/evlog-custom.ts] +import { createAxiomDrain } from 'evlog/axiom' +import { createOTLPDrain } from 'evlog/otlp' + +export default defineNitroPlugin((nitroApp) => { + const axiom = createAxiomDrain({ dataset: 'docs-prod' }) + const otlp = createOTLPDrain({ endpoint: process.env.OTLP_ENDPOINT! }) + + nitroApp.hooks.hook('evlog:drain', async (ctx) => { + await Promise.all([axiom(ctx), otlp(ctx)]) + }) +}) +``` + +The full drain API is documented at [evlog.dev](https://evlog.dev/docs/adapters). + +## Adding context from your own pages + +If you wrote a custom server route or a Vue page that you want to track, the same logger is available: + +```typescript [server/api/contact.post.ts] +import { useLogger, createError } from 'evlog' + +export default defineEventHandler(async (event) => { + const log = useLogger(event) + const body = await readBody(event) + + log.set({ contact: { topic: body.topic } }) + + if (!body.email) { + throw createError({ + message: 'Email is required', + status: 400, + why: 'Form submission missing email field', + }) + } + + await sendEmail(body) + return { ok: true } +}) +``` + +```vue [components/CopyButton.vue] + +``` + +::tip +Client logs print to the browser console by default. To forward them to your drain alongside server events, enable the transport in `nuxt.config.ts`: + +```typescript [nuxt.config.ts] +export default defineNuxtConfig({ + evlog: { + transport: { enabled: true }, + }, +}) +``` + +This adds a small ingest endpoint at `/api/_evlog/ingest` that receives client events and lets them flow through the same drain pipeline as server events. +:: diff --git a/docs/content/fr/2.concepts/7.observability.md b/docs/content/fr/2.concepts/7.observability.md new file mode 100644 index 000000000..c253c3e6a --- /dev/null +++ b/docs/content/fr/2.concepts/7.observability.md @@ -0,0 +1,309 @@ +--- +title: Observabilité +description: Voyez ce qui se passe sur votre serveur MCP et votre assistant IA — quels agents appellent, quels tools sont lents ou échouent, l'usage des tokens — et envoyez tout vers Axiom, OTLP, Sentry ou n'importe quel backend. +navigation: + icon: i-lucide-activity +--- + +## Pourquoi cette page existe + +Un site de docs paraît simple vu de l'extérieur, mais en production il a beaucoup de pièces mobiles : + +- L'**assistant IA** stream des réponses depuis un modèle et appelle des tools — les calls échouent, les latences explosent, les coûts grimpent. +- Le **serveur MCP** est appelé par des agents externes (Claude, Cursor, ChatGPT…) et vous ne voyez ni ce qu'ils demandent, ni s'ils obtiennent une réponse utile. +- Des pages peuvent **404** à cause d'un lien cassé dans une autre doc. +- Le **sitemap** peut silencieusement rater des collections après un refactor de contenu. + +Par défaut Docus capture tout ça pour vous et n'envoie rien à l'extérieur — les events sont pretty-printed dans votre terminal en dev, et silencieux en production. Pour avoir une vue prod, pointez Docus vers un backend d'observabilité et c'est fini. + +## C'est quoi un drain ? + +Un **drain** c'est juste une destination pour vos logs. Vous définissez une variable d'environnement, et chaque event qui se produit sur votre site (une requête de page, un appel de tool IA, une 500) est forwardé vers cette destination. Destinations courantes : + +- **[Axiom](https://axiom.co)** — stockage de logs avec recherche et dashboards. +- **OTLP** — le standard OpenTelemetry, supporté par Grafana Cloud, Honeycomb, New Relic, Datadog, des collectors self-hosted… +- **[Sentry](https://sentry.io)** — error tracking spécifiquement. +- **[Datadog](https://www.datadoghq.com)**, **[HyperDX](https://hyperdx.io)**, **[Better Stack](https://betterstack.com/logs)**, **[PostHog](https://posthog.com)** — également supportés. + +Sans drain, les events sont quand même pretty-printed en dev et vous pouvez `tail` votre output serveur en prod. Avec un drain, vous obtenez recherche, dashboards, alertes. + +## Démarrage rapide + +Choisissez un backend, ajoutez la variable d'env, déployez. C'est tout. + +::tabs + :::tabs-item{label="Axiom" icon="i-simple-icons-axiom"} + ```bash [.env] + NUXT_AXIOM_TOKEN=xaat-... + NUXT_AXIOM_DATASET=docus-logs + ``` + Créez un token et un dataset sur [app.axiom.co](https://app.axiom.co). Les events apparaissent en quelques secondes. + ::: + + :::tabs-item{label="OTLP" icon="i-simple-icons-opentelemetry"} + ```bash [.env] + NUXT_OTLP_ENDPOINT=https://otel.example.com:4318 + ``` + Compatible avec n'importe quel collector OpenTelemetry — Grafana Cloud, Honeycomb, otel-collector, etc. + ::: + + :::tabs-item{label="Sentry" icon="i-simple-icons-sentry"} + ```bash [.env] + NUXT_SENTRY_DSN=https://...@sentry.io/... + ``` + Les erreurs deviennent des issues Sentry. Les events non-error deviennent des breadcrumbs sur la transaction active. + ::: + + :::tabs-item{label="Datadog" icon="i-simple-icons-datadog"} + ```bash [.env] + NUXT_DD_API_KEY=... + NUXT_DD_SITE=datadoghq.eu + ``` + ::: + + :::tabs-item{label="Autres"} + Docus auto-détecte aussi `NUXT_HYPERDX_API_KEY`, `NUXT_BETTER_STACK_SOURCE_TOKEN`, et `NUXT_POSTHOG_API_KEY`. La liste complète est dans la [référence des adapters evlog](https://evlog.dev/docs/adapters). + ::: +:: + +::note +Le drain s'exécute dans une pipeline batchée (50 events / 5s), donc il ne bloque jamais la réponse. Sur Vercel et Cloudflare il utilise `waitUntil` pour flusher après l'envoi de la réponse. +:: + +## Ce que vous verrez dans votre drain + +### Appels du serveur MCP + +Chaque appel à votre endpoint `/mcp` enregistre le transport, la session, la méthode JSON-RPC et le nom du tool automatiquement — ces champs sont ajoutés par `@nuxtjs/mcp-toolkit` dès qu'`evlog/nuxt` est enregistré : + +```json +{ + "service": "docus/mcp", + "request": { "method": "POST", "path": "/mcp" }, + "mcp": { + "transport": "streamable-http", + "route": "/mcp", + "method": "tools/call", + "tool": "get-page", + "session_id": "session_abc", + "request_id": 12 + }, + "content": { + "path": "/en/getting-started/installation", + "title": "Installation", + "contentLength": 2148 + }, + "response": { "status": 200, "duration": 84 } +} +``` + +Si vous mettez en place une authentification sur le serveur MCP, `user.id` / `user.email` et `session.id` sont également auto-tagués depuis `event.context.user` et `event.context.session`. Voir la [doc logging du mcp-toolkit](https://mcp-toolkit.nuxt.dev/advanced/logging) pour le schéma complet. + +Ça vous dit quelles sessions sont connectées, quelles pages elles récupèrent, si elles tombent sur des 404, et la rapidité de votre réponse. Pratique pour savoir si votre serveur MCP est utilisé du tout, ou pour identifier des trous de contenu (les 404 venant d'agents vous disent ce qui manque). + +### Conversations de l'assistant IA + +Chaque conversation capture le run IA complet — modèle, tokens, tool calls, latence : + +```json +{ + "request": { "path": "/__docus__/assistant" }, + "assistant": { + "siteName": "Docus", + "model": "google/gemini-3-flash", + "tools": ["list-pages", "get-page"] + }, + "ai": { + "model": "google/gemini-3-flash", + "inputTokens": 384, + "outputTokens": 217, + "totalTokens": 601, + "toolCalls": ["list-pages", "get-page"], + "tools": [ + { "name": "list-pages", "durationMs": 92, "success": true }, + { "name": "get-page", "durationMs": 84, "success": true } + ], + "msToFirstChunk": 612, + "tokensPerSecond": 47.2, + "finishReason": "stop" + }, + "response": { "status": 200, "duration": 1840 } +} +``` + +Ça vous permet de répondre à : +- Combien de conversations par jour ? +- Quels tools sont lents ou échouent ? +- Combien de temps prennent les conversations, et où est la latence (time-to-first-chunk vs total) ? +- Quel est le volume de tokens, et est-ce que ça augmente ? + +#### Aller plus loin + +Par défaut, le texte de la question n'est **pas** capturé (privacy + taille du payload) et le coût n'est **pas** estimé. Si vous voulez l'un ou l'autre, surchargez la route assistant dans votre projet et ajoutez le contexte manquant : + +```typescript [server/api/__docus__/assistant.post.ts] +import { useLogger } from 'evlog' +import { createAILogger } from 'evlog/ai' + +export default defineEventHandler(async (event) => { + const log = useLogger(event) + const ai = createAILogger(log, { + cost: { + 'google/gemini-3-flash': { input: 0.075, output: 0.3 }, // $/1M tokens + }, + }) + + const { messages } = await readBody(event) + const lastUserMessage = messages.findLast?.((m: { role: string }) => m.role === 'user') + + log.set({ + assistant: { + question: typeof lastUserMessage?.content === 'string' + ? lastUserMessage.content.slice(0, 500) + : undefined, + }, + }) + + // ... reste du handler, en utilisant `ai.wrap(model)` comme d'habitude +}) +``` + +Vous obtenez alors `ai.estimatedCost` (en dollars) et `assistant.question` sur chaque event. + +### Erreurs + +Toute erreur lancée est capturée avec sa chaîne de cause, la route où elle s'est produite, et tout contexte que le handler avait attaché : + +```json +{ + "request": { "method": "POST", "path": "/mcp" }, + "mcp": { "tool": "get-page", "session_id": "session_xyz" }, + "content": { "path": "/fr/typo", "collectionName": "docs_fr" }, + "error": { + "message": "Page \"/fr/typo\" not found in collection \"docs_fr\"", + "why": "No content document matches this path", + "fix": "Call list-pages to discover available paths", + "stack": "..." + }, + "response": { "status": 404, "duration": 12 } +} +``` + +## En développement + +Lancez `pnpm dev` et chaque requête affiche un arbre directement dans votre terminal : + +``` +INFO GET /__docus__/assistant 200 (1840ms) [req_abc] +├─ assistant +│ ├─ model "google/gemini-3-flash" +│ └─ tools ["get-page", "list-pages"] +└─ ai + ├─ inputTokens 384 + ├─ outputTokens 217 + ├─ msToFirstChunk 612 + └─ toolCalls ["list-pages", "get-page"] +``` + +Mettez `evlog.silent: true` dans `nuxt.config.ts` si vous voulez que les events n'aillent que vers le drain (typique sur Vercel où stdout va déjà vers les logs de la plateforme). + +## Personnalisation + +La plupart des utilisateurs n'ont rien à toucher au-delà de la variable d'env. Si vous voulez surcharger les défauts dans `nuxt.config.ts` : + +```typescript [nuxt.config.ts] +export default defineNuxtConfig({ + evlog: { + env: { service: 'my-docs' }, + sampling: { + // garde 25% des events info, tous les 4xx et toute requête > 1s + rates: { info: 25 }, + keep: [{ status: 400 }, { duration: 1000 }], + }, + redact: { + paths: ['headers.authorization', 'body.email'], + }, + }, +}) +``` + +Réglages courants : + +| Option | Quand l'utiliser | +|---|---| +| `env.service` | Vous avez plusieurs sites de docs et voulez les distinguer dans le drain | +| `silent: true` | Stdout va déjà quelque part (Vercel, Cloudflare) — évitez le double output | +| `sampling.rates` | Site à fort trafic, vous n'avez pas besoin de chaque event | +| `sampling.keep` | Toujours garder les requêtes lentes / en erreur peu importe le sampling | +| `redact` | Ajoutez des chemins custom sur la redaction PII de base | +| `enabled: false` | Désactivez complètement | + +## Drain custom (avancé) + +Si la détection par variable d'env ne convient pas (plusieurs drains, pipeline interne, routage conditionnel), ajoutez un server plugin dans votre projet : + +```typescript [server/plugins/evlog-custom.ts] +import { createAxiomDrain } from 'evlog/axiom' +import { createOTLPDrain } from 'evlog/otlp' + +export default defineNitroPlugin((nitroApp) => { + const axiom = createAxiomDrain({ dataset: 'docs-prod' }) + const otlp = createOTLPDrain({ endpoint: process.env.OTLP_ENDPOINT! }) + + nitroApp.hooks.hook('evlog:drain', async (ctx) => { + await Promise.all([axiom(ctx), otlp(ctx)]) + }) +}) +``` + +L'API drain complète est documentée sur [evlog.dev](https://evlog.dev/docs/adapters). + +## Ajouter du contexte depuis vos propres pages + +Si vous avez écrit une route serveur custom ou une page Vue que vous voulez tracker, le même logger est dispo : + +```typescript [server/api/contact.post.ts] +import { useLogger, createError } from 'evlog' + +export default defineEventHandler(async (event) => { + const log = useLogger(event) + const body = await readBody(event) + + log.set({ contact: { topic: body.topic } }) + + if (!body.email) { + throw createError({ + message: 'Email is required', + status: 400, + why: 'Form submission missing email field', + }) + } + + await sendEmail(body) + return { ok: true } +}) +``` + +```vue [components/CopyButton.vue] + +``` + +::tip +Les logs client s'affichent dans la console du navigateur par défaut. Pour les forwarder vers votre drain en même temps que les events serveur, activez le transport dans `nuxt.config.ts` : + +```typescript [nuxt.config.ts] +export default defineNuxtConfig({ + evlog: { + transport: { enabled: true }, + }, +}) +``` + +Ça ajoute un petit endpoint d'ingestion sur `/api/_evlog/ingest` qui reçoit les events client et les fait passer par le même pipeline de drain que les events serveur. +:: diff --git a/layer/app/composables/useAssistantErrorReporter.ts b/layer/app/composables/useAssistantErrorReporter.ts new file mode 100644 index 000000000..1e15f6f35 --- /dev/null +++ b/layer/app/composables/useAssistantErrorReporter.ts @@ -0,0 +1,55 @@ +/** + * Shared client-side error reporter for the assistant. + * + * Uses evlog's `parseError` to extract the structured fields a server may have + * attached (`message`, `status`, `why`, `fix`, `link`), forwards a wide event + * via the client `log` API, and surfaces a toast. + * + * Returns `{ report }` that components call from their `Chat` `onError` hook. + */ +import { parseError } from 'evlog' +import { log } from 'evlog/client' +import type { Toast } from '@nuxt/ui/runtime/composables/useToast.js' + +interface ReportOptions { + /** Surface a toast notification. Defaults to `true`. */ + toast?: boolean + /** Logical action that triggered the error. Stored as `action`. */ + action?: string +} + +export function useAssistantErrorReporter() { + const toast = useToast() as { add: (toast: Partial) => void } + + function report(error: Error, options: ReportOptions = {}) { + const parsed = parseError(error) + const { toast: showToast = true, action = 'assistant.chat' } = options + + log.error({ + action, + message: parsed.message, + assistant: { + status: parsed.status, + why: parsed.why, + }, + stack: error.stack, + }) + + if (showToast) { + const description = parsed.fix + ? `${parsed.message} — ${parsed.fix}` + : parsed.message + + toast.add({ + description, + icon: 'i-lucide-alert-circle', + color: 'error', + duration: 0, + }) + } + + return parsed + } + + return { report } +} diff --git a/layer/modules/assistant/runtime/components/AssistantPanel.vue b/layer/modules/assistant/runtime/components/AssistantPanel.vue index b3385fdb3..63afb4d53 100644 --- a/layer/modules/assistant/runtime/components/AssistantPanel.vue +++ b/layer/modules/assistant/runtime/components/AssistantPanel.vue @@ -15,7 +15,7 @@ const [DefineChatContent, ReuseChatContent] = createReusableTemplate<{ showExpan const { isOpen, isExpanded, isMobile, panelWidth, toggleExpanded, messages, pendingMessage, clearPending, faqQuestions } = useAssistant() const config = useRuntimeConfig() -const toast = useToast() +const { report } = useAssistantErrorReporter() const { t } = useDocusI18n() const input = ref('') @@ -28,22 +28,7 @@ const chat = new Chat({ api: (config.app?.baseURL.replace(/\/$/, '') || '') + config.public.assistant.apiPath, }), onError: (error: Error) => { - const message = (() => { - try { - const parsed = JSON.parse(error.message) - return parsed?.message || error.message - } - catch { - return error.message - } - })() - - toast.add({ - description: message, - icon: 'i-lucide-alert-circle', - color: 'error', - duration: 0, - }) + report(error, { action: 'assistant.panel' }) }, onFinish: () => { messages.value = chat.messages diff --git a/layer/modules/assistant/runtime/server/api/search.ts b/layer/modules/assistant/runtime/server/api/search.ts index f16ebce75..e6463f572 100644 --- a/layer/modules/assistant/runtime/server/api/search.ts +++ b/layer/modules/assistant/runtime/server/api/search.ts @@ -1,6 +1,8 @@ import { streamText, convertToModelMessages, createUIMessageStream, createUIMessageStreamResponse } from 'ai' import type { UIMessageStreamWriter, ToolCallPart, ToolSet } from 'ai' import { createMCPClient } from '@ai-sdk/mcp' +import { useLogger, createError } from 'evlog' +import { createAILogger, createEvlogIntegration } from 'evlog/ai' import type { H3Event } from 'h3' const MAX_STEPS = 10 @@ -27,7 +29,6 @@ function stopWhenResponseComplete({ steps }: { steps: any[] }): boolean { const lastStep = steps.at(-1) if (!lastStep) return false - // Primary condition: stop when model gives a text response without tool calls const hasText = Boolean(lastStep.text && lastStep.text.trim().length > 0) const hasNoToolCalls = !lastStep.toolCalls || lastStep.toolCalls.length === 0 @@ -75,6 +76,11 @@ function getSystemPrompt(siteName: string) { } export default defineEventHandler(async (event) => { + const log = useLogger(event) + const ai = createAILogger(log, { + toolInputs: { maxLength: 200 }, + }) + const { messages } = await readBody(event) const config = useRuntimeConfig() const siteConfig = getSiteConfig(event) @@ -85,18 +91,19 @@ export default defineEventHandler(async (event) => { const isExternalUrl = mcpServer.startsWith('http://') || mcpServer.startsWith('https://') const baseURL = config.app?.baseURL?.replace(/\/$/, '') || '' + log.set({ + assistant: { + mcpServer, + messageCount: Array.isArray(messages) ? messages.length : 0, + }, + }) + let transport: Parameters[0]['transport'] if (isExternalUrl) { - transport = { - type: 'http', - url: mcpServer, - } + transport = { type: 'http', url: mcpServer } } else if (import.meta.dev) { - transport = { - type: 'http', - url: `http://localhost:3000${baseURL}${mcpServer}`, - } + transport = { type: 'http', url: `http://localhost:3000${baseURL}${mcpServer}` } } else { transport = { @@ -106,20 +113,57 @@ export default defineEventHandler(async (event) => { } } - const httpClient = await createMCPClient({ transport }) - const mcpTools = await httpClient.tools() + let httpClient: Awaited> + try { + httpClient = await createMCPClient({ transport }) + } + catch (error) { + throw createError({ + message: 'Failed to connect to MCP server', + status: 502, + why: `MCP transport for "${mcpServer}" rejected the handshake`, + fix: 'Verify the MCP endpoint is reachable and supports the streamable HTTP transport', + cause: error as Error, + }) + } + + let mcpTools: Awaited> + try { + mcpTools = await httpClient.tools() + } + catch (error) { + await httpClient.close() + throw createError({ + message: 'Failed to load MCP tools', + status: 502, + why: 'MCP server returned an error during tools/list', + fix: 'Check that the MCP server is healthy and exposes the tools/list method', + cause: error as Error, + }) + } + + log.set({ assistant: { tools: Object.keys(mcpTools) } }) const stream = createUIMessageStream({ execute: async ({ writer }: { writer: UIMessageStreamWriter }) => { const modelMessages = await convertToModelMessages(messages) const result = streamText({ - model: config.assistant.model, + model: ai.wrap(config.assistant.model), maxOutputTokens: 4000, maxRetries: 2, stopWhen: stopWhenResponseComplete, system: getSystemPrompt(siteName), messages: modelMessages, tools: mcpTools as ToolSet, + experimental_telemetry: { + isEnabled: true, + functionId: 'docus.assistant', + metadata: { + mcpServer, + messageCount: Array.isArray(messages) ? messages.length : 0, + }, + integrations: [createEvlogIntegration(ai)], + }, onStepFinish: ({ toolCalls }: { toolCalls: ToolCallPart[] }) => { if (toolCalls.length === 0) return writer.write({ @@ -137,6 +181,9 @@ export default defineEventHandler(async (event) => { }, }) }, + onError: ({ error }) => { + log.error(error as Error) + }, }) writer.merge(result.toUIMessageStream()) }, diff --git a/layer/modules/markdown-rewrite.ts b/layer/modules/markdown-rewrite.ts index 648da8d56..4170771a1 100644 --- a/layer/modules/markdown-rewrite.ts +++ b/layer/modules/markdown-rewrite.ts @@ -129,8 +129,8 @@ export default defineNuxtModule({ ] routes.push(...docsRoutes) } - catch { - // Skip invalid URLs + catch (error) { + log.warn(`Skipping invalid URL "${url}" in llms.txt: ${(error as Error).message}`) } } diff --git a/layer/modules/skills/index.ts b/layer/modules/skills/index.ts index e03b8370d..14dd83473 100644 --- a/layer/modules/skills/index.ts +++ b/layer/modules/skills/index.ts @@ -70,13 +70,14 @@ export default defineNuxtModule({ }, }) -function parseFrontmatter(content: string): { name?: string, description?: string } | null { +function parseFrontmatter(content: string, source: string): { name?: string, description?: string } | null { const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/) if (!match?.[1]) return null try { return parseYaml(match[1]) } - catch { + catch (error) { + log.warn(`Skipping skill at "${source}": invalid YAML frontmatter (${(error as Error).message})`) return null } } @@ -125,7 +126,7 @@ async function scanSkills(skillsDir: string): Promise { if (!existsSync(skillMdPath)) continue const content = await readFile(skillMdPath, 'utf-8') - const frontmatter = parseFrontmatter(content) + const frontmatter = parseFrontmatter(content, skillMdPath) if (!frontmatter?.description) { log.warn(`Skipping skill "${entry.name}": missing description in SKILL.md frontmatter`) diff --git a/layer/modules/skills/runtime/server/routes/skills-files.ts b/layer/modules/skills/runtime/server/routes/skills-files.ts index 17d912e58..901064cfc 100644 --- a/layer/modules/skills/runtime/server/routes/skills-files.ts +++ b/layer/modules/skills/runtime/server/routes/skills-files.ts @@ -1,3 +1,5 @@ +import { useLogger, createError } from 'evlog' + const CONTENT_TYPES: Record = { '.md': 'text/markdown; charset=utf-8', '.json': 'application/json; charset=utf-8', @@ -16,32 +18,57 @@ function getContentType(path: string): string { } export default defineEventHandler(async (event) => { + const log = useLogger(event) const url = getRequestURL(event) const prefix = '/.well-known/skills/' const idx = url.pathname.indexOf(prefix) if (idx === -1) { - throw createError({ statusCode: 404, statusMessage: 'Not Found' }) + throw createError({ + message: 'Not Found', + status: 404, + why: `Request path "${url.pathname}" does not contain "${prefix}"`, + }) } const filePath = decodeURIComponent(url.pathname.slice(idx + prefix.length)) if (!filePath || filePath.includes('..')) { - throw createError({ statusCode: 400, statusMessage: 'Bad Request' }) + log.warn(`Skills: rejected suspicious path "${filePath}"`) + throw createError({ + message: 'Bad Request', + status: 400, + why: 'Path traversal attempts (..) are not allowed', + }) } const { skills } = useRuntimeConfig(event) const skillName = filePath.split('/')[0] + + log.set({ skills: { name: skillName, file: filePath } }) + if (!skills.catalog.some((s: { name: string }) => s.name === skillName)) { - throw createError({ statusCode: 404, statusMessage: 'Not Found' }) + throw createError({ + message: 'Not Found', + status: 404, + why: `Skill "${skillName}" is not registered in the catalog`, + fix: 'Add a SKILL.md under the configured skills/ directory', + }) } const storage = useStorage('assets:skills') const content = await storage.getItemRaw(filePath) if (!content) { - throw createError({ statusCode: 404, statusMessage: 'Not Found' }) + throw createError({ + message: 'Not Found', + status: 404, + why: `File "${filePath}" is not bundled in the skills storage`, + fix: 'Ensure the file exists in the skills directory and rebuild', + }) } + log.set({ skills: { name: skillName, file: filePath, contentLength: content.length } }) + setResponseHeader(event, 'content-type', getContentType(filePath)) setResponseHeader(event, 'cache-control', 'public, max-age=3600') diff --git a/layer/nuxt.config.ts b/layer/nuxt.config.ts index 5a5267dca..5d1b6c689 100644 --- a/layer/nuxt.config.ts +++ b/layer/nuxt.config.ts @@ -21,6 +21,7 @@ export default defineNuxtConfig({ dir: join(nuxt.options.srcDir, 'assets/icons'), }) }, + 'evlog/nuxt', '@nuxt/ui', '@nuxt/content', '@nuxt/image', @@ -108,6 +109,22 @@ export default defineNuxtConfig({ nitroConfig.prerender.routes.push('/sitemap.xml') }, }, + evlog: { + env: { service: 'docus' }, + exclude: [ + '/_nuxt/**', + '/_ipx/**', + '/_content/**', + '/_fonts/**', + '/__nuxt_devtools__/**', + '/__nuxt_island/**', + '/__nuxt_error', + '__nuxt_studio/**', + ], + routes: { + '/__docus__/assistant': { service: 'docus/assistant' }, + }, + }, icon: { customCollections: [ { diff --git a/layer/package.json b/layer/package.json index 2fe25fc3d..8296624d2 100644 --- a/layer/package.json +++ b/layer/package.json @@ -34,7 +34,7 @@ "@nuxt/kit": "^4.4.2", "@nuxt/ui": "^4.7.1", "@nuxtjs/i18n": "^10.2.4", - "@nuxtjs/mcp-toolkit": "^0.13.4", + "@nuxtjs/mcp-toolkit": "^0.16.1", "@nuxtjs/mdc": "^0.21.1", "@nuxtjs/robots": "^6.0.7", "@shikijs/core": "^4.0.2", @@ -45,6 +45,7 @@ "@vueuse/core": "^14.2.1", "ai": "6.0.168", "defu": "^6.1.7", + "evlog": "^2.16.0", "exsolve": "^1.0.8", "git-url-parse": "^16.1.0", "motion-v": "^2.2.1", diff --git a/layer/server/mcp/tools/get-page.ts b/layer/server/mcp/tools/get-page.ts index 5c5bcb1b8..b3e868d6b 100644 --- a/layer/server/mcp/tools/get-page.ts +++ b/layer/server/mcp/tools/get-page.ts @@ -1,6 +1,7 @@ import { z } from 'zod' import { queryCollection } from '@nuxt/content/server' import type { Collections } from '@nuxt/content' +import { useLogger, createError } from 'evlog' import { getAvailableLocales, getCollectionFromPath } from '../../utils/content' import { inferSiteURL } from '../../../utils/meta' @@ -33,6 +34,7 @@ WORKFLOW: This tool returns the complete page content including title, descripti cache: '1h', handler: async ({ path }) => { const event = useEvent() + const log = useLogger(event) const config = useRuntimeConfig(event).public const siteUrl = getRequestURL(event).origin || inferSiteURL() @@ -41,6 +43,8 @@ WORKFLOW: This tool returns the complete page content including title, descripti ? getCollectionFromPath(path, availableLocales) : 'docs' + log.set({ content: { path, collectionName } }) + try { const page = await queryCollection(event, collectionName as keyof Collections) .where('path', '=', path) @@ -48,11 +52,27 @@ WORKFLOW: This tool returns the complete page content including title, descripti .first() if (!page) { - throw createError({ statusCode: 404, message: 'Page not found' }) + const err = createError({ + message: `Page "${path}" not found in collection "${collectionName}"`, + status: 404, + why: 'No content document matches this path', + fix: 'Call list-pages to discover available paths or check the locale prefix', + }) + log.error(err) + throw err } const content = await event.$fetch(`/raw${path}.md`) + log.set({ + content: { + path, + collectionName, + title: page.title, + contentLength: content?.length ?? 0, + }, + }) + return { title: page.title, path: page.path, @@ -62,8 +82,18 @@ WORKFLOW: This tool returns the complete page content including title, descripti } } catch (error) { - if ((error as { statusCode?: number }).statusCode === 404) throw error - throw createError({ statusCode: 500, message: 'Failed to get page' }) + const status = (error as { status?: number, statusCode?: number }).status + ?? (error as { statusCode?: number }).statusCode + if (status === 404) throw error + const err = createError({ + message: 'Failed to get page', + status: 500, + why: `Underlying query for "${path}" in "${collectionName}" failed`, + fix: 'Check that the content collection is built and the path is correctly prefixed', + cause: error as Error, + }) + log.error(err) + throw err } }, }) diff --git a/layer/server/mcp/tools/list-pages.ts b/layer/server/mcp/tools/list-pages.ts index 0123178f6..8d69e1286 100644 --- a/layer/server/mcp/tools/list-pages.ts +++ b/layer/server/mcp/tools/list-pages.ts @@ -1,6 +1,7 @@ import { z } from 'zod' import { queryCollection } from '@nuxt/content/server' import type { Collections } from '@nuxt/content' +import { useLogger, createError } from 'evlog' import { getCollectionsToQuery, getAvailableLocales } from '../../utils/content' import { inferSiteURL } from '../../../utils/meta' @@ -39,12 +40,15 @@ OUTPUT: Returns a structured list with: cache: '1h', handler: async ({ locale }) => { const event = useEvent() + const log = useLogger(event) const config = useRuntimeConfig(event).public const siteUrl = getRequestURL(event).origin || inferSiteURL() const availableLocales = getAvailableLocales(config) const collections = getCollectionsToQuery(locale, availableLocales) + log.set({ content: { locale: locale ?? null, collections } }) + try { const allPages = await Promise.all( collections.map(async (collectionName) => { @@ -62,10 +66,20 @@ OUTPUT: Returns a structured list with: }), ) - return allPages.flat() + const flat = allPages.flat() + log.set({ content: { locale: locale ?? null, collections, pageCount: flat.length } }) + return flat } - catch { - throw createError({ statusCode: 500, message: 'Failed to list pages' }) + catch (error) { + const err = createError({ + message: 'Failed to list pages', + status: 500, + why: `Querying collections [${collections.join(', ')}] failed`, + fix: 'Verify @nuxt/content collections are built and locale codes match content directories', + cause: error as Error, + }) + log.error(err) + throw err } }, }) diff --git a/layer/server/plugins/evlog-drain.ts b/layer/server/plugins/evlog-drain.ts new file mode 100644 index 000000000..33ae317eb --- /dev/null +++ b/layer/server/plugins/evlog-drain.ts @@ -0,0 +1,88 @@ +/** + * Auto-wires an evlog drain based on which observability env var is present. + * + * Detection order (first match wins): + * - NUXT_AXIOM_TOKEN → Axiom + * - NUXT_OTLP_ENDPOINT / OTEL_EXPORTER_OTLP_ENDPOINT → OTLP + * - NUXT_SENTRY_DSN → Sentry + * - NUXT_DD_API_KEY → Datadog + * - NUXT_HYPERDX_API_KEY → HyperDX + * - NUXT_BETTER_STACK_SOURCE_TOKEN → Better Stack + * - NUXT_POSTHOG_API_KEY → PostHog + * + * Falls back to a no-op when none is configured. Consumers can also register + * their own drain via `nitroApp.hooks.hook('evlog:drain', drain)` from another + * plugin — multiple drains compose freely. + * + * Drains are wrapped in `createDrainPipeline` so they batch and retry on + * transient failures instead of blocking the response. + */ +import { createDrainPipeline } from 'evlog/pipeline' +import type { PipelineDrainFn } from 'evlog/pipeline' +import type { DrainContext } from 'evlog' + +type RawDrain = (ctx: DrainContext | DrainContext[]) => void | Promise + +const wrap = createDrainPipeline({ + batch: { size: 50, intervalMs: 5_000 }, +}) + +function pipelined(adapter: RawDrain): PipelineDrainFn { + return wrap(async (batch) => { + await adapter(batch) + }) +} + +async function resolveDrain(): Promise | null> { + const env = process.env + + if (env.NUXT_AXIOM_TOKEN || env.AXIOM_TOKEN || env.NUXT_AXIOM_API_KEY || env.AXIOM_API_KEY) { + const { createAxiomDrain } = await import('evlog/axiom') + return pipelined(createAxiomDrain()) + } + + if (env.NUXT_OTLP_ENDPOINT || env.OTEL_EXPORTER_OTLP_ENDPOINT || env.OTLP_ENDPOINT) { + const { createOTLPDrain } = await import('evlog/otlp') + return pipelined(createOTLPDrain()) + } + + if (env.NUXT_SENTRY_DSN || env.SENTRY_DSN) { + const { createSentryDrain } = await import('evlog/sentry') + return pipelined(createSentryDrain()) + } + + if (env.NUXT_DD_API_KEY || env.DD_API_KEY || env.DATADOG_API_KEY) { + const { createDatadogDrain } = await import('evlog/datadog') + return pipelined(createDatadogDrain()) + } + + if (env.NUXT_HYPERDX_API_KEY || env.HYPERDX_API_KEY) { + const { createHyperDXDrain } = await import('evlog/hyperdx') + return pipelined(createHyperDXDrain()) + } + + if (env.NUXT_BETTER_STACK_SOURCE_TOKEN || env.BETTER_STACK_SOURCE_TOKEN) { + const { createBetterStackDrain } = await import('evlog/better-stack') + return pipelined(createBetterStackDrain()) + } + + if (env.NUXT_POSTHOG_API_KEY || env.POSTHOG_API_KEY) { + const { createPostHogDrain } = await import('evlog/posthog') + return pipelined(createPostHogDrain()) + } + + return null +} + +export default defineNitroPlugin(async (nitroApp) => { + if (import.meta.prerender) return + + const drain = await resolveDrain() + if (!drain) return + + nitroApp.hooks.hook('evlog:drain', drain) + + nitroApp.hooks.hook('close', async () => { + await drain.flush() + }) +}) diff --git a/layer/server/plugins/evlog-enrich.ts b/layer/server/plugins/evlog-enrich.ts new file mode 100644 index 000000000..3cb5181d3 --- /dev/null +++ b/layer/server/plugins/evlog-enrich.ts @@ -0,0 +1,26 @@ +/** + * Adds context enrichers to every emitted wide event: + * - user-agent parsed browser/os/device fields + * - request size body length on writes + * - geo country/region from CDN headers when present + * + * Runs after the handler resolves and before the drain executes, so + * downstream consumers (Axiom, OTLP, Sentry…) see fully enriched events. + */ +import { + createUserAgentEnricher, + createRequestSizeEnricher, + createGeoEnricher, +} from 'evlog/enrichers' + +const enrichers = [ + createUserAgentEnricher(), + createRequestSizeEnricher(), + createGeoEnricher(), +] + +export default defineNitroPlugin((nitroApp) => { + nitroApp.hooks.hook('evlog:enrich', (ctx) => { + for (const enricher of enrichers) enricher(ctx) + }) +}) diff --git a/layer/server/plugins/evlog-keep.ts b/layer/server/plugins/evlog-keep.ts new file mode 100644 index 000000000..bbb220f7e --- /dev/null +++ b/layer/server/plugins/evlog-keep.ts @@ -0,0 +1,33 @@ +/** + * Tail sampling: force-keep events that matter regardless of any sampling + * configured by the consumer. + * + * - Errors (status >= 400) + * - Slow requests (> 2s) + * - MCP and assistant routes (low traffic, high signal) + * + * This runs *after* head sampling decisions, so even with aggressive `info` + * rate limits in `evlog.sampling.rates`, these stay in the drain. + */ +import type { TailSamplingContext } from 'evlog' + +const SLOW_REQUEST_MS = 2_000 +const HIGH_SIGNAL_PATHS = ['/mcp', '/__docus__/'] + +export default defineNitroPlugin((nitroApp) => { + nitroApp.hooks.hook('evlog:emit:keep', (ctx: TailSamplingContext) => { + if (ctx.status && ctx.status >= 400) { + ctx.shouldKeep = true + return + } + + if (ctx.duration && ctx.duration > SLOW_REQUEST_MS) { + ctx.shouldKeep = true + return + } + + if (ctx.path && HIGH_SIGNAL_PATHS.some(prefix => ctx.path!.startsWith(prefix))) { + ctx.shouldKeep = true + } + }) +}) diff --git a/layer/server/routes/sitemap.xml.ts b/layer/server/routes/sitemap.xml.ts index 92978caba..f77c53bb8 100644 --- a/layer/server/routes/sitemap.xml.ts +++ b/layer/server/routes/sitemap.xml.ts @@ -1,4 +1,5 @@ import { queryCollection } from '@nuxt/content/server' +import { useLogger } from 'evlog' import { getAvailableLocales, getCollectionsToQuery } from '../utils/content' import { inferSiteURL } from '../../utils/meta' @@ -7,7 +8,16 @@ interface SitemapUrl { lastmod?: string } +function isMissingCollectionError(error: unknown): boolean { + const message = (error as { message?: string }).message ?? '' + const code = (error as { code?: string }).code + return code === 'COLLECTION_NOT_FOUND' + || /no such (?:table|collection)/i.test(message) + || /collection .* (?:does not exist|not found)/i.test(message) +} + export default defineEventHandler(async (event) => { + const log = useLogger(event) const config = useRuntimeConfig(event) const siteUrl = inferSiteURL() || '' @@ -23,7 +33,10 @@ export default defineEventHandler(async (event) => { collections.push('landing') } + log.set({ sitemap: { locales: availableLocales, collectionCount: collections.length } }) + const urls: SitemapUrl[] = [] + const failedCollections: string[] = [] for (const collection of collections) { try { @@ -33,29 +46,36 @@ export default defineEventHandler(async (event) => { const meta = page as Record const pagePath = page.path || '/' - // Skip pages with sitemap: false in frontmatter if (meta.sitemap === false) continue - - // Skip .navigation files (used for navigation configuration) if (pagePath.endsWith('.navigation') || pagePath.includes('/.navigation')) continue - const urlEntry: SitemapUrl = { - loc: pagePath, - } + const urlEntry: SitemapUrl = { loc: pagePath } - // Add lastmod if available (modifiedAt from content) if (meta.modifiedAt && typeof meta.modifiedAt === 'string') { - urlEntry.lastmod = meta.modifiedAt.split('T')[0] // Use date part only (YYYY-MM-DD) + urlEntry.lastmod = meta.modifiedAt.split('T')[0] } urls.push(urlEntry) } } - catch { - // Collection might not exist, skip it + catch (error) { + if (isMissingCollectionError(error)) continue + failedCollections.push(collection) + log.error(error as Error, { + sitemap: { failedCollection: collection }, + }) } } + log.set({ + sitemap: { + locales: availableLocales, + collectionCount: collections.length, + urlCount: urls.length, + failedCollections, + }, + }) + const sitemap = generateSitemap(urls, siteUrl) setResponseHeader(event, 'content-type', 'application/xml') diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f908be671..1fd1126eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -139,8 +139,8 @@ importers: specifier: ^10.2.4 version: 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3)) '@nuxtjs/mcp-toolkit': - specifier: ^0.13.4 - version: 0.13.4(h3@1.15.11)(magicast@0.5.2)(zod@4.3.6) + specifier: ^0.16.1 + version: 0.16.1(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) '@nuxtjs/mdc': specifier: ^0.21.1 version: 0.21.1(magicast@0.5.2) @@ -174,6 +174,9 @@ importers: defu: specifier: ^6.1.7 version: 6.1.7 + evlog: + specifier: ^2.16.0 + version: 2.16.0(@nuxt/kit@4.4.2(magicast@0.5.2))(ai@6.0.168(zod@4.3.6))(express@5.2.1)(h3@1.15.11)(hono@4.12.9)(ofetch@1.5.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) exsolve: specifier: ^1.0.8 version: 1.0.8 @@ -1426,6 +1429,10 @@ packages: resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==} engines: {node: '>=18.12.0'} + '@nuxt/kit@4.4.4': + resolution: {integrity: sha512-oy4fAeMkyz7gelnalDQLPm8QZRN+c5c/Eh/M6oFgPx86jnA8m6xeOlONpJN2dk0GhcJwJYuN/kmzBffZ93WXPQ==} + engines: {node: '>=18.12.0'} + '@nuxt/nitro-server@4.4.2': resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1516,18 +1523,27 @@ packages: resolution: {integrity: sha512-T5nN7hT/tbExant+CeXtKXs9GbjWsEWnymCHJyU3Ujxfcw1WQsZZP6tyEtFRhkwjBwy8m4mj7GtU2qUCggUkkg==} engines: {node: '>=20.11.1'} - '@nuxtjs/mcp-toolkit@0.13.4': - resolution: {integrity: sha512-cjV0uCEsFXK8hmqx7TSvhq3oQQ77ECwN07Prun6TSQhEB0ZbkSTvsNwPLuw4+cI13Cbm/G3k9jfKsXhmU65p3Q==} + '@nuxtjs/mcp-toolkit@0.16.1': + resolution: {integrity: sha512-dHGaBLs9dFI9m9l8CZcg9JtkBkV9sw/wRC6iqTZ9HcRWO5RciZxnH9XlBIAxXTgHLdMRQTv48ZgImT2bP41U8g==} peerDependencies: - agents: '>=0.9.0' + '@vue/compiler-sfc': ^3.5.33 + agents: '>=0.12.3' h3: '>=1.15.11' secure-exec: '>=0.2.1' + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.5.33 zod: ^4.1.13 peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true agents: optional: true secure-exec: optional: true + vite: + optional: true + vue: + optional: true '@nuxtjs/mdc@0.21.1': resolution: {integrity: sha512-DIeUD7IahWVUSoZExysxH9dX51Io6hcQYgGJODq0cMTGqaoDD32lRfHBJxYUmy+sUCV1+1hfa2ixspgJgEd2GA==} @@ -2499,6 +2515,9 @@ packages: '@rolldown/pluginutils@1.0.0-rc.12': resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rolldown/pluginutils@1.0.0-rc.13': + resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==} + '@rolldown/pluginutils@1.0.0-rc.2': resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} @@ -3508,6 +3527,13 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 + '@vitejs/plugin-vue@6.0.6': + resolution: {integrity: sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + '@volar/language-core@2.4.28': resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} @@ -4795,6 +4821,59 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + evlog@2.16.0: + resolution: {integrity: sha512-qpIt+5+5hY8hxpca4vFTxR3x5jcnEC5DQh9OffR1mZWFfX2wui7ksh9I0AUUxRNP8ttlU/QN/JPVbSj5nepJ9w==} + peerDependencies: + '@nestjs/common': '>=11.1.19' + '@nuxt/kit': ^4.4.2 + '@tanstack/start-client-core': ^1.167.20 + ai: '>=6.0.168' + elysia: '>=1.4.28' + express: '>=5.2.1' + fastify: '>=5.8.5' + h3: ^1.15.11 + hono: '' + next: '>=16.2.4' + nitro: ^3.0.260311-beta + nitropack: ^2.13.3 + ofetch: ^1.5.1 + react: '>=19.2.5' + react-router: '>=7.14.2' + vite: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@nestjs/common': + optional: true + '@nuxt/kit': + optional: true + '@tanstack/start-client-core': + optional: true + ai: + optional: true + elysia: + optional: true + express: + optional: true + fastify: + optional: true + h3: + optional: true + hono: + optional: true + next: + optional: true + nitro: + optional: true + nitropack: + optional: true + ofetch: + optional: true + react: + optional: true + react-router: + optional: true + vite: + optional: true + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -6395,6 +6474,9 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -7405,6 +7487,9 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -7702,6 +7787,16 @@ packages: '@nuxt/kit': optional: true + vite-plugin-singlefile@2.3.3: + resolution: {integrity: sha512-XVnGH0QzbOa8fxRSsHdCarVN1BSBXNi7uLMQYlrGRN5apdHkk62XQWRJhVever0lnfuyBkwn+kvVChdm/OoOUg==} + engines: {node: '>18.0.0'} + peerDependencies: + rollup: ^4.59.0 + vite: ^5.4.21 || ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + rollup: + optional: true + vite-plugin-vue-tracer@1.3.0: resolution: {integrity: sha512-Cgfce6VikzOw5MUJTpeg50s5rRjzU1Vr61ZjuHunVVHLjZZ5AUlgyExHthZ3r59vtoz9W2rDt23FYG81avYBKw==} peerDependencies: @@ -9112,7 +9207,7 @@ snapshots: '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/kit': 4.4.4(magicast@0.5.2) tinyexec: 1.1.1 vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: @@ -9386,6 +9481,31 @@ snapshots: transitivePeerDependencies: - magicast + '@nuxt/kit@4.4.4(magicast@0.5.2)': + dependencies: + c12: 3.3.4(magicast@0.5.2) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.0.8 + ignore: 7.0.5 + jiti: 2.6.1 + klona: 2.0.6 + mlly: 1.8.2 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + semver: 7.7.4 + tinyglobby: 0.2.16 + ufo: 1.6.4 + unctx: 2.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(typescript@6.0.3)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) @@ -9717,16 +9837,23 @@ snapshots: - uploadthing - vue - '@nuxtjs/mcp-toolkit@0.13.4(h3@1.15.11)(magicast@0.5.2)(zod@4.3.6)': + '@nuxtjs/mcp-toolkit@0.16.1(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6)': dependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/kit': 4.4.4(magicast@0.5.2) + '@vitejs/plugin-vue': 6.0.6(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) h3: 1.15.11 tinyglobby: 0.2.16 + vite-plugin-singlefile: 2.3.3(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) zod: 4.3.6 + optionalDependencies: + '@vue/compiler-sfc': 3.5.32 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.3) transitivePeerDependencies: - '@cfworker/json-schema' - magicast + - rollup - supports-color '@nuxtjs/mdc@0.21.1(magicast@0.5.2)': @@ -10374,6 +10501,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.12': {} + '@rolldown/pluginutils@1.0.0-rc.13': {} + '@rolldown/pluginutils@1.0.0-rc.2': {} '@rollup/plugin-alias@6.0.0(rollup@4.60.1)': @@ -11225,6 +11354,12 @@ snapshots: vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.3) + '@vitejs/plugin-vue@6.0.6(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.13 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.3) + '@volar/language-core@2.4.28': dependencies: '@volar/source-map': 2.4.28 @@ -12619,6 +12754,16 @@ snapshots: dependencies: eventsource-parser: 3.0.6 + evlog@2.16.0(@nuxt/kit@4.4.2(magicast@0.5.2))(ai@6.0.168(zod@4.3.6))(express@5.2.1)(h3@1.15.11)(hono@4.12.9)(ofetch@1.5.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + optionalDependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + ai: 6.0.168(zod@4.3.6) + express: 5.2.1 + h3: 1.15.11 + hono: 4.12.9 + ofetch: 1.5.1 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + execa@8.0.1: dependencies: cross-spawn: 7.0.6 @@ -14336,7 +14481,7 @@ snapshots: nuxt-site-config-kit@4.0.8(magicast@0.5.2)(vue@3.5.31(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/kit': 4.4.4(magicast@0.5.2) site-config-stack: 4.0.8(vue@3.5.31(typescript@6.0.3)) std-env: 4.1.0 ufo: 1.6.3 @@ -14967,6 +15112,12 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + pluralize@8.0.0: {} possible-typed-array-names@1.1.0: {} @@ -16193,6 +16344,8 @@ snapshots: ufo@1.6.3: {} + ufo@1.6.4: {} + uglify-js@3.19.3: optional: true @@ -16518,6 +16671,13 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-singlefile@2.3.3(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + micromatch: 4.0.8 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + optionalDependencies: + rollup: 4.60.1 + vite-plugin-vue-tracer@1.3.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)): dependencies: estree-walker: 3.0.3 From 46de6ae51597940085fc1c0a70d27f1d6e5cd98b Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Tue, 5 May 2026 15:30:34 +0100 Subject: [PATCH 2/4] fix axiom logo --- docs/content/en/2.concepts/7.observability.md | 2 +- docs/content/fr/2.concepts/7.observability.md | 2 +- layer/app/assets/icons/axiom.svg | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 layer/app/assets/icons/axiom.svg diff --git a/docs/content/en/2.concepts/7.observability.md b/docs/content/en/2.concepts/7.observability.md index 10a7c8746..c4f578f89 100644 --- a/docs/content/en/2.concepts/7.observability.md +++ b/docs/content/en/2.concepts/7.observability.md @@ -32,7 +32,7 @@ Without a drain, events still get pretty-printed in dev and you can `tail` your Pick a backend, add the env var, deploy. That's it. ::tabs - :::tabs-item{label="Axiom" icon="i-simple-icons-axiom"} + :::tabs-item{label="Axiom" icon="i-custom-axiom"} ```bash [.env] NUXT_AXIOM_TOKEN=xaat-... NUXT_AXIOM_DATASET=docus-logs diff --git a/docs/content/fr/2.concepts/7.observability.md b/docs/content/fr/2.concepts/7.observability.md index c253c3e6a..814acbcc6 100644 --- a/docs/content/fr/2.concepts/7.observability.md +++ b/docs/content/fr/2.concepts/7.observability.md @@ -32,7 +32,7 @@ Sans drain, les events sont quand même pretty-printed en dev et vous pouvez `ta Choisissez un backend, ajoutez la variable d'env, déployez. C'est tout. ::tabs - :::tabs-item{label="Axiom" icon="i-simple-icons-axiom"} + :::tabs-item{label="Axiom" icon="i-custom-axiom"} ```bash [.env] NUXT_AXIOM_TOKEN=xaat-... NUXT_AXIOM_DATASET=docus-logs diff --git a/layer/app/assets/icons/axiom.svg b/layer/app/assets/icons/axiom.svg new file mode 100644 index 000000000..42de60636 --- /dev/null +++ b/layer/app/assets/icons/axiom.svg @@ -0,0 +1 @@ + \ No newline at end of file From 8c565d0eefadfb03229620f13ea4f0a43c4154ea Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Tue, 19 May 2026 18:24:05 +0100 Subject: [PATCH 3/4] test to fix evlog warning --- layer/package.json | 2 +- pnpm-lock.yaml | 645 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 566 insertions(+), 81 deletions(-) diff --git a/layer/package.json b/layer/package.json index 0c3fd86f4..d577b2c8f 100644 --- a/layer/package.json +++ b/layer/package.json @@ -34,7 +34,7 @@ "@nuxt/kit": "^4.4.2", "@nuxt/ui": "^4.7.1", "@nuxtjs/i18n": "^10.2.4", - "@nuxtjs/mcp-toolkit": "^0.16.1", + "@nuxtjs/mcp-toolkit": "https://pkg.pr.new/@nuxtjs/mcp-toolkit@263", "@nuxtjs/mdc": "^0.21.1", "@nuxtjs/robots": "^6.0.7", "@shikijs/core": "^4.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95452d9eb..731b85a96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,7 +71,7 @@ importers: version: 25.6.0 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.3) + version: 8.5.1(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.3) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -80,22 +80,22 @@ importers: dependencies: '@nuxt/ui': specifier: ^4.7.1 - version: 4.7.1(@internationalized/date@3.12.0)(@internationalized/number@3.6.5)(@nuxt/content@3.13.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6) + version: 4.7.1(@internationalized/date@3.12.0)(@internationalized/number@3.6.5)(@nuxt/content@3.13.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6) '@nuxtjs/i18n': specifier: ^10.2.4 - version: 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3)) + version: 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3)) '@vercel/analytics': specifier: ^2.0.1 - version: 2.0.1(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + version: 2.0.1(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) '@vercel/speed-insights': specifier: ^2.0.0 - version: 2.0.0(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + version: 2.0.0(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) docus: specifier: workspace:* version: link:../layer nuxt: specifier: 4.4.2 - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) nuxt-studio: specifier: ^1.6.0 version: 1.6.0(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(vue@3.5.31(typescript@6.0.3)) @@ -134,19 +134,19 @@ importers: version: 4.4.2(magicast@0.5.2) '@nuxt/ui': specifier: ^4.7.1 - version: 4.7.1(@internationalized/date@3.12.0)(@internationalized/number@3.6.5)(@nuxt/content@3.13.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6) + version: 4.7.1(@internationalized/date@3.12.0)(@internationalized/number@3.6.5)(@nuxt/content@3.13.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6) '@nuxtjs/i18n': specifier: ^10.2.4 - version: 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3)) + version: 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3)) '@nuxtjs/mcp-toolkit': - specifier: ^0.16.1 - version: 0.16.1(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) + specifier: https://pkg.pr.new/@nuxtjs/mcp-toolkit@263 + version: https://pkg.pr.new/@nuxtjs/mcp-toolkit@263(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) '@nuxtjs/mdc': specifier: ^0.21.1 version: 0.21.1(magicast@0.5.2) '@nuxtjs/robots': specifier: ^6.0.7 - version: 6.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) + version: 6.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) '@shikijs/core': specifier: ^4.0.2 version: 4.0.2 @@ -176,7 +176,7 @@ importers: version: 6.1.7 evlog: specifier: ^2.16.0 - version: 2.16.0(@nuxt/kit@4.4.2(magicast@0.5.2))(ai@6.0.168(zod@4.3.6))(express@5.2.1)(h3@1.15.11)(hono@4.12.9)(ofetch@1.5.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.16.0(@nuxt/kit@4.4.2(magicast@0.5.2))(ai@6.0.168(zod@4.3.6))(express@5.2.1)(h3@1.15.11)(hono@4.12.9)(ofetch@1.5.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) exsolve: specifier: ^1.0.8 version: 1.0.8 @@ -188,13 +188,13 @@ importers: version: 2.2.1(@vueuse/core@14.2.1(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3)) nuxt: specifier: 4.x - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) nuxt-llms: specifier: ^0.2.0 version: 0.2.0(magicast@0.5.2) nuxt-og-image: specifier: ^6.4.5 - version: 6.4.5(b2d783c839050aabda43ec2f68abe3b0) + version: 6.4.5(031b896403830ed186addf2615129116) pathe: specifier: ^2.0.3 version: 2.0.3 @@ -1436,6 +1436,10 @@ packages: resolution: {integrity: sha512-oy4fAeMkyz7gelnalDQLPm8QZRN+c5c/Eh/M6oFgPx86jnA8m6xeOlONpJN2dk0GhcJwJYuN/kmzBffZ93WXPQ==} engines: {node: '>=18.12.0'} + '@nuxt/kit@4.4.6': + resolution: {integrity: sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw==} + engines: {node: '>=18.12.0'} + '@nuxt/nitro-server@4.4.2': resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1526,15 +1530,16 @@ packages: resolution: {integrity: sha512-T5nN7hT/tbExant+CeXtKXs9GbjWsEWnymCHJyU3Ujxfcw1WQsZZP6tyEtFRhkwjBwy8m4mj7GtU2qUCggUkkg==} engines: {node: '>=20.11.1'} - '@nuxtjs/mcp-toolkit@0.16.1': - resolution: {integrity: sha512-dHGaBLs9dFI9m9l8CZcg9JtkBkV9sw/wRC6iqTZ9HcRWO5RciZxnH9XlBIAxXTgHLdMRQTv48ZgImT2bP41U8g==} + '@nuxtjs/mcp-toolkit@https://pkg.pr.new/@nuxtjs/mcp-toolkit@263': + resolution: {integrity: sha512-m7/2mycI3D01rRhQBEPv0S4lpa0gz86Nho00QNWvZOte61gz06RjoM9RbquykxqlHFy3+O1DSeuf9WxOa58G0Q==, tarball: https://pkg.pr.new/@nuxtjs/mcp-toolkit@263} + version: 0.17.1 peerDependencies: - '@vue/compiler-sfc': ^3.5.33 - agents: '>=0.12.3' + '@vue/compiler-sfc': ^3.5.34 + agents: '>=0.12.4' h3: '>=1.15.11' secure-exec: '>=0.2.1' vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - vue: ^3.5.33 + vue: ^3.5.34 zod: ^4.1.13 peerDependenciesMeta: '@vue/compiler-sfc': @@ -2518,12 +2523,12 @@ packages: '@rolldown/pluginutils@1.0.0-rc.12': resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} - '@rolldown/pluginutils@1.0.0-rc.13': - resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==} - '@rolldown/pluginutils@1.0.0-rc.2': resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} engines: {node: '>=20.19.0'} @@ -3530,8 +3535,8 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 - '@vitejs/plugin-vue@6.0.6': - resolution: {integrity: sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==} + '@vitejs/plugin-vue@6.0.7': + resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -5522,6 +5527,10 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + jose@6.2.2: resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} @@ -7003,6 +7012,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + engines: {node: '>=10'} + hasBin: true + send@1.2.1: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} @@ -8561,6 +8575,11 @@ snapshots: eslint: 10.2.1(jiti@2.6.1) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.7.0))': + dependencies: + eslint: 10.2.1(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.2': {} '@eslint/compat@2.0.3(eslint@10.2.1(jiti@2.6.1))': @@ -8946,9 +8965,9 @@ snapshots: '@intlify/shared@11.3.0': {} - '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.6.1))(rollup@4.60.1)(typescript@6.0.3)(vue-i18n@11.3.0(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))': + '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@6.0.3)(vue-i18n@11.3.0(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.7.0)) '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.0(vue@3.5.31(typescript@6.0.3))) '@intlify/shared': 11.3.0 '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.32)(vue-i18n@11.3.0(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3)) @@ -9208,11 +9227,19 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + execa: 8.0.1 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - magicast + + '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) tinyexec: 1.1.1 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - magicast @@ -9268,6 +9295,47 @@ snapshots: - utf-8-validate - vue + '@nuxt/devtools@3.2.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + dependencies: + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/devtools-wizard': 3.2.4 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@vue/devtools-core': 8.1.1(vue@3.5.31(typescript@6.0.3)) + '@vue/devtools-kit': 8.1.1 + birpc: 4.0.0 + consola: 3.4.2 + destr: 2.0.5 + error-stack-parser-es: 1.0.5 + execa: 8.0.1 + fast-npm-meta: 1.4.2 + get-port-please: 3.2.0 + hookable: 6.1.1 + image-meta: 0.2.2 + is-installed-globally: 1.0.0 + launch-editor: 2.13.2 + local-pkg: 1.1.2 + magicast: 0.5.2 + nypm: 0.6.5 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + semver: 7.7.4 + simple-git: 3.33.0 + sirv: 3.0.2 + structured-clone-es: 2.0.0 + tinyglobby: 0.2.16 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-plugin-vue-tracer: 1.3.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + which: 6.0.1 + ws: 8.20.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + - vue + '@nuxt/eslint-config@1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.32)(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@antfu/install-pkg': 1.1.0 @@ -9336,13 +9404,13 @@ snapshots: - utf-8-validate - vite - '@nuxt/fonts@0.14.0(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@nuxt/fonts@0.14.0(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/kit': 4.4.4(magicast@0.5.2) consola: 3.4.2 defu: 6.1.7 - fontless: 0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + fontless: 0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) h3: 1.15.11 magic-regexp: 0.10.0 ofetch: 1.5.1 @@ -9376,14 +9444,14 @@ snapshots: - uploadthing - vite - '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': dependencies: '@iconify/collections': 1.0.668 '@iconify/types': 2.0.0 '@iconify/utils': 3.1.0 '@iconify/vue': 5.0.0(vue@3.5.31(typescript@6.0.3)) - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/kit': 4.4.4(magicast@0.5.2) consola: 3.4.2 local-pkg: 1.1.2 mlly: 1.8.2 @@ -9509,6 +9577,31 @@ snapshots: transitivePeerDependencies: - magicast + '@nuxt/kit@4.4.6(magicast@0.5.2)': + dependencies: + c12: 3.3.4(magicast@0.5.2) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + errx: 0.1.0 + exsolve: 1.0.8 + ignore: 7.0.5 + jiti: 2.7.0 + klona: 2.0.6 + mlly: 1.8.2 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.1 + rc9: 3.0.1 + scule: 1.3.0 + semver: 7.8.0 + tinyglobby: 0.2.16 + ufo: 1.6.4 + unctx: 2.5.0 + untyped: 2.0.0 + transitivePeerDependencies: + - magicast + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(typescript@6.0.3)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) @@ -9578,6 +9671,75 @@ snapshots: - uploadthing - xml2js + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(typescript@6.0.3)': + dependencies: + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@nuxt/devalue': 2.0.2 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@unhead/vue': 2.1.13(vue@3.5.31(typescript@6.0.3)) + '@vue/shared': 3.5.32 + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + devalue: 5.7.1 + errx: 0.1.0 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + h3: 1.15.11 + impound: 1.1.5 + klona: 2.0.6 + mocked-exports: 0.1.1 + nitropack: 2.13.2(better-sqlite3@12.8.0) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) + nypm: 0.6.5 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rou3: 0.8.1 + std-env: 4.1.0 + ufo: 1.6.3 + unctx: 2.5.0 + unstorage: 1.17.5(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1) + vue: 3.5.31(typescript@6.0.3) + vue-bundle-renderer: 2.2.0 + vue-devtools-stub: 0.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@babel/core' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@libsql/client' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - db0 + - drizzle-orm + - encoding + - idb-keyval + - ioredis + - magicast + - mysql2 + - react-native-b4a + - rolldown + - sqlite3 + - supports-color + - typescript + - uploadthing + - xml2js + '@nuxt/schema@4.4.2': dependencies: '@vue/shared': 3.5.32 @@ -9595,18 +9757,18 @@ snapshots: rc9: 3.0.1 std-env: 3.10.0 - '@nuxt/ui@4.7.1(@internationalized/date@3.12.0)(@internationalized/number@3.6.5)(@nuxt/content@3.13.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)': + '@nuxt/ui@4.7.1(@internationalized/date@3.12.0)(@internationalized/number@3.6.5)(@nuxt/content@3.13.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.31(typescript@6.0.3)) - '@nuxt/fonts': 0.14.0(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + '@nuxt/fonts': 0.14.0(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) '@nuxt/kit': 4.4.2(magicast@0.5.2) '@nuxt/schema': 4.4.2 '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2) '@standard-schema/spec': 1.1.0 '@tailwindcss/postcss': 4.2.4 - '@tailwindcss/vite': 4.2.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tailwindcss/vite': 4.2.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@tanstack/vue-table': 8.21.3(vue@3.5.31(typescript@6.0.3)) '@tanstack/vue-virtual': 3.13.24(vue@3.5.31(typescript@6.0.3)) '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) @@ -9769,6 +9931,66 @@ snapshots: - vue-tsc - yaml + '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@10.2.1(jiti@2.7.0))(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.31(typescript@6.0.3))(yaml@2.8.3)': + dependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@rollup/plugin-replace': 6.0.3(rollup@4.60.1) + '@vitejs/plugin-vue': 6.0.5(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + autoprefixer: 10.4.27(postcss@8.5.8) + consola: 3.4.2 + cssnano: 7.1.4(postcss@8.5.8) + defu: 6.1.7 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + get-port-please: 3.2.0 + jiti: 2.6.1 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.2 + mocked-exports: 0.1.1 + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) + nypm: 0.6.5 + pathe: 2.0.3 + pkg-types: 2.3.0 + postcss: 8.5.8 + seroval: 1.5.1 + std-env: 4.1.0 + ufo: 1.6.3 + unenv: 2.0.0-rc.24 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(eslint@10.2.1(jiti@2.7.0))(meow@13.2.0)(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3)) + vue: 3.5.31(typescript@6.0.3) + vue-bundle-renderer: 2.2.0 + optionalDependencies: + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + rollup-plugin-visualizer: 7.0.1(rollup@4.60.1) + transitivePeerDependencies: + - '@biomejs/biome' + - '@types/node' + - eslint + - less + - lightningcss + - magicast + - meow + - optionator + - oxlint + - rollup + - sass + - sass-embedded + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - vls + - vti + - vue-tsc + - yaml + '@nuxtjs/color-mode@3.5.2(magicast@0.5.2)': dependencies: '@nuxt/kit': 3.21.2(magicast@0.5.2) @@ -9778,12 +10000,12 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3))': + '@nuxtjs/i18n@10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3))': dependencies: '@intlify/core': 11.3.0 '@intlify/h3': 0.7.4 '@intlify/shared': 11.3.0 - '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.6.1))(rollup@4.60.1)(typescript@6.0.3)(vue-i18n@11.3.0(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3)) + '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@6.0.3)(vue-i18n@11.3.0(vue@3.5.31(typescript@6.0.3)))(vue@3.5.31(typescript@6.0.3)) '@intlify/utils': 0.14.1 '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.60.1) '@nuxt/kit': 4.4.2(magicast@0.5.2) @@ -9840,18 +10062,18 @@ snapshots: - uploadthing - vue - '@nuxtjs/mcp-toolkit@0.16.1(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6)': + '@nuxtjs/mcp-toolkit@https://pkg.pr.new/@nuxtjs/mcp-toolkit@263(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6)': dependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) - '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@vitejs/plugin-vue': 6.0.6(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + '@nuxt/kit': 4.4.6(magicast@0.5.2) + '@vitejs/plugin-vue': 6.0.7(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) h3: 1.15.11 tinyglobby: 0.2.16 - vite-plugin-singlefile: 2.3.3(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-plugin-singlefile: 2.3.3(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) zod: 4.3.6 optionalDependencies: '@vue/compiler-sfc': 3.5.32 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.3) transitivePeerDependencies: - '@cfworker/json-schema' @@ -9909,15 +10131,15 @@ snapshots: - magicast - supports-color - '@nuxtjs/robots@6.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6)': + '@nuxtjs/robots@6.0.7(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6)': dependencies: '@fingerprintjs/botd': 2.0.0 '@nuxt/kit': 4.4.2(magicast@0.5.2) consola: 3.4.2 defu: 6.1.7 h3: 1.15.11 - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) - nuxtseo-shared: 5.1.3(0d99572a98656e4dccbc47f0d050b6c5) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) + nuxtseo-shared: 5.1.3(469fb57a6a3f51edc3e03afc08f586a9) pathe: 2.0.3 pkg-types: 2.3.0 ufo: 1.6.3 @@ -10504,10 +10726,10 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.12': {} - '@rolldown/pluginutils@1.0.0-rc.13': {} - '@rolldown/pluginutils@1.0.0-rc.2': {} + '@rolldown/pluginutils@1.0.1': {} + '@rollup/plugin-alias@6.0.0(rollup@4.60.1)': optionalDependencies: rollup: 4.60.1 @@ -10818,12 +11040,12 @@ snapshots: postcss: 8.5.8 tailwindcss: 4.2.4 - '@tailwindcss/vite@4.2.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@tailwindcss/vite@4.2.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@tailwindcss/node': 4.2.4 '@tailwindcss/oxide': 4.2.4 tailwindcss: 4.2.4 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@takumi-rs/core-darwin-arm64@1.0.15': optional: true @@ -11308,9 +11530,9 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vercel/analytics@2.0.1(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + '@vercel/analytics@2.0.1(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': optionalDependencies: - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) vue: 3.5.31(typescript@6.0.3) '@vercel/nft@1.5.0(rollup@4.60.1)': @@ -11334,9 +11556,9 @@ snapshots: '@vercel/oidc@3.2.0': {} - '@vercel/speed-insights@2.0.0(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + '@vercel/speed-insights@2.0.0(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': optionalDependencies: - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) vue: 3.5.31(typescript@6.0.3) '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': @@ -11351,16 +11573,34 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.12 + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.3) + transitivePeerDependencies: + - supports-color + '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.3) - '@vitejs/plugin-vue@6.0.6(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': dependencies: - '@rolldown/pluginutils': 1.0.0-rc.13 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.3) + + '@vitejs/plugin-vue@6.0.7(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))': + dependencies: + '@rolldown/pluginutils': 1.0.1 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.3) '@volar/language-core@2.4.28': @@ -12699,6 +12939,43 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@10.2.1(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.5.5 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + espree@10.4.0: dependencies: acorn: 8.16.0 @@ -12757,7 +13034,7 @@ snapshots: dependencies: eventsource-parser: 3.0.6 - evlog@2.16.0(@nuxt/kit@4.4.2(magicast@0.5.2))(ai@6.0.168(zod@4.3.6))(express@5.2.1)(h3@1.15.11)(hono@4.12.9)(ofetch@1.5.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + evlog@2.16.0(@nuxt/kit@4.4.2(magicast@0.5.2))(ai@6.0.168(zod@4.3.6))(express@5.2.1)(h3@1.15.11)(hono@4.12.9)(ofetch@1.5.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) ai: 6.0.168(zod@4.3.6) @@ -12765,7 +13042,7 @@ snapshots: h3: 1.15.11 hono: 4.12.9 ofetch: 1.5.1 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) execa@8.0.1: dependencies: @@ -12939,7 +13216,7 @@ snapshots: dependencies: tiny-inflate: 1.0.3 - fontless@0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + fontless@0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: consola: 3.4.2 css-tree: 3.2.1 @@ -12955,7 +13232,7 @@ snapshots: unifont: 0.7.4 unstorage: 1.17.5(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1) optionalDependencies: - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -13584,6 +13861,8 @@ snapshots: jiti@2.6.1: {} + jiti@2.7.0: {} + jose@6.2.2: {} joycon@3.1.1: {} @@ -14434,7 +14713,7 @@ snapshots: transitivePeerDependencies: - magicast - nuxt-og-image@6.4.5(b2d783c839050aabda43ec2f68abe3b0): + nuxt-og-image@6.4.5(031b896403830ed186addf2615129116): dependencies: '@clack/prompts': 1.2.0 '@nuxt/kit': 4.4.2(magicast@0.5.2) @@ -14450,8 +14729,8 @@ snapshots: magic-string: 0.30.21 magicast: 0.5.2 mocked-exports: 0.1.1 - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) - nuxtseo-shared: 5.1.3(0d99572a98656e4dccbc47f0d050b6c5) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) + nuxtseo-shared: 5.1.3(469fb57a6a3f51edc3e03afc08f586a9) nypm: 0.6.5 ofetch: 1.5.1 ohash: 2.0.11 @@ -14470,7 +14749,7 @@ snapshots: unstorage: 1.17.5(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1) optionalDependencies: '@takumi-rs/core': 1.0.15 - fontless: 0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + fontless: 0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) sharp: 0.34.5 tailwindcss: 4.2.4 unifont: 0.7.4 @@ -14492,12 +14771,12 @@ snapshots: - magicast - vue - nuxt-site-config@4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6): + nuxt-site-config@4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6): dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) h3: 1.15.11 nuxt-site-config-kit: 4.0.8(magicast@0.5.2)(vue@3.5.31(typescript@6.0.3)) - nuxtseo-shared: 5.1.3(0d99572a98656e4dccbc47f0d050b6c5) + nuxtseo-shared: 5.1.3(469fb57a6a3f51edc3e03afc08f586a9) pathe: 2.0.3 pkg-types: 2.3.0 site-config-stack: 4.0.8(vue@3.5.31(typescript@6.0.3)) @@ -14686,16 +14965,148 @@ snapshots: - xml2js - yaml - nuxtseo-shared@5.1.3(0d99572a98656e4dccbc47f0d050b6c5): + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3): + dependencies: + '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@6.0.3) + '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) + '@nuxt/devtools': 3.2.4(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)) + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(typescript@6.0.3) + '@nuxt/schema': 4.4.2 + '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.4.2(magicast@0.5.2)) + '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@10.2.1(jiti@2.7.0))(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))(vue@3.5.31(typescript@6.0.3))(yaml@2.8.3) + '@unhead/vue': 2.1.13(vue@3.5.31(typescript@6.0.3)) + '@vue/shared': 3.5.32 + c12: 3.3.4(magicast@0.5.2) + chokidar: 5.0.0 + compatx: 0.2.0 + consola: 3.4.2 + cookie-es: 2.0.0 + defu: 6.1.7 + devalue: 5.7.1 + errx: 0.1.0 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + hookable: 6.1.1 + ignore: 7.0.5 + impound: 1.1.5 + jiti: 2.6.1 + klona: 2.0.6 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.2 + nanotar: 0.3.0 + nypm: 0.6.5 + ofetch: 1.5.1 + ohash: 2.0.11 + on-change: 6.0.2 + oxc-minify: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-transform: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) + pathe: 2.0.3 + perfect-debounce: 2.1.0 + picomatch: 4.0.4 + pkg-types: 2.3.0 + rou3: 0.8.1 + scule: 1.3.0 + semver: 7.7.4 + std-env: 4.1.0 + tinyglobby: 0.2.16 + ufo: 1.6.3 + ultrahtml: 1.6.0 + uncrypto: 0.1.3 + unctx: 2.5.0 + unimport: 5.6.0 + unplugin: 3.0.0 + unrouting: 0.1.7 + untyped: 2.0.0 + vue: 3.5.31(typescript@6.0.3) + vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.31(typescript@6.0.3)) + optionalDependencies: + '@parcel/watcher': 2.5.6 + '@types/node': 25.6.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@babel/core' + - '@babel/plugin-proposal-decorators' + - '@babel/plugin-syntax-jsx' + - '@biomejs/biome' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@emnapi/core' + - '@emnapi/runtime' + - '@libsql/client' + - '@netlify/blobs' + - '@pinia/colada' + - '@planetscale/database' + - '@rollup/plugin-babel' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools' + - '@vue/compiler-sfc' + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - bufferutil + - cac + - commander + - db0 + - drizzle-orm + - encoding + - eslint + - idb-keyval + - ioredis + - less + - lightningcss + - magicast + - meow + - mysql2 + - optionator + - oxlint + - pinia + - react-native-b4a + - rolldown + - rollup + - rollup-plugin-visualizer + - sass + - sass-embedded + - sqlite3 + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - utf-8-validate + - vite + - vls + - vti + - vue-tsc + - xml2js + - yaml + + nuxtseo-shared@5.1.3(469fb57a6a3f51edc3e03afc08f586a9): dependencies: '@clack/prompts': 1.2.0 - '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@nuxt/kit': 4.4.2(magicast@0.5.2) '@nuxt/schema': 4.4.2 birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3) ofetch: 1.5.1 pathe: 2.0.3 pkg-types: 2.3.0 @@ -14705,7 +15116,7 @@ snapshots: ufo: 1.6.3 vue: 3.5.31(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) + nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) zod: 4.3.6 transitivePeerDependencies: - magicast @@ -15162,11 +15573,11 @@ snapshots: dependencies: postcss: 8.5.8 - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 postcss: 8.5.8 tsx: 4.21.0 yaml: 2.8.3 @@ -15785,6 +16196,8 @@ snapshots: semver@7.7.4: {} + semver@7.8.0: {} + send@1.2.1: dependencies: debug: 4.4.3 @@ -16276,7 +16689,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.3): + tsup@8.5.1(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.3): dependencies: bundle-require: 5.1.0(esbuild@0.27.4) cac: 6.7.14 @@ -16287,7 +16700,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.3) resolve-from: 5.0.0 rollup: 4.60.1 source-map: 0.7.6 @@ -16615,10 +17028,20 @@ snapshots: vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + birpc: 2.9.0 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node@5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 @@ -16657,6 +17080,24 @@ snapshots: typescript: 6.0.3 vue-tsc: 3.2.7(typescript@6.0.3) + vite-plugin-checker@0.12.0(eslint@10.2.1(jiti@2.7.0))(meow@13.2.0)(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3)): + dependencies: + '@babel/code-frame': 7.29.0 + chokidar: 4.0.3 + npm-run-path: 6.0.0 + picocolors: 1.1.1 + picomatch: 4.0.4 + tiny-invariant: 1.3.3 + tinyglobby: 0.2.16 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vscode-uri: 3.1.0 + optionalDependencies: + eslint: 10.2.1(jiti@2.7.0) + meow: 13.2.0 + optionator: 0.9.4 + typescript: 6.0.3 + vue-tsc: 3.2.7(typescript@6.0.3) + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: ansis: 4.2.0 @@ -16674,10 +17115,27 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-singlefile@2.3.3(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + ansis: 4.2.0 + debug: 4.4.3 + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.2.0 + perfect-debounce: 2.1.0 + sirv: 3.0.2 + unplugin-utils: 0.3.1 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + optionalDependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + transitivePeerDependencies: + - supports-color + + vite-plugin-singlefile@2.3.3(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: micromatch: 4.0.8 - vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: rollup: 4.60.1 @@ -16691,6 +17149,16 @@ snapshots: vite: 7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.3) + vite-plugin-vue-tracer@1.3.0(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3)): + dependencies: + estree-walker: 3.0.3 + exsolve: 1.0.8 + magic-string: 0.30.21 + pathe: 2.0.3 + source-map-js: 1.2.1 + vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.3) + vite@7.3.1(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.4 @@ -16708,6 +17176,23 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 + vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + esbuild: 0.27.4 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.8 + rollup: 4.60.1 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.6.0 + fsevents: 2.3.3 + jiti: 2.7.0 + lightningcss: 1.32.0 + terser: 5.46.1 + tsx: 4.21.0 + yaml: 2.8.3 + vscode-uri@3.1.0: {} vue-bundle-renderer@2.2.0: From e2fe6c4294ef11e99c59ff0cc27f3ebe291279b6 Mon Sep 17 00:00:00 2001 From: Hugo Richard Date: Tue, 19 May 2026 18:42:06 +0100 Subject: [PATCH 4/4] update mcp-toolkit --- layer/package.json | 2 +- pnpm-lock.yaml | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/layer/package.json b/layer/package.json index d577b2c8f..cb19aa8ff 100644 --- a/layer/package.json +++ b/layer/package.json @@ -34,7 +34,7 @@ "@nuxt/kit": "^4.4.2", "@nuxt/ui": "^4.7.1", "@nuxtjs/i18n": "^10.2.4", - "@nuxtjs/mcp-toolkit": "https://pkg.pr.new/@nuxtjs/mcp-toolkit@263", + "@nuxtjs/mcp-toolkit": "^0.17.2", "@nuxtjs/mdc": "^0.21.1", "@nuxtjs/robots": "^6.0.7", "@shikijs/core": "^4.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 731b85a96..ccc861edc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -139,8 +139,8 @@ importers: specifier: ^10.2.4 version: 10.2.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vue/compiler-dom@3.5.32)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.2.1(jiti@2.7.0))(ioredis@5.10.1)(magicast@0.5.2)(rollup@4.60.1)(typescript@6.0.3)(vue@3.5.31(typescript@6.0.3)) '@nuxtjs/mcp-toolkit': - specifier: https://pkg.pr.new/@nuxtjs/mcp-toolkit@263 - version: https://pkg.pr.new/@nuxtjs/mcp-toolkit@263(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) + specifier: ^0.17.2 + version: 0.17.2(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6) '@nuxtjs/mdc': specifier: ^0.21.1 version: 0.21.1(magicast@0.5.2) @@ -1530,9 +1530,8 @@ packages: resolution: {integrity: sha512-T5nN7hT/tbExant+CeXtKXs9GbjWsEWnymCHJyU3Ujxfcw1WQsZZP6tyEtFRhkwjBwy8m4mj7GtU2qUCggUkkg==} engines: {node: '>=20.11.1'} - '@nuxtjs/mcp-toolkit@https://pkg.pr.new/@nuxtjs/mcp-toolkit@263': - resolution: {integrity: sha512-m7/2mycI3D01rRhQBEPv0S4lpa0gz86Nho00QNWvZOte61gz06RjoM9RbquykxqlHFy3+O1DSeuf9WxOa58G0Q==, tarball: https://pkg.pr.new/@nuxtjs/mcp-toolkit@263} - version: 0.17.1 + '@nuxtjs/mcp-toolkit@0.17.2': + resolution: {integrity: sha512-8/4d/QTc6KfUTml8IlQ2mrznszQcBCribciz+wogbCL+YCrKjqbzSz8azaQ8MvqdSHk1h3acTL4qdkLNLurLlA==} peerDependencies: '@vue/compiler-sfc': ^3.5.34 agents: '>=0.12.4' @@ -9237,7 +9236,7 @@ snapshots: '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@nuxt/kit': 4.4.4(magicast@0.5.2) + '@nuxt/kit': 4.4.6(magicast@0.5.2) tinyexec: 1.1.1 vite: 7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: @@ -10062,7 +10061,7 @@ snapshots: - uploadthing - vue - '@nuxtjs/mcp-toolkit@https://pkg.pr.new/@nuxtjs/mcp-toolkit@263(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6)': + '@nuxtjs/mcp-toolkit@0.17.2(@vue/compiler-sfc@3.5.32)(h3@1.15.11)(magicast@0.5.2)(rollup@4.60.1)(vite@7.3.1(@types/node@25.6.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.3))(zod@4.3.6)': dependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) '@nuxt/kit': 4.4.6(magicast@0.5.2) @@ -14763,7 +14762,7 @@ snapshots: nuxt-site-config-kit@4.0.8(magicast@0.5.2)(vue@3.5.31(typescript@6.0.3)): dependencies: - '@nuxt/kit': 4.4.4(magicast@0.5.2) + '@nuxt/kit': 4.4.6(magicast@0.5.2) site-config-stack: 4.0.8(vue@3.5.31(typescript@6.0.3)) std-env: 4.1.0 ufo: 1.6.3