[{"data":1,"prerenderedAt":2712},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-telemetry-setup":598,"-use-cases-telemetry-setup-surround":2707},[4,35,85,138,318,453,475,534,573],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":104,"path":105,"stem":106,"icon":107},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":109,"path":110,"stem":111,"icon":112},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":114,"path":115,"stem":116,"icon":117},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":119,"path":120,"stem":121,"icon":122},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":124,"path":125,"stem":126,"icon":127},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":129,"path":130,"stem":131,"icon":132},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":134,"path":135,"stem":136,"icon":137},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":139,"path":140,"stem":141,"children":142,"page":34},"Integrate","\u002Fintegrate","4.integrate",[143,147,230],{"title":41,"path":144,"stem":145,"icon":146},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":148,"path":149,"stem":150,"children":151,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[152,155,185,210],{"title":41,"path":153,"stem":154,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[160,165,170,175,180],{"title":161,"path":162,"stem":163,"icon":164},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":166,"path":167,"stem":168,"icon":169},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":171,"path":172,"stem":173,"icon":174},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":176,"path":177,"stem":178,"icon":179},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":181,"path":182,"stem":183,"icon":184},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":186,"path":187,"stem":188,"children":189,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[190,195,200,205],{"title":191,"path":192,"stem":193,"icon":194},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":196,"path":197,"stem":198,"icon":199},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":201,"path":202,"stem":203,"icon":204},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":206,"path":207,"stem":208,"icon":209},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":211,"path":212,"stem":213,"children":214,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[215,220,225],{"title":216,"path":217,"stem":218,"icon":219},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":221,"path":222,"stem":223,"icon":224},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":226,"path":227,"stem":228,"icon":229},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":231,"path":232,"stem":233,"children":234,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[235,239,244,249,254,259,264,269,274,279,284,289,294,299,303,308,313],{"title":41,"path":236,"stem":237,"icon":238},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":240,"path":241,"stem":242,"icon":243},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":245,"path":246,"stem":247,"icon":248},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":250,"path":251,"stem":252,"icon":253},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":255,"path":256,"stem":257,"icon":258},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":260,"path":261,"stem":262,"icon":263},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":265,"path":266,"stem":267,"icon":268},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":270,"path":271,"stem":272,"icon":273},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":275,"path":276,"stem":277,"icon":278},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":280,"path":281,"stem":282,"icon":283},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":285,"path":286,"stem":287,"icon":288},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":290,"path":291,"stem":292,"icon":293},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":295,"path":296,"stem":297,"icon":298},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":300,"path":301,"stem":302,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":304,"path":305,"stem":306,"icon":307},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":309,"path":310,"stem":311,"icon":312},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":314,"path":315,"stem":316,"icon":317},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[323,326,331,359,386,418,439,444,449],{"title":41,"path":324,"stem":325,"icon":107},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":327,"path":328,"stem":329,"icon":330},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":332,"icon":333,"path":334,"stem":335,"children":336,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[337,340,345,350,355],{"title":41,"path":338,"stem":339,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":341,"path":342,"stem":343,"icon":344},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":346,"path":347,"stem":348,"icon":349},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":351,"path":352,"stem":353,"icon":354},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":356,"path":357,"stem":358,"icon":137},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":360,"icon":361,"path":362,"stem":363,"children":364,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[365,368,373,378,382],{"title":41,"path":366,"stem":367,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":369,"path":370,"stem":371,"icon":372},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":374,"path":375,"stem":376,"icon":377},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":379,"path":380,"stem":381,"icon":330},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":383,"path":384,"stem":385,"icon":112},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":387,"icon":388,"path":389,"stem":390,"children":391,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[392,395,400,405,410,414],{"title":41,"path":393,"stem":394,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":396,"path":397,"stem":398,"icon":399},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":404},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":406,"path":407,"stem":408,"icon":409},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":411,"path":412,"stem":413,"icon":388},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":415,"path":416,"stem":417,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":356,"icon":112,"path":419,"stem":420,"children":421,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[422,425,430,435],{"title":41,"path":423,"stem":424,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":426,"path":427,"stem":428,"icon":429},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":431,"path":432,"stem":433,"icon":434},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":436,"path":437,"stem":438,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":440,"path":441,"stem":442,"icon":443},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":445,"path":446,"stem":447,"icon":448},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":450,"path":451,"stem":452,"icon":434},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":454,"path":455,"stem":456,"children":457,"page":34},"Libraries","\u002Flibraries","6.libraries",[458,462,467,470],{"title":41,"path":459,"stem":460,"icon":461},"\u002Flibraries\u002Foverview","6.libraries\u002F0.overview","i-lucide-package",{"title":463,"path":464,"stem":465,"icon":466},"Emitting Events","\u002Flibraries\u002Femitting","6.libraries\u002F1.emitting","i-lucide-radio",{"title":56,"path":468,"stem":469,"icon":59},"\u002Flibraries\u002Ferrors","6.libraries\u002F2.errors",{"title":471,"path":472,"stem":473,"icon":474},"Testing","\u002Flibraries\u002Ftesting","6.libraries\u002F3.testing","i-lucide-flask-conical",{"title":476,"path":477,"stem":478,"children":479,"page":34},"Extend","\u002Fextend","7.extend",[480,484,489,494,498,503,507,511,515,519,524,529],{"title":41,"path":481,"stem":482,"icon":483},"\u002Fextend\u002Foverview","7.extend\u002F0.overview","i-lucide-blocks",{"title":485,"path":486,"stem":487,"icon":488},"Stream","\u002Fextend\u002Fstream","7.extend\u002F1.stream","i-lucide-radio-tower",{"title":490,"path":491,"stem":492,"icon":493},"Custom framework","\u002Fextend\u002Fcustom-framework","7.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":495,"path":496,"stem":497,"icon":488},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","7.extend\u002F11.diagnostics-channel",{"title":499,"path":500,"stem":501,"icon":502},"FS reader","\u002Fextend\u002Ffs-reader","7.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":504,"stem":505,"icon":506},"\u002Fextend\u002Fconsumer-recipes","7.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":508,"path":509,"stem":510,"icon":483},"Plugins","\u002Fextend\u002Fplugins","7.extend\u002F4.plugins",{"title":512,"path":513,"stem":514,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","7.extend\u002F5.custom-enrichers",{"title":516,"path":517,"stem":518,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","7.extend\u002F6.tail-sampling",{"title":520,"path":521,"stem":522,"icon":523},"Identity headers","\u002Fextend\u002Fidentity-headers","7.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":525,"path":526,"stem":527,"icon":528},"Custom drains","\u002Fextend\u002Fcustom-drains","7.extend\u002F8.custom-drains","i-lucide-share-2",{"title":530,"path":531,"stem":532,"icon":533},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","7.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":535,"stem":536,"children":537,"page":34},"\u002Freference","8.reference",[538,542,547,550,555,559,564,568],{"title":41,"path":539,"stem":540,"icon":541},"\u002Freference\u002Foverview","8.reference\u002F0.overview","i-lucide-book-marked",{"title":543,"path":544,"stem":545,"icon":546},"Configuration","\u002Freference\u002Fconfiguration","8.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":548,"stem":549,"icon":112},"\u002Freference\u002Fperformance","8.reference\u002F2.performance",{"title":551,"path":552,"stem":553,"icon":554},"Vite Plugin","\u002Freference\u002Fvite-plugin","8.reference\u002F3.vite-plugin","i-custom-vite",{"title":556,"path":557,"stem":558,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","8.reference\u002F4.best-practices",{"title":560,"path":561,"stem":562,"icon":563},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","8.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":565,"path":566,"stem":567,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","8.reference\u002F6.agent-skills",{"title":569,"path":570,"stem":571,"icon":572},"Cost","\u002Freference\u002Fcost","8.reference\u002F7.cost","i-lucide-receipt",{"title":574,"path":575,"stem":576,"children":577,"page":34},"Compare","\u002Fcompare","9.compare",[578,582,586,590,594],{"title":579,"path":580,"stem":581,"icon":563},"evlog vs Pino","\u002Fcompare\u002Fpino","9.compare\u002F1.pino",{"title":583,"path":584,"stem":585,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","9.compare\u002F2.opentelemetry",{"title":587,"path":588,"stem":589,"icon":563},"evlog vs LogTape","\u002Fcompare\u002Flogtape","9.compare\u002F3.logtape",{"title":591,"path":592,"stem":593,"icon":563},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","9.compare\u002F4.winston",{"title":595,"path":596,"stem":597,"icon":563},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","9.compare\u002F5.consola",{"id":599,"title":600,"body":601,"description":2695,"extension":2696,"links":2697,"meta":2703,"navigation":2704,"path":427,"seo":2705,"stem":428,"__hash__":2706},"docs\u002F5.use-cases\u002F4.telemetry\u002F02.setup.md","Telemetry Setup",{"type":602,"value":603,"toc":2686},"minimark",[604,609,613,702,756,775,779,797,1264,1269,1278,1386,1397,1401,1408,1974,1988,2040,2047,2242,2246,2256,2451,2481,2637,2641,2679,2682],[605,606,608],"h2",{"id":607},"configure-delivery","Configure delivery",[610,611,612],"p",{},"Point the CLI at your ingestion URL when you ship it, baked into the binary and overridable per environment:",[614,615,621],"pre",{"className":616,"code":617,"filename":618,"language":619,"meta":620,"style":620},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","withTelemetry(command, {\n  name: TOOL,\n  version: VERSION,\n  endpoint: 'https:\u002F\u002Ftelemetry.my-tool.dev\u002Fapi\u002Ftelemetry\u002Fingest',\n})\n","src\u002Findex.ts","ts","",[622,623,624,644,660,673,693],"code",{"__ignoreMap":620},[625,626,629,633,637,641],"span",{"class":627,"line":628},"line",1,[625,630,632],{"class":631},"s2Zo4","withTelemetry",[625,634,636],{"class":635},"sTEyZ","(command",[625,638,640],{"class":639},"sMK4o",",",[625,642,643],{"class":639}," {\n",[625,645,647,651,654,657],{"class":627,"line":646},2,[625,648,650],{"class":649},"swJcz","  name",[625,652,653],{"class":639},":",[625,655,656],{"class":635}," TOOL",[625,658,659],{"class":639},",\n",[625,661,663,666,668,671],{"class":627,"line":662},3,[625,664,665],{"class":649},"  version",[625,667,653],{"class":639},[625,669,670],{"class":635}," VERSION",[625,672,659],{"class":639},[625,674,676,679,681,684,688,691],{"class":627,"line":675},4,[625,677,678],{"class":649},"  endpoint",[625,680,653],{"class":639},[625,682,683],{"class":639}," '",[625,685,687],{"class":686},"sfazB","https:\u002F\u002Ftelemetry.my-tool.dev\u002Fapi\u002Ftelemetry\u002Fingest",[625,689,690],{"class":639},"'",[625,692,659],{"class":639},[625,694,696,699],{"class":627,"line":695},5,[625,697,698],{"class":639},"}",[625,700,701],{"class":635},")\n",[703,704,705,718],"table",{},[706,707,708],"thead",{},[709,710,711,715],"tr",{},[712,713,714],"th",{},"Override",[712,716,717],{},"Effect",[719,720,721,732,746],"tbody",{},[709,722,723,729],{},[724,725,726],"td",{},[622,727,728],{},"EVLOG_TELEMETRY_ENDPOINT",[724,730,731],{},"Replaces the baked-in URL (staging, self-hosted)",[709,733,734,743],{},[724,735,736,739,740],{},[622,737,738],{},"EVLOG_TELEMETRY=0"," \u002F ",[622,741,742],{},"DO_NOT_TRACK=1",[724,744,745],{},"No recording, no send",[709,747,748,753],{},[724,749,750],{},[622,751,752],{},"EVLOG_TELEMETRY_DEBUG=1",[724,754,755],{},"Print payloads to stderr without sending",[610,757,758,759,762,763,766,767,770,771,774],{},"The built-in HTTP drain POSTs ",[622,760,761],{},"Content-Type: application\u002Fjson"," with body ",[622,764,765],{},"{ events: RunEvent[] }"," and a 400ms timeout. On success (",[622,768,769],{},"res.ok","), delivered keys are removed from the outbox. ",[622,772,773],{},"flush()"," is capped at 500ms and never throws.",[605,776,778],{"id":777},"setup-with-citty","Setup with citty",[610,780,781,782,785,786,788,789,792,793,796],{},"Wrap your root command in ",[622,783,784],{},"withTelemetry()",", typically in ",[622,787,618],{},", the file that calls ",[622,790,791],{},"runMain()",". Subcommands can live in the same file or in ",[622,794,795],{},"src\u002Fcommands\u002F*.ts","; only the entrypoint needs the wrapper.",[614,798,800],{"className":616,"code":799,"filename":618,"language":619,"meta":620,"style":620},"import { defineCommand, runMain } from 'citty'\nimport { withTelemetry, defineTelemetryCommands } from '@evlog\u002Ftelemetry'\nimport { doctorCommand } from '.\u002Fcommands\u002Fdoctor'\nimport { syncCommand } from '.\u002Fcommands\u002Fsync'\n\nconst TOOL = 'my-tool'\nconst VERSION = '1.0.0'\n\nexport const main = withTelemetry(\n  defineCommand({\n    meta: { name: 'my-tool', description: '…', version: VERSION },\n    subCommands: {\n      doctor: doctorCommand,\n      sync: syncCommand,\n      telemetry: defineTelemetryCommands({ name: TOOL }),\n    },\n  }),\n  {\n    name: TOOL,\n    version: VERSION,\n    endpoint: 'https:\u002F\u002Ftelemetry.my-tool.dev\u002Fapi\u002Ftelemetry\u002Fingest',\n    collect: {\n      flags: { format: ['json', 'csv'] },\n      fields: { framework: ['nuxt', 'next'] },\n    },\n  },\n)\n\nrunMain(main)\n",[622,801,802,833,858,878,898,904,924,941,946,965,977,1024,1034,1046,1058,1086,1092,1102,1108,1120,1132,1148,1158,1197,1234,1239,1245,1250,1255],{"__ignoreMap":620},[625,803,804,808,811,814,816,819,822,825,827,830],{"class":627,"line":628},[625,805,807],{"class":806},"s7zQu","import",[625,809,810],{"class":639}," {",[625,812,813],{"class":635}," defineCommand",[625,815,640],{"class":639},[625,817,818],{"class":635}," runMain",[625,820,821],{"class":639}," }",[625,823,824],{"class":806}," from",[625,826,683],{"class":639},[625,828,829],{"class":686},"citty",[625,831,832],{"class":639},"'\n",[625,834,835,837,839,842,844,847,849,851,853,856],{"class":627,"line":646},[625,836,807],{"class":806},[625,838,810],{"class":639},[625,840,841],{"class":635}," withTelemetry",[625,843,640],{"class":639},[625,845,846],{"class":635}," defineTelemetryCommands",[625,848,821],{"class":639},[625,850,824],{"class":806},[625,852,683],{"class":639},[625,854,855],{"class":686},"@evlog\u002Ftelemetry",[625,857,832],{"class":639},[625,859,860,862,864,867,869,871,873,876],{"class":627,"line":662},[625,861,807],{"class":806},[625,863,810],{"class":639},[625,865,866],{"class":635}," doctorCommand",[625,868,821],{"class":639},[625,870,824],{"class":806},[625,872,683],{"class":639},[625,874,875],{"class":686},".\u002Fcommands\u002Fdoctor",[625,877,832],{"class":639},[625,879,880,882,884,887,889,891,893,896],{"class":627,"line":675},[625,881,807],{"class":806},[625,883,810],{"class":639},[625,885,886],{"class":635}," syncCommand",[625,888,821],{"class":639},[625,890,824],{"class":806},[625,892,683],{"class":639},[625,894,895],{"class":686},".\u002Fcommands\u002Fsync",[625,897,832],{"class":639},[625,899,900],{"class":627,"line":695},[625,901,903],{"emptyLinePlaceholder":902},true,"\n",[625,905,907,911,914,917,919,922],{"class":627,"line":906},6,[625,908,910],{"class":909},"spNyl","const",[625,912,913],{"class":635}," TOOL ",[625,915,916],{"class":639},"=",[625,918,683],{"class":639},[625,920,921],{"class":686},"my-tool",[625,923,832],{"class":639},[625,925,927,929,932,934,936,939],{"class":627,"line":926},7,[625,928,910],{"class":909},[625,930,931],{"class":635}," VERSION ",[625,933,916],{"class":639},[625,935,683],{"class":639},[625,937,938],{"class":686},"1.0.0",[625,940,832],{"class":639},[625,942,944],{"class":627,"line":943},8,[625,945,903],{"emptyLinePlaceholder":902},[625,947,949,952,955,958,960,962],{"class":627,"line":948},9,[625,950,951],{"class":806},"export",[625,953,954],{"class":909}," const",[625,956,957],{"class":635}," main ",[625,959,916],{"class":639},[625,961,841],{"class":631},[625,963,964],{"class":635},"(\n",[625,966,968,971,974],{"class":627,"line":967},10,[625,969,970],{"class":631},"  defineCommand",[625,972,973],{"class":635},"(",[625,975,976],{"class":639},"{\n",[625,978,980,983,985,987,990,992,994,996,998,1000,1003,1005,1007,1010,1012,1014,1017,1019,1021],{"class":627,"line":979},11,[625,981,982],{"class":649},"    meta",[625,984,653],{"class":639},[625,986,810],{"class":639},[625,988,989],{"class":649}," name",[625,991,653],{"class":639},[625,993,683],{"class":639},[625,995,921],{"class":686},[625,997,690],{"class":639},[625,999,640],{"class":639},[625,1001,1002],{"class":649}," description",[625,1004,653],{"class":639},[625,1006,683],{"class":639},[625,1008,1009],{"class":686},"…",[625,1011,690],{"class":639},[625,1013,640],{"class":639},[625,1015,1016],{"class":649}," version",[625,1018,653],{"class":639},[625,1020,931],{"class":635},[625,1022,1023],{"class":639},"},\n",[625,1025,1027,1030,1032],{"class":627,"line":1026},12,[625,1028,1029],{"class":649},"    subCommands",[625,1031,653],{"class":639},[625,1033,643],{"class":639},[625,1035,1037,1040,1042,1044],{"class":627,"line":1036},13,[625,1038,1039],{"class":649},"      doctor",[625,1041,653],{"class":639},[625,1043,866],{"class":635},[625,1045,659],{"class":639},[625,1047,1049,1052,1054,1056],{"class":627,"line":1048},14,[625,1050,1051],{"class":649},"      sync",[625,1053,653],{"class":639},[625,1055,886],{"class":635},[625,1057,659],{"class":639},[625,1059,1061,1064,1066,1068,1070,1073,1075,1077,1079,1081,1084],{"class":627,"line":1060},15,[625,1062,1063],{"class":649},"      telemetry",[625,1065,653],{"class":639},[625,1067,846],{"class":631},[625,1069,973],{"class":635},[625,1071,1072],{"class":639},"{",[625,1074,989],{"class":649},[625,1076,653],{"class":639},[625,1078,913],{"class":635},[625,1080,698],{"class":639},[625,1082,1083],{"class":635},")",[625,1085,659],{"class":639},[625,1087,1089],{"class":627,"line":1088},16,[625,1090,1091],{"class":639},"    },\n",[625,1093,1095,1098,1100],{"class":627,"line":1094},17,[625,1096,1097],{"class":639},"  }",[625,1099,1083],{"class":635},[625,1101,659],{"class":639},[625,1103,1105],{"class":627,"line":1104},18,[625,1106,1107],{"class":639},"  {\n",[625,1109,1111,1114,1116,1118],{"class":627,"line":1110},19,[625,1112,1113],{"class":649},"    name",[625,1115,653],{"class":639},[625,1117,656],{"class":635},[625,1119,659],{"class":639},[625,1121,1123,1126,1128,1130],{"class":627,"line":1122},20,[625,1124,1125],{"class":649},"    version",[625,1127,653],{"class":639},[625,1129,670],{"class":635},[625,1131,659],{"class":639},[625,1133,1135,1138,1140,1142,1144,1146],{"class":627,"line":1134},21,[625,1136,1137],{"class":649},"    endpoint",[625,1139,653],{"class":639},[625,1141,683],{"class":639},[625,1143,687],{"class":686},[625,1145,690],{"class":639},[625,1147,659],{"class":639},[625,1149,1151,1154,1156],{"class":627,"line":1150},22,[625,1152,1153],{"class":649},"    collect",[625,1155,653],{"class":639},[625,1157,643],{"class":639},[625,1159,1161,1164,1166,1168,1171,1173,1176,1178,1181,1183,1185,1187,1190,1192,1195],{"class":627,"line":1160},23,[625,1162,1163],{"class":649},"      flags",[625,1165,653],{"class":639},[625,1167,810],{"class":639},[625,1169,1170],{"class":649}," format",[625,1172,653],{"class":639},[625,1174,1175],{"class":635}," [",[625,1177,690],{"class":639},[625,1179,1180],{"class":686},"json",[625,1182,690],{"class":639},[625,1184,640],{"class":639},[625,1186,683],{"class":639},[625,1188,1189],{"class":686},"csv",[625,1191,690],{"class":639},[625,1193,1194],{"class":635},"] ",[625,1196,1023],{"class":639},[625,1198,1200,1203,1205,1207,1210,1212,1214,1216,1219,1221,1223,1225,1228,1230,1232],{"class":627,"line":1199},24,[625,1201,1202],{"class":649},"      fields",[625,1204,653],{"class":639},[625,1206,810],{"class":639},[625,1208,1209],{"class":649}," framework",[625,1211,653],{"class":639},[625,1213,1175],{"class":635},[625,1215,690],{"class":639},[625,1217,1218],{"class":686},"nuxt",[625,1220,690],{"class":639},[625,1222,640],{"class":639},[625,1224,683],{"class":639},[625,1226,1227],{"class":686},"next",[625,1229,690],{"class":639},[625,1231,1194],{"class":635},[625,1233,1023],{"class":639},[625,1235,1237],{"class":627,"line":1236},25,[625,1238,1091],{"class":639},[625,1240,1242],{"class":627,"line":1241},26,[625,1243,1244],{"class":639},"  },\n",[625,1246,1248],{"class":627,"line":1247},27,[625,1249,701],{"class":635},[625,1251,1253],{"class":627,"line":1252},28,[625,1254,903],{"emptyLinePlaceholder":902},[625,1256,1258,1261],{"class":627,"line":1257},29,[625,1259,1260],{"class":631},"runMain",[625,1262,1263],{"class":635},"(main)\n",[1265,1266,1268],"h3",{"id":1267},"what-gets-recorded-automatically","What gets recorded automatically",[610,1270,1271,1273,1274,1277],{},[622,1272,632],{}," walks your citty tree. Each ",[622,1275,1276],{},"run"," handler produces one event, with no per-command telemetry boilerplate.",[703,1279,1280,1298],{},[706,1281,1282],{},[709,1283,1284,1287,1292],{},[712,1285,1286],{},"Invocation",[712,1288,1289],{},[622,1290,1291],{},"event.command",[712,1293,1294,1295],{},"Notes on ",[622,1296,1297],{},"flags",[719,1299,1300,1317,1333,1351,1371],{},[709,1301,1302,1307,1311],{},[724,1303,1304],{},[622,1305,1306],{},"my-tool doctor",[724,1308,1309],{},[622,1310,119],{},[724,1312,1313,1316],{},[622,1314,1315],{},"{}"," — nothing was passed, and defaults are not choices",[709,1318,1319,1324,1328],{},[724,1320,1321],{},[622,1322,1323],{},"my-tool doctor --json",[724,1325,1326],{},[622,1327,119],{},[724,1329,1330],{},[622,1331,1332],{},"{ json: true }",[709,1334,1335,1340,1345],{},[724,1336,1337],{},[622,1338,1339],{},"my-tool sync --dry-run --output .\u002Fout",[724,1341,1342],{},[622,1343,1344],{},"sync",[724,1346,1347,1350],{},[622,1348,1349],{},"{ dryRun: true, output: \"\u003Cset>\" }"," — the path itself is never sent",[709,1352,1353,1358,1362],{},[724,1354,1355],{},[622,1356,1357],{},"my-tool sync --format json",[724,1359,1360],{},[622,1361,1344],{},[724,1363,1364,1367,1368],{},[622,1365,1366],{},"{ format: \"json\" }"," only if allowlisted in ",[622,1369,1370],{},"collect.flags",[709,1372,1373,1378,1383],{},[724,1374,1375],{},[622,1376,1377],{},"my-tool telemetry status",[724,1379,1380],{},[622,1381,1382],{},"telemetry status",[724,1384,1385],{},"nested subcommands join with a space",[610,1387,1388,1389,1392,1393,1396],{},"The root ",[622,1390,1391],{},"meta.name"," is not prefixed when the root only delegates to ",[622,1394,1395],{},"subCommands",".",[1265,1398,1400],{"id":1399},"enriching-a-run","Enriching a run",[610,1402,1403,1404,1407],{},"Call ",[622,1405,1406],{},"telemetry.set()"," anywhere inside a command handler, or in helpers that run on the same async stack (the run context is preserved via AsyncLocalStorage).",[1409,1410,1411],"code-collapse",{},[614,1412,1415],{"className":616,"code":1413,"filename":1414,"language":619,"meta":620,"style":620},"import { telemetry } from '@evlog\u002Ftelemetry'\nimport { existsSync } from 'node:fs'\nimport { resolveConfigPath } from '..\u002Flib\u002Fconfig'\n\nasync function runHealthChecks() {\n  let checksFailed = 0\n  let checksWarn = 0\n\n  const configPath = resolveConfigPath()\n  if (!existsSync(configPath)) {\n    checksFailed++\n  }\n\n  try {\n    await fetch('https:\u002F\u002Fregistry.npmjs.org\u002Fmy-tool')\n  } catch {\n    checksWarn++\n  }\n\n  \u002F\u002F Counters land in event.custom on the wide event for this run\n  telemetry.set({ checksFailed, checksWarn })\n  return checksFailed === 0\n}\n\nexport const doctorCommand = {\n  meta: { name: 'doctor', description: 'Check environment' },\n  args: {\n    json: { type: 'boolean', alias: 'j' },\n  },\n  async run({ args }: { args: { json?: boolean } }) {\n    const ok = await runHealthChecks()\n    if (!ok) {\n      throw Object.assign(new Error('Health checks failed'), { code: 'DOCTOR_FAILED' })\n    }\n    if (!args.json) process.stdout.write('ok\\n')\n  },\n}\n","src\u002Fcommands\u002Fdoctor.ts",[622,1416,1417,1436,1456,1476,1480,1496,1511,1522,1526,1541,1565,1573,1578,1582,1589,1608,1617,1624,1628,1632,1638,1662,1674,1679,1683,1696,1731,1740,1777,1781,1825,1843,1861,1914,1920,1964,1969],{"__ignoreMap":620},[625,1418,1419,1421,1423,1426,1428,1430,1432,1434],{"class":627,"line":628},[625,1420,807],{"class":806},[625,1422,810],{"class":639},[625,1424,1425],{"class":635}," telemetry",[625,1427,821],{"class":639},[625,1429,824],{"class":806},[625,1431,683],{"class":639},[625,1433,855],{"class":686},[625,1435,832],{"class":639},[625,1437,1438,1440,1442,1445,1447,1449,1451,1454],{"class":627,"line":646},[625,1439,807],{"class":806},[625,1441,810],{"class":639},[625,1443,1444],{"class":635}," existsSync",[625,1446,821],{"class":639},[625,1448,824],{"class":806},[625,1450,683],{"class":639},[625,1452,1453],{"class":686},"node:fs",[625,1455,832],{"class":639},[625,1457,1458,1460,1462,1465,1467,1469,1471,1474],{"class":627,"line":662},[625,1459,807],{"class":806},[625,1461,810],{"class":639},[625,1463,1464],{"class":635}," resolveConfigPath",[625,1466,821],{"class":639},[625,1468,824],{"class":806},[625,1470,683],{"class":639},[625,1472,1473],{"class":686},"..\u002Flib\u002Fconfig",[625,1475,832],{"class":639},[625,1477,1478],{"class":627,"line":675},[625,1479,903],{"emptyLinePlaceholder":902},[625,1481,1482,1485,1488,1491,1494],{"class":627,"line":695},[625,1483,1484],{"class":909},"async",[625,1486,1487],{"class":909}," function",[625,1489,1490],{"class":631}," runHealthChecks",[625,1492,1493],{"class":639},"()",[625,1495,643],{"class":639},[625,1497,1498,1501,1504,1507],{"class":627,"line":906},[625,1499,1500],{"class":909},"  let",[625,1502,1503],{"class":635}," checksFailed",[625,1505,1506],{"class":639}," =",[625,1508,1510],{"class":1509},"sbssI"," 0\n",[625,1512,1513,1515,1518,1520],{"class":627,"line":926},[625,1514,1500],{"class":909},[625,1516,1517],{"class":635}," checksWarn",[625,1519,1506],{"class":639},[625,1521,1510],{"class":1509},[625,1523,1524],{"class":627,"line":943},[625,1525,903],{"emptyLinePlaceholder":902},[625,1527,1528,1531,1534,1536,1538],{"class":627,"line":948},[625,1529,1530],{"class":909},"  const",[625,1532,1533],{"class":635}," configPath",[625,1535,1506],{"class":639},[625,1537,1464],{"class":631},[625,1539,1540],{"class":649},"()\n",[625,1542,1543,1546,1549,1552,1555,1557,1560,1563],{"class":627,"line":967},[625,1544,1545],{"class":806},"  if",[625,1547,1548],{"class":649}," (",[625,1550,1551],{"class":639},"!",[625,1553,1554],{"class":631},"existsSync",[625,1556,973],{"class":649},[625,1558,1559],{"class":635},"configPath",[625,1561,1562],{"class":649},")) ",[625,1564,976],{"class":639},[625,1566,1567,1570],{"class":627,"line":979},[625,1568,1569],{"class":635},"    checksFailed",[625,1571,1572],{"class":639},"++\n",[625,1574,1575],{"class":627,"line":1026},[625,1576,1577],{"class":639},"  }\n",[625,1579,1580],{"class":627,"line":1036},[625,1581,903],{"emptyLinePlaceholder":902},[625,1583,1584,1587],{"class":627,"line":1048},[625,1585,1586],{"class":806},"  try",[625,1588,643],{"class":639},[625,1590,1591,1594,1597,1599,1601,1604,1606],{"class":627,"line":1060},[625,1592,1593],{"class":806},"    await",[625,1595,1596],{"class":631}," fetch",[625,1598,973],{"class":649},[625,1600,690],{"class":639},[625,1602,1603],{"class":686},"https:\u002F\u002Fregistry.npmjs.org\u002Fmy-tool",[625,1605,690],{"class":639},[625,1607,701],{"class":649},[625,1609,1610,1612,1615],{"class":627,"line":1088},[625,1611,1097],{"class":639},[625,1613,1614],{"class":806}," catch",[625,1616,643],{"class":639},[625,1618,1619,1622],{"class":627,"line":1094},[625,1620,1621],{"class":635},"    checksWarn",[625,1623,1572],{"class":639},[625,1625,1626],{"class":627,"line":1104},[625,1627,1577],{"class":639},[625,1629,1630],{"class":627,"line":1110},[625,1631,903],{"emptyLinePlaceholder":902},[625,1633,1634],{"class":627,"line":1122},[625,1635,1637],{"class":1636},"sHwdD","  \u002F\u002F Counters land in event.custom on the wide event for this run\n",[625,1639,1640,1643,1645,1648,1650,1652,1654,1656,1658,1660],{"class":627,"line":1134},[625,1641,1642],{"class":635},"  telemetry",[625,1644,1396],{"class":639},[625,1646,1647],{"class":631},"set",[625,1649,973],{"class":649},[625,1651,1072],{"class":639},[625,1653,1503],{"class":635},[625,1655,640],{"class":639},[625,1657,1517],{"class":635},[625,1659,821],{"class":639},[625,1661,701],{"class":649},[625,1663,1664,1667,1669,1672],{"class":627,"line":1150},[625,1665,1666],{"class":806},"  return",[625,1668,1503],{"class":635},[625,1670,1671],{"class":639}," ===",[625,1673,1510],{"class":1509},[625,1675,1676],{"class":627,"line":1160},[625,1677,1678],{"class":639},"}\n",[625,1680,1681],{"class":627,"line":1199},[625,1682,903],{"emptyLinePlaceholder":902},[625,1684,1685,1687,1689,1692,1694],{"class":627,"line":1236},[625,1686,951],{"class":806},[625,1688,954],{"class":909},[625,1690,1691],{"class":635}," doctorCommand ",[625,1693,916],{"class":639},[625,1695,643],{"class":639},[625,1697,1698,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1726,1728],{"class":627,"line":1241},[625,1699,1700],{"class":649},"  meta",[625,1702,653],{"class":639},[625,1704,810],{"class":639},[625,1706,989],{"class":649},[625,1708,653],{"class":639},[625,1710,683],{"class":639},[625,1712,119],{"class":686},[625,1714,690],{"class":639},[625,1716,640],{"class":639},[625,1718,1002],{"class":649},[625,1720,653],{"class":639},[625,1722,683],{"class":639},[625,1724,1725],{"class":686},"Check environment",[625,1727,690],{"class":639},[625,1729,1730],{"class":639}," },\n",[625,1732,1733,1736,1738],{"class":627,"line":1247},[625,1734,1735],{"class":649},"  args",[625,1737,653],{"class":639},[625,1739,643],{"class":639},[625,1741,1742,1745,1747,1749,1752,1754,1756,1759,1761,1763,1766,1768,1770,1773,1775],{"class":627,"line":1252},[625,1743,1744],{"class":649},"    json",[625,1746,653],{"class":639},[625,1748,810],{"class":639},[625,1750,1751],{"class":649}," type",[625,1753,653],{"class":639},[625,1755,683],{"class":639},[625,1757,1758],{"class":686},"boolean",[625,1760,690],{"class":639},[625,1762,640],{"class":639},[625,1764,1765],{"class":649}," alias",[625,1767,653],{"class":639},[625,1769,683],{"class":639},[625,1771,1772],{"class":686},"j",[625,1774,690],{"class":639},[625,1776,1730],{"class":639},[625,1778,1779],{"class":627,"line":1257},[625,1780,1244],{"class":639},[625,1782,1784,1787,1790,1793,1797,1800,1802,1804,1806,1808,1811,1814,1818,1820,1823],{"class":627,"line":1783},30,[625,1785,1786],{"class":909},"  async",[625,1788,1789],{"class":649}," run",[625,1791,1792],{"class":639},"({",[625,1794,1796],{"class":1795},"sHdIc"," args",[625,1798,1799],{"class":639}," }:",[625,1801,810],{"class":639},[625,1803,1796],{"class":649},[625,1805,653],{"class":639},[625,1807,810],{"class":639},[625,1809,1810],{"class":649}," json",[625,1812,1813],{"class":639},"?:",[625,1815,1817],{"class":1816},"sBMFI"," boolean",[625,1819,821],{"class":639},[625,1821,1822],{"class":639}," })",[625,1824,643],{"class":639},[625,1826,1828,1831,1834,1836,1839,1841],{"class":627,"line":1827},31,[625,1829,1830],{"class":909},"    const",[625,1832,1833],{"class":635}," ok",[625,1835,1506],{"class":639},[625,1837,1838],{"class":806}," await",[625,1840,1490],{"class":631},[625,1842,1540],{"class":649},[625,1844,1846,1849,1851,1853,1856,1859],{"class":627,"line":1845},32,[625,1847,1848],{"class":806},"    if",[625,1850,1548],{"class":649},[625,1852,1551],{"class":639},[625,1854,1855],{"class":635},"ok",[625,1857,1858],{"class":649},") ",[625,1860,976],{"class":639},[625,1862,1864,1867,1870,1872,1875,1877,1880,1883,1885,1887,1890,1892,1894,1896,1898,1901,1903,1905,1908,1910,1912],{"class":627,"line":1863},33,[625,1865,1866],{"class":806},"      throw",[625,1868,1869],{"class":635}," Object",[625,1871,1396],{"class":639},[625,1873,1874],{"class":631},"assign",[625,1876,973],{"class":649},[625,1878,1879],{"class":639},"new",[625,1881,1882],{"class":631}," Error",[625,1884,973],{"class":649},[625,1886,690],{"class":639},[625,1888,1889],{"class":686},"Health checks failed",[625,1891,690],{"class":639},[625,1893,1083],{"class":649},[625,1895,640],{"class":639},[625,1897,810],{"class":639},[625,1899,1900],{"class":649}," code",[625,1902,653],{"class":639},[625,1904,683],{"class":639},[625,1906,1907],{"class":686},"DOCTOR_FAILED",[625,1909,690],{"class":639},[625,1911,821],{"class":639},[625,1913,701],{"class":649},[625,1915,1917],{"class":627,"line":1916},34,[625,1918,1919],{"class":639},"    }\n",[625,1921,1923,1925,1927,1929,1932,1934,1936,1938,1941,1943,1946,1948,1951,1953,1955,1957,1960,1962],{"class":627,"line":1922},35,[625,1924,1848],{"class":806},[625,1926,1548],{"class":649},[625,1928,1551],{"class":639},[625,1930,1931],{"class":635},"args",[625,1933,1396],{"class":639},[625,1935,1180],{"class":635},[625,1937,1858],{"class":649},[625,1939,1940],{"class":635},"process",[625,1942,1396],{"class":639},[625,1944,1945],{"class":635},"stdout",[625,1947,1396],{"class":639},[625,1949,1950],{"class":631},"write",[625,1952,973],{"class":649},[625,1954,690],{"class":639},[625,1956,1855],{"class":686},[625,1958,1959],{"class":635},"\\n",[625,1961,690],{"class":639},[625,1963,701],{"class":649},[625,1965,1967],{"class":627,"line":1966},36,[625,1968,1244],{"class":639},[625,1970,1972],{"class":627,"line":1971},37,[625,1973,1678],{"class":639},[610,1975,1976,1977,1979,1980,1983,1984,1987],{},"Throw an error with a ",[622,1978,622],{}," property and ",[622,1981,1982],{},"outcome: \"error\""," plus ",[622,1985,1986],{},"errorCode"," are recorded automatically:",[614,1989,1991],{"className":616,"code":1990,"filename":1414,"language":619,"meta":620,"style":620},"throw Object.assign(new Error('Config missing'), { code: 'CONFIG_NOT_FOUND' })\n",[622,1992,1993],{"__ignoreMap":620},[625,1994,1995,1998,2000,2002,2004,2006,2008,2010,2012,2014,2017,2019,2021,2023,2025,2027,2029,2031,2034,2036,2038],{"class":627,"line":628},[625,1996,1997],{"class":806},"throw",[625,1999,1869],{"class":635},[625,2001,1396],{"class":639},[625,2003,1874],{"class":631},[625,2005,973],{"class":635},[625,2007,1879],{"class":639},[625,2009,1882],{"class":631},[625,2011,973],{"class":635},[625,2013,690],{"class":639},[625,2015,2016],{"class":686},"Config missing",[625,2018,690],{"class":639},[625,2020,1083],{"class":635},[625,2022,640],{"class":639},[625,2024,810],{"class":639},[625,2026,1900],{"class":649},[625,2028,653],{"class":639},[625,2030,683],{"class":639},[625,2032,2033],{"class":686},"CONFIG_NOT_FOUND",[625,2035,690],{"class":639},[625,2037,821],{"class":639},[625,2039,701],{"class":635},[610,2041,2042,2043,2046],{},"A minimal sync handler for comparison. Flags are auto-captured, you only ",[622,2044,2045],{},"set()"," business counters:",[614,2048,2051],{"className":616,"code":2049,"filename":2050,"language":619,"meta":620,"style":620},"import { telemetry } from '@evlog\u002Ftelemetry'\n\nexport const syncCommand = {\n  meta: { name: 'sync', description: 'Pull remote state' },\n  args: {\n    dryRun: { type: 'boolean' },\n    output: { type: 'string', description: 'Output path' },\n  },\n  async run() {\n    const itemsSynced = await pullRemoteState()\n    telemetry.set({ itemsSynced })\n  },\n}\n","src\u002Fcommands\u002Fsync.ts",[622,2052,2053,2071,2075,2088,2121,2129,2150,2185,2189,2199,2215,2234,2238],{"__ignoreMap":620},[625,2054,2055,2057,2059,2061,2063,2065,2067,2069],{"class":627,"line":628},[625,2056,807],{"class":806},[625,2058,810],{"class":639},[625,2060,1425],{"class":635},[625,2062,821],{"class":639},[625,2064,824],{"class":806},[625,2066,683],{"class":639},[625,2068,855],{"class":686},[625,2070,832],{"class":639},[625,2072,2073],{"class":627,"line":646},[625,2074,903],{"emptyLinePlaceholder":902},[625,2076,2077,2079,2081,2084,2086],{"class":627,"line":662},[625,2078,951],{"class":806},[625,2080,954],{"class":909},[625,2082,2083],{"class":635}," syncCommand ",[625,2085,916],{"class":639},[625,2087,643],{"class":639},[625,2089,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2117,2119],{"class":627,"line":675},[625,2091,1700],{"class":649},[625,2093,653],{"class":639},[625,2095,810],{"class":639},[625,2097,989],{"class":649},[625,2099,653],{"class":639},[625,2101,683],{"class":639},[625,2103,1344],{"class":686},[625,2105,690],{"class":639},[625,2107,640],{"class":639},[625,2109,1002],{"class":649},[625,2111,653],{"class":639},[625,2113,683],{"class":639},[625,2115,2116],{"class":686},"Pull remote state",[625,2118,690],{"class":639},[625,2120,1730],{"class":639},[625,2122,2123,2125,2127],{"class":627,"line":695},[625,2124,1735],{"class":649},[625,2126,653],{"class":639},[625,2128,643],{"class":639},[625,2130,2131,2134,2136,2138,2140,2142,2144,2146,2148],{"class":627,"line":906},[625,2132,2133],{"class":649},"    dryRun",[625,2135,653],{"class":639},[625,2137,810],{"class":639},[625,2139,1751],{"class":649},[625,2141,653],{"class":639},[625,2143,683],{"class":639},[625,2145,1758],{"class":686},[625,2147,690],{"class":639},[625,2149,1730],{"class":639},[625,2151,2152,2155,2157,2159,2161,2163,2165,2168,2170,2172,2174,2176,2178,2181,2183],{"class":627,"line":926},[625,2153,2154],{"class":649},"    output",[625,2156,653],{"class":639},[625,2158,810],{"class":639},[625,2160,1751],{"class":649},[625,2162,653],{"class":639},[625,2164,683],{"class":639},[625,2166,2167],{"class":686},"string",[625,2169,690],{"class":639},[625,2171,640],{"class":639},[625,2173,1002],{"class":649},[625,2175,653],{"class":639},[625,2177,683],{"class":639},[625,2179,2180],{"class":686},"Output path",[625,2182,690],{"class":639},[625,2184,1730],{"class":639},[625,2186,2187],{"class":627,"line":943},[625,2188,1244],{"class":639},[625,2190,2191,2193,2195,2197],{"class":627,"line":948},[625,2192,1786],{"class":909},[625,2194,1789],{"class":649},[625,2196,1493],{"class":639},[625,2198,643],{"class":639},[625,2200,2201,2203,2206,2208,2210,2213],{"class":627,"line":967},[625,2202,1830],{"class":909},[625,2204,2205],{"class":635}," itemsSynced",[625,2207,1506],{"class":639},[625,2209,1838],{"class":806},[625,2211,2212],{"class":631}," pullRemoteState",[625,2214,1540],{"class":649},[625,2216,2217,2220,2222,2224,2226,2228,2230,2232],{"class":627,"line":979},[625,2218,2219],{"class":635},"    telemetry",[625,2221,1396],{"class":639},[625,2223,1647],{"class":631},[625,2225,973],{"class":649},[625,2227,1072],{"class":639},[625,2229,2205],{"class":635},[625,2231,821],{"class":639},[625,2233,701],{"class":649},[625,2235,2236],{"class":627,"line":1026},[625,2237,1244],{"class":639},[625,2239,2240],{"class":627,"line":1036},[625,2241,1678],{"class":639},[605,2243,2245],{"id":2244},"setup-without-citty","Setup without citty",[610,2247,2248,2249,2252,2253,653],{},"For scripts, migrators, or custom CLIs, use ",[622,2250,2251],{},"createTelemetry()"," and wrap each logical run with ",[622,2254,2255],{},"t.run()",[614,2257,2260],{"className":616,"code":2258,"filename":2259,"language":619,"meta":620,"style":620},"import { createTelemetry, telemetry } from '@evlog\u002Ftelemetry'\n\nconst t = createTelemetry({ name: 'my-migrator', version: '2.0.0' })\n\nawait t.run('migrate', async () => {\n  const rows = await migrateBatch()\n  telemetry.set({ rowsMigrated: rows.length, batchSize: 500 })\n})\n\nawait t.flush() \u002F\u002F optional — also runs at end of each t.run()\n","scripts\u002Fmigrate.ts",[622,2261,2262,2285,2289,2332,2336,2370,2386,2424,2430,2434],{"__ignoreMap":620},[625,2263,2264,2266,2268,2271,2273,2275,2277,2279,2281,2283],{"class":627,"line":628},[625,2265,807],{"class":806},[625,2267,810],{"class":639},[625,2269,2270],{"class":635}," createTelemetry",[625,2272,640],{"class":639},[625,2274,1425],{"class":635},[625,2276,821],{"class":639},[625,2278,824],{"class":806},[625,2280,683],{"class":639},[625,2282,855],{"class":686},[625,2284,832],{"class":639},[625,2286,2287],{"class":627,"line":646},[625,2288,903],{"emptyLinePlaceholder":902},[625,2290,2291,2293,2296,2298,2300,2302,2304,2306,2308,2310,2313,2315,2317,2319,2321,2323,2326,2328,2330],{"class":627,"line":662},[625,2292,910],{"class":909},[625,2294,2295],{"class":635}," t ",[625,2297,916],{"class":639},[625,2299,2270],{"class":631},[625,2301,973],{"class":635},[625,2303,1072],{"class":639},[625,2305,989],{"class":649},[625,2307,653],{"class":639},[625,2309,683],{"class":639},[625,2311,2312],{"class":686},"my-migrator",[625,2314,690],{"class":639},[625,2316,640],{"class":639},[625,2318,1016],{"class":649},[625,2320,653],{"class":639},[625,2322,683],{"class":639},[625,2324,2325],{"class":686},"2.0.0",[625,2327,690],{"class":639},[625,2329,821],{"class":639},[625,2331,701],{"class":635},[625,2333,2334],{"class":627,"line":675},[625,2335,903],{"emptyLinePlaceholder":902},[625,2337,2338,2341,2344,2346,2348,2350,2352,2355,2357,2359,2362,2365,2368],{"class":627,"line":695},[625,2339,2340],{"class":806},"await",[625,2342,2343],{"class":635}," t",[625,2345,1396],{"class":639},[625,2347,1276],{"class":631},[625,2349,973],{"class":635},[625,2351,690],{"class":639},[625,2353,2354],{"class":686},"migrate",[625,2356,690],{"class":639},[625,2358,640],{"class":639},[625,2360,2361],{"class":909}," async",[625,2363,2364],{"class":639}," ()",[625,2366,2367],{"class":909}," =>",[625,2369,643],{"class":639},[625,2371,2372,2374,2377,2379,2381,2384],{"class":627,"line":906},[625,2373,1530],{"class":909},[625,2375,2376],{"class":635}," rows",[625,2378,1506],{"class":639},[625,2380,1838],{"class":806},[625,2382,2383],{"class":631}," migrateBatch",[625,2385,1540],{"class":649},[625,2387,2388,2390,2392,2394,2396,2398,2401,2403,2405,2407,2410,2412,2415,2417,2420,2422],{"class":627,"line":926},[625,2389,1642],{"class":635},[625,2391,1396],{"class":639},[625,2393,1647],{"class":631},[625,2395,973],{"class":649},[625,2397,1072],{"class":639},[625,2399,2400],{"class":649}," rowsMigrated",[625,2402,653],{"class":639},[625,2404,2376],{"class":635},[625,2406,1396],{"class":639},[625,2408,2409],{"class":635},"length",[625,2411,640],{"class":639},[625,2413,2414],{"class":649}," batchSize",[625,2416,653],{"class":639},[625,2418,2419],{"class":1509}," 500",[625,2421,821],{"class":639},[625,2423,701],{"class":649},[625,2425,2426,2428],{"class":627,"line":943},[625,2427,698],{"class":639},[625,2429,701],{"class":635},[625,2431,2432],{"class":627,"line":948},[625,2433,903],{"emptyLinePlaceholder":902},[625,2435,2436,2438,2440,2442,2445,2448],{"class":627,"line":967},[625,2437,2340],{"class":806},[625,2439,2343],{"class":635},[625,2441,1396],{"class":639},[625,2443,2444],{"class":631},"flush",[625,2446,2447],{"class":635},"() ",[625,2449,2450],{"class":1636},"\u002F\u002F optional — also runs at end of each t.run()\n",[610,2452,2453,2454,2457,2458,2461,2462,2465,2466,2469,2470,2473,2474,739,2477,2480],{},"GitHub Actions: swap ",[622,2455,2456],{},"createTelemetry"," for ",[622,2459,2460],{},"createGitHubActionsTelemetry()"," in the same file, which adds ",[622,2463,2464],{},"ghaAction"," and ",[622,2467,2468],{},"ghaEvent"," to ",[622,2471,2472],{},"custom"," from ",[622,2475,2476],{},"GITHUB_ACTION",[622,2478,2479],{},"GITHUB_EVENT_NAME"," only (never repo content).",[614,2482,2485],{"className":616,"code":2483,"filename":2484,"language":619,"meta":620,"style":620},"import { createGitHubActionsTelemetry, telemetry } from '@evlog\u002Ftelemetry'\n\nconst t = createGitHubActionsTelemetry({ name: 'my-action', version: '1.0.0' })\n\nawait t.run('report', async () => {\n  const artifacts = await collectArtifacts()\n  telemetry.set({ artifactCount: artifacts.length })\n})\n","scripts\u002Fci-report.ts",[622,2486,2487,2510,2514,2555,2559,2588,2604,2631],{"__ignoreMap":620},[625,2488,2489,2491,2493,2496,2498,2500,2502,2504,2506,2508],{"class":627,"line":628},[625,2490,807],{"class":806},[625,2492,810],{"class":639},[625,2494,2495],{"class":635}," createGitHubActionsTelemetry",[625,2497,640],{"class":639},[625,2499,1425],{"class":635},[625,2501,821],{"class":639},[625,2503,824],{"class":806},[625,2505,683],{"class":639},[625,2507,855],{"class":686},[625,2509,832],{"class":639},[625,2511,2512],{"class":627,"line":646},[625,2513,903],{"emptyLinePlaceholder":902},[625,2515,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2537,2539,2541,2543,2545,2547,2549,2551,2553],{"class":627,"line":662},[625,2517,910],{"class":909},[625,2519,2295],{"class":635},[625,2521,916],{"class":639},[625,2523,2495],{"class":631},[625,2525,973],{"class":635},[625,2527,1072],{"class":639},[625,2529,989],{"class":649},[625,2531,653],{"class":639},[625,2533,683],{"class":639},[625,2535,2536],{"class":686},"my-action",[625,2538,690],{"class":639},[625,2540,640],{"class":639},[625,2542,1016],{"class":649},[625,2544,653],{"class":639},[625,2546,683],{"class":639},[625,2548,938],{"class":686},[625,2550,690],{"class":639},[625,2552,821],{"class":639},[625,2554,701],{"class":635},[625,2556,2557],{"class":627,"line":675},[625,2558,903],{"emptyLinePlaceholder":902},[625,2560,2561,2563,2565,2567,2569,2571,2573,2576,2578,2580,2582,2584,2586],{"class":627,"line":695},[625,2562,2340],{"class":806},[625,2564,2343],{"class":635},[625,2566,1396],{"class":639},[625,2568,1276],{"class":631},[625,2570,973],{"class":635},[625,2572,690],{"class":639},[625,2574,2575],{"class":686},"report",[625,2577,690],{"class":639},[625,2579,640],{"class":639},[625,2581,2361],{"class":909},[625,2583,2364],{"class":639},[625,2585,2367],{"class":909},[625,2587,643],{"class":639},[625,2589,2590,2592,2595,2597,2599,2602],{"class":627,"line":906},[625,2591,1530],{"class":909},[625,2593,2594],{"class":635}," artifacts",[625,2596,1506],{"class":639},[625,2598,1838],{"class":806},[625,2600,2601],{"class":631}," collectArtifacts",[625,2603,1540],{"class":649},[625,2605,2606,2608,2610,2612,2614,2616,2619,2621,2623,2625,2627,2629],{"class":627,"line":926},[625,2607,1642],{"class":635},[625,2609,1396],{"class":639},[625,2611,1647],{"class":631},[625,2613,973],{"class":649},[625,2615,1072],{"class":639},[625,2617,2618],{"class":649}," artifactCount",[625,2620,653],{"class":639},[625,2622,2594],{"class":635},[625,2624,1396],{"class":639},[625,2626,2409],{"class":635},[625,2628,821],{"class":639},[625,2630,701],{"class":649},[625,2632,2633,2635],{"class":627,"line":943},[625,2634,698],{"class":639},[625,2636,701],{"class":635},[605,2638,2640],{"id":2639},"debug","Debug",[614,2642,2646],{"className":2643,"code":2644,"language":2645,"meta":620,"style":620},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","EVLOG_TELEMETRY_DEBUG=1 my-tool doctor\nEVLOG_TELEMETRY=0 my-tool sync\n","bash",[622,2647,2648,2664],{"__ignoreMap":620},[625,2649,2650,2653,2655,2658,2661],{"class":627,"line":628},[625,2651,2652],{"class":635},"EVLOG_TELEMETRY_DEBUG",[625,2654,916],{"class":639},[625,2656,2657],{"class":686},"1",[625,2659,2660],{"class":1816}," my-tool",[625,2662,2663],{"class":686}," doctor\n",[625,2665,2666,2669,2671,2674,2676],{"class":627,"line":646},[625,2667,2668],{"class":635},"EVLOG_TELEMETRY",[625,2670,916],{"class":639},[625,2672,2673],{"class":686},"0",[625,2675,2660],{"class":1816},[625,2677,2678],{"class":686}," sync\n",[610,2680,2681],{},"Debug mode prints would-be payloads to stderr. Nothing is sent unless an endpoint is configured and delivery succeeds.",[2683,2684,2685],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":620,"searchDepth":646,"depth":646,"links":2687},[2688,2689,2693,2694],{"id":607,"depth":646,"text":608},{"id":777,"depth":646,"text":778,"children":2690},[2691,2692],{"id":1267,"depth":662,"text":1268},{"id":1399,"depth":662,"text":1400},{"id":2244,"depth":646,"text":2245},{"id":2639,"depth":646,"text":2640},"Wire @evlog\u002Ftelemetry into citty CLIs, standalone scripts, and GitHub Actions — delivery config, automatic flag capture, telemetry.set(), and debug mode.","md",[2698,2701,2702],{"label":41,"icon":44,"to":423,"color":2699,"variant":2700},"neutral","subtle",{"label":431,"icon":434,"to":432,"color":2699,"variant":2700},{"label":436,"icon":84,"to":437,"color":2699,"variant":2700},{},{"title":426,"icon":429},{"title":600,"description":2695},"KKak2-7n7zemQszQmxd2H0h6Qwe4WN5fJT_RdYk2gs0",[2708,2710],{"title":41,"path":423,"stem":424,"description":2709,"icon":44,"children":-1},"One event per run for CLIs and automation, with privacy-safe flags, consent, an outbox, and disclosure generated from the same config.",{"title":431,"path":432,"stem":433,"description":2711,"icon":434,"children":-1},"Build the ingestion endpoint for @evlog\u002Ftelemetry: the threat model, parseIngestBody validation, framework routes, storage, and rate limiting.",1789076909385]