[{"data":1,"prerenderedAt":3097},["ShallowReactive",2],{"navigation_docs_en":3,"-en-concepts-observability":133,"-en-concepts-observability-surround":3092},[4,41,82,108],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":40},"Getting Started","i-lucide-rocket","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,25,30,35],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Project Structure","\u002Fen\u002Fgetting-started\u002Fproject-structure","en\u002F1.getting-started\u002F4.project-structure","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":29},"Studio module","\u002Fen\u002Fgetting-started\u002Fstudio","en\u002F1.getting-started\u002F5.studio","i-lucide-mouse-pointer-2",{"title":31,"path":32,"stem":33,"icon":34},"Migration","\u002Fen\u002Fgetting-started\u002Fmigration","en\u002F1.getting-started\u002F6.migration","i-lucide-replace",{"title":36,"path":37,"stem":38,"icon":39},"Troubleshooting","\u002Fen\u002Fgetting-started\u002Ftroubleshooting","en\u002F1.getting-started\u002F7.troubleshooting","i-lucide-wrench",false,{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":40},"Core Concepts","i-lucide-brain","\u002Fen\u002Fconcepts","en\u002F2.concepts",[47,52,57,62,67,72,77],{"title":48,"path":49,"stem":50,"icon":51},"Edition","\u002Fen\u002Fconcepts\u002Fedition","en\u002F2.concepts\u002F2.edition","i-lucide-pencil",{"title":53,"path":54,"stem":55,"icon":56},"Configuration","\u002Fen\u002Fconcepts\u002Fconfiguration","en\u002F2.concepts\u002F3.configuration","i-lucide-settings",{"title":58,"path":59,"stem":60,"icon":61},"Theme","\u002Fen\u002Fconcepts\u002Ftheme","en\u002F2.concepts\u002F4.theme","i-lucide-paint-roller",{"title":63,"path":64,"stem":65,"icon":66},"Customization","\u002Fen\u002Fconcepts\u002Fcustomization","en\u002F2.concepts\u002F5.customization","i-lucide-pen-tool",{"title":68,"path":69,"stem":70,"icon":71},"Internationalization","\u002Fen\u002Fconcepts\u002Finternationalization","en\u002F2.concepts\u002F6.internationalization","i-lucide-globe",{"title":73,"path":74,"stem":75,"icon":76},"Observability","\u002Fen\u002Fconcepts\u002Fobservability","en\u002F2.concepts\u002F7.observability","i-lucide-activity",{"title":78,"path":79,"stem":80,"icon":81},"Nuxt","\u002Fen\u002Fconcepts\u002Fnuxt","en\u002F2.concepts\u002F8.nuxt","i-simple-icons-nuxt",{"title":83,"icon":84,"path":85,"stem":86,"children":87,"page":40},"Essentials","i-lucide-book-open","\u002Fen\u002Fessentials","en\u002F3.essentials",[88,93,98,103],{"title":89,"path":90,"stem":91,"icon":92},"Markdown Syntax","\u002Fen\u002Fessentials\u002Fmarkdown-syntax","en\u002F3.essentials\u002F1.markdown-syntax","i-lucide-heading-1",{"title":94,"path":95,"stem":96,"icon":97},"Code Blocks","\u002Fen\u002Fessentials\u002Fcode-blocks","en\u002F3.essentials\u002F2.code-blocks","i-lucide-code-xml",{"title":99,"path":100,"stem":101,"icon":102},"Components","\u002Fen\u002Fessentials\u002Fcomponents","en\u002F3.essentials\u002F3.components","i-lucide-component",{"title":104,"path":105,"stem":106,"icon":107},"Images and Embeds","\u002Fen\u002Fessentials\u002Fimages-embeds","en\u002F3.essentials\u002F4.images-embeds","i-lucide-image",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":40},"AI","i-lucide-sparkles","\u002Fen\u002Fai","en\u002F4.ai",[114,118,123,128],{"title":115,"path":116,"stem":117,"icon":110},"Assistant","\u002Fen\u002Fai\u002Fassistant","en\u002F4.ai\u002F1.assistant",{"title":119,"path":120,"stem":121,"icon":122},"MCP Server","\u002Fen\u002Fai\u002Fmcp","en\u002F4.ai\u002F2.mcp","i-lucide-cpu",{"title":124,"path":125,"stem":126,"icon":127},"Agent Skills","\u002Fen\u002Fai\u002Fskills","en\u002F4.ai\u002F3.skills","i-lucide-wand-sparkles",{"title":129,"path":130,"stem":131,"icon":132},"LLMs Integration","\u002Fen\u002Fai\u002Fllms","en\u002F4.ai\u002F4.llms","i-lucide-message-circle-code",{"id":134,"title":73,"body":135,"description":3085,"extension":3086,"links":3087,"meta":3088,"navigation":3089,"path":74,"seo":3090,"stem":75,"__hash__":3091},"docs_en\u002Fen\u002F2.concepts\u002F7.observability.md",{"type":136,"value":137,"toc":3071},"minimark",[138,143,147,178,181,185,192,254,262,266,269,414,422,426,431,446,800,828,831,835,838,1287,1290,1304,1309,1319,1720,1731,1735,1738,2036,2040,2047,2055,2066,2069,2074,2252,2255,2335,2339,2342,2577,2584,2588,2591,2855,2999,3067],[139,140,142],"h2",{"id":141},"why-this-page-exists","Why this page exists",[144,145,146],"p",{},"A docs site looks simple from the outside, but in production it has a lot of moving parts:",[148,149,150,159,165,172],"ul",{},[151,152,153,154,158],"li",{},"The ",[155,156,157],"strong",{},"AI assistant"," streams answers from a model and calls tools — calls fail, latencies spike, costs grow.",[151,160,153,161,164],{},[155,162,163],{},"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.",[151,166,167,168,171],{},"Pages may ",[155,169,170],{},"404"," because of a broken link in another doc.",[151,173,153,174,177],{},[155,175,176],{},"sitemap"," can quietly miss collections after a content refactor.",[144,179,180],{},"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.",[139,182,184],{"id":183},"whats-a-drain","What's a drain?",[144,186,187,188,191],{},"A ",[155,189,190],{},"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:",[148,193,194,206,212,222],{},[151,195,196,205],{},[155,197,198],{},[199,200,204],"a",{"href":201,"rel":202},"https:\u002F\u002Faxiom.co",[203],"nofollow","Axiom"," — searchable log storage with dashboards.",[151,207,208,211],{},[155,209,210],{},"OTLP"," — the OpenTelemetry standard, supported by Grafana Cloud, Honeycomb, New Relic, Datadog, self-hosted collectors…",[151,213,214,221],{},[155,215,216],{},[199,217,220],{"href":218,"rel":219},"https:\u002F\u002Fsentry.io",[203],"Sentry"," — error tracking specifically.",[151,223,224,231,232,231,239,231,246,253],{},[155,225,226],{},[199,227,230],{"href":228,"rel":229},"https:\u002F\u002Fwww.datadoghq.com",[203],"Datadog",", ",[155,233,234],{},[199,235,238],{"href":236,"rel":237},"https:\u002F\u002Fhyperdx.io",[203],"HyperDX",[155,240,241],{},[199,242,245],{"href":243,"rel":244},"https:\u002F\u002Fbetterstack.com\u002Flogs",[203],"Better Stack",[155,247,248],{},[199,249,252],{"href":250,"rel":251},"https:\u002F\u002Fposthog.com",[203],"PostHog"," — also supported.",[144,255,256,257,261],{},"Without a drain, events still get pretty-printed in dev and you can ",[258,259,260],"code",{},"tail"," your server output in production. With a drain, you get search, dashboards, alerts.",[139,263,265],{"id":264},"quick-start","Quick start",[144,267,268],{},"Pick a backend, add the env var, deploy. That's it.",[270,271,272,323,344,365,393],"tabs",{},[273,274,276,314],"tabs-item",{"label":204,"icon":275},"i-simple-icons-axiom",[277,278,284],"pre",{"className":279,"code":280,"filename":281,"language":282,"meta":283,"style":283},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","NUXT_AXIOM_TOKEN=xaat-...\nNUXT_AXIOM_DATASET=docus-logs\n",".env","bash","",[258,285,286,303],{"__ignoreMap":283},[287,288,291,295,299],"span",{"class":289,"line":290},"line",1,[287,292,294],{"class":293},"sTEyZ","NUXT_AXIOM_TOKEN",[287,296,298],{"class":297},"sMK4o","=",[287,300,302],{"class":301},"sfazB","xaat-...\n",[287,304,306,309,311],{"class":289,"line":305},2,[287,307,308],{"class":293},"NUXT_AXIOM_DATASET",[287,310,298],{"class":297},[287,312,313],{"class":301},"docus-logs\n",[144,315,316,317,322],{},"Create a token and dataset at ",[199,318,321],{"href":319,"rel":320},"https:\u002F\u002Fapp.axiom.co",[203],"app.axiom.co",". Events show up within seconds.",[273,324,326,341],{"label":210,"icon":325},"i-simple-icons-opentelemetry",[277,327,329],{"className":279,"code":328,"filename":281,"language":282,"meta":283,"style":283},"NUXT_OTLP_ENDPOINT=https:\u002F\u002Fotel.example.com:4318\n",[258,330,331],{"__ignoreMap":283},[287,332,333,336,338],{"class":289,"line":290},[287,334,335],{"class":293},"NUXT_OTLP_ENDPOINT",[287,337,298],{"class":297},[287,339,340],{"class":301},"https:\u002F\u002Fotel.example.com:4318\n",[144,342,343],{},"Works with any OpenTelemetry collector — Grafana Cloud, Honeycomb, otel-collector, etc.",[273,345,347,362],{"label":220,"icon":346},"i-simple-icons-sentry",[277,348,350],{"className":279,"code":349,"filename":281,"language":282,"meta":283,"style":283},"NUXT_SENTRY_DSN=https:\u002F\u002F...@sentry.io\u002F...\n",[258,351,352],{"__ignoreMap":283},[287,353,354,357,359],{"class":289,"line":290},[287,355,356],{"class":293},"NUXT_SENTRY_DSN",[287,358,298],{"class":297},[287,360,361],{"class":301},"https:\u002F\u002F...@sentry.io\u002F...\n",[144,363,364],{},"Errors become Sentry issues. Non-error events become breadcrumbs on the active transaction.",[273,366,368],{"label":230,"icon":367},"i-simple-icons-datadog",[277,369,371],{"className":279,"code":370,"filename":281,"language":282,"meta":283,"style":283},"NUXT_DD_API_KEY=...\nNUXT_DD_SITE=datadoghq.eu\n",[258,372,373,383],{"__ignoreMap":283},[287,374,375,378,380],{"class":289,"line":290},[287,376,377],{"class":293},"NUXT_DD_API_KEY",[287,379,298],{"class":297},[287,381,382],{"class":301},"...\n",[287,384,385,388,390],{"class":289,"line":305},[287,386,387],{"class":293},"NUXT_DD_SITE",[287,389,298],{"class":297},[287,391,392],{"class":301},"datadoghq.eu\n",[273,394,396,397,231,400,403,404,407,408,413],{"label":395},"Other","Docus also auto-detects ",[258,398,399],{},"NUXT_HYPERDX_API_KEY",[258,401,402],{},"NUXT_BETTER_STACK_SOURCE_TOKEN",", and ",[258,405,406],{},"NUXT_POSTHOG_API_KEY",". The full list is in the ",[199,409,412],{"href":410,"rel":411},"https:\u002F\u002Fevlog.dev\u002Fdocs\u002Fadapters",[203],"evlog adapters reference",".",[415,416,417,418,421],"note",{},"The drain runs in a batched pipeline (50 events \u002F 5s), so it never blocks the response. On Vercel and Cloudflare it uses ",[258,419,420],{},"waitUntil"," so flushing happens after the response is sent.",[139,423,425],{"id":424},"what-youll-see-in-your-drain","What you'll see in your drain",[427,428,430],"h3",{"id":429},"mcp-server-calls","MCP server calls",[144,432,433,434,437,438,441,442,445],{},"Each call to your ",[258,435,436],{},"\u002Fmcp"," endpoint records the transport, session, JSON-RPC method and tool name automatically — these are added by ",[258,439,440],{},"@nuxtjs\u002Fmcp-toolkit"," whenever ",[258,443,444],{},"evlog\u002Fnuxt"," is registered:",[277,447,451],{"className":448,"code":449,"language":450,"meta":283,"style":283},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"service\": \"docus\u002Fmcp\",\n  \"request\": { \"method\": \"POST\", \"path\": \"\u002Fmcp\" },\n  \"mcp\": {\n    \"transport\": \"streamable-http\",\n    \"route\": \"\u002Fmcp\",\n    \"method\": \"tools\u002Fcall\",\n    \"tool\": \"get-page\",\n    \"session_id\": \"session_abc\",\n    \"request_id\": 12\n  },\n  \"content\": {\n    \"path\": \"\u002Fen\u002Fgetting-started\u002Finstallation\",\n    \"title\": \"Installation\",\n    \"contentLength\": 2148\n  },\n  \"response\": { \"status\": 200, \"duration\": 84 }\n}\n","json",[258,452,453,458,484,537,552,574,594,614,635,656,672,678,692,711,731,746,751,794],{"__ignoreMap":283},[287,454,455],{"class":289,"line":290},[287,456,457],{"class":297},"{\n",[287,459,460,463,467,470,473,476,479,481],{"class":289,"line":305},[287,461,462],{"class":297},"  \"",[287,464,466],{"class":465},"spNyl","service",[287,468,469],{"class":297},"\"",[287,471,472],{"class":297},":",[287,474,475],{"class":297}," \"",[287,477,478],{"class":301},"docus\u002Fmcp",[287,480,469],{"class":297},[287,482,483],{"class":297},",\n",[287,485,487,489,492,494,496,499,501,505,507,509,511,514,516,519,521,524,526,528,530,532,534],{"class":289,"line":486},3,[287,488,462],{"class":297},[287,490,491],{"class":465},"request",[287,493,469],{"class":297},[287,495,472],{"class":297},[287,497,498],{"class":297}," {",[287,500,475],{"class":297},[287,502,504],{"class":503},"sBMFI","method",[287,506,469],{"class":297},[287,508,472],{"class":297},[287,510,475],{"class":297},[287,512,513],{"class":301},"POST",[287,515,469],{"class":297},[287,517,518],{"class":297},",",[287,520,475],{"class":297},[287,522,523],{"class":503},"path",[287,525,469],{"class":297},[287,527,472],{"class":297},[287,529,475],{"class":297},[287,531,436],{"class":301},[287,533,469],{"class":297},[287,535,536],{"class":297}," },\n",[287,538,540,542,545,547,549],{"class":289,"line":539},4,[287,541,462],{"class":297},[287,543,544],{"class":465},"mcp",[287,546,469],{"class":297},[287,548,472],{"class":297},[287,550,551],{"class":297}," {\n",[287,553,555,558,561,563,565,567,570,572],{"class":289,"line":554},5,[287,556,557],{"class":297},"    \"",[287,559,560],{"class":503},"transport",[287,562,469],{"class":297},[287,564,472],{"class":297},[287,566,475],{"class":297},[287,568,569],{"class":301},"streamable-http",[287,571,469],{"class":297},[287,573,483],{"class":297},[287,575,577,579,582,584,586,588,590,592],{"class":289,"line":576},6,[287,578,557],{"class":297},[287,580,581],{"class":503},"route",[287,583,469],{"class":297},[287,585,472],{"class":297},[287,587,475],{"class":297},[287,589,436],{"class":301},[287,591,469],{"class":297},[287,593,483],{"class":297},[287,595,597,599,601,603,605,607,610,612],{"class":289,"line":596},7,[287,598,557],{"class":297},[287,600,504],{"class":503},[287,602,469],{"class":297},[287,604,472],{"class":297},[287,606,475],{"class":297},[287,608,609],{"class":301},"tools\u002Fcall",[287,611,469],{"class":297},[287,613,483],{"class":297},[287,615,617,619,622,624,626,628,631,633],{"class":289,"line":616},8,[287,618,557],{"class":297},[287,620,621],{"class":503},"tool",[287,623,469],{"class":297},[287,625,472],{"class":297},[287,627,475],{"class":297},[287,629,630],{"class":301},"get-page",[287,632,469],{"class":297},[287,634,483],{"class":297},[287,636,638,640,643,645,647,649,652,654],{"class":289,"line":637},9,[287,639,557],{"class":297},[287,641,642],{"class":503},"session_id",[287,644,469],{"class":297},[287,646,472],{"class":297},[287,648,475],{"class":297},[287,650,651],{"class":301},"session_abc",[287,653,469],{"class":297},[287,655,483],{"class":297},[287,657,659,661,664,666,668],{"class":289,"line":658},10,[287,660,557],{"class":297},[287,662,663],{"class":503},"request_id",[287,665,469],{"class":297},[287,667,472],{"class":297},[287,669,671],{"class":670},"sbssI"," 12\n",[287,673,675],{"class":289,"line":674},11,[287,676,677],{"class":297},"  },\n",[287,679,681,683,686,688,690],{"class":289,"line":680},12,[287,682,462],{"class":297},[287,684,685],{"class":465},"content",[287,687,469],{"class":297},[287,689,472],{"class":297},[287,691,551],{"class":297},[287,693,695,697,699,701,703,705,707,709],{"class":289,"line":694},13,[287,696,557],{"class":297},[287,698,523],{"class":503},[287,700,469],{"class":297},[287,702,472],{"class":297},[287,704,475],{"class":297},[287,706,17],{"class":301},[287,708,469],{"class":297},[287,710,483],{"class":297},[287,712,714,716,719,721,723,725,727,729],{"class":289,"line":713},14,[287,715,557],{"class":297},[287,717,718],{"class":503},"title",[287,720,469],{"class":297},[287,722,472],{"class":297},[287,724,475],{"class":297},[287,726,16],{"class":301},[287,728,469],{"class":297},[287,730,483],{"class":297},[287,732,734,736,739,741,743],{"class":289,"line":733},15,[287,735,557],{"class":297},[287,737,738],{"class":503},"contentLength",[287,740,469],{"class":297},[287,742,472],{"class":297},[287,744,745],{"class":670}," 2148\n",[287,747,749],{"class":289,"line":748},16,[287,750,677],{"class":297},[287,752,754,756,759,761,763,765,767,770,772,774,777,779,781,784,786,788,791],{"class":289,"line":753},17,[287,755,462],{"class":297},[287,757,758],{"class":465},"response",[287,760,469],{"class":297},[287,762,472],{"class":297},[287,764,498],{"class":297},[287,766,475],{"class":297},[287,768,769],{"class":503},"status",[287,771,469],{"class":297},[287,773,472],{"class":297},[287,775,776],{"class":670}," 200",[287,778,518],{"class":297},[287,780,475],{"class":297},[287,782,783],{"class":503},"duration",[287,785,469],{"class":297},[287,787,472],{"class":297},[287,789,790],{"class":670}," 84",[287,792,793],{"class":297}," }\n",[287,795,797],{"class":289,"line":796},18,[287,798,799],{"class":297},"}\n",[144,801,802,803,806,807,810,811,814,815,810,818,821,822,827],{},"If you set up authentication on the MCP server, ",[258,804,805],{},"user.id"," \u002F ",[258,808,809],{},"user.email"," and ",[258,812,813],{},"session.id"," are also auto-tagged from ",[258,816,817],{},"event.context.user",[258,819,820],{},"event.context.session",". See the ",[199,823,826],{"href":824,"rel":825},"https:\u002F\u002Fmcp-toolkit.nuxt.dev\u002Fadvanced\u002Flogging",[203],"mcp-toolkit logging docs"," for the full schema.",[144,829,830],{},"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).",[427,832,834],{"id":833},"ai-assistant-conversations","AI assistant conversations",[144,836,837],{},"Each conversation captures the full AI run — model, tokens, tool calls, latency:",[277,839,841],{"className":448,"code":840,"language":450,"meta":283,"style":283},"{\n  \"request\": { \"path\": \"\u002F__docus__\u002Fassistant\" },\n  \"assistant\": {\n    \"siteName\": \"Docus\",\n    \"model\": \"google\u002Fgemini-3-flash\",\n    \"tools\": [\"list-pages\", \"get-page\"]\n  },\n  \"ai\": {\n    \"model\": \"google\u002Fgemini-3-flash\",\n    \"inputTokens\": 384,\n    \"outputTokens\": 217,\n    \"totalTokens\": 601,\n    \"toolCalls\": [\"list-pages\", \"get-page\"],\n    \"tools\": [\n      { \"name\": \"list-pages\", \"durationMs\": 92, \"success\": true },\n      { \"name\": \"get-page\", \"durationMs\": 84, \"success\": true }\n    ],\n    \"msToFirstChunk\": 612,\n    \"tokensPerSecond\": 47.2,\n    \"finishReason\": \"stop\"\n  },\n  \"response\": { \"status\": 200, \"duration\": 1840 }\n}\n",[258,842,843,847,876,889,909,929,961,965,978,996,1012,1028,1044,1074,1087,1137,1181,1186,1202,1219,1239,1244,1282],{"__ignoreMap":283},[287,844,845],{"class":289,"line":290},[287,846,457],{"class":297},[287,848,849,851,853,855,857,859,861,863,865,867,869,872,874],{"class":289,"line":305},[287,850,462],{"class":297},[287,852,491],{"class":465},[287,854,469],{"class":297},[287,856,472],{"class":297},[287,858,498],{"class":297},[287,860,475],{"class":297},[287,862,523],{"class":503},[287,864,469],{"class":297},[287,866,472],{"class":297},[287,868,475],{"class":297},[287,870,871],{"class":301},"\u002F__docus__\u002Fassistant",[287,873,469],{"class":297},[287,875,536],{"class":297},[287,877,878,880,883,885,887],{"class":289,"line":486},[287,879,462],{"class":297},[287,881,882],{"class":465},"assistant",[287,884,469],{"class":297},[287,886,472],{"class":297},[287,888,551],{"class":297},[287,890,891,893,896,898,900,902,905,907],{"class":289,"line":539},[287,892,557],{"class":297},[287,894,895],{"class":503},"siteName",[287,897,469],{"class":297},[287,899,472],{"class":297},[287,901,475],{"class":297},[287,903,904],{"class":301},"Docus",[287,906,469],{"class":297},[287,908,483],{"class":297},[287,910,911,913,916,918,920,922,925,927],{"class":289,"line":554},[287,912,557],{"class":297},[287,914,915],{"class":503},"model",[287,917,469],{"class":297},[287,919,472],{"class":297},[287,921,475],{"class":297},[287,923,924],{"class":301},"google\u002Fgemini-3-flash",[287,926,469],{"class":297},[287,928,483],{"class":297},[287,930,931,933,936,938,940,943,945,948,950,952,954,956,958],{"class":289,"line":576},[287,932,557],{"class":297},[287,934,935],{"class":503},"tools",[287,937,469],{"class":297},[287,939,472],{"class":297},[287,941,942],{"class":297}," [",[287,944,469],{"class":297},[287,946,947],{"class":301},"list-pages",[287,949,469],{"class":297},[287,951,518],{"class":297},[287,953,475],{"class":297},[287,955,630],{"class":301},[287,957,469],{"class":297},[287,959,960],{"class":297},"]\n",[287,962,963],{"class":289,"line":596},[287,964,677],{"class":297},[287,966,967,969,972,974,976],{"class":289,"line":616},[287,968,462],{"class":297},[287,970,971],{"class":465},"ai",[287,973,469],{"class":297},[287,975,472],{"class":297},[287,977,551],{"class":297},[287,979,980,982,984,986,988,990,992,994],{"class":289,"line":637},[287,981,557],{"class":297},[287,983,915],{"class":503},[287,985,469],{"class":297},[287,987,472],{"class":297},[287,989,475],{"class":297},[287,991,924],{"class":301},[287,993,469],{"class":297},[287,995,483],{"class":297},[287,997,998,1000,1003,1005,1007,1010],{"class":289,"line":658},[287,999,557],{"class":297},[287,1001,1002],{"class":503},"inputTokens",[287,1004,469],{"class":297},[287,1006,472],{"class":297},[287,1008,1009],{"class":670}," 384",[287,1011,483],{"class":297},[287,1013,1014,1016,1019,1021,1023,1026],{"class":289,"line":674},[287,1015,557],{"class":297},[287,1017,1018],{"class":503},"outputTokens",[287,1020,469],{"class":297},[287,1022,472],{"class":297},[287,1024,1025],{"class":670}," 217",[287,1027,483],{"class":297},[287,1029,1030,1032,1035,1037,1039,1042],{"class":289,"line":680},[287,1031,557],{"class":297},[287,1033,1034],{"class":503},"totalTokens",[287,1036,469],{"class":297},[287,1038,472],{"class":297},[287,1040,1041],{"class":670}," 601",[287,1043,483],{"class":297},[287,1045,1046,1048,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071],{"class":289,"line":694},[287,1047,557],{"class":297},[287,1049,1050],{"class":503},"toolCalls",[287,1052,469],{"class":297},[287,1054,472],{"class":297},[287,1056,942],{"class":297},[287,1058,469],{"class":297},[287,1060,947],{"class":301},[287,1062,469],{"class":297},[287,1064,518],{"class":297},[287,1066,475],{"class":297},[287,1068,630],{"class":301},[287,1070,469],{"class":297},[287,1072,1073],{"class":297},"],\n",[287,1075,1076,1078,1080,1082,1084],{"class":289,"line":713},[287,1077,557],{"class":297},[287,1079,935],{"class":503},[287,1081,469],{"class":297},[287,1083,472],{"class":297},[287,1085,1086],{"class":297}," [\n",[287,1088,1089,1092,1094,1097,1099,1101,1103,1105,1107,1109,1111,1114,1116,1118,1121,1123,1125,1128,1130,1132,1135],{"class":289,"line":733},[287,1090,1091],{"class":297},"      {",[287,1093,475],{"class":297},[287,1095,1096],{"class":670},"name",[287,1098,469],{"class":297},[287,1100,472],{"class":297},[287,1102,475],{"class":297},[287,1104,947],{"class":301},[287,1106,469],{"class":297},[287,1108,518],{"class":297},[287,1110,475],{"class":297},[287,1112,1113],{"class":670},"durationMs",[287,1115,469],{"class":297},[287,1117,472],{"class":297},[287,1119,1120],{"class":670}," 92",[287,1122,518],{"class":297},[287,1124,475],{"class":297},[287,1126,1127],{"class":670},"success",[287,1129,469],{"class":297},[287,1131,472],{"class":297},[287,1133,1134],{"class":297}," true",[287,1136,536],{"class":297},[287,1138,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179],{"class":289,"line":748},[287,1140,1091],{"class":297},[287,1142,475],{"class":297},[287,1144,1096],{"class":670},[287,1146,469],{"class":297},[287,1148,472],{"class":297},[287,1150,475],{"class":297},[287,1152,630],{"class":301},[287,1154,469],{"class":297},[287,1156,518],{"class":297},[287,1158,475],{"class":297},[287,1160,1113],{"class":670},[287,1162,469],{"class":297},[287,1164,472],{"class":297},[287,1166,790],{"class":670},[287,1168,518],{"class":297},[287,1170,475],{"class":297},[287,1172,1127],{"class":670},[287,1174,469],{"class":297},[287,1176,472],{"class":297},[287,1178,1134],{"class":297},[287,1180,793],{"class":297},[287,1182,1183],{"class":289,"line":753},[287,1184,1185],{"class":297},"    ],\n",[287,1187,1188,1190,1193,1195,1197,1200],{"class":289,"line":796},[287,1189,557],{"class":297},[287,1191,1192],{"class":503},"msToFirstChunk",[287,1194,469],{"class":297},[287,1196,472],{"class":297},[287,1198,1199],{"class":670}," 612",[287,1201,483],{"class":297},[287,1203,1205,1207,1210,1212,1214,1217],{"class":289,"line":1204},19,[287,1206,557],{"class":297},[287,1208,1209],{"class":503},"tokensPerSecond",[287,1211,469],{"class":297},[287,1213,472],{"class":297},[287,1215,1216],{"class":670}," 47.2",[287,1218,483],{"class":297},[287,1220,1222,1224,1227,1229,1231,1233,1236],{"class":289,"line":1221},20,[287,1223,557],{"class":297},[287,1225,1226],{"class":503},"finishReason",[287,1228,469],{"class":297},[287,1230,472],{"class":297},[287,1232,475],{"class":297},[287,1234,1235],{"class":301},"stop",[287,1237,1238],{"class":297},"\"\n",[287,1240,1242],{"class":289,"line":1241},21,[287,1243,677],{"class":297},[287,1245,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271,1273,1275,1277,1280],{"class":289,"line":1246},22,[287,1248,462],{"class":297},[287,1250,758],{"class":465},[287,1252,469],{"class":297},[287,1254,472],{"class":297},[287,1256,498],{"class":297},[287,1258,475],{"class":297},[287,1260,769],{"class":503},[287,1262,469],{"class":297},[287,1264,472],{"class":297},[287,1266,776],{"class":670},[287,1268,518],{"class":297},[287,1270,475],{"class":297},[287,1272,783],{"class":503},[287,1274,469],{"class":297},[287,1276,472],{"class":297},[287,1278,1279],{"class":670}," 1840",[287,1281,793],{"class":297},[287,1283,1285],{"class":289,"line":1284},23,[287,1286,799],{"class":297},[144,1288,1289],{},"This lets you answer:",[148,1291,1292,1295,1298,1301],{},[151,1293,1294],{},"How many conversations happen per day?",[151,1296,1297],{},"Which tools are slow or fail?",[151,1299,1300],{},"How long do conversations take, and where is the latency (time-to-first-chunk vs total)?",[151,1302,1303],{},"What's the token volume, and is it growing?",[1305,1306,1308],"h4",{"id":1307},"going-further","Going further",[144,1310,1311,1312,1315,1316,1318],{},"By default, the question text is ",[155,1313,1314],{},"not"," captured (privacy + payload size) and cost is ",[155,1317,1314],{}," estimated. If you want either, override the assistant route in your project and add the missing context:",[277,1320,1325],{"className":1321,"code":1322,"filename":1323,"language":1324,"meta":283,"style":283},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { useLogger } from 'evlog'\nimport { createAILogger } from 'evlog\u002Fai'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const ai = createAILogger(log, {\n    cost: {\n      'google\u002Fgemini-3-flash': { input: 0.075, output: 0.3 }, \u002F\u002F $\u002F1M tokens\n    },\n  })\n\n  const { messages } = await readBody(event)\n  const lastUserMessage = messages.findLast?.((m: { role: string }) => m.role === 'user')\n\n  log.set({\n    assistant: {\n      question: typeof lastUserMessage?.content === 'string'\n        ? lastUserMessage.content.slice(0, 500)\n        : undefined,\n    },\n  })\n\n  \u002F\u002F ... rest of the handler, using `ai.wrap(model)` as usual\n})\n","server\u002Fapi\u002F__docus__\u002Fassistant.post.ts","typescript",[258,1326,1327,1353,1373,1379,1412,1433,1453,1462,1501,1506,1513,1517,1542,1605,1609,1623,1632,1657,1685,1693,1697,1703,1707,1712],{"__ignoreMap":283},[287,1328,1329,1333,1335,1338,1341,1344,1347,1350],{"class":289,"line":290},[287,1330,1332],{"class":1331},"s7zQu","import",[287,1334,498],{"class":297},[287,1336,1337],{"class":293}," useLogger",[287,1339,1340],{"class":297}," }",[287,1342,1343],{"class":1331}," from",[287,1345,1346],{"class":297}," '",[287,1348,1349],{"class":301},"evlog",[287,1351,1352],{"class":297},"'\n",[287,1354,1355,1357,1359,1362,1364,1366,1368,1371],{"class":289,"line":305},[287,1356,1332],{"class":1331},[287,1358,498],{"class":297},[287,1360,1361],{"class":293}," createAILogger",[287,1363,1340],{"class":297},[287,1365,1343],{"class":1331},[287,1367,1346],{"class":297},[287,1369,1370],{"class":301},"evlog\u002Fai",[287,1372,1352],{"class":297},[287,1374,1375],{"class":289,"line":486},[287,1376,1378],{"emptyLinePlaceholder":1377},true,"\n",[287,1380,1381,1384,1387,1391,1394,1397,1400,1404,1407,1410],{"class":289,"line":539},[287,1382,1383],{"class":1331},"export",[287,1385,1386],{"class":1331}," default",[287,1388,1390],{"class":1389},"s2Zo4"," defineEventHandler",[287,1392,1393],{"class":293},"(",[287,1395,1396],{"class":465},"async",[287,1398,1399],{"class":297}," (",[287,1401,1403],{"class":1402},"sHdIc","event",[287,1405,1406],{"class":297},")",[287,1408,1409],{"class":465}," =>",[287,1411,551],{"class":297},[287,1413,1414,1417,1420,1423,1425,1428,1430],{"class":289,"line":554},[287,1415,1416],{"class":465},"  const",[287,1418,1419],{"class":293}," log",[287,1421,1422],{"class":297}," =",[287,1424,1337],{"class":1389},[287,1426,1393],{"class":1427},"swJcz",[287,1429,1403],{"class":293},[287,1431,1432],{"class":1427},")\n",[287,1434,1435,1437,1440,1442,1444,1446,1449,1451],{"class":289,"line":576},[287,1436,1416],{"class":465},[287,1438,1439],{"class":293}," ai",[287,1441,1422],{"class":297},[287,1443,1361],{"class":1389},[287,1445,1393],{"class":1427},[287,1447,1448],{"class":293},"log",[287,1450,518],{"class":297},[287,1452,551],{"class":297},[287,1454,1455,1458,1460],{"class":289,"line":596},[287,1456,1457],{"class":1427},"    cost",[287,1459,472],{"class":297},[287,1461,551],{"class":297},[287,1463,1464,1467,1469,1472,1474,1476,1479,1481,1484,1486,1489,1491,1494,1497],{"class":289,"line":616},[287,1465,1466],{"class":297},"      '",[287,1468,924],{"class":1427},[287,1470,1471],{"class":297},"'",[287,1473,472],{"class":297},[287,1475,498],{"class":297},[287,1477,1478],{"class":1427}," input",[287,1480,472],{"class":297},[287,1482,1483],{"class":670}," 0.075",[287,1485,518],{"class":297},[287,1487,1488],{"class":1427}," output",[287,1490,472],{"class":297},[287,1492,1493],{"class":670}," 0.3",[287,1495,1496],{"class":297}," },",[287,1498,1500],{"class":1499},"sHwdD"," \u002F\u002F $\u002F1M tokens\n",[287,1502,1503],{"class":289,"line":637},[287,1504,1505],{"class":297},"    },\n",[287,1507,1508,1511],{"class":289,"line":658},[287,1509,1510],{"class":297},"  }",[287,1512,1432],{"class":1427},[287,1514,1515],{"class":289,"line":674},[287,1516,1378],{"emptyLinePlaceholder":1377},[287,1518,1519,1521,1523,1526,1528,1530,1533,1536,1538,1540],{"class":289,"line":680},[287,1520,1416],{"class":465},[287,1522,498],{"class":297},[287,1524,1525],{"class":293}," messages",[287,1527,1340],{"class":297},[287,1529,1422],{"class":297},[287,1531,1532],{"class":1331}," await",[287,1534,1535],{"class":1389}," readBody",[287,1537,1393],{"class":1427},[287,1539,1403],{"class":293},[287,1541,1432],{"class":1427},[287,1543,1544,1546,1549,1551,1553,1555,1558,1561,1563,1565,1568,1570,1572,1575,1577,1580,1583,1585,1588,1590,1593,1596,1598,1601,1603],{"class":289,"line":694},[287,1545,1416],{"class":465},[287,1547,1548],{"class":293}," lastUserMessage",[287,1550,1422],{"class":297},[287,1552,1525],{"class":293},[287,1554,413],{"class":297},[287,1556,1557],{"class":1389},"findLast",[287,1559,1560],{"class":297},"?.",[287,1562,1393],{"class":1427},[287,1564,1393],{"class":297},[287,1566,1567],{"class":1402},"m",[287,1569,472],{"class":297},[287,1571,498],{"class":297},[287,1573,1574],{"class":1427}," role",[287,1576,472],{"class":297},[287,1578,1579],{"class":503}," string",[287,1581,1582],{"class":297}," })",[287,1584,1409],{"class":465},[287,1586,1587],{"class":293}," m",[287,1589,413],{"class":297},[287,1591,1592],{"class":293},"role",[287,1594,1595],{"class":297}," ===",[287,1597,1346],{"class":297},[287,1599,1600],{"class":301},"user",[287,1602,1471],{"class":297},[287,1604,1432],{"class":1427},[287,1606,1607],{"class":289,"line":713},[287,1608,1378],{"emptyLinePlaceholder":1377},[287,1610,1611,1614,1616,1619,1621],{"class":289,"line":733},[287,1612,1613],{"class":293},"  log",[287,1615,413],{"class":297},[287,1617,1618],{"class":1389},"set",[287,1620,1393],{"class":1427},[287,1622,457],{"class":297},[287,1624,1625,1628,1630],{"class":289,"line":748},[287,1626,1627],{"class":1427},"    assistant",[287,1629,472],{"class":297},[287,1631,551],{"class":297},[287,1633,1634,1637,1639,1642,1644,1646,1648,1650,1652,1655],{"class":289,"line":753},[287,1635,1636],{"class":1427},"      question",[287,1638,472],{"class":297},[287,1640,1641],{"class":297}," typeof",[287,1643,1548],{"class":293},[287,1645,1560],{"class":297},[287,1647,685],{"class":293},[287,1649,1595],{"class":297},[287,1651,1346],{"class":297},[287,1653,1654],{"class":301},"string",[287,1656,1352],{"class":297},[287,1658,1659,1662,1664,1666,1668,1670,1673,1675,1678,1680,1683],{"class":289,"line":796},[287,1660,1661],{"class":297},"        ?",[287,1663,1548],{"class":293},[287,1665,413],{"class":297},[287,1667,685],{"class":293},[287,1669,413],{"class":297},[287,1671,1672],{"class":1389},"slice",[287,1674,1393],{"class":1427},[287,1676,1677],{"class":670},"0",[287,1679,518],{"class":297},[287,1681,1682],{"class":670}," 500",[287,1684,1432],{"class":1427},[287,1686,1687,1690],{"class":289,"line":1204},[287,1688,1689],{"class":297},"        :",[287,1691,1692],{"class":297}," undefined,\n",[287,1694,1695],{"class":289,"line":1221},[287,1696,1505],{"class":297},[287,1698,1699,1701],{"class":289,"line":1241},[287,1700,1510],{"class":297},[287,1702,1432],{"class":1427},[287,1704,1705],{"class":289,"line":1246},[287,1706,1378],{"emptyLinePlaceholder":1377},[287,1708,1709],{"class":289,"line":1284},[287,1710,1711],{"class":1499},"  \u002F\u002F ... rest of the handler, using `ai.wrap(model)` as usual\n",[287,1713,1715,1718],{"class":289,"line":1714},24,[287,1716,1717],{"class":297},"}",[287,1719,1432],{"class":293},[144,1721,1722,1723,1726,1727,1730],{},"You then get ",[258,1724,1725],{},"ai.estimatedCost"," (in dollars) and ",[258,1728,1729],{},"assistant.question"," on every event.",[427,1732,1734],{"id":1733},"errors","Errors",[144,1736,1737],{},"Any thrown error is captured with its cause chain, the route it broke on, and any context the handler had attached:",[277,1739,1741],{"className":448,"code":1740,"language":450,"meta":283,"style":283},"{\n  \"request\": { \"method\": \"POST\", \"path\": \"\u002Fmcp\" },\n  \"mcp\": { \"tool\": \"get-page\", \"session_id\": \"session_xyz\" },\n  \"content\": { \"path\": \"\u002Fen\u002Ftypo\", \"collectionName\": \"docs_en\" },\n  \"error\": {\n    \"message\": \"Page \\\"\u002Fen\u002Ftypo\\\" not found in collection \\\"docs_en\\\"\",\n    \"why\": \"No content document matches this path\",\n    \"fix\": \"Call list-pages to discover available paths\",\n    \"stack\": \"...\"\n  },\n  \"response\": { \"status\": 404, \"duration\": 12 }\n}\n",[258,1742,1743,1747,1791,1836,1883,1896,1932,1952,1972,1990,1994,2032],{"__ignoreMap":283},[287,1744,1745],{"class":289,"line":290},[287,1746,457],{"class":297},[287,1748,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789],{"class":289,"line":305},[287,1750,462],{"class":297},[287,1752,491],{"class":465},[287,1754,469],{"class":297},[287,1756,472],{"class":297},[287,1758,498],{"class":297},[287,1760,475],{"class":297},[287,1762,504],{"class":503},[287,1764,469],{"class":297},[287,1766,472],{"class":297},[287,1768,475],{"class":297},[287,1770,513],{"class":301},[287,1772,469],{"class":297},[287,1774,518],{"class":297},[287,1776,475],{"class":297},[287,1778,523],{"class":503},[287,1780,469],{"class":297},[287,1782,472],{"class":297},[287,1784,475],{"class":297},[287,1786,436],{"class":301},[287,1788,469],{"class":297},[287,1790,536],{"class":297},[287,1792,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825,1827,1829,1832,1834],{"class":289,"line":486},[287,1794,462],{"class":297},[287,1796,544],{"class":465},[287,1798,469],{"class":297},[287,1800,472],{"class":297},[287,1802,498],{"class":297},[287,1804,475],{"class":297},[287,1806,621],{"class":503},[287,1808,469],{"class":297},[287,1810,472],{"class":297},[287,1812,475],{"class":297},[287,1814,630],{"class":301},[287,1816,469],{"class":297},[287,1818,518],{"class":297},[287,1820,475],{"class":297},[287,1822,642],{"class":503},[287,1824,469],{"class":297},[287,1826,472],{"class":297},[287,1828,475],{"class":297},[287,1830,1831],{"class":301},"session_xyz",[287,1833,469],{"class":297},[287,1835,536],{"class":297},[287,1837,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1861,1863,1865,1867,1870,1872,1874,1876,1879,1881],{"class":289,"line":539},[287,1839,462],{"class":297},[287,1841,685],{"class":465},[287,1843,469],{"class":297},[287,1845,472],{"class":297},[287,1847,498],{"class":297},[287,1849,475],{"class":297},[287,1851,523],{"class":503},[287,1853,469],{"class":297},[287,1855,472],{"class":297},[287,1857,475],{"class":297},[287,1859,1860],{"class":301},"\u002Fen\u002Ftypo",[287,1862,469],{"class":297},[287,1864,518],{"class":297},[287,1866,475],{"class":297},[287,1868,1869],{"class":503},"collectionName",[287,1871,469],{"class":297},[287,1873,472],{"class":297},[287,1875,475],{"class":297},[287,1877,1878],{"class":301},"docs_en",[287,1880,469],{"class":297},[287,1882,536],{"class":297},[287,1884,1885,1887,1890,1892,1894],{"class":289,"line":554},[287,1886,462],{"class":297},[287,1888,1889],{"class":465},"error",[287,1891,469],{"class":297},[287,1893,472],{"class":297},[287,1895,551],{"class":297},[287,1897,1898,1900,1903,1905,1907,1909,1912,1915,1917,1919,1922,1924,1926,1928,1930],{"class":289,"line":576},[287,1899,557],{"class":297},[287,1901,1902],{"class":503},"message",[287,1904,469],{"class":297},[287,1906,472],{"class":297},[287,1908,475],{"class":297},[287,1910,1911],{"class":301},"Page ",[287,1913,1914],{"class":293},"\\\"",[287,1916,1860],{"class":301},[287,1918,1914],{"class":293},[287,1920,1921],{"class":301}," not found in collection ",[287,1923,1914],{"class":293},[287,1925,1878],{"class":301},[287,1927,1914],{"class":293},[287,1929,469],{"class":297},[287,1931,483],{"class":297},[287,1933,1934,1936,1939,1941,1943,1945,1948,1950],{"class":289,"line":596},[287,1935,557],{"class":297},[287,1937,1938],{"class":503},"why",[287,1940,469],{"class":297},[287,1942,472],{"class":297},[287,1944,475],{"class":297},[287,1946,1947],{"class":301},"No content document matches this path",[287,1949,469],{"class":297},[287,1951,483],{"class":297},[287,1953,1954,1956,1959,1961,1963,1965,1968,1970],{"class":289,"line":616},[287,1955,557],{"class":297},[287,1957,1958],{"class":503},"fix",[287,1960,469],{"class":297},[287,1962,472],{"class":297},[287,1964,475],{"class":297},[287,1966,1967],{"class":301},"Call list-pages to discover available paths",[287,1969,469],{"class":297},[287,1971,483],{"class":297},[287,1973,1974,1976,1979,1981,1983,1985,1988],{"class":289,"line":637},[287,1975,557],{"class":297},[287,1977,1978],{"class":503},"stack",[287,1980,469],{"class":297},[287,1982,472],{"class":297},[287,1984,475],{"class":297},[287,1986,1987],{"class":301},"...",[287,1989,1238],{"class":297},[287,1991,1992],{"class":289,"line":658},[287,1993,677],{"class":297},[287,1995,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2017,2019,2021,2023,2025,2027,2030],{"class":289,"line":674},[287,1997,462],{"class":297},[287,1999,758],{"class":465},[287,2001,469],{"class":297},[287,2003,472],{"class":297},[287,2005,498],{"class":297},[287,2007,475],{"class":297},[287,2009,769],{"class":503},[287,2011,469],{"class":297},[287,2013,472],{"class":297},[287,2015,2016],{"class":670}," 404",[287,2018,518],{"class":297},[287,2020,475],{"class":297},[287,2022,783],{"class":503},[287,2024,469],{"class":297},[287,2026,472],{"class":297},[287,2028,2029],{"class":670}," 12",[287,2031,793],{"class":297},[287,2033,2034],{"class":289,"line":680},[287,2035,799],{"class":297},[139,2037,2039],{"id":2038},"in-dev","In dev",[144,2041,2042,2043,2046],{},"Run ",[258,2044,2045],{},"pnpm dev"," and any request prints a tree directly in your terminal:",[277,2048,2053],{"className":2049,"code":2051,"language":2052},[2050],"language-text","INFO  GET \u002F__docus__\u002Fassistant 200 (1840ms) [req_abc]\n├─ assistant\n│  ├─ model \"google\u002Fgemini-3-flash\"\n│  └─ tools [\"get-page\", \"list-pages\"]\n└─ ai\n   ├─ inputTokens 384\n   ├─ outputTokens 217\n   ├─ msToFirstChunk 612\n   └─ toolCalls [\"list-pages\", \"get-page\"]\n","text",[258,2054,2051],{"__ignoreMap":283},[144,2056,2057,2058,2061,2062,2065],{},"Set ",[258,2059,2060],{},"evlog.silent: true"," in ",[258,2063,2064],{},"nuxt.config.ts"," if you want events to flow only to the drain (typical on Vercel where stdout already goes to your platform logs).",[139,2067,63],{"id":2068},"customization",[144,2070,2071,2072,472],{},"Most users don't need to touch anything beyond the env var. If you do, override defaults in ",[258,2073,2064],{},[277,2075,2077],{"className":1321,"code":2076,"filename":2064,"language":1324,"meta":283,"style":283},"export default defineNuxtConfig({\n  evlog: {\n    env: { service: 'my-docs' },\n    sampling: {\n      \u002F\u002F keep 25% of normal info events, all 4xx and any request > 1s\n      rates: { info: 25 },\n      keep: [{ status: 400 }, { duration: 1000 }],\n    },\n    redact: {\n      paths: ['headers.authorization', 'body.email'],\n    },\n  },\n})\n",[258,2078,2079,2092,2101,2124,2133,2138,2157,2196,2200,2209,2238,2242,2246],{"__ignoreMap":283},[287,2080,2081,2083,2085,2088,2090],{"class":289,"line":290},[287,2082,1383],{"class":1331},[287,2084,1386],{"class":1331},[287,2086,2087],{"class":1389}," defineNuxtConfig",[287,2089,1393],{"class":293},[287,2091,457],{"class":297},[287,2093,2094,2097,2099],{"class":289,"line":305},[287,2095,2096],{"class":1427},"  evlog",[287,2098,472],{"class":297},[287,2100,551],{"class":297},[287,2102,2103,2106,2108,2110,2113,2115,2117,2120,2122],{"class":289,"line":486},[287,2104,2105],{"class":1427},"    env",[287,2107,472],{"class":297},[287,2109,498],{"class":297},[287,2111,2112],{"class":1427}," service",[287,2114,472],{"class":297},[287,2116,1346],{"class":297},[287,2118,2119],{"class":301},"my-docs",[287,2121,1471],{"class":297},[287,2123,536],{"class":297},[287,2125,2126,2129,2131],{"class":289,"line":539},[287,2127,2128],{"class":1427},"    sampling",[287,2130,472],{"class":297},[287,2132,551],{"class":297},[287,2134,2135],{"class":289,"line":554},[287,2136,2137],{"class":1499},"      \u002F\u002F keep 25% of normal info events, all 4xx and any request > 1s\n",[287,2139,2140,2143,2145,2147,2150,2152,2155],{"class":289,"line":576},[287,2141,2142],{"class":1427},"      rates",[287,2144,472],{"class":297},[287,2146,498],{"class":297},[287,2148,2149],{"class":1427}," info",[287,2151,472],{"class":297},[287,2153,2154],{"class":670}," 25",[287,2156,536],{"class":297},[287,2158,2159,2162,2164,2166,2169,2172,2174,2177,2179,2181,2184,2186,2189,2191,2194],{"class":289,"line":596},[287,2160,2161],{"class":1427},"      keep",[287,2163,472],{"class":297},[287,2165,942],{"class":293},[287,2167,2168],{"class":297},"{",[287,2170,2171],{"class":1427}," status",[287,2173,472],{"class":297},[287,2175,2176],{"class":670}," 400",[287,2178,1496],{"class":297},[287,2180,498],{"class":297},[287,2182,2183],{"class":1427}," duration",[287,2185,472],{"class":297},[287,2187,2188],{"class":670}," 1000",[287,2190,1340],{"class":297},[287,2192,2193],{"class":293},"]",[287,2195,483],{"class":297},[287,2197,2198],{"class":289,"line":616},[287,2199,1505],{"class":297},[287,2201,2202,2205,2207],{"class":289,"line":637},[287,2203,2204],{"class":1427},"    redact",[287,2206,472],{"class":297},[287,2208,551],{"class":297},[287,2210,2211,2214,2216,2218,2220,2223,2225,2227,2229,2232,2234,2236],{"class":289,"line":658},[287,2212,2213],{"class":1427},"      paths",[287,2215,472],{"class":297},[287,2217,942],{"class":293},[287,2219,1471],{"class":297},[287,2221,2222],{"class":301},"headers.authorization",[287,2224,1471],{"class":297},[287,2226,518],{"class":297},[287,2228,1346],{"class":297},[287,2230,2231],{"class":301},"body.email",[287,2233,1471],{"class":297},[287,2235,2193],{"class":293},[287,2237,483],{"class":297},[287,2239,2240],{"class":289,"line":674},[287,2241,1505],{"class":297},[287,2243,2244],{"class":289,"line":680},[287,2245,677],{"class":297},[287,2247,2248,2250],{"class":289,"line":694},[287,2249,1717],{"class":297},[287,2251,1432],{"class":293},[144,2253,2254],{},"Common knobs:",[2256,2257,2258,2271],"table",{},[2259,2260,2261],"thead",{},[2262,2263,2264,2268],"tr",{},[2265,2266,2267],"th",{},"Option",[2265,2269,2270],{},"When to use it",[2272,2273,2274,2285,2295,2305,2315,2325],"tbody",{},[2262,2275,2276,2282],{},[2277,2278,2279],"td",{},[258,2280,2281],{},"env.service",[2277,2283,2284],{},"You run several docs sites and want them tagged separately in the drain",[2262,2286,2287,2292],{},[2277,2288,2289],{},[258,2290,2291],{},"silent: true",[2277,2293,2294],{},"Stdout already goes somewhere (Vercel, Cloudflare) — avoid double output",[2262,2296,2297,2302],{},[2277,2298,2299],{},[258,2300,2301],{},"sampling.rates",[2277,2303,2304],{},"High-traffic site, you don't need every single event",[2262,2306,2307,2312],{},[2277,2308,2309],{},[258,2310,2311],{},"sampling.keep",[2277,2313,2314],{},"Always keep slow \u002F errored requests regardless of sampling",[2262,2316,2317,2322],{},[2277,2318,2319],{},[258,2320,2321],{},"redact",[2277,2323,2324],{},"Add custom paths on top of the built-in PII redaction",[2262,2326,2327,2332],{},[2277,2328,2329],{},[258,2330,2331],{},"enabled: false",[2277,2333,2334],{},"Turn the whole thing off",[139,2336,2338],{"id":2337},"custom-drain-advanced","Custom drain (advanced)",[144,2340,2341],{},"If the env-var detection doesn't fit (multiple drains, internal pipeline, conditional routing), drop a server plugin in your project:",[277,2343,2346],{"className":1321,"code":2344,"filename":2345,"language":1324,"meta":283,"style":283},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const axiom = createAxiomDrain({ dataset: 'docs-prod' })\n  const otlp = createOTLPDrain({ endpoint: process.env.OTLP_ENDPOINT! })\n\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    await Promise.all([axiom(ctx), otlp(ctx)])\n  })\n})\n","server\u002Fplugins\u002Fevlog-custom.ts",[258,2347,2348,2368,2388,2392,2414,2445,2485,2489,2529,2565,2571],{"__ignoreMap":283},[287,2349,2350,2352,2354,2357,2359,2361,2363,2366],{"class":289,"line":290},[287,2351,1332],{"class":1331},[287,2353,498],{"class":297},[287,2355,2356],{"class":293}," createAxiomDrain",[287,2358,1340],{"class":297},[287,2360,1343],{"class":1331},[287,2362,1346],{"class":297},[287,2364,2365],{"class":301},"evlog\u002Faxiom",[287,2367,1352],{"class":297},[287,2369,2370,2372,2374,2377,2379,2381,2383,2386],{"class":289,"line":305},[287,2371,1332],{"class":1331},[287,2373,498],{"class":297},[287,2375,2376],{"class":293}," createOTLPDrain",[287,2378,1340],{"class":297},[287,2380,1343],{"class":1331},[287,2382,1346],{"class":297},[287,2384,2385],{"class":301},"evlog\u002Fotlp",[287,2387,1352],{"class":297},[287,2389,2390],{"class":289,"line":486},[287,2391,1378],{"emptyLinePlaceholder":1377},[287,2393,2394,2396,2398,2401,2403,2405,2408,2410,2412],{"class":289,"line":539},[287,2395,1383],{"class":1331},[287,2397,1386],{"class":1331},[287,2399,2400],{"class":1389}," defineNitroPlugin",[287,2402,1393],{"class":293},[287,2404,1393],{"class":297},[287,2406,2407],{"class":1402},"nitroApp",[287,2409,1406],{"class":297},[287,2411,1409],{"class":465},[287,2413,551],{"class":297},[287,2415,2416,2418,2421,2423,2425,2427,2429,2432,2434,2436,2439,2441,2443],{"class":289,"line":554},[287,2417,1416],{"class":465},[287,2419,2420],{"class":293}," axiom",[287,2422,1422],{"class":297},[287,2424,2356],{"class":1389},[287,2426,1393],{"class":1427},[287,2428,2168],{"class":297},[287,2430,2431],{"class":1427}," dataset",[287,2433,472],{"class":297},[287,2435,1346],{"class":297},[287,2437,2438],{"class":301},"docs-prod",[287,2440,1471],{"class":297},[287,2442,1340],{"class":297},[287,2444,1432],{"class":1427},[287,2446,2447,2449,2452,2454,2456,2458,2460,2463,2465,2468,2470,2473,2475,2478,2481,2483],{"class":289,"line":576},[287,2448,1416],{"class":465},[287,2450,2451],{"class":293}," otlp",[287,2453,1422],{"class":297},[287,2455,2376],{"class":1389},[287,2457,1393],{"class":1427},[287,2459,2168],{"class":297},[287,2461,2462],{"class":1427}," endpoint",[287,2464,472],{"class":297},[287,2466,2467],{"class":293}," process",[287,2469,413],{"class":297},[287,2471,2472],{"class":293},"env",[287,2474,413],{"class":297},[287,2476,2477],{"class":293},"OTLP_ENDPOINT",[287,2479,2480],{"class":297},"!",[287,2482,1340],{"class":297},[287,2484,1432],{"class":1427},[287,2486,2487],{"class":289,"line":596},[287,2488,1378],{"emptyLinePlaceholder":1377},[287,2490,2491,2494,2496,2499,2501,2504,2506,2508,2511,2513,2515,2518,2520,2523,2525,2527],{"class":289,"line":616},[287,2492,2493],{"class":293},"  nitroApp",[287,2495,413],{"class":297},[287,2497,2498],{"class":293},"hooks",[287,2500,413],{"class":297},[287,2502,2503],{"class":1389},"hook",[287,2505,1393],{"class":1427},[287,2507,1471],{"class":297},[287,2509,2510],{"class":301},"evlog:drain",[287,2512,1471],{"class":297},[287,2514,518],{"class":297},[287,2516,2517],{"class":465}," async",[287,2519,1399],{"class":297},[287,2521,2522],{"class":1402},"ctx",[287,2524,1406],{"class":297},[287,2526,1409],{"class":465},[287,2528,551],{"class":297},[287,2530,2531,2534,2537,2539,2542,2545,2548,2550,2552,2554,2556,2558,2560,2562],{"class":289,"line":637},[287,2532,2533],{"class":1331},"    await",[287,2535,2536],{"class":503}," Promise",[287,2538,413],{"class":297},[287,2540,2541],{"class":1389},"all",[287,2543,2544],{"class":1427},"([",[287,2546,2547],{"class":1389},"axiom",[287,2549,1393],{"class":1427},[287,2551,2522],{"class":293},[287,2553,1406],{"class":1427},[287,2555,518],{"class":297},[287,2557,2451],{"class":1389},[287,2559,1393],{"class":1427},[287,2561,2522],{"class":293},[287,2563,2564],{"class":1427},")])\n",[287,2566,2567,2569],{"class":289,"line":658},[287,2568,1510],{"class":297},[287,2570,1432],{"class":1427},[287,2572,2573,2575],{"class":289,"line":674},[287,2574,1717],{"class":297},[287,2576,1432],{"class":293},[144,2578,2579,2580,413],{},"The full drain API is documented at ",[199,2581,2583],{"href":410,"rel":2582},[203],"evlog.dev",[139,2585,2587],{"id":2586},"adding-context-from-your-own-pages","Adding context from your own pages",[144,2589,2590],{},"If you wrote a custom server route or a Vue page that you want to track, the same logger is available:",[277,2592,2595],{"className":1321,"code":2593,"filename":2594,"language":1324,"meta":283,"style":283},"import { useLogger, createError } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ contact: { topic: body.topic } })\n\n  if (!body.email) {\n    throw createError({\n      message: 'Email is required',\n      status: 400,\n      why: 'Form submission missing email field',\n    })\n  }\n\n  await sendEmail(body)\n  return { ok: true }\n})\n","server\u002Fapi\u002Fcontact.post.ts",[258,2596,2597,2620,2624,2646,2662,2681,2685,2722,2726,2748,2759,2775,2786,2802,2809,2814,2818,2832,2849],{"__ignoreMap":283},[287,2598,2599,2601,2603,2605,2607,2610,2612,2614,2616,2618],{"class":289,"line":290},[287,2600,1332],{"class":1331},[287,2602,498],{"class":297},[287,2604,1337],{"class":293},[287,2606,518],{"class":297},[287,2608,2609],{"class":293}," createError",[287,2611,1340],{"class":297},[287,2613,1343],{"class":1331},[287,2615,1346],{"class":297},[287,2617,1349],{"class":301},[287,2619,1352],{"class":297},[287,2621,2622],{"class":289,"line":305},[287,2623,1378],{"emptyLinePlaceholder":1377},[287,2625,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644],{"class":289,"line":486},[287,2627,1383],{"class":1331},[287,2629,1386],{"class":1331},[287,2631,1390],{"class":1389},[287,2633,1393],{"class":293},[287,2635,1396],{"class":465},[287,2637,1399],{"class":297},[287,2639,1403],{"class":1402},[287,2641,1406],{"class":297},[287,2643,1409],{"class":465},[287,2645,551],{"class":297},[287,2647,2648,2650,2652,2654,2656,2658,2660],{"class":289,"line":539},[287,2649,1416],{"class":465},[287,2651,1419],{"class":293},[287,2653,1422],{"class":297},[287,2655,1337],{"class":1389},[287,2657,1393],{"class":1427},[287,2659,1403],{"class":293},[287,2661,1432],{"class":1427},[287,2663,2664,2666,2669,2671,2673,2675,2677,2679],{"class":289,"line":554},[287,2665,1416],{"class":465},[287,2667,2668],{"class":293}," body",[287,2670,1422],{"class":297},[287,2672,1532],{"class":1331},[287,2674,1535],{"class":1389},[287,2676,1393],{"class":1427},[287,2678,1403],{"class":293},[287,2680,1432],{"class":1427},[287,2682,2683],{"class":289,"line":576},[287,2684,1378],{"emptyLinePlaceholder":1377},[287,2686,2687,2689,2691,2693,2695,2697,2700,2702,2704,2707,2709,2711,2713,2716,2718,2720],{"class":289,"line":596},[287,2688,1613],{"class":293},[287,2690,413],{"class":297},[287,2692,1618],{"class":1389},[287,2694,1393],{"class":1427},[287,2696,2168],{"class":297},[287,2698,2699],{"class":1427}," contact",[287,2701,472],{"class":297},[287,2703,498],{"class":297},[287,2705,2706],{"class":1427}," topic",[287,2708,472],{"class":297},[287,2710,2668],{"class":293},[287,2712,413],{"class":297},[287,2714,2715],{"class":293},"topic",[287,2717,1340],{"class":297},[287,2719,1340],{"class":297},[287,2721,1432],{"class":1427},[287,2723,2724],{"class":289,"line":616},[287,2725,1378],{"emptyLinePlaceholder":1377},[287,2727,2728,2731,2733,2735,2738,2740,2743,2746],{"class":289,"line":637},[287,2729,2730],{"class":1331},"  if",[287,2732,1399],{"class":1427},[287,2734,2480],{"class":297},[287,2736,2737],{"class":293},"body",[287,2739,413],{"class":297},[287,2741,2742],{"class":293},"email",[287,2744,2745],{"class":1427},") ",[287,2747,457],{"class":297},[287,2749,2750,2753,2755,2757],{"class":289,"line":658},[287,2751,2752],{"class":1331},"    throw",[287,2754,2609],{"class":1389},[287,2756,1393],{"class":1427},[287,2758,457],{"class":297},[287,2760,2761,2764,2766,2768,2771,2773],{"class":289,"line":674},[287,2762,2763],{"class":1427},"      message",[287,2765,472],{"class":297},[287,2767,1346],{"class":297},[287,2769,2770],{"class":301},"Email is required",[287,2772,1471],{"class":297},[287,2774,483],{"class":297},[287,2776,2777,2780,2782,2784],{"class":289,"line":680},[287,2778,2779],{"class":1427},"      status",[287,2781,472],{"class":297},[287,2783,2176],{"class":670},[287,2785,483],{"class":297},[287,2787,2788,2791,2793,2795,2798,2800],{"class":289,"line":694},[287,2789,2790],{"class":1427},"      why",[287,2792,472],{"class":297},[287,2794,1346],{"class":297},[287,2796,2797],{"class":301},"Form submission missing email field",[287,2799,1471],{"class":297},[287,2801,483],{"class":297},[287,2803,2804,2807],{"class":289,"line":713},[287,2805,2806],{"class":297},"    }",[287,2808,1432],{"class":1427},[287,2810,2811],{"class":289,"line":733},[287,2812,2813],{"class":297},"  }\n",[287,2815,2816],{"class":289,"line":748},[287,2817,1378],{"emptyLinePlaceholder":1377},[287,2819,2820,2823,2826,2828,2830],{"class":289,"line":753},[287,2821,2822],{"class":1331},"  await",[287,2824,2825],{"class":1389}," sendEmail",[287,2827,1393],{"class":1427},[287,2829,2737],{"class":293},[287,2831,1432],{"class":1427},[287,2833,2834,2837,2839,2842,2844,2847],{"class":289,"line":796},[287,2835,2836],{"class":1331},"  return",[287,2838,498],{"class":297},[287,2840,2841],{"class":1427}," ok",[287,2843,472],{"class":297},[287,2845,1134],{"class":2846},"sfNiH",[287,2848,793],{"class":297},[287,2850,2851,2853],{"class":289,"line":1204},[287,2852,1717],{"class":297},[287,2854,1432],{"class":293},[277,2856,2861],{"className":2857,"code":2858,"filename":2859,"language":2860,"meta":283,"style":283},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { log } from 'evlog\u002Fclient'\n\nfunction onCopy(snippet: string) {\n  log.info({ action: 'copy_code', code: { length: snippet.length } })\n}\n\u003C\u002Fscript>\n","components\u002FCopyButton.vue","vue",[258,2862,2863,2889,2908,2912,2933,2986,2990],{"__ignoreMap":283},[287,2864,2865,2868,2871,2874,2877,2879,2881,2884,2886],{"class":289,"line":290},[287,2866,2867],{"class":297},"\u003C",[287,2869,2870],{"class":1427},"script",[287,2872,2873],{"class":465}," setup",[287,2875,2876],{"class":465}," lang",[287,2878,298],{"class":297},[287,2880,469],{"class":297},[287,2882,2883],{"class":301},"ts",[287,2885,469],{"class":297},[287,2887,2888],{"class":297},">\n",[287,2890,2891,2893,2895,2897,2899,2901,2903,2906],{"class":289,"line":305},[287,2892,1332],{"class":1331},[287,2894,498],{"class":297},[287,2896,1419],{"class":293},[287,2898,1340],{"class":297},[287,2900,1343],{"class":1331},[287,2902,1346],{"class":297},[287,2904,2905],{"class":301},"evlog\u002Fclient",[287,2907,1352],{"class":297},[287,2909,2910],{"class":289,"line":486},[287,2911,1378],{"emptyLinePlaceholder":1377},[287,2913,2914,2917,2920,2922,2925,2927,2929,2931],{"class":289,"line":539},[287,2915,2916],{"class":465},"function",[287,2918,2919],{"class":1389}," onCopy",[287,2921,1393],{"class":297},[287,2923,2924],{"class":1402},"snippet",[287,2926,472],{"class":297},[287,2928,1579],{"class":503},[287,2930,1406],{"class":297},[287,2932,551],{"class":297},[287,2934,2935,2937,2939,2942,2944,2946,2949,2951,2953,2956,2958,2960,2963,2965,2967,2970,2972,2975,2977,2980,2982,2984],{"class":289,"line":554},[287,2936,1613],{"class":293},[287,2938,413],{"class":297},[287,2940,2941],{"class":1389},"info",[287,2943,1393],{"class":1427},[287,2945,2168],{"class":297},[287,2947,2948],{"class":1427}," action",[287,2950,472],{"class":297},[287,2952,1346],{"class":297},[287,2954,2955],{"class":301},"copy_code",[287,2957,1471],{"class":297},[287,2959,518],{"class":297},[287,2961,2962],{"class":1427}," code",[287,2964,472],{"class":297},[287,2966,498],{"class":297},[287,2968,2969],{"class":1427}," length",[287,2971,472],{"class":297},[287,2973,2974],{"class":293}," snippet",[287,2976,413],{"class":297},[287,2978,2979],{"class":293},"length",[287,2981,1340],{"class":297},[287,2983,1340],{"class":297},[287,2985,1432],{"class":1427},[287,2987,2988],{"class":289,"line":576},[287,2989,799],{"class":297},[287,2991,2992,2995,2997],{"class":289,"line":596},[287,2993,2994],{"class":297},"\u003C\u002F",[287,2996,2870],{"class":1427},[287,2998,2888],{"class":297},[3000,3001,3002,3007,3060],"tip",{},[144,3003,3004,3005,472],{},"Client logs print to the browser console by default. To forward them to your drain alongside server events, enable the transport in ",[258,3006,2064],{},[277,3008,3010],{"className":1321,"code":3009,"filename":2064,"language":1324,"meta":283,"style":283},"export default defineNuxtConfig({\n  evlog: {\n    transport: { enabled: true },\n  },\n})\n",[258,3011,3012,3024,3032,3050,3054],{"__ignoreMap":283},[287,3013,3014,3016,3018,3020,3022],{"class":289,"line":290},[287,3015,1383],{"class":1331},[287,3017,1386],{"class":1331},[287,3019,2087],{"class":1389},[287,3021,1393],{"class":293},[287,3023,457],{"class":297},[287,3025,3026,3028,3030],{"class":289,"line":305},[287,3027,2096],{"class":1427},[287,3029,472],{"class":297},[287,3031,551],{"class":297},[287,3033,3034,3037,3039,3041,3044,3046,3048],{"class":289,"line":486},[287,3035,3036],{"class":1427},"    transport",[287,3038,472],{"class":297},[287,3040,498],{"class":297},[287,3042,3043],{"class":1427}," enabled",[287,3045,472],{"class":297},[287,3047,1134],{"class":2846},[287,3049,536],{"class":297},[287,3051,3052],{"class":289,"line":539},[287,3053,677],{"class":297},[287,3055,3056,3058],{"class":289,"line":554},[287,3057,1717],{"class":297},[287,3059,1432],{"class":293},[144,3061,3062,3063,3066],{},"This adds a small ingest endpoint at ",[258,3064,3065],{},"\u002Fapi\u002F_evlog\u002Fingest"," that receives client events and lets them flow through the same drain pipeline as server events.",[3068,3069,3070],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":283,"searchDepth":305,"depth":305,"links":3072},[3073,3074,3075,3076,3081,3082,3083,3084],{"id":141,"depth":305,"text":142},{"id":183,"depth":305,"text":184},{"id":264,"depth":305,"text":265},{"id":424,"depth":305,"text":425,"children":3077},[3078,3079,3080],{"id":429,"depth":486,"text":430},{"id":833,"depth":486,"text":834},{"id":1733,"depth":486,"text":1734},{"id":2038,"depth":305,"text":2039},{"id":2068,"depth":305,"text":63},{"id":2337,"depth":305,"text":2338},{"id":2586,"depth":305,"text":2587},"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.","md",null,{},{"icon":76},{"title":73,"description":3085},"M080F_XmTDnsWzBWw2HAVEdGQByAVmPc8TeDJKyFyOI",[3093,3095],{"title":68,"path":69,"stem":70,"description":3094,"icon":71,"children":-1},"Create multi-language documentation with Docus built-in i18n support.",{"title":78,"path":79,"stem":80,"description":3096,"icon":81,"children":-1},"Build interactive and reusable elements with Nuxt components",1777986766009]