[{"data":1,"prerenderedAt":3194},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-telemetry-reference":529,"-use-cases-telemetry-reference-surround":3189},[4,30,80,128,308,440,499],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"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",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"children":132,"page":29},"Integrate","\u002Fintegrate","4.integrate",[133,137,220],{"title":36,"path":134,"stem":135,"icon":136},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[142,145,175,200],{"title":36,"path":143,"stem":144,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":146,"path":147,"stem":148,"children":149,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[150,155,160,165,170],{"title":151,"path":152,"stem":153,"icon":154},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":156,"path":157,"stem":158,"icon":159},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":161,"path":162,"stem":163,"icon":164},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":166,"path":167,"stem":168,"icon":169},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":171,"path":172,"stem":173,"icon":174},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":176,"path":177,"stem":178,"children":179,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[180,185,190,195],{"title":181,"path":182,"stem":183,"icon":184},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":186,"path":187,"stem":188,"icon":189},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":191,"path":192,"stem":193,"icon":194},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":196,"path":197,"stem":198,"icon":199},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":201,"path":202,"stem":203,"children":204,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[205,210,215],{"title":206,"path":207,"stem":208,"icon":209},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":211,"path":212,"stem":213,"icon":214},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":216,"path":217,"stem":218,"icon":219},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":221,"path":222,"stem":223,"children":224,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[225,229,234,239,244,249,254,259,264,269,274,279,284,289,293,298,303],{"title":36,"path":226,"stem":227,"icon":228},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":230,"path":231,"stem":232,"icon":233},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":235,"path":236,"stem":237,"icon":238},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":240,"path":241,"stem":242,"icon":243},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":245,"path":246,"stem":247,"icon":248},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":250,"path":251,"stem":252,"icon":253},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":255,"path":256,"stem":257,"icon":258},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":260,"path":261,"stem":262,"icon":263},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":265,"path":266,"stem":267,"icon":268},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":270,"path":271,"stem":272,"icon":273},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":275,"path":276,"stem":277,"icon":278},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":280,"path":281,"stem":282,"icon":283},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":285,"path":286,"stem":287,"icon":288},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":290,"path":291,"stem":292,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":294,"path":295,"stem":296,"icon":297},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":299,"path":300,"stem":301,"icon":302},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":304,"path":305,"stem":306,"icon":307},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":309,"path":310,"stem":311,"children":312,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[313,316,321,350,377,409,430,435],{"title":36,"path":314,"stem":315,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":317,"path":318,"stem":319,"icon":320},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":322,"icon":323,"path":324,"stem":325,"children":326,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[327,330,335,340,345],{"title":36,"path":328,"stem":329,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":331,"path":332,"stem":333,"icon":334},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":336,"path":337,"stem":338,"icon":339},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":341,"path":342,"stem":343,"icon":344},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":346,"path":347,"stem":348,"icon":349},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":351,"icon":352,"path":353,"stem":354,"children":355,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[356,359,364,369,373],{"title":36,"path":357,"stem":358,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":360,"path":361,"stem":362,"icon":363},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":365,"path":366,"stem":367,"icon":368},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":370,"path":371,"stem":372,"icon":320},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":374,"path":375,"stem":376,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[383,386,391,396,401,405],{"title":36,"path":384,"stem":385,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":390},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":392,"path":393,"stem":394,"icon":395},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":397,"path":398,"stem":399,"icon":400},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":402,"path":403,"stem":404,"icon":379},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":406,"path":407,"stem":408,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":346,"icon":107,"path":410,"stem":411,"children":412,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[413,416,421,426],{"title":36,"path":414,"stem":415,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":417,"path":418,"stem":419,"icon":420},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":422,"path":423,"stem":424,"icon":425},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":427,"path":428,"stem":429,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":431,"path":432,"stem":433,"icon":434},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":436,"path":437,"stem":438,"icon":439},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":441,"path":442,"stem":443,"children":444,"page":29},"Extend","\u002Fextend","6.extend",[445,449,454,459,463,468,472,476,480,484,489,494],{"title":36,"path":446,"stem":447,"icon":448},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":450,"path":451,"stem":452,"icon":453},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":455,"path":456,"stem":457,"icon":458},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":460,"path":461,"stem":462,"icon":453},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":464,"path":465,"stem":466,"icon":467},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":406,"path":469,"stem":470,"icon":471},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":473,"path":474,"stem":475,"icon":448},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":477,"path":478,"stem":479,"icon":434},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":481,"path":482,"stem":483,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":485,"path":486,"stem":487,"icon":488},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":490,"path":491,"stem":492,"icon":493},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":495,"path":496,"stem":497,"icon":498},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":427,"path":500,"stem":501,"children":502,"page":29},"\u002Freference","7.reference",[503,508,511,516,520,525],{"title":504,"path":505,"stem":506,"icon":507},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":374,"path":509,"stem":510,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":512,"path":513,"stem":514,"icon":515},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":517,"path":518,"stem":519,"icon":379},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":521,"path":522,"stem":523,"icon":524},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":526,"path":527,"stem":528,"icon":434},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"id":530,"title":531,"body":532,"description":3177,"extension":3178,"links":3179,"meta":3185,"navigation":3186,"path":428,"seo":3187,"stem":429,"__hash__":3188},"docs\u002F5.use-cases\u002F4.telemetry\u002F04.reference.md","Telemetry Reference",{"type":533,"value":534,"toc":3161},"minimark",[535,540,544,919,923,941,944,1001,1004,1037,1042,1053,1356,1359,1516,1525,1545,1549,1552,1822,1830,1834,1841,2126,2135,2141,2150,2229,2239,2243,2249,2387,2391,2486,2501,2505,2508,2517,2689,2698,2711,2717,2721,2732,2771,2864,2870,2913,2927,2938,2942,2954,3092,3102,3106,3125,3135,3144,3157],[536,537,539],"h2",{"id":538},"standard-envelope","Standard envelope",[541,542,543],"p",{},"Every run shares the same shape. You do not declare per-command schemas.",[545,546,551],"pre",{"className":547,"code":548,"language":549,"meta":550,"style":550},"language-jsonc shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"event\": \"run\",\n  \"command\": \"sync\",\n  \"durationMs\": 412,\n  \"outcome\": \"success\",\n  \"flags\": { \"dryRun\": true, \"output\": \"\u003Cset>\" },\n  \"tool\": { \"name\": \"my-tool\", \"version\": \"1.0.0\" },\n  \"env\": {\n    \"node\": \"20.11\",\n    \"ci\": false,\n    \"provider\": null,\n    \"tty\": true,\n    \"agent\": \"cursor\"   \u002F\u002F std-env: cursor, claude, codex, … or null\n  },\n  \"machineId\": \"ab3f…\", \u002F\u002F hashed; omitted in ephemeral CI\n  \"custom\": { \"itemsSynced\": 42 }\n}\n","jsonc","",[552,553,554,563,591,612,630,651,698,749,764,786,801,816,831,854,860,884,913],"code",{"__ignoreMap":550},[555,556,559],"span",{"class":557,"line":558},"line",1,[555,560,562],{"class":561},"sMK4o","{\n",[555,564,566,569,573,576,579,582,586,588],{"class":557,"line":565},2,[555,567,568],{"class":561},"  \"",[555,570,572],{"class":571},"spNyl","event",[555,574,575],{"class":561},"\"",[555,577,578],{"class":561},":",[555,580,581],{"class":561}," \"",[555,583,585],{"class":584},"sfazB","run",[555,587,575],{"class":561},[555,589,590],{"class":561},",\n",[555,592,594,596,599,601,603,605,608,610],{"class":557,"line":593},3,[555,595,568],{"class":561},[555,597,598],{"class":571},"command",[555,600,575],{"class":561},[555,602,578],{"class":561},[555,604,581],{"class":561},[555,606,607],{"class":584},"sync",[555,609,575],{"class":561},[555,611,590],{"class":561},[555,613,615,617,620,622,624,628],{"class":557,"line":614},4,[555,616,568],{"class":561},[555,618,619],{"class":571},"durationMs",[555,621,575],{"class":561},[555,623,578],{"class":561},[555,625,627],{"class":626},"sbssI"," 412",[555,629,590],{"class":561},[555,631,633,635,638,640,642,644,647,649],{"class":557,"line":632},5,[555,634,568],{"class":561},[555,636,637],{"class":571},"outcome",[555,639,575],{"class":561},[555,641,578],{"class":561},[555,643,581],{"class":561},[555,645,646],{"class":584},"success",[555,648,575],{"class":561},[555,650,590],{"class":561},[555,652,654,656,659,661,663,666,668,672,674,676,679,681,684,686,688,690,693,695],{"class":557,"line":653},6,[555,655,568],{"class":561},[555,657,658],{"class":571},"flags",[555,660,575],{"class":561},[555,662,578],{"class":561},[555,664,665],{"class":561}," {",[555,667,581],{"class":561},[555,669,671],{"class":670},"sBMFI","dryRun",[555,673,575],{"class":561},[555,675,578],{"class":561},[555,677,678],{"class":561}," true,",[555,680,581],{"class":561},[555,682,683],{"class":670},"output",[555,685,575],{"class":561},[555,687,578],{"class":561},[555,689,581],{"class":561},[555,691,692],{"class":584},"\u003Cset>",[555,694,575],{"class":561},[555,696,697],{"class":561}," },\n",[555,699,701,703,706,708,710,712,714,717,719,721,723,726,728,731,733,736,738,740,742,745,747],{"class":557,"line":700},7,[555,702,568],{"class":561},[555,704,705],{"class":571},"tool",[555,707,575],{"class":561},[555,709,578],{"class":561},[555,711,665],{"class":561},[555,713,581],{"class":561},[555,715,716],{"class":670},"name",[555,718,575],{"class":561},[555,720,578],{"class":561},[555,722,581],{"class":561},[555,724,725],{"class":584},"my-tool",[555,727,575],{"class":561},[555,729,730],{"class":561},",",[555,732,581],{"class":561},[555,734,735],{"class":670},"version",[555,737,575],{"class":561},[555,739,578],{"class":561},[555,741,581],{"class":561},[555,743,744],{"class":584},"1.0.0",[555,746,575],{"class":561},[555,748,697],{"class":561},[555,750,752,754,757,759,761],{"class":557,"line":751},8,[555,753,568],{"class":561},[555,755,756],{"class":571},"env",[555,758,575],{"class":561},[555,760,578],{"class":561},[555,762,763],{"class":561}," {\n",[555,765,767,770,773,775,777,779,782,784],{"class":557,"line":766},9,[555,768,769],{"class":561},"    \"",[555,771,772],{"class":670},"node",[555,774,575],{"class":561},[555,776,578],{"class":561},[555,778,581],{"class":561},[555,780,781],{"class":584},"20.11",[555,783,575],{"class":561},[555,785,590],{"class":561},[555,787,789,791,794,796,798],{"class":557,"line":788},10,[555,790,769],{"class":561},[555,792,793],{"class":670},"ci",[555,795,575],{"class":561},[555,797,578],{"class":561},[555,799,800],{"class":561}," false,\n",[555,802,804,806,809,811,813],{"class":557,"line":803},11,[555,805,769],{"class":561},[555,807,808],{"class":670},"provider",[555,810,575],{"class":561},[555,812,578],{"class":561},[555,814,815],{"class":561}," null,\n",[555,817,819,821,824,826,828],{"class":557,"line":818},12,[555,820,769],{"class":561},[555,822,823],{"class":670},"tty",[555,825,575],{"class":561},[555,827,578],{"class":561},[555,829,830],{"class":561}," true,\n",[555,832,834,836,839,841,843,845,848,850],{"class":557,"line":833},13,[555,835,769],{"class":561},[555,837,838],{"class":670},"agent",[555,840,575],{"class":561},[555,842,578],{"class":561},[555,844,581],{"class":561},[555,846,847],{"class":584},"cursor",[555,849,575],{"class":561},[555,851,853],{"class":852},"sHwdD","   \u002F\u002F std-env: cursor, claude, codex, … or null\n",[555,855,857],{"class":557,"line":856},14,[555,858,859],{"class":561},"  },\n",[555,861,863,865,868,870,872,874,877,879,881],{"class":557,"line":862},15,[555,864,568],{"class":561},[555,866,867],{"class":571},"machineId",[555,869,575],{"class":561},[555,871,578],{"class":561},[555,873,581],{"class":561},[555,875,876],{"class":584},"ab3f…",[555,878,575],{"class":561},[555,880,730],{"class":561},[555,882,883],{"class":852}," \u002F\u002F hashed; omitted in ephemeral CI\n",[555,885,887,889,892,894,896,898,900,903,905,907,910],{"class":557,"line":886},16,[555,888,568],{"class":561},[555,890,891],{"class":571},"custom",[555,893,575],{"class":561},[555,895,578],{"class":561},[555,897,665],{"class":561},[555,899,581],{"class":561},[555,901,902],{"class":670},"itemsSynced",[555,904,575],{"class":561},[555,906,578],{"class":561},[555,908,909],{"class":626}," 42",[555,911,912],{"class":561}," }\n",[555,914,916],{"class":557,"line":915},17,[555,917,918],{"class":561},"}\n",[536,920,922],{"id":921},"extending-the-schema","Extending the schema",[541,924,925,926,930,931,934,935,937,938,940],{},"The envelope above is ",[927,928,929],"strong",{},"fixed"," — every tool sends the same top-level shape so ",[552,932,933],{},"parseIngestBody()"," and disclosure stay predictable. You do not add fields next to ",[552,936,598],{}," or ",[552,939,619],{},".",[541,942,943],{},"Your product schema lives in two extension zones:",[945,946,947,963],"table",{},[948,949,950],"thead",{},[951,952,953,957,960],"tr",{},[954,955,956],"th",{},"Zone",[954,958,959],{},"Who sets it",[954,961,962],{},"What goes there",[964,965,966,982],"tbody",{},[951,967,968,973,979],{},[969,970,971],"td",{},[552,972,658],{},[969,974,975,976],{},"citty (auto) + ",[552,977,978],{},"collect.flags",[969,980,981],{},"Flags you passed — booleans\u002Fnumbers as values, strings only when allowlisted",[951,983,984,988,998],{},[969,985,986],{},[552,987,891],{},[969,989,990,991,994,995],{},"you via ",[552,992,993],{},"telemetry.set()"," + ",[552,996,997],{},"collect.fields",[969,999,1000],{},"Business counters, categorical dimensions, schema version",[541,1002,1003],{},"Think of it as two contracts:",[1005,1006,1007,1022],"ul",{},[1008,1009,1010,1013,1014,1017,1018,1021],"li",{},[927,1011,1012],{},"Transport contract"," (",[552,1015,1016],{},"RunEvent",") — owned by ",[552,1019,1020],{},"@evlog\u002Ftelemetry",", stable across tools",[1008,1023,1024,1013,1027,1029,1030,1032,1033,1036],{},[927,1025,1026],{},"Product contract",[552,1028,891],{}," + declared ",[552,1031,658],{},") — owned by you, declared in ",[552,1034,1035],{},"collect",", mirrored on the server",[1038,1039,1041],"h3",{"id":1040},"declare-your-extensions-once","Declare your extensions once",[541,1043,1044,1045,1048,1049,1052],{},"Everything you collect beyond the standard envelope is declared inline in the same ",[552,1046,1047],{},"withTelemetry()"," \u002F ",[552,1050,1051],{},"createTelemetry()"," call:",[545,1054,1059],{"className":1055,"code":1056,"filename":1057,"language":1058,"meta":550,"style":550},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","withTelemetry(command, {\n  name: 'acme-cli',\n  version: '2.1.0',\n  endpoint: 'https:\u002F\u002Ftelemetry.acme.dev\u002Fapi\u002Fingest',\n  collect: {\n    flags: {\n      format: ['json', 'yaml', 'table'],\n      target: ['staging', 'production'],\n    },\n    fields: {\n      product: ['cli', 'action', 'migrator'],\n      plan: ['free', 'pro', 'enterprise'],\n      framework: ['nuxt', 'next', 'remix'],\n    },\n  },\n})\n","src\u002Findex.ts","ts",[552,1060,1061,1075,1094,1110,1126,1135,1144,1183,1212,1217,1226,1264,1302,1340,1344,1348],{"__ignoreMap":550},[555,1062,1063,1067,1071,1073],{"class":557,"line":558},[555,1064,1066],{"class":1065},"s2Zo4","withTelemetry",[555,1068,1070],{"class":1069},"sTEyZ","(command",[555,1072,730],{"class":561},[555,1074,763],{"class":561},[555,1076,1077,1081,1083,1086,1089,1092],{"class":557,"line":565},[555,1078,1080],{"class":1079},"swJcz","  name",[555,1082,578],{"class":561},[555,1084,1085],{"class":561}," '",[555,1087,1088],{"class":584},"acme-cli",[555,1090,1091],{"class":561},"'",[555,1093,590],{"class":561},[555,1095,1096,1099,1101,1103,1106,1108],{"class":557,"line":593},[555,1097,1098],{"class":1079},"  version",[555,1100,578],{"class":561},[555,1102,1085],{"class":561},[555,1104,1105],{"class":584},"2.1.0",[555,1107,1091],{"class":561},[555,1109,590],{"class":561},[555,1111,1112,1115,1117,1119,1122,1124],{"class":557,"line":614},[555,1113,1114],{"class":1079},"  endpoint",[555,1116,578],{"class":561},[555,1118,1085],{"class":561},[555,1120,1121],{"class":584},"https:\u002F\u002Ftelemetry.acme.dev\u002Fapi\u002Fingest",[555,1123,1091],{"class":561},[555,1125,590],{"class":561},[555,1127,1128,1131,1133],{"class":557,"line":632},[555,1129,1130],{"class":1079},"  collect",[555,1132,578],{"class":561},[555,1134,763],{"class":561},[555,1136,1137,1140,1142],{"class":557,"line":653},[555,1138,1139],{"class":1079},"    flags",[555,1141,578],{"class":561},[555,1143,763],{"class":561},[555,1145,1146,1149,1151,1154,1156,1159,1161,1163,1165,1168,1170,1172,1174,1176,1178,1181],{"class":557,"line":700},[555,1147,1148],{"class":1079},"      format",[555,1150,578],{"class":561},[555,1152,1153],{"class":1069}," [",[555,1155,1091],{"class":561},[555,1157,1158],{"class":584},"json",[555,1160,1091],{"class":561},[555,1162,730],{"class":561},[555,1164,1085],{"class":561},[555,1166,1167],{"class":584},"yaml",[555,1169,1091],{"class":561},[555,1171,730],{"class":561},[555,1173,1085],{"class":561},[555,1175,945],{"class":584},[555,1177,1091],{"class":561},[555,1179,1180],{"class":1069},"]",[555,1182,590],{"class":561},[555,1184,1185,1188,1190,1192,1194,1197,1199,1201,1203,1206,1208,1210],{"class":557,"line":751},[555,1186,1187],{"class":1079},"      target",[555,1189,578],{"class":561},[555,1191,1153],{"class":1069},[555,1193,1091],{"class":561},[555,1195,1196],{"class":584},"staging",[555,1198,1091],{"class":561},[555,1200,730],{"class":561},[555,1202,1085],{"class":561},[555,1204,1205],{"class":584},"production",[555,1207,1091],{"class":561},[555,1209,1180],{"class":1069},[555,1211,590],{"class":561},[555,1213,1214],{"class":557,"line":766},[555,1215,1216],{"class":561},"    },\n",[555,1218,1219,1222,1224],{"class":557,"line":788},[555,1220,1221],{"class":1079},"    fields",[555,1223,578],{"class":561},[555,1225,763],{"class":561},[555,1227,1228,1231,1233,1235,1237,1240,1242,1244,1246,1249,1251,1253,1255,1258,1260,1262],{"class":557,"line":803},[555,1229,1230],{"class":1079},"      product",[555,1232,578],{"class":561},[555,1234,1153],{"class":1069},[555,1236,1091],{"class":561},[555,1238,1239],{"class":584},"cli",[555,1241,1091],{"class":561},[555,1243,730],{"class":561},[555,1245,1085],{"class":561},[555,1247,1248],{"class":584},"action",[555,1250,1091],{"class":561},[555,1252,730],{"class":561},[555,1254,1085],{"class":561},[555,1256,1257],{"class":584},"migrator",[555,1259,1091],{"class":561},[555,1261,1180],{"class":1069},[555,1263,590],{"class":561},[555,1265,1266,1269,1271,1273,1275,1278,1280,1282,1284,1287,1289,1291,1293,1296,1298,1300],{"class":557,"line":818},[555,1267,1268],{"class":1079},"      plan",[555,1270,578],{"class":561},[555,1272,1153],{"class":1069},[555,1274,1091],{"class":561},[555,1276,1277],{"class":584},"free",[555,1279,1091],{"class":561},[555,1281,730],{"class":561},[555,1283,1085],{"class":561},[555,1285,1286],{"class":584},"pro",[555,1288,1091],{"class":561},[555,1290,730],{"class":561},[555,1292,1085],{"class":561},[555,1294,1295],{"class":584},"enterprise",[555,1297,1091],{"class":561},[555,1299,1180],{"class":1069},[555,1301,590],{"class":561},[555,1303,1304,1307,1309,1311,1313,1316,1318,1320,1322,1325,1327,1329,1331,1334,1336,1338],{"class":557,"line":833},[555,1305,1306],{"class":1079},"      framework",[555,1308,578],{"class":561},[555,1310,1153],{"class":1069},[555,1312,1091],{"class":561},[555,1314,1315],{"class":584},"nuxt",[555,1317,1091],{"class":561},[555,1319,730],{"class":561},[555,1321,1085],{"class":561},[555,1323,1324],{"class":584},"next",[555,1326,1091],{"class":561},[555,1328,730],{"class":561},[555,1330,1085],{"class":561},[555,1332,1333],{"class":584},"remix",[555,1335,1091],{"class":561},[555,1337,1180],{"class":1069},[555,1339,590],{"class":561},[555,1341,1342],{"class":557,"line":856},[555,1343,1216],{"class":561},[555,1345,1346],{"class":557,"line":862},[555,1347,859],{"class":561},[555,1349,1350,1353],{"class":557,"line":886},[555,1351,1352],{"class":561},"}",[555,1354,1355],{"class":1069},")\n",[541,1357,1358],{},"Inside handlers, add counters and dimensions:",[545,1360,1363],{"className":1055,"code":1361,"filename":1362,"language":1058,"meta":550,"style":550},"await t.run('deploy', async () => {\n  const result = await deployServices()\n  telemetry.set({\n    servicesDeployed: result.count,   \u002F\u002F number — always allowed\n    rollbackUsed: false,              \u002F\u002F boolean — always allowed\n    framework: 'nuxt',                \u002F\u002F string — allowed (in collect.fields)\n    schemaVersion: 2,                 \u002F\u002F number — version your custom shape\n  })\n})\n","src\u002Fcommands\u002Fdeploy.ts",[552,1364,1365,1401,1421,1435,1454,1470,1488,1503,1510],{"__ignoreMap":550},[555,1366,1367,1371,1374,1376,1378,1381,1383,1386,1388,1390,1393,1396,1399],{"class":557,"line":558},[555,1368,1370],{"class":1369},"s7zQu","await",[555,1372,1373],{"class":1069}," t",[555,1375,940],{"class":561},[555,1377,585],{"class":1065},[555,1379,1380],{"class":1069},"(",[555,1382,1091],{"class":561},[555,1384,1385],{"class":584},"deploy",[555,1387,1091],{"class":561},[555,1389,730],{"class":561},[555,1391,1392],{"class":571}," async",[555,1394,1395],{"class":561}," ()",[555,1397,1398],{"class":571}," =>",[555,1400,763],{"class":561},[555,1402,1403,1406,1409,1412,1415,1418],{"class":557,"line":565},[555,1404,1405],{"class":571},"  const",[555,1407,1408],{"class":1069}," result",[555,1410,1411],{"class":561}," =",[555,1413,1414],{"class":1369}," await",[555,1416,1417],{"class":1065}," deployServices",[555,1419,1420],{"class":1079},"()\n",[555,1422,1423,1426,1428,1431,1433],{"class":557,"line":593},[555,1424,1425],{"class":1069},"  telemetry",[555,1427,940],{"class":561},[555,1429,1430],{"class":1065},"set",[555,1432,1380],{"class":1079},[555,1434,562],{"class":561},[555,1436,1437,1440,1442,1444,1446,1449,1451],{"class":557,"line":614},[555,1438,1439],{"class":1079},"    servicesDeployed",[555,1441,578],{"class":561},[555,1443,1408],{"class":1069},[555,1445,940],{"class":561},[555,1447,1448],{"class":1069},"count",[555,1450,730],{"class":561},[555,1452,1453],{"class":852},"   \u002F\u002F number — always allowed\n",[555,1455,1456,1459,1461,1465,1467],{"class":557,"line":632},[555,1457,1458],{"class":1079},"    rollbackUsed",[555,1460,578],{"class":561},[555,1462,1464],{"class":1463},"sfNiH"," false",[555,1466,730],{"class":561},[555,1468,1469],{"class":852},"              \u002F\u002F boolean — always allowed\n",[555,1471,1472,1475,1477,1479,1481,1483,1485],{"class":557,"line":653},[555,1473,1474],{"class":1079},"    framework",[555,1476,578],{"class":561},[555,1478,1085],{"class":561},[555,1480,1315],{"class":584},[555,1482,1091],{"class":561},[555,1484,730],{"class":561},[555,1486,1487],{"class":852},"                \u002F\u002F string — allowed (in collect.fields)\n",[555,1489,1490,1493,1495,1498,1500],{"class":557,"line":700},[555,1491,1492],{"class":1079},"    schemaVersion",[555,1494,578],{"class":561},[555,1496,1497],{"class":626}," 2",[555,1499,730],{"class":561},[555,1501,1502],{"class":852},"                 \u002F\u002F number — version your custom shape\n",[555,1504,1505,1508],{"class":557,"line":751},[555,1506,1507],{"class":561},"  }",[555,1509,1355],{"class":1079},[555,1511,1512,1514],{"class":557,"line":766},[555,1513,1352],{"class":561},[555,1515,1355],{"class":1069},[541,1517,1518,1519,1522,1523,940],{},"Undeclared strings are ",[927,1520,1521],{},"dropped at runtime",", never thrown. That is the privacy guarantee — no accidental paths, tokens, or free-form PII in ",[552,1524,891],{},[1526,1527,1528,1531,1532,1535,1536,1538,1539,1541,1542,1544],"note",{},[927,1529,1530],{},"Typing:"," ",[552,1533,1534],{},"TelemetryHandle.set()"," autocomplete covers declared ",[552,1537,997],{}," keys. Use the ambient ",[552,1540,993],{}," for extra numeric\u002Fboolean counters in the same run — both merge into ",[552,1543,891],{}," before the event is recorded.",[1038,1546,1548],{"id":1547},"mirror-on-the-server","Mirror on the server",[541,1550,1551],{},"Your ingest handler is the second gate. Pass the same tool name and custom keys you declared on the CLI:",[545,1553,1556],{"className":1055,"code":1554,"filename":1555,"language":1058,"meta":550,"style":550},"import { parseIngestBody } from '@evlog\u002Ftelemetry\u002Fingest'\n\nconst ALLOWED_CUSTOM = [\n  'servicesDeployed', 'rollbackUsed', 'framework',\n  'product', 'plan', 'schemaVersion',\n  'ghaAction', 'ghaEvent',\n] as const\n\nexport async function POST(req: Request) {\n  const raw = await req.text()\n  const events = parseIngestBody(raw, {\n    allowedTools: ['acme-cli'],\n    allowedCustomKeys: { 'acme-cli': ALLOWED_CUSTOM },\n  })\n  \u002F\u002F dedupe on idempotencyKey, then persist\n}\n","app\u002Fapi\u002Ftelemetry\u002Fingest\u002Froute.ts",[552,1557,1558,1582,1588,1602,1632,1661,1681,1692,1696,1725,1746,1766,1785,1807,1813,1818],{"__ignoreMap":550},[555,1559,1560,1563,1565,1568,1571,1574,1576,1579],{"class":557,"line":558},[555,1561,1562],{"class":1369},"import",[555,1564,665],{"class":561},[555,1566,1567],{"class":1069}," parseIngestBody",[555,1569,1570],{"class":561}," }",[555,1572,1573],{"class":1369}," from",[555,1575,1085],{"class":561},[555,1577,1578],{"class":584},"@evlog\u002Ftelemetry\u002Fingest",[555,1580,1581],{"class":561},"'\n",[555,1583,1584],{"class":557,"line":565},[555,1585,1587],{"emptyLinePlaceholder":1586},true,"\n",[555,1589,1590,1593,1596,1599],{"class":557,"line":593},[555,1591,1592],{"class":571},"const",[555,1594,1595],{"class":1069}," ALLOWED_CUSTOM ",[555,1597,1598],{"class":561},"=",[555,1600,1601],{"class":1069}," [\n",[555,1603,1604,1607,1610,1612,1614,1616,1619,1621,1623,1625,1628,1630],{"class":557,"line":614},[555,1605,1606],{"class":561},"  '",[555,1608,1609],{"class":584},"servicesDeployed",[555,1611,1091],{"class":561},[555,1613,730],{"class":561},[555,1615,1085],{"class":561},[555,1617,1618],{"class":584},"rollbackUsed",[555,1620,1091],{"class":561},[555,1622,730],{"class":561},[555,1624,1085],{"class":561},[555,1626,1627],{"class":584},"framework",[555,1629,1091],{"class":561},[555,1631,590],{"class":561},[555,1633,1634,1636,1639,1641,1643,1645,1648,1650,1652,1654,1657,1659],{"class":557,"line":632},[555,1635,1606],{"class":561},[555,1637,1638],{"class":584},"product",[555,1640,1091],{"class":561},[555,1642,730],{"class":561},[555,1644,1085],{"class":561},[555,1646,1647],{"class":584},"plan",[555,1649,1091],{"class":561},[555,1651,730],{"class":561},[555,1653,1085],{"class":561},[555,1655,1656],{"class":584},"schemaVersion",[555,1658,1091],{"class":561},[555,1660,590],{"class":561},[555,1662,1663,1665,1668,1670,1672,1674,1677,1679],{"class":557,"line":653},[555,1664,1606],{"class":561},[555,1666,1667],{"class":584},"ghaAction",[555,1669,1091],{"class":561},[555,1671,730],{"class":561},[555,1673,1085],{"class":561},[555,1675,1676],{"class":584},"ghaEvent",[555,1678,1091],{"class":561},[555,1680,590],{"class":561},[555,1682,1683,1686,1689],{"class":557,"line":700},[555,1684,1685],{"class":1069},"] ",[555,1687,1688],{"class":1369},"as",[555,1690,1691],{"class":571}," const\n",[555,1693,1694],{"class":557,"line":751},[555,1695,1587],{"emptyLinePlaceholder":1586},[555,1697,1698,1701,1703,1706,1709,1711,1715,1717,1720,1723],{"class":557,"line":766},[555,1699,1700],{"class":1369},"export",[555,1702,1392],{"class":571},[555,1704,1705],{"class":571}," function",[555,1707,1708],{"class":1065}," POST",[555,1710,1380],{"class":561},[555,1712,1714],{"class":1713},"sHdIc","req",[555,1716,578],{"class":561},[555,1718,1719],{"class":670}," Request",[555,1721,1722],{"class":561},")",[555,1724,763],{"class":561},[555,1726,1727,1729,1732,1734,1736,1739,1741,1744],{"class":557,"line":788},[555,1728,1405],{"class":571},[555,1730,1731],{"class":1069}," raw",[555,1733,1411],{"class":561},[555,1735,1414],{"class":1369},[555,1737,1738],{"class":1069}," req",[555,1740,940],{"class":561},[555,1742,1743],{"class":1065},"text",[555,1745,1420],{"class":1079},[555,1747,1748,1750,1753,1755,1757,1759,1762,1764],{"class":557,"line":803},[555,1749,1405],{"class":571},[555,1751,1752],{"class":1069}," events",[555,1754,1411],{"class":561},[555,1756,1567],{"class":1065},[555,1758,1380],{"class":1079},[555,1760,1761],{"class":1069},"raw",[555,1763,730],{"class":561},[555,1765,763],{"class":561},[555,1767,1768,1771,1773,1775,1777,1779,1781,1783],{"class":557,"line":818},[555,1769,1770],{"class":1079},"    allowedTools",[555,1772,578],{"class":561},[555,1774,1153],{"class":1079},[555,1776,1091],{"class":561},[555,1778,1088],{"class":584},[555,1780,1091],{"class":561},[555,1782,1180],{"class":1079},[555,1784,590],{"class":561},[555,1786,1787,1790,1792,1794,1796,1798,1800,1802,1805],{"class":557,"line":833},[555,1788,1789],{"class":1079},"    allowedCustomKeys",[555,1791,578],{"class":561},[555,1793,665],{"class":561},[555,1795,1085],{"class":561},[555,1797,1088],{"class":1079},[555,1799,1091],{"class":561},[555,1801,578],{"class":561},[555,1803,1804],{"class":1069}," ALLOWED_CUSTOM",[555,1806,697],{"class":561},[555,1808,1809,1811],{"class":557,"line":856},[555,1810,1507],{"class":561},[555,1812,1355],{"class":1079},[555,1814,1815],{"class":557,"line":862},[555,1816,1817],{"class":852},"  \u002F\u002F dedupe on idempotencyKey, then persist\n",[555,1819,1820],{"class":557,"line":886},[555,1821,918],{"class":561},[541,1823,1824,1826,1827,1829],{},[552,1825,933],{}," strips any ",[552,1828,891],{}," key you did not list — even if a client somehow sent it.",[1038,1831,1833],{"id":1832},"map-to-your-warehouse-schema","Map to your warehouse schema",[541,1835,1836,1837,1840],{},"After validation, shape the event for ",[927,1838,1839],{},"your"," database. The evlog envelope is the wire format; your tables are your choice:",[545,1842,1845],{"className":1055,"code":1843,"filename":1844,"language":1058,"meta":550,"style":550},"function toRow(event: RunEvent) {\n  return {\n    command: event.command,\n    duration_ms: event.durationMs,\n    outcome: event.outcome,\n    tool_version: event.tool.version,\n    format: event.flags.format,\n    target: event.flags.target,\n    services_deployed: event.custom.servicesDeployed,\n    framework: event.custom.framework,\n    plan: event.custom.plan,\n    schema_version: event.custom.schemaVersion ?? 1,\n    is_ci: event.env.ci,\n    node: event.env.node,\n    received_at: new Date(),\n  }\n}\n","lib\u002Ftelemetry-store.ts",[552,1846,1847,1868,1875,1891,1906,1921,1940,1960,1980,1999,2017,2036,2061,2080,2099,2117,2122],{"__ignoreMap":550},[555,1848,1849,1852,1855,1857,1859,1861,1864,1866],{"class":557,"line":558},[555,1850,1851],{"class":571},"function",[555,1853,1854],{"class":1065}," toRow",[555,1856,1380],{"class":561},[555,1858,572],{"class":1713},[555,1860,578],{"class":561},[555,1862,1863],{"class":670}," RunEvent",[555,1865,1722],{"class":561},[555,1867,763],{"class":561},[555,1869,1870,1873],{"class":557,"line":565},[555,1871,1872],{"class":1369},"  return",[555,1874,763],{"class":561},[555,1876,1877,1880,1882,1885,1887,1889],{"class":557,"line":593},[555,1878,1879],{"class":1079},"    command",[555,1881,578],{"class":561},[555,1883,1884],{"class":1069}," event",[555,1886,940],{"class":561},[555,1888,598],{"class":1069},[555,1890,590],{"class":561},[555,1892,1893,1896,1898,1900,1902,1904],{"class":557,"line":614},[555,1894,1895],{"class":1079},"    duration_ms",[555,1897,578],{"class":561},[555,1899,1884],{"class":1069},[555,1901,940],{"class":561},[555,1903,619],{"class":1069},[555,1905,590],{"class":561},[555,1907,1908,1911,1913,1915,1917,1919],{"class":557,"line":632},[555,1909,1910],{"class":1079},"    outcome",[555,1912,578],{"class":561},[555,1914,1884],{"class":1069},[555,1916,940],{"class":561},[555,1918,637],{"class":1069},[555,1920,590],{"class":561},[555,1922,1923,1926,1928,1930,1932,1934,1936,1938],{"class":557,"line":653},[555,1924,1925],{"class":1079},"    tool_version",[555,1927,578],{"class":561},[555,1929,1884],{"class":1069},[555,1931,940],{"class":561},[555,1933,705],{"class":1069},[555,1935,940],{"class":561},[555,1937,735],{"class":1069},[555,1939,590],{"class":561},[555,1941,1942,1945,1947,1949,1951,1953,1955,1958],{"class":557,"line":700},[555,1943,1944],{"class":1079},"    format",[555,1946,578],{"class":561},[555,1948,1884],{"class":1069},[555,1950,940],{"class":561},[555,1952,658],{"class":1069},[555,1954,940],{"class":561},[555,1956,1957],{"class":1069},"format",[555,1959,590],{"class":561},[555,1961,1962,1965,1967,1969,1971,1973,1975,1978],{"class":557,"line":751},[555,1963,1964],{"class":1079},"    target",[555,1966,578],{"class":561},[555,1968,1884],{"class":1069},[555,1970,940],{"class":561},[555,1972,658],{"class":1069},[555,1974,940],{"class":561},[555,1976,1977],{"class":1069},"target",[555,1979,590],{"class":561},[555,1981,1982,1985,1987,1989,1991,1993,1995,1997],{"class":557,"line":766},[555,1983,1984],{"class":1079},"    services_deployed",[555,1986,578],{"class":561},[555,1988,1884],{"class":1069},[555,1990,940],{"class":561},[555,1992,891],{"class":1069},[555,1994,940],{"class":561},[555,1996,1609],{"class":1069},[555,1998,590],{"class":561},[555,2000,2001,2003,2005,2007,2009,2011,2013,2015],{"class":557,"line":788},[555,2002,1474],{"class":1079},[555,2004,578],{"class":561},[555,2006,1884],{"class":1069},[555,2008,940],{"class":561},[555,2010,891],{"class":1069},[555,2012,940],{"class":561},[555,2014,1627],{"class":1069},[555,2016,590],{"class":561},[555,2018,2019,2022,2024,2026,2028,2030,2032,2034],{"class":557,"line":803},[555,2020,2021],{"class":1079},"    plan",[555,2023,578],{"class":561},[555,2025,1884],{"class":1069},[555,2027,940],{"class":561},[555,2029,891],{"class":1069},[555,2031,940],{"class":561},[555,2033,1647],{"class":1069},[555,2035,590],{"class":561},[555,2037,2038,2041,2043,2045,2047,2049,2051,2053,2056,2059],{"class":557,"line":818},[555,2039,2040],{"class":1079},"    schema_version",[555,2042,578],{"class":561},[555,2044,1884],{"class":1069},[555,2046,940],{"class":561},[555,2048,891],{"class":1069},[555,2050,940],{"class":561},[555,2052,1656],{"class":1069},[555,2054,2055],{"class":561}," ??",[555,2057,2058],{"class":626}," 1",[555,2060,590],{"class":561},[555,2062,2063,2066,2068,2070,2072,2074,2076,2078],{"class":557,"line":833},[555,2064,2065],{"class":1079},"    is_ci",[555,2067,578],{"class":561},[555,2069,1884],{"class":1069},[555,2071,940],{"class":561},[555,2073,756],{"class":1069},[555,2075,940],{"class":561},[555,2077,793],{"class":1069},[555,2079,590],{"class":561},[555,2081,2082,2085,2087,2089,2091,2093,2095,2097],{"class":557,"line":856},[555,2083,2084],{"class":1079},"    node",[555,2086,578],{"class":561},[555,2088,1884],{"class":1069},[555,2090,940],{"class":561},[555,2092,756],{"class":1069},[555,2094,940],{"class":561},[555,2096,772],{"class":1069},[555,2098,590],{"class":561},[555,2100,2101,2104,2106,2109,2112,2115],{"class":557,"line":862},[555,2102,2103],{"class":1079},"    received_at",[555,2105,578],{"class":561},[555,2107,2108],{"class":561}," new",[555,2110,2111],{"class":1065}," Date",[555,2113,2114],{"class":1079},"()",[555,2116,590],{"class":561},[555,2118,2119],{"class":557,"line":886},[555,2120,2121],{"class":561},"  }\n",[555,2123,2124],{"class":557,"line":915},[555,2125,918],{"class":561},[541,2127,2128,2129,2131,2132,2134],{},"This is where a company \"modifies the schema\" in practice — not by changing ",[552,2130,1016],{},", but by defining how ",[552,2133,891],{}," maps into internal analytics tables.",[1038,2136,2138,2139],{"id":2137},"version-breaking-changes-in-custom","Version breaking changes in ",[552,2140,891],{},[541,2142,2143,2144,2146,2147,2149],{},"When your product counters evolve, bump a numeric ",[552,2145,1656],{}," in ",[552,2148,891],{}," (no allowlist needed) and branch in the ingest mapper:",[545,2151,2153],{"className":1055,"code":2152,"language":1058,"meta":550,"style":550},"const version = (event.custom.schemaVersion as number | undefined) ?? 1\nif (version === 1) return mapV1(event)\nreturn mapV2(event)\n",[552,2154,2155,2196,2220],{"__ignoreMap":550},[555,2156,2157,2159,2162,2164,2167,2169,2171,2173,2176,2178,2181,2184,2187,2190,2193],{"class":557,"line":558},[555,2158,1592],{"class":571},[555,2160,2161],{"class":1069}," version ",[555,2163,1598],{"class":561},[555,2165,2166],{"class":1069}," (event",[555,2168,940],{"class":561},[555,2170,891],{"class":1069},[555,2172,940],{"class":561},[555,2174,2175],{"class":1069},"schemaVersion ",[555,2177,1688],{"class":1369},[555,2179,2180],{"class":670}," number",[555,2182,2183],{"class":561}," |",[555,2185,2186],{"class":670}," undefined",[555,2188,2189],{"class":1069},") ",[555,2191,2192],{"class":561},"??",[555,2194,2195],{"class":626}," 1\n",[555,2197,2198,2201,2204,2207,2209,2211,2214,2217],{"class":557,"line":565},[555,2199,2200],{"class":1369},"if",[555,2202,2203],{"class":1069}," (version ",[555,2205,2206],{"class":561},"===",[555,2208,2058],{"class":626},[555,2210,2189],{"class":1069},[555,2212,2213],{"class":1369},"return",[555,2215,2216],{"class":1065}," mapV1",[555,2218,2219],{"class":1069},"(event)\n",[555,2221,2222,2224,2227],{"class":557,"line":593},[555,2223,2213],{"class":1369},[555,2225,2226],{"class":1065}," mapV2",[555,2228,2219],{"class":1069},[541,2230,2231,2232,2235,2236,2238],{},"Commit an updated ",[552,2233,2234],{},"TELEMETRY.md"," whenever ",[552,2237,1035],{}," changes so disclosure stays aligned with releases.",[1038,2240,2242],{"id":2241},"multiple-tools-one-endpoint","Multiple tools, one endpoint",[541,2244,2245,2246,578],{},"If several CLIs POST to the same ingest URL, namespace custom keys or rely on ",[552,2247,2248],{},"tool.name",[545,2250,2252],{"className":1055,"code":2251,"language":1058,"meta":550,"style":550},"\u002F\u002F Option A — prefix keys per product line\ntelemetry.set({ acme_product: 'cli', deployCount: 3 })\n\n\u002F\u002F Option B — separate allowedCustomKeys per tool.name in parseIngestBody\nallowedCustomKeys: {\n  'acme-cli': ['deployCount', 'framework'],\n  'acme-action': ['jobDuration', 'ghaAction', 'ghaEvent'],\n}\n",[552,2253,2254,2259,2297,2301,2306,2315,2345,2383],{"__ignoreMap":550},[555,2255,2256],{"class":557,"line":558},[555,2257,2258],{"class":852},"\u002F\u002F Option A — prefix keys per product line\n",[555,2260,2261,2263,2265,2267,2269,2272,2275,2277,2279,2281,2283,2285,2288,2290,2293,2295],{"class":557,"line":565},[555,2262,119],{"class":1069},[555,2264,940],{"class":561},[555,2266,1430],{"class":1065},[555,2268,1380],{"class":1069},[555,2270,2271],{"class":561},"{",[555,2273,2274],{"class":1079}," acme_product",[555,2276,578],{"class":561},[555,2278,1085],{"class":561},[555,2280,1239],{"class":584},[555,2282,1091],{"class":561},[555,2284,730],{"class":561},[555,2286,2287],{"class":1079}," deployCount",[555,2289,578],{"class":561},[555,2291,2292],{"class":626}," 3",[555,2294,1570],{"class":561},[555,2296,1355],{"class":1069},[555,2298,2299],{"class":557,"line":593},[555,2300,1587],{"emptyLinePlaceholder":1586},[555,2302,2303],{"class":557,"line":614},[555,2304,2305],{"class":852},"\u002F\u002F Option B — separate allowedCustomKeys per tool.name in parseIngestBody\n",[555,2307,2308,2311,2313],{"class":557,"line":632},[555,2309,2310],{"class":670},"allowedCustomKeys",[555,2312,578],{"class":561},[555,2314,763],{"class":561},[555,2316,2317,2319,2321,2323,2326,2328,2331,2333,2335,2337,2339,2341,2343],{"class":557,"line":653},[555,2318,1606],{"class":561},[555,2320,1088],{"class":584},[555,2322,1091],{"class":561},[555,2324,2325],{"class":1079},": [",[555,2327,1091],{"class":561},[555,2329,2330],{"class":584},"deployCount",[555,2332,1091],{"class":561},[555,2334,730],{"class":561},[555,2336,1085],{"class":561},[555,2338,1627],{"class":584},[555,2340,1091],{"class":561},[555,2342,1180],{"class":1079},[555,2344,590],{"class":561},[555,2346,2347,2349,2352,2354,2356,2358,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381],{"class":557,"line":700},[555,2348,1606],{"class":561},[555,2350,2351],{"class":584},"acme-action",[555,2353,1091],{"class":561},[555,2355,2325],{"class":1079},[555,2357,1091],{"class":561},[555,2359,2360],{"class":584},"jobDuration",[555,2362,1091],{"class":561},[555,2364,730],{"class":561},[555,2366,1085],{"class":561},[555,2368,1667],{"class":584},[555,2370,1091],{"class":561},[555,2372,730],{"class":561},[555,2374,1085],{"class":561},[555,2376,1676],{"class":584},[555,2378,1091],{"class":561},[555,2380,1180],{"class":1079},[555,2382,590],{"class":561},[555,2384,2385],{"class":557,"line":751},[555,2386,918],{"class":561},[1038,2388,2390],{"id":2389},"what-v1-does-not-support","What v1 does not support",[945,2392,2393,2406],{},[948,2394,2395],{},[951,2396,2397,2400,2403],{},[954,2398,2399],{},"Need",[954,2401,2402],{},"v1 answer",[954,2404,2405],{},"Workaround",[964,2407,2408,2427,2447,2464,2475],{},[951,2409,2410,2416,2419],{},[969,2411,2412,2413,1722],{},"New top-level field (",[552,2414,2415],{},"tenantId",[969,2417,2418],{},"Not on the wire",[969,2420,2421,2422,2424,2425],{},"Flat key in ",[552,2423,891],{}," + allowlist, or map server-side from ",[552,2426,867],{},[951,2428,2429,2435,2438],{},[969,2430,2431,2432,1722],{},"Nested objects (",[552,2433,2434],{},"custom.user.plan",[969,2436,2437],{},"Flat records only",[969,2439,2440,2441,2444,2445],{},"Flatten: ",[552,2442,2443],{},"userPlan: 'pro'"," with ",[552,2446,997],{},[951,2448,2449,2452,2455],{},[969,2450,2451],{},"Free-form strings (paths, emails)",[969,2453,2454],{},"Blocked by design",[969,2456,2457,2458,2461,2462],{},"Flags record ",[552,2459,2460],{},"\"\u003Cset>\""," instead of the value; hash before ",[552,2463,993],{},[951,2465,2466,2469,2472],{},[969,2467,2468],{},"Different schema per command",[969,2470,2471],{},"One envelope per run",[969,2473,2474],{},"Convention: only set relevant keys per command",[951,2476,2477,2480,2483],{},[969,2478,2479],{},"Transform before outbox",[969,2481,2482],{},"No hook yet",[969,2484,2485],{},"Map on the server (recommended) or see planned v2 below",[2487,2488,2489,2492,2493,2495,2496,994,2498,2500],"tip",{},[927,2490,2491],{},"Rule of thumb:"," if it is safe to print in ",[552,2494,2234],{}," and fits a closed set or a number, it belongs in ",[552,2497,1035],{},[552,2499,891],{},". Everything else stays server-side.",[1038,2502,2504],{"id":2503},"planned-v2-extensions","Planned v2 extensions",[541,2506,2507],{},"Not shipped yet — design targets for when the v1 extension zones are not enough:",[541,2509,2510,2516],{},[927,2511,2512,2515],{},[552,2513,2514],{},"enrich"," hook"," — run after sanitization, before the outbox append. Lets you inject computed fields without forking the package:",[545,2518,2520],{"className":1055,"code":2519,"language":1058,"meta":550,"style":550},"\u002F\u002F Planned API — not available in v1\ncreateTelemetry({\n  name: 'acme-cli',\n  version: '3.0.0',\n  collect: { fields: { product: ['cli', 'action'] } },\n  enrich(event) {\n    return {\n      ...event,\n      custom: {\n        ...event.custom,\n        schemaVersion: 2,\n      },\n    }\n  },\n})\n",[552,2521,2522,2527,2536,2550,2565,2607,2620,2627,2636,2645,2658,2669,2674,2679,2683],{"__ignoreMap":550},[555,2523,2524],{"class":557,"line":558},[555,2525,2526],{"class":852},"\u002F\u002F Planned API — not available in v1\n",[555,2528,2529,2532,2534],{"class":557,"line":565},[555,2530,2531],{"class":1065},"createTelemetry",[555,2533,1380],{"class":1069},[555,2535,562],{"class":561},[555,2537,2538,2540,2542,2544,2546,2548],{"class":557,"line":593},[555,2539,1080],{"class":1079},[555,2541,578],{"class":561},[555,2543,1085],{"class":561},[555,2545,1088],{"class":584},[555,2547,1091],{"class":561},[555,2549,590],{"class":561},[555,2551,2552,2554,2556,2558,2561,2563],{"class":557,"line":614},[555,2553,1098],{"class":1079},[555,2555,578],{"class":561},[555,2557,1085],{"class":561},[555,2559,2560],{"class":584},"3.0.0",[555,2562,1091],{"class":561},[555,2564,590],{"class":561},[555,2566,2567,2569,2571,2573,2576,2578,2580,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605],{"class":557,"line":632},[555,2568,1130],{"class":1079},[555,2570,578],{"class":561},[555,2572,665],{"class":561},[555,2574,2575],{"class":1079}," fields",[555,2577,578],{"class":561},[555,2579,665],{"class":561},[555,2581,2582],{"class":1079}," product",[555,2584,578],{"class":561},[555,2586,1153],{"class":1069},[555,2588,1091],{"class":561},[555,2590,1239],{"class":584},[555,2592,1091],{"class":561},[555,2594,730],{"class":561},[555,2596,1085],{"class":561},[555,2598,1248],{"class":584},[555,2600,1091],{"class":561},[555,2602,1685],{"class":1069},[555,2604,1352],{"class":561},[555,2606,697],{"class":561},[555,2608,2609,2612,2614,2616,2618],{"class":557,"line":653},[555,2610,2611],{"class":1079},"  enrich",[555,2613,1380],{"class":561},[555,2615,572],{"class":1713},[555,2617,1722],{"class":561},[555,2619,763],{"class":561},[555,2621,2622,2625],{"class":557,"line":700},[555,2623,2624],{"class":1369},"    return",[555,2626,763],{"class":561},[555,2628,2629,2632,2634],{"class":557,"line":751},[555,2630,2631],{"class":561},"      ...",[555,2633,572],{"class":1069},[555,2635,590],{"class":561},[555,2637,2638,2641,2643],{"class":557,"line":766},[555,2639,2640],{"class":1079},"      custom",[555,2642,578],{"class":561},[555,2644,763],{"class":561},[555,2646,2647,2650,2652,2654,2656],{"class":557,"line":788},[555,2648,2649],{"class":561},"        ...",[555,2651,572],{"class":1069},[555,2653,940],{"class":561},[555,2655,891],{"class":1069},[555,2657,590],{"class":561},[555,2659,2660,2663,2665,2667],{"class":557,"line":803},[555,2661,2662],{"class":1079},"        schemaVersion",[555,2664,578],{"class":561},[555,2666,1497],{"class":626},[555,2668,590],{"class":561},[555,2670,2671],{"class":557,"line":818},[555,2672,2673],{"class":561},"      },\n",[555,2675,2676],{"class":557,"line":833},[555,2677,2678],{"class":561},"    }\n",[555,2680,2681],{"class":557,"line":856},[555,2682,859],{"class":561},[555,2684,2685,2687],{"class":557,"line":862},[555,2686,1352],{"class":561},[555,2688,1355],{"class":1069},[541,2690,2691,2692,2694,2695,2697],{},"The hook cannot bypass sanitization rules — strings still require ",[552,2693,997],{},". Server-side ",[552,2696,2310],{}," stays the source of truth.",[541,2699,2700,2703,2704,2707,2708,940],{},[927,2701,2702],{},"Namespaced keys"," — optional ",[552,2705,2706],{},"acme.product"," convention for multi-tool endpoints without prefix collisions. Would be documented in disclosure as ",[552,2709,2710],{},"acme.product: cli | action",[541,2712,2713,2714,2716],{},"If you need one of these before v2 lands, open a discussion on the repo — the v1 path (",[552,2715,891],{}," + server mapping) covers most product analytics needs.",[536,2718,2720],{"id":2719},"privacy","Privacy",[541,2722,2723,2724,2727,2728,2731],{},"Raw ",[552,2725,2726],{},"argv"," is never read. Sanitization applies to ",[927,2729,2730],{},"citty-parsed"," flags only:",[1005,2733,2734,2747,2761],{},[1008,2735,2736,2739,2740,2743,2744,1722],{},[927,2737,2738],{},"Booleans \u002F numbers"," → value stored (",[552,2741,2742],{},"json: true",", ",[552,2745,2746],{},"limit: 50",[1008,2748,2749,2752,2753,1013,2755,2758,2759],{},[927,2750,2751],{},"Strings"," → ",[552,2754,2460],{},[552,2756,2757],{},"output: \"\u003Cset>\"",") unless allowlisted in ",[552,2760,978],{},[1008,2762,2763,2767,2768,2770],{},[927,2764,2765],{},[552,2766,993],{}," → numbers and booleans always; strings only via ",[552,2769,997],{}," (undeclared values are dropped at runtime, never thrown)",[545,2772,2774],{"className":1055,"code":2773,"filename":1057,"language":1058,"meta":550,"style":550},"collect: {\n  flags: { format: ['json', 'csv'] },           \u002F\u002F --format json → \"json\"; --format yaml → \"\u003Cset>\"\n  fields: { framework: ['nuxt', 'next'] },      \u002F\u002F telemetry.set({ framework: 'nuxt' }) ok\n}\n",[552,2775,2776,2784,2823,2860],{"__ignoreMap":550},[555,2777,2778,2780,2782],{"class":557,"line":558},[555,2779,1035],{"class":670},[555,2781,578],{"class":561},[555,2783,763],{"class":561},[555,2785,2786,2789,2791,2793,2796,2798,2800,2802,2804,2806,2808,2810,2813,2815,2817,2820],{"class":557,"line":565},[555,2787,2788],{"class":670},"  flags",[555,2790,578],{"class":561},[555,2792,665],{"class":561},[555,2794,2795],{"class":670}," format",[555,2797,578],{"class":561},[555,2799,1153],{"class":1079},[555,2801,1091],{"class":561},[555,2803,1158],{"class":584},[555,2805,1091],{"class":561},[555,2807,730],{"class":561},[555,2809,1085],{"class":561},[555,2811,2812],{"class":584},"csv",[555,2814,1091],{"class":561},[555,2816,1685],{"class":1079},[555,2818,2819],{"class":561},"},",[555,2821,2822],{"class":852},"           \u002F\u002F --format json → \"json\"; --format yaml → \"\u003Cset>\"\n",[555,2824,2825,2828,2830,2832,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857],{"class":557,"line":593},[555,2826,2827],{"class":670},"  fields",[555,2829,578],{"class":561},[555,2831,665],{"class":561},[555,2833,2834],{"class":670}," framework",[555,2836,578],{"class":561},[555,2838,1153],{"class":1079},[555,2840,1091],{"class":561},[555,2842,1315],{"class":584},[555,2844,1091],{"class":561},[555,2846,730],{"class":561},[555,2848,1085],{"class":561},[555,2850,1324],{"class":584},[555,2852,1091],{"class":561},[555,2854,1685],{"class":1079},[555,2856,2819],{"class":561},[555,2858,2859],{"class":852},"      \u002F\u002F telemetry.set({ framework: 'nuxt' }) ok\n",[555,2861,2862],{"class":557,"line":614},[555,2863,918],{"class":561},[541,2865,2866,2867,2869],{},"Three kinds of parser noise are dropped before the event is built, so ",[552,2868,658],{}," reads\nas what the user asked for rather than what the parser filled in:",[1005,2871,2872,2882,2892],{},[1008,2873,2874,2877,2878,2881],{},[927,2875,2876],{},"Positionals"," — citty's ",[552,2879,2880],{},"_"," bucket holds argument values, not flag names",[1008,2883,2884,2887,2888,2891],{},[927,2885,2886],{},"Defaults"," — a flag still sitting at its declared ",[552,2889,2890],{},"default"," is not a choice anyone made",[1008,2893,2894,2897,2898,2901,2902,2905,2906,2909,2910,2912],{},[927,2895,2896],{},"Kebab-case duplicates"," — ",[552,2899,2900],{},"--min-score"," arrives as both ",[552,2903,2904],{},"minScore"," and ",[552,2907,2908],{},"min-score","; only the camelCase name is kept, and that is the name ",[552,2911,978],{}," allowlists",[541,2914,2915,2916,2919,2920,2923,2924,940],{},"Negation still reports: ",[552,2917,2918],{},"--no-write"," against ",[552,2921,2922],{},"write: { default: true }"," records ",[552,2925,2926],{},"write: false",[541,2928,2929,2930,1048,2932,2934,2935,2937],{},"Declare allowlists in the same ",[552,2931,1047],{},[552,2933,1051],{}," call as ",[552,2936,1035],{}," — no separate config file.",[536,2939,2941],{"id":2940},"disclosure","Disclosure",[541,2943,2944,2947,2948,2950,2951,2953],{},[552,2945,2946],{},"generateDisclosure()"," produces markdown + JSON from the standard envelope plus your ",[552,2949,1035],{}," extensions. Commit the output (e.g. ",[552,2952,2234],{},") so it stays in sync with releases:",[545,2955,2958],{"className":1055,"code":2956,"filename":2957,"language":1058,"meta":550,"style":550},"import { writeFile } from 'node:fs\u002Fpromises'\nimport { generateDisclosure } from '@evlog\u002Ftelemetry'\n\nconst { markdown } = generateDisclosure('my-tool', {\n  flags: { format: ['json', 'csv'] },\n})\n\nawait writeFile('TELEMETRY.md', markdown)\n","scripts\u002Fgenerate-disclosure.ts",[552,2959,2960,2980,2999,3003,3030,3063,3069,3073],{"__ignoreMap":550},[555,2961,2962,2964,2966,2969,2971,2973,2975,2978],{"class":557,"line":558},[555,2963,1562],{"class":1369},[555,2965,665],{"class":561},[555,2967,2968],{"class":1069}," writeFile",[555,2970,1570],{"class":561},[555,2972,1573],{"class":1369},[555,2974,1085],{"class":561},[555,2976,2977],{"class":584},"node:fs\u002Fpromises",[555,2979,1581],{"class":561},[555,2981,2982,2984,2986,2989,2991,2993,2995,2997],{"class":557,"line":565},[555,2983,1562],{"class":1369},[555,2985,665],{"class":561},[555,2987,2988],{"class":1069}," generateDisclosure",[555,2990,1570],{"class":561},[555,2992,1573],{"class":1369},[555,2994,1085],{"class":561},[555,2996,1020],{"class":584},[555,2998,1581],{"class":561},[555,3000,3001],{"class":557,"line":593},[555,3002,1587],{"emptyLinePlaceholder":1586},[555,3004,3005,3007,3009,3012,3014,3016,3018,3020,3022,3024,3026,3028],{"class":557,"line":614},[555,3006,1592],{"class":571},[555,3008,665],{"class":561},[555,3010,3011],{"class":1069}," markdown ",[555,3013,1352],{"class":561},[555,3015,1411],{"class":561},[555,3017,2988],{"class":1065},[555,3019,1380],{"class":1069},[555,3021,1091],{"class":561},[555,3023,725],{"class":584},[555,3025,1091],{"class":561},[555,3027,730],{"class":561},[555,3029,763],{"class":561},[555,3031,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060],{"class":557,"line":632},[555,3033,2788],{"class":1079},[555,3035,578],{"class":561},[555,3037,665],{"class":561},[555,3039,2795],{"class":1079},[555,3041,578],{"class":561},[555,3043,1153],{"class":1069},[555,3045,1091],{"class":561},[555,3047,1158],{"class":584},[555,3049,1091],{"class":561},[555,3051,730],{"class":561},[555,3053,1085],{"class":561},[555,3055,2812],{"class":584},[555,3057,1091],{"class":561},[555,3059,1685],{"class":1069},[555,3061,3062],{"class":561},"},\n",[555,3064,3065,3067],{"class":557,"line":653},[555,3066,1352],{"class":561},[555,3068,1355],{"class":1069},[555,3070,3071],{"class":557,"line":700},[555,3072,1587],{"emptyLinePlaceholder":1586},[555,3074,3075,3077,3079,3081,3083,3085,3087,3089],{"class":557,"line":751},[555,3076,1370],{"class":1369},[555,3078,2968],{"class":1065},[555,3080,1380],{"class":1069},[555,3082,1091],{"class":561},[555,3084,2234],{"class":584},[555,3086,1091],{"class":561},[555,3088,730],{"class":561},[555,3090,3091],{"class":1069}," markdown)\n",[541,3093,3094,3095,3098,3099,940],{},"Users can also read it at runtime via ",[552,3096,3097],{},"my-tool telemetry status"," when you wire ",[552,3100,3101],{},"defineTelemetryCommands()",[536,3103,3105],{"id":3104},"consent-and-reliability","Consent and reliability",[541,3107,3108,1531,3111,2752,3114,3117,3118,1048,3121,3124],{},[927,3109,3110],{},"Opt-out priority:",[552,3112,3113],{},"DO_NOT_TRACK=1",[552,3115,3116],{},"EVLOG_TELEMETRY=0"," → persisted preference (",[552,3119,3120],{},"disableTelemetry()",[552,3122,3123],{},"telemetry disable","). Opt-out purges the undelivered outbox.",[541,3126,3127,3130,3131,3134],{},[927,3128,3129],{},"Never harms the host:"," telemetry never throws, never blocks exit; ",[552,3132,3133],{},"flush()"," has a 500ms hard cap.",[541,3136,3137,3140,3141,940],{},[927,3138,3139],{},"Outbox:"," events append locally before any network attempt. Offline machines and CI matrix jobs drain the backlog on the next invocation once your ingestion endpoint returns ",[552,3142,3143],{},"2xx",[541,3145,3146,1531,3149,3152,3153,3156],{},[927,3147,3148],{},"Endpoint:",[552,3150,3151],{},"EVLOG_TELEMETRY_ENDPOINT"," env → ",[552,3154,3155],{},"endpoint"," option baked into the CLI. Omit both during local development; ship the URL when your ingest handler is live.",[3158,3159,3160],"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 .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}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":550,"searchDepth":565,"depth":565,"links":3162},[3163,3164,3174,3175,3176],{"id":538,"depth":565,"text":539},{"id":921,"depth":565,"text":922,"children":3165},[3166,3167,3168,3169,3171,3172,3173],{"id":1040,"depth":593,"text":1041},{"id":1547,"depth":593,"text":1548},{"id":1832,"depth":593,"text":1833},{"id":2137,"depth":593,"text":3170},"Version breaking changes in custom",{"id":2241,"depth":593,"text":2242},{"id":2389,"depth":593,"text":2390},{"id":2503,"depth":593,"text":2504},{"id":2719,"depth":565,"text":2720},{"id":2940,"depth":565,"text":2941},{"id":3104,"depth":565,"text":3105},"RunEvent envelope, extending the schema with collect and custom fields, privacy rules, TELEMETRY.md disclosure, and consent \u002F outbox reliability.","md",[3180,3183,3184],{"label":36,"icon":39,"to":414,"color":3181,"variant":3182},"neutral","subtle",{"label":417,"icon":420,"to":418,"color":3181,"variant":3182},{"label":422,"icon":425,"to":423,"color":3181,"variant":3182},{},{"title":427,"icon":79},{"title":531,"description":3177},"liR3DngveogkE_w1UnQjwc8I0Z9Morn2b9hw96JVdxU",[3190,3192],{"title":422,"path":423,"stem":424,"description":3191,"icon":425,"children":-1},"Build a server ingestion endpoint for @evlog\u002Ftelemetry — semi-public threat model, parseIngestBody validation, framework routes, idempotent storage, and rate limiting.",{"title":431,"path":432,"stem":433,"description":3193,"icon":434,"children":-1},"Add derived context to every wide event automatically — user agent, geo, request size, and trace context. Built-in enrichers from evlog\u002Fenrichers, plus how to compose them with your own.",1786119626697]