[{"data":1,"prerenderedAt":3199},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-telemetry-reference":534,"-use-cases-telemetry-reference-surround":3194},[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,529],{"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",{"title":530,"path":531,"stem":532,"icon":533},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"id":535,"title":536,"body":537,"description":3182,"extension":3183,"links":3184,"meta":3190,"navigation":3191,"path":428,"seo":3192,"stem":429,"__hash__":3193},"docs\u002F5.use-cases\u002F4.telemetry\u002F04.reference.md","Telemetry Reference",{"type":538,"value":539,"toc":3166},"minimark",[540,545,549,924,928,946,949,1006,1009,1042,1047,1058,1361,1364,1521,1530,1550,1554,1557,1827,1835,1839,1846,2131,2140,2146,2155,2234,2244,2248,2254,2392,2396,2491,2506,2510,2513,2522,2694,2703,2716,2722,2726,2737,2776,2869,2875,2918,2932,2943,2947,2959,3097,3107,3111,3130,3140,3149,3162],[541,542,544],"h2",{"id":543},"standard-envelope","Standard envelope",[546,547,548],"p",{},"Every run shares the same shape. You do not declare per-command schemas.",[550,551,556],"pre",{"className":552,"code":553,"language":554,"meta":555,"style":555},"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","",[557,558,559,568,596,617,635,656,703,754,769,791,806,821,836,859,865,889,918],"code",{"__ignoreMap":555},[560,561,564],"span",{"class":562,"line":563},"line",1,[560,565,567],{"class":566},"sMK4o","{\n",[560,569,571,574,578,581,584,587,591,593],{"class":562,"line":570},2,[560,572,573],{"class":566},"  \"",[560,575,577],{"class":576},"spNyl","event",[560,579,580],{"class":566},"\"",[560,582,583],{"class":566},":",[560,585,586],{"class":566}," \"",[560,588,590],{"class":589},"sfazB","run",[560,592,580],{"class":566},[560,594,595],{"class":566},",\n",[560,597,599,601,604,606,608,610,613,615],{"class":562,"line":598},3,[560,600,573],{"class":566},[560,602,603],{"class":576},"command",[560,605,580],{"class":566},[560,607,583],{"class":566},[560,609,586],{"class":566},[560,611,612],{"class":589},"sync",[560,614,580],{"class":566},[560,616,595],{"class":566},[560,618,620,622,625,627,629,633],{"class":562,"line":619},4,[560,621,573],{"class":566},[560,623,624],{"class":576},"durationMs",[560,626,580],{"class":566},[560,628,583],{"class":566},[560,630,632],{"class":631},"sbssI"," 412",[560,634,595],{"class":566},[560,636,638,640,643,645,647,649,652,654],{"class":562,"line":637},5,[560,639,573],{"class":566},[560,641,642],{"class":576},"outcome",[560,644,580],{"class":566},[560,646,583],{"class":566},[560,648,586],{"class":566},[560,650,651],{"class":589},"success",[560,653,580],{"class":566},[560,655,595],{"class":566},[560,657,659,661,664,666,668,671,673,677,679,681,684,686,689,691,693,695,698,700],{"class":562,"line":658},6,[560,660,573],{"class":566},[560,662,663],{"class":576},"flags",[560,665,580],{"class":566},[560,667,583],{"class":566},[560,669,670],{"class":566}," {",[560,672,586],{"class":566},[560,674,676],{"class":675},"sBMFI","dryRun",[560,678,580],{"class":566},[560,680,583],{"class":566},[560,682,683],{"class":566}," true,",[560,685,586],{"class":566},[560,687,688],{"class":675},"output",[560,690,580],{"class":566},[560,692,583],{"class":566},[560,694,586],{"class":566},[560,696,697],{"class":589},"\u003Cset>",[560,699,580],{"class":566},[560,701,702],{"class":566}," },\n",[560,704,706,708,711,713,715,717,719,722,724,726,728,731,733,736,738,741,743,745,747,750,752],{"class":562,"line":705},7,[560,707,573],{"class":566},[560,709,710],{"class":576},"tool",[560,712,580],{"class":566},[560,714,583],{"class":566},[560,716,670],{"class":566},[560,718,586],{"class":566},[560,720,721],{"class":675},"name",[560,723,580],{"class":566},[560,725,583],{"class":566},[560,727,586],{"class":566},[560,729,730],{"class":589},"my-tool",[560,732,580],{"class":566},[560,734,735],{"class":566},",",[560,737,586],{"class":566},[560,739,740],{"class":675},"version",[560,742,580],{"class":566},[560,744,583],{"class":566},[560,746,586],{"class":566},[560,748,749],{"class":589},"1.0.0",[560,751,580],{"class":566},[560,753,702],{"class":566},[560,755,757,759,762,764,766],{"class":562,"line":756},8,[560,758,573],{"class":566},[560,760,761],{"class":576},"env",[560,763,580],{"class":566},[560,765,583],{"class":566},[560,767,768],{"class":566}," {\n",[560,770,772,775,778,780,782,784,787,789],{"class":562,"line":771},9,[560,773,774],{"class":566},"    \"",[560,776,777],{"class":675},"node",[560,779,580],{"class":566},[560,781,583],{"class":566},[560,783,586],{"class":566},[560,785,786],{"class":589},"20.11",[560,788,580],{"class":566},[560,790,595],{"class":566},[560,792,794,796,799,801,803],{"class":562,"line":793},10,[560,795,774],{"class":566},[560,797,798],{"class":675},"ci",[560,800,580],{"class":566},[560,802,583],{"class":566},[560,804,805],{"class":566}," false,\n",[560,807,809,811,814,816,818],{"class":562,"line":808},11,[560,810,774],{"class":566},[560,812,813],{"class":675},"provider",[560,815,580],{"class":566},[560,817,583],{"class":566},[560,819,820],{"class":566}," null,\n",[560,822,824,826,829,831,833],{"class":562,"line":823},12,[560,825,774],{"class":566},[560,827,828],{"class":675},"tty",[560,830,580],{"class":566},[560,832,583],{"class":566},[560,834,835],{"class":566}," true,\n",[560,837,839,841,844,846,848,850,853,855],{"class":562,"line":838},13,[560,840,774],{"class":566},[560,842,843],{"class":675},"agent",[560,845,580],{"class":566},[560,847,583],{"class":566},[560,849,586],{"class":566},[560,851,852],{"class":589},"cursor",[560,854,580],{"class":566},[560,856,858],{"class":857},"sHwdD","   \u002F\u002F std-env: cursor, claude, codex, … or null\n",[560,860,862],{"class":562,"line":861},14,[560,863,864],{"class":566},"  },\n",[560,866,868,870,873,875,877,879,882,884,886],{"class":562,"line":867},15,[560,869,573],{"class":566},[560,871,872],{"class":576},"machineId",[560,874,580],{"class":566},[560,876,583],{"class":566},[560,878,586],{"class":566},[560,880,881],{"class":589},"ab3f…",[560,883,580],{"class":566},[560,885,735],{"class":566},[560,887,888],{"class":857}," \u002F\u002F hashed; omitted in ephemeral CI\n",[560,890,892,894,897,899,901,903,905,908,910,912,915],{"class":562,"line":891},16,[560,893,573],{"class":566},[560,895,896],{"class":576},"custom",[560,898,580],{"class":566},[560,900,583],{"class":566},[560,902,670],{"class":566},[560,904,586],{"class":566},[560,906,907],{"class":675},"itemsSynced",[560,909,580],{"class":566},[560,911,583],{"class":566},[560,913,914],{"class":631}," 42",[560,916,917],{"class":566}," }\n",[560,919,921],{"class":562,"line":920},17,[560,922,923],{"class":566},"}\n",[541,925,927],{"id":926},"extending-the-schema","Extending the schema",[546,929,930,931,935,936,939,940,942,943,945],{},"The envelope above is ",[932,933,934],"strong",{},"fixed"," — every tool sends the same top-level shape so ",[557,937,938],{},"parseIngestBody()"," and disclosure stay predictable. You do not add fields next to ",[557,941,603],{}," or ",[557,944,624],{},".",[546,947,948],{},"Your product schema lives in two extension zones:",[950,951,952,968],"table",{},[953,954,955],"thead",{},[956,957,958,962,965],"tr",{},[959,960,961],"th",{},"Zone",[959,963,964],{},"Who sets it",[959,966,967],{},"What goes there",[969,970,971,987],"tbody",{},[956,972,973,978,984],{},[974,975,976],"td",{},[557,977,663],{},[974,979,980,981],{},"citty (auto) + ",[557,982,983],{},"collect.flags",[974,985,986],{},"Flags you passed — booleans\u002Fnumbers as values, strings only when allowlisted",[956,988,989,993,1003],{},[974,990,991],{},[557,992,896],{},[974,994,995,996,999,1000],{},"you via ",[557,997,998],{},"telemetry.set()"," + ",[557,1001,1002],{},"collect.fields",[974,1004,1005],{},"Business counters, categorical dimensions, schema version",[546,1007,1008],{},"Think of it as two contracts:",[1010,1011,1012,1027],"ul",{},[1013,1014,1015,1018,1019,1022,1023,1026],"li",{},[932,1016,1017],{},"Transport contract"," (",[557,1020,1021],{},"RunEvent",") — owned by ",[557,1024,1025],{},"@evlog\u002Ftelemetry",", stable across tools",[1013,1028,1029,1018,1032,1034,1035,1037,1038,1041],{},[932,1030,1031],{},"Product contract",[557,1033,896],{}," + declared ",[557,1036,663],{},") — owned by you, declared in ",[557,1039,1040],{},"collect",", mirrored on the server",[1043,1044,1046],"h3",{"id":1045},"declare-your-extensions-once","Declare your extensions once",[546,1048,1049,1050,1053,1054,1057],{},"Everything you collect beyond the standard envelope is declared inline in the same ",[557,1051,1052],{},"withTelemetry()"," \u002F ",[557,1055,1056],{},"createTelemetry()"," call:",[550,1059,1064],{"className":1060,"code":1061,"filename":1062,"language":1063,"meta":555,"style":555},"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",[557,1065,1066,1080,1099,1115,1131,1140,1149,1188,1217,1222,1231,1269,1307,1345,1349,1353],{"__ignoreMap":555},[560,1067,1068,1072,1076,1078],{"class":562,"line":563},[560,1069,1071],{"class":1070},"s2Zo4","withTelemetry",[560,1073,1075],{"class":1074},"sTEyZ","(command",[560,1077,735],{"class":566},[560,1079,768],{"class":566},[560,1081,1082,1086,1088,1091,1094,1097],{"class":562,"line":570},[560,1083,1085],{"class":1084},"swJcz","  name",[560,1087,583],{"class":566},[560,1089,1090],{"class":566}," '",[560,1092,1093],{"class":589},"acme-cli",[560,1095,1096],{"class":566},"'",[560,1098,595],{"class":566},[560,1100,1101,1104,1106,1108,1111,1113],{"class":562,"line":598},[560,1102,1103],{"class":1084},"  version",[560,1105,583],{"class":566},[560,1107,1090],{"class":566},[560,1109,1110],{"class":589},"2.1.0",[560,1112,1096],{"class":566},[560,1114,595],{"class":566},[560,1116,1117,1120,1122,1124,1127,1129],{"class":562,"line":619},[560,1118,1119],{"class":1084},"  endpoint",[560,1121,583],{"class":566},[560,1123,1090],{"class":566},[560,1125,1126],{"class":589},"https:\u002F\u002Ftelemetry.acme.dev\u002Fapi\u002Fingest",[560,1128,1096],{"class":566},[560,1130,595],{"class":566},[560,1132,1133,1136,1138],{"class":562,"line":637},[560,1134,1135],{"class":1084},"  collect",[560,1137,583],{"class":566},[560,1139,768],{"class":566},[560,1141,1142,1145,1147],{"class":562,"line":658},[560,1143,1144],{"class":1084},"    flags",[560,1146,583],{"class":566},[560,1148,768],{"class":566},[560,1150,1151,1154,1156,1159,1161,1164,1166,1168,1170,1173,1175,1177,1179,1181,1183,1186],{"class":562,"line":705},[560,1152,1153],{"class":1084},"      format",[560,1155,583],{"class":566},[560,1157,1158],{"class":1074}," [",[560,1160,1096],{"class":566},[560,1162,1163],{"class":589},"json",[560,1165,1096],{"class":566},[560,1167,735],{"class":566},[560,1169,1090],{"class":566},[560,1171,1172],{"class":589},"yaml",[560,1174,1096],{"class":566},[560,1176,735],{"class":566},[560,1178,1090],{"class":566},[560,1180,950],{"class":589},[560,1182,1096],{"class":566},[560,1184,1185],{"class":1074},"]",[560,1187,595],{"class":566},[560,1189,1190,1193,1195,1197,1199,1202,1204,1206,1208,1211,1213,1215],{"class":562,"line":756},[560,1191,1192],{"class":1084},"      target",[560,1194,583],{"class":566},[560,1196,1158],{"class":1074},[560,1198,1096],{"class":566},[560,1200,1201],{"class":589},"staging",[560,1203,1096],{"class":566},[560,1205,735],{"class":566},[560,1207,1090],{"class":566},[560,1209,1210],{"class":589},"production",[560,1212,1096],{"class":566},[560,1214,1185],{"class":1074},[560,1216,595],{"class":566},[560,1218,1219],{"class":562,"line":771},[560,1220,1221],{"class":566},"    },\n",[560,1223,1224,1227,1229],{"class":562,"line":793},[560,1225,1226],{"class":1084},"    fields",[560,1228,583],{"class":566},[560,1230,768],{"class":566},[560,1232,1233,1236,1238,1240,1242,1245,1247,1249,1251,1254,1256,1258,1260,1263,1265,1267],{"class":562,"line":808},[560,1234,1235],{"class":1084},"      product",[560,1237,583],{"class":566},[560,1239,1158],{"class":1074},[560,1241,1096],{"class":566},[560,1243,1244],{"class":589},"cli",[560,1246,1096],{"class":566},[560,1248,735],{"class":566},[560,1250,1090],{"class":566},[560,1252,1253],{"class":589},"action",[560,1255,1096],{"class":566},[560,1257,735],{"class":566},[560,1259,1090],{"class":566},[560,1261,1262],{"class":589},"migrator",[560,1264,1096],{"class":566},[560,1266,1185],{"class":1074},[560,1268,595],{"class":566},[560,1270,1271,1274,1276,1278,1280,1283,1285,1287,1289,1292,1294,1296,1298,1301,1303,1305],{"class":562,"line":823},[560,1272,1273],{"class":1084},"      plan",[560,1275,583],{"class":566},[560,1277,1158],{"class":1074},[560,1279,1096],{"class":566},[560,1281,1282],{"class":589},"free",[560,1284,1096],{"class":566},[560,1286,735],{"class":566},[560,1288,1090],{"class":566},[560,1290,1291],{"class":589},"pro",[560,1293,1096],{"class":566},[560,1295,735],{"class":566},[560,1297,1090],{"class":566},[560,1299,1300],{"class":589},"enterprise",[560,1302,1096],{"class":566},[560,1304,1185],{"class":1074},[560,1306,595],{"class":566},[560,1308,1309,1312,1314,1316,1318,1321,1323,1325,1327,1330,1332,1334,1336,1339,1341,1343],{"class":562,"line":838},[560,1310,1311],{"class":1084},"      framework",[560,1313,583],{"class":566},[560,1315,1158],{"class":1074},[560,1317,1096],{"class":566},[560,1319,1320],{"class":589},"nuxt",[560,1322,1096],{"class":566},[560,1324,735],{"class":566},[560,1326,1090],{"class":566},[560,1328,1329],{"class":589},"next",[560,1331,1096],{"class":566},[560,1333,735],{"class":566},[560,1335,1090],{"class":566},[560,1337,1338],{"class":589},"remix",[560,1340,1096],{"class":566},[560,1342,1185],{"class":1074},[560,1344,595],{"class":566},[560,1346,1347],{"class":562,"line":861},[560,1348,1221],{"class":566},[560,1350,1351],{"class":562,"line":867},[560,1352,864],{"class":566},[560,1354,1355,1358],{"class":562,"line":891},[560,1356,1357],{"class":566},"}",[560,1359,1360],{"class":1074},")\n",[546,1362,1363],{},"Inside handlers, add counters and dimensions:",[550,1365,1368],{"className":1060,"code":1366,"filename":1367,"language":1063,"meta":555,"style":555},"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",[557,1369,1370,1406,1426,1440,1459,1475,1493,1508,1515],{"__ignoreMap":555},[560,1371,1372,1376,1379,1381,1383,1386,1388,1391,1393,1395,1398,1401,1404],{"class":562,"line":563},[560,1373,1375],{"class":1374},"s7zQu","await",[560,1377,1378],{"class":1074}," t",[560,1380,945],{"class":566},[560,1382,590],{"class":1070},[560,1384,1385],{"class":1074},"(",[560,1387,1096],{"class":566},[560,1389,1390],{"class":589},"deploy",[560,1392,1096],{"class":566},[560,1394,735],{"class":566},[560,1396,1397],{"class":576}," async",[560,1399,1400],{"class":566}," ()",[560,1402,1403],{"class":576}," =>",[560,1405,768],{"class":566},[560,1407,1408,1411,1414,1417,1420,1423],{"class":562,"line":570},[560,1409,1410],{"class":576},"  const",[560,1412,1413],{"class":1074}," result",[560,1415,1416],{"class":566}," =",[560,1418,1419],{"class":1374}," await",[560,1421,1422],{"class":1070}," deployServices",[560,1424,1425],{"class":1084},"()\n",[560,1427,1428,1431,1433,1436,1438],{"class":562,"line":598},[560,1429,1430],{"class":1074},"  telemetry",[560,1432,945],{"class":566},[560,1434,1435],{"class":1070},"set",[560,1437,1385],{"class":1084},[560,1439,567],{"class":566},[560,1441,1442,1445,1447,1449,1451,1454,1456],{"class":562,"line":619},[560,1443,1444],{"class":1084},"    servicesDeployed",[560,1446,583],{"class":566},[560,1448,1413],{"class":1074},[560,1450,945],{"class":566},[560,1452,1453],{"class":1074},"count",[560,1455,735],{"class":566},[560,1457,1458],{"class":857},"   \u002F\u002F number — always allowed\n",[560,1460,1461,1464,1466,1470,1472],{"class":562,"line":637},[560,1462,1463],{"class":1084},"    rollbackUsed",[560,1465,583],{"class":566},[560,1467,1469],{"class":1468},"sfNiH"," false",[560,1471,735],{"class":566},[560,1473,1474],{"class":857},"              \u002F\u002F boolean — always allowed\n",[560,1476,1477,1480,1482,1484,1486,1488,1490],{"class":562,"line":658},[560,1478,1479],{"class":1084},"    framework",[560,1481,583],{"class":566},[560,1483,1090],{"class":566},[560,1485,1320],{"class":589},[560,1487,1096],{"class":566},[560,1489,735],{"class":566},[560,1491,1492],{"class":857},"                \u002F\u002F string — allowed (in collect.fields)\n",[560,1494,1495,1498,1500,1503,1505],{"class":562,"line":705},[560,1496,1497],{"class":1084},"    schemaVersion",[560,1499,583],{"class":566},[560,1501,1502],{"class":631}," 2",[560,1504,735],{"class":566},[560,1506,1507],{"class":857},"                 \u002F\u002F number — version your custom shape\n",[560,1509,1510,1513],{"class":562,"line":756},[560,1511,1512],{"class":566},"  }",[560,1514,1360],{"class":1084},[560,1516,1517,1519],{"class":562,"line":771},[560,1518,1357],{"class":566},[560,1520,1360],{"class":1074},[546,1522,1523,1524,1527,1528,945],{},"Undeclared strings are ",[932,1525,1526],{},"dropped at runtime",", never thrown. That is the privacy guarantee — no accidental paths, tokens, or free-form PII in ",[557,1529,896],{},[1531,1532,1533,1536,1537,1540,1541,1543,1544,1546,1547,1549],"note",{},[932,1534,1535],{},"Typing:"," ",[557,1538,1539],{},"TelemetryHandle.set()"," autocomplete covers declared ",[557,1542,1002],{}," keys. Use the ambient ",[557,1545,998],{}," for extra numeric\u002Fboolean counters in the same run — both merge into ",[557,1548,896],{}," before the event is recorded.",[1043,1551,1553],{"id":1552},"mirror-on-the-server","Mirror on the server",[546,1555,1556],{},"Your ingest handler is the second gate. Pass the same tool name and custom keys you declared on the CLI:",[550,1558,1561],{"className":1060,"code":1559,"filename":1560,"language":1063,"meta":555,"style":555},"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",[557,1562,1563,1587,1593,1607,1637,1666,1686,1697,1701,1730,1751,1771,1790,1812,1818,1823],{"__ignoreMap":555},[560,1564,1565,1568,1570,1573,1576,1579,1581,1584],{"class":562,"line":563},[560,1566,1567],{"class":1374},"import",[560,1569,670],{"class":566},[560,1571,1572],{"class":1074}," parseIngestBody",[560,1574,1575],{"class":566}," }",[560,1577,1578],{"class":1374}," from",[560,1580,1090],{"class":566},[560,1582,1583],{"class":589},"@evlog\u002Ftelemetry\u002Fingest",[560,1585,1586],{"class":566},"'\n",[560,1588,1589],{"class":562,"line":570},[560,1590,1592],{"emptyLinePlaceholder":1591},true,"\n",[560,1594,1595,1598,1601,1604],{"class":562,"line":598},[560,1596,1597],{"class":576},"const",[560,1599,1600],{"class":1074}," ALLOWED_CUSTOM ",[560,1602,1603],{"class":566},"=",[560,1605,1606],{"class":1074}," [\n",[560,1608,1609,1612,1615,1617,1619,1621,1624,1626,1628,1630,1633,1635],{"class":562,"line":619},[560,1610,1611],{"class":566},"  '",[560,1613,1614],{"class":589},"servicesDeployed",[560,1616,1096],{"class":566},[560,1618,735],{"class":566},[560,1620,1090],{"class":566},[560,1622,1623],{"class":589},"rollbackUsed",[560,1625,1096],{"class":566},[560,1627,735],{"class":566},[560,1629,1090],{"class":566},[560,1631,1632],{"class":589},"framework",[560,1634,1096],{"class":566},[560,1636,595],{"class":566},[560,1638,1639,1641,1644,1646,1648,1650,1653,1655,1657,1659,1662,1664],{"class":562,"line":637},[560,1640,1611],{"class":566},[560,1642,1643],{"class":589},"product",[560,1645,1096],{"class":566},[560,1647,735],{"class":566},[560,1649,1090],{"class":566},[560,1651,1652],{"class":589},"plan",[560,1654,1096],{"class":566},[560,1656,735],{"class":566},[560,1658,1090],{"class":566},[560,1660,1661],{"class":589},"schemaVersion",[560,1663,1096],{"class":566},[560,1665,595],{"class":566},[560,1667,1668,1670,1673,1675,1677,1679,1682,1684],{"class":562,"line":658},[560,1669,1611],{"class":566},[560,1671,1672],{"class":589},"ghaAction",[560,1674,1096],{"class":566},[560,1676,735],{"class":566},[560,1678,1090],{"class":566},[560,1680,1681],{"class":589},"ghaEvent",[560,1683,1096],{"class":566},[560,1685,595],{"class":566},[560,1687,1688,1691,1694],{"class":562,"line":705},[560,1689,1690],{"class":1074},"] ",[560,1692,1693],{"class":1374},"as",[560,1695,1696],{"class":576}," const\n",[560,1698,1699],{"class":562,"line":756},[560,1700,1592],{"emptyLinePlaceholder":1591},[560,1702,1703,1706,1708,1711,1714,1716,1720,1722,1725,1728],{"class":562,"line":771},[560,1704,1705],{"class":1374},"export",[560,1707,1397],{"class":576},[560,1709,1710],{"class":576}," function",[560,1712,1713],{"class":1070}," POST",[560,1715,1385],{"class":566},[560,1717,1719],{"class":1718},"sHdIc","req",[560,1721,583],{"class":566},[560,1723,1724],{"class":675}," Request",[560,1726,1727],{"class":566},")",[560,1729,768],{"class":566},[560,1731,1732,1734,1737,1739,1741,1744,1746,1749],{"class":562,"line":793},[560,1733,1410],{"class":576},[560,1735,1736],{"class":1074}," raw",[560,1738,1416],{"class":566},[560,1740,1419],{"class":1374},[560,1742,1743],{"class":1074}," req",[560,1745,945],{"class":566},[560,1747,1748],{"class":1070},"text",[560,1750,1425],{"class":1084},[560,1752,1753,1755,1758,1760,1762,1764,1767,1769],{"class":562,"line":808},[560,1754,1410],{"class":576},[560,1756,1757],{"class":1074}," events",[560,1759,1416],{"class":566},[560,1761,1572],{"class":1070},[560,1763,1385],{"class":1084},[560,1765,1766],{"class":1074},"raw",[560,1768,735],{"class":566},[560,1770,768],{"class":566},[560,1772,1773,1776,1778,1780,1782,1784,1786,1788],{"class":562,"line":823},[560,1774,1775],{"class":1084},"    allowedTools",[560,1777,583],{"class":566},[560,1779,1158],{"class":1084},[560,1781,1096],{"class":566},[560,1783,1093],{"class":589},[560,1785,1096],{"class":566},[560,1787,1185],{"class":1084},[560,1789,595],{"class":566},[560,1791,1792,1795,1797,1799,1801,1803,1805,1807,1810],{"class":562,"line":838},[560,1793,1794],{"class":1084},"    allowedCustomKeys",[560,1796,583],{"class":566},[560,1798,670],{"class":566},[560,1800,1090],{"class":566},[560,1802,1093],{"class":1084},[560,1804,1096],{"class":566},[560,1806,583],{"class":566},[560,1808,1809],{"class":1074}," ALLOWED_CUSTOM",[560,1811,702],{"class":566},[560,1813,1814,1816],{"class":562,"line":861},[560,1815,1512],{"class":566},[560,1817,1360],{"class":1084},[560,1819,1820],{"class":562,"line":867},[560,1821,1822],{"class":857},"  \u002F\u002F dedupe on idempotencyKey, then persist\n",[560,1824,1825],{"class":562,"line":891},[560,1826,923],{"class":566},[546,1828,1829,1831,1832,1834],{},[557,1830,938],{}," strips any ",[557,1833,896],{}," key you did not list — even if a client somehow sent it.",[1043,1836,1838],{"id":1837},"map-to-your-warehouse-schema","Map to your warehouse schema",[546,1840,1841,1842,1845],{},"After validation, shape the event for ",[932,1843,1844],{},"your"," database. The evlog envelope is the wire format; your tables are your choice:",[550,1847,1850],{"className":1060,"code":1848,"filename":1849,"language":1063,"meta":555,"style":555},"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",[557,1851,1852,1873,1880,1896,1911,1926,1945,1965,1985,2004,2022,2041,2066,2085,2104,2122,2127],{"__ignoreMap":555},[560,1853,1854,1857,1860,1862,1864,1866,1869,1871],{"class":562,"line":563},[560,1855,1856],{"class":576},"function",[560,1858,1859],{"class":1070}," toRow",[560,1861,1385],{"class":566},[560,1863,577],{"class":1718},[560,1865,583],{"class":566},[560,1867,1868],{"class":675}," RunEvent",[560,1870,1727],{"class":566},[560,1872,768],{"class":566},[560,1874,1875,1878],{"class":562,"line":570},[560,1876,1877],{"class":1374},"  return",[560,1879,768],{"class":566},[560,1881,1882,1885,1887,1890,1892,1894],{"class":562,"line":598},[560,1883,1884],{"class":1084},"    command",[560,1886,583],{"class":566},[560,1888,1889],{"class":1074}," event",[560,1891,945],{"class":566},[560,1893,603],{"class":1074},[560,1895,595],{"class":566},[560,1897,1898,1901,1903,1905,1907,1909],{"class":562,"line":619},[560,1899,1900],{"class":1084},"    duration_ms",[560,1902,583],{"class":566},[560,1904,1889],{"class":1074},[560,1906,945],{"class":566},[560,1908,624],{"class":1074},[560,1910,595],{"class":566},[560,1912,1913,1916,1918,1920,1922,1924],{"class":562,"line":637},[560,1914,1915],{"class":1084},"    outcome",[560,1917,583],{"class":566},[560,1919,1889],{"class":1074},[560,1921,945],{"class":566},[560,1923,642],{"class":1074},[560,1925,595],{"class":566},[560,1927,1928,1931,1933,1935,1937,1939,1941,1943],{"class":562,"line":658},[560,1929,1930],{"class":1084},"    tool_version",[560,1932,583],{"class":566},[560,1934,1889],{"class":1074},[560,1936,945],{"class":566},[560,1938,710],{"class":1074},[560,1940,945],{"class":566},[560,1942,740],{"class":1074},[560,1944,595],{"class":566},[560,1946,1947,1950,1952,1954,1956,1958,1960,1963],{"class":562,"line":705},[560,1948,1949],{"class":1084},"    format",[560,1951,583],{"class":566},[560,1953,1889],{"class":1074},[560,1955,945],{"class":566},[560,1957,663],{"class":1074},[560,1959,945],{"class":566},[560,1961,1962],{"class":1074},"format",[560,1964,595],{"class":566},[560,1966,1967,1970,1972,1974,1976,1978,1980,1983],{"class":562,"line":756},[560,1968,1969],{"class":1084},"    target",[560,1971,583],{"class":566},[560,1973,1889],{"class":1074},[560,1975,945],{"class":566},[560,1977,663],{"class":1074},[560,1979,945],{"class":566},[560,1981,1982],{"class":1074},"target",[560,1984,595],{"class":566},[560,1986,1987,1990,1992,1994,1996,1998,2000,2002],{"class":562,"line":771},[560,1988,1989],{"class":1084},"    services_deployed",[560,1991,583],{"class":566},[560,1993,1889],{"class":1074},[560,1995,945],{"class":566},[560,1997,896],{"class":1074},[560,1999,945],{"class":566},[560,2001,1614],{"class":1074},[560,2003,595],{"class":566},[560,2005,2006,2008,2010,2012,2014,2016,2018,2020],{"class":562,"line":793},[560,2007,1479],{"class":1084},[560,2009,583],{"class":566},[560,2011,1889],{"class":1074},[560,2013,945],{"class":566},[560,2015,896],{"class":1074},[560,2017,945],{"class":566},[560,2019,1632],{"class":1074},[560,2021,595],{"class":566},[560,2023,2024,2027,2029,2031,2033,2035,2037,2039],{"class":562,"line":808},[560,2025,2026],{"class":1084},"    plan",[560,2028,583],{"class":566},[560,2030,1889],{"class":1074},[560,2032,945],{"class":566},[560,2034,896],{"class":1074},[560,2036,945],{"class":566},[560,2038,1652],{"class":1074},[560,2040,595],{"class":566},[560,2042,2043,2046,2048,2050,2052,2054,2056,2058,2061,2064],{"class":562,"line":823},[560,2044,2045],{"class":1084},"    schema_version",[560,2047,583],{"class":566},[560,2049,1889],{"class":1074},[560,2051,945],{"class":566},[560,2053,896],{"class":1074},[560,2055,945],{"class":566},[560,2057,1661],{"class":1074},[560,2059,2060],{"class":566}," ??",[560,2062,2063],{"class":631}," 1",[560,2065,595],{"class":566},[560,2067,2068,2071,2073,2075,2077,2079,2081,2083],{"class":562,"line":838},[560,2069,2070],{"class":1084},"    is_ci",[560,2072,583],{"class":566},[560,2074,1889],{"class":1074},[560,2076,945],{"class":566},[560,2078,761],{"class":1074},[560,2080,945],{"class":566},[560,2082,798],{"class":1074},[560,2084,595],{"class":566},[560,2086,2087,2090,2092,2094,2096,2098,2100,2102],{"class":562,"line":861},[560,2088,2089],{"class":1084},"    node",[560,2091,583],{"class":566},[560,2093,1889],{"class":1074},[560,2095,945],{"class":566},[560,2097,761],{"class":1074},[560,2099,945],{"class":566},[560,2101,777],{"class":1074},[560,2103,595],{"class":566},[560,2105,2106,2109,2111,2114,2117,2120],{"class":562,"line":867},[560,2107,2108],{"class":1084},"    received_at",[560,2110,583],{"class":566},[560,2112,2113],{"class":566}," new",[560,2115,2116],{"class":1070}," Date",[560,2118,2119],{"class":1084},"()",[560,2121,595],{"class":566},[560,2123,2124],{"class":562,"line":891},[560,2125,2126],{"class":566},"  }\n",[560,2128,2129],{"class":562,"line":920},[560,2130,923],{"class":566},[546,2132,2133,2134,2136,2137,2139],{},"This is where a company \"modifies the schema\" in practice — not by changing ",[557,2135,1021],{},", but by defining how ",[557,2138,896],{}," maps into internal analytics tables.",[1043,2141,2143,2144],{"id":2142},"version-breaking-changes-in-custom","Version breaking changes in ",[557,2145,896],{},[546,2147,2148,2149,2151,2152,2154],{},"When your product counters evolve, bump a numeric ",[557,2150,1661],{}," in ",[557,2153,896],{}," (no allowlist needed) and branch in the ingest mapper:",[550,2156,2158],{"className":1060,"code":2157,"language":1063,"meta":555,"style":555},"const version = (event.custom.schemaVersion as number | undefined) ?? 1\nif (version === 1) return mapV1(event)\nreturn mapV2(event)\n",[557,2159,2160,2201,2225],{"__ignoreMap":555},[560,2161,2162,2164,2167,2169,2172,2174,2176,2178,2181,2183,2186,2189,2192,2195,2198],{"class":562,"line":563},[560,2163,1597],{"class":576},[560,2165,2166],{"class":1074}," version ",[560,2168,1603],{"class":566},[560,2170,2171],{"class":1074}," (event",[560,2173,945],{"class":566},[560,2175,896],{"class":1074},[560,2177,945],{"class":566},[560,2179,2180],{"class":1074},"schemaVersion ",[560,2182,1693],{"class":1374},[560,2184,2185],{"class":675}," number",[560,2187,2188],{"class":566}," |",[560,2190,2191],{"class":675}," undefined",[560,2193,2194],{"class":1074},") ",[560,2196,2197],{"class":566},"??",[560,2199,2200],{"class":631}," 1\n",[560,2202,2203,2206,2209,2212,2214,2216,2219,2222],{"class":562,"line":570},[560,2204,2205],{"class":1374},"if",[560,2207,2208],{"class":1074}," (version ",[560,2210,2211],{"class":566},"===",[560,2213,2063],{"class":631},[560,2215,2194],{"class":1074},[560,2217,2218],{"class":1374},"return",[560,2220,2221],{"class":1070}," mapV1",[560,2223,2224],{"class":1074},"(event)\n",[560,2226,2227,2229,2232],{"class":562,"line":598},[560,2228,2218],{"class":1374},[560,2230,2231],{"class":1070}," mapV2",[560,2233,2224],{"class":1074},[546,2235,2236,2237,2240,2241,2243],{},"Commit an updated ",[557,2238,2239],{},"TELEMETRY.md"," whenever ",[557,2242,1040],{}," changes so disclosure stays aligned with releases.",[1043,2245,2247],{"id":2246},"multiple-tools-one-endpoint","Multiple tools, one endpoint",[546,2249,2250,2251,583],{},"If several CLIs POST to the same ingest URL, namespace custom keys or rely on ",[557,2252,2253],{},"tool.name",[550,2255,2257],{"className":1060,"code":2256,"language":1063,"meta":555,"style":555},"\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",[557,2258,2259,2264,2302,2306,2311,2320,2350,2388],{"__ignoreMap":555},[560,2260,2261],{"class":562,"line":563},[560,2262,2263],{"class":857},"\u002F\u002F Option A — prefix keys per product line\n",[560,2265,2266,2268,2270,2272,2274,2277,2280,2282,2284,2286,2288,2290,2293,2295,2298,2300],{"class":562,"line":570},[560,2267,119],{"class":1074},[560,2269,945],{"class":566},[560,2271,1435],{"class":1070},[560,2273,1385],{"class":1074},[560,2275,2276],{"class":566},"{",[560,2278,2279],{"class":1084}," acme_product",[560,2281,583],{"class":566},[560,2283,1090],{"class":566},[560,2285,1244],{"class":589},[560,2287,1096],{"class":566},[560,2289,735],{"class":566},[560,2291,2292],{"class":1084}," deployCount",[560,2294,583],{"class":566},[560,2296,2297],{"class":631}," 3",[560,2299,1575],{"class":566},[560,2301,1360],{"class":1074},[560,2303,2304],{"class":562,"line":598},[560,2305,1592],{"emptyLinePlaceholder":1591},[560,2307,2308],{"class":562,"line":619},[560,2309,2310],{"class":857},"\u002F\u002F Option B — separate allowedCustomKeys per tool.name in parseIngestBody\n",[560,2312,2313,2316,2318],{"class":562,"line":637},[560,2314,2315],{"class":675},"allowedCustomKeys",[560,2317,583],{"class":566},[560,2319,768],{"class":566},[560,2321,2322,2324,2326,2328,2331,2333,2336,2338,2340,2342,2344,2346,2348],{"class":562,"line":658},[560,2323,1611],{"class":566},[560,2325,1093],{"class":589},[560,2327,1096],{"class":566},[560,2329,2330],{"class":1084},": [",[560,2332,1096],{"class":566},[560,2334,2335],{"class":589},"deployCount",[560,2337,1096],{"class":566},[560,2339,735],{"class":566},[560,2341,1090],{"class":566},[560,2343,1632],{"class":589},[560,2345,1096],{"class":566},[560,2347,1185],{"class":1084},[560,2349,595],{"class":566},[560,2351,2352,2354,2357,2359,2361,2363,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386],{"class":562,"line":705},[560,2353,1611],{"class":566},[560,2355,2356],{"class":589},"acme-action",[560,2358,1096],{"class":566},[560,2360,2330],{"class":1084},[560,2362,1096],{"class":566},[560,2364,2365],{"class":589},"jobDuration",[560,2367,1096],{"class":566},[560,2369,735],{"class":566},[560,2371,1090],{"class":566},[560,2373,1672],{"class":589},[560,2375,1096],{"class":566},[560,2377,735],{"class":566},[560,2379,1090],{"class":566},[560,2381,1681],{"class":589},[560,2383,1096],{"class":566},[560,2385,1185],{"class":1084},[560,2387,595],{"class":566},[560,2389,2390],{"class":562,"line":756},[560,2391,923],{"class":566},[1043,2393,2395],{"id":2394},"what-v1-does-not-support","What v1 does not support",[950,2397,2398,2411],{},[953,2399,2400],{},[956,2401,2402,2405,2408],{},[959,2403,2404],{},"Need",[959,2406,2407],{},"v1 answer",[959,2409,2410],{},"Workaround",[969,2412,2413,2432,2452,2469,2480],{},[956,2414,2415,2421,2424],{},[974,2416,2417,2418,1727],{},"New top-level field (",[557,2419,2420],{},"tenantId",[974,2422,2423],{},"Not on the wire",[974,2425,2426,2427,2429,2430],{},"Flat key in ",[557,2428,896],{}," + allowlist, or map server-side from ",[557,2431,872],{},[956,2433,2434,2440,2443],{},[974,2435,2436,2437,1727],{},"Nested objects (",[557,2438,2439],{},"custom.user.plan",[974,2441,2442],{},"Flat records only",[974,2444,2445,2446,2449,2450],{},"Flatten: ",[557,2447,2448],{},"userPlan: 'pro'"," with ",[557,2451,1002],{},[956,2453,2454,2457,2460],{},[974,2455,2456],{},"Free-form strings (paths, emails)",[974,2458,2459],{},"Blocked by design",[974,2461,2462,2463,2466,2467],{},"Flags record ",[557,2464,2465],{},"\"\u003Cset>\""," instead of the value; hash before ",[557,2468,998],{},[956,2470,2471,2474,2477],{},[974,2472,2473],{},"Different schema per command",[974,2475,2476],{},"One envelope per run",[974,2478,2479],{},"Convention: only set relevant keys per command",[956,2481,2482,2485,2488],{},[974,2483,2484],{},"Transform before outbox",[974,2486,2487],{},"No hook yet",[974,2489,2490],{},"Map on the server (recommended) or see planned v2 below",[2492,2493,2494,2497,2498,2500,2501,999,2503,2505],"tip",{},[932,2495,2496],{},"Rule of thumb:"," if it is safe to print in ",[557,2499,2239],{}," and fits a closed set or a number, it belongs in ",[557,2502,1040],{},[557,2504,896],{},". Everything else stays server-side.",[1043,2507,2509],{"id":2508},"planned-v2-extensions","Planned v2 extensions",[546,2511,2512],{},"Not shipped yet — design targets for when the v1 extension zones are not enough:",[546,2514,2515,2521],{},[932,2516,2517,2520],{},[557,2518,2519],{},"enrich"," hook"," — run after sanitization, before the outbox append. Lets you inject computed fields without forking the package:",[550,2523,2525],{"className":1060,"code":2524,"language":1063,"meta":555,"style":555},"\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",[557,2526,2527,2532,2541,2555,2570,2612,2625,2632,2641,2650,2663,2674,2679,2684,2688],{"__ignoreMap":555},[560,2528,2529],{"class":562,"line":563},[560,2530,2531],{"class":857},"\u002F\u002F Planned API — not available in v1\n",[560,2533,2534,2537,2539],{"class":562,"line":570},[560,2535,2536],{"class":1070},"createTelemetry",[560,2538,1385],{"class":1074},[560,2540,567],{"class":566},[560,2542,2543,2545,2547,2549,2551,2553],{"class":562,"line":598},[560,2544,1085],{"class":1084},[560,2546,583],{"class":566},[560,2548,1090],{"class":566},[560,2550,1093],{"class":589},[560,2552,1096],{"class":566},[560,2554,595],{"class":566},[560,2556,2557,2559,2561,2563,2566,2568],{"class":562,"line":619},[560,2558,1103],{"class":1084},[560,2560,583],{"class":566},[560,2562,1090],{"class":566},[560,2564,2565],{"class":589},"3.0.0",[560,2567,1096],{"class":566},[560,2569,595],{"class":566},[560,2571,2572,2574,2576,2578,2581,2583,2585,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610],{"class":562,"line":637},[560,2573,1135],{"class":1084},[560,2575,583],{"class":566},[560,2577,670],{"class":566},[560,2579,2580],{"class":1084}," fields",[560,2582,583],{"class":566},[560,2584,670],{"class":566},[560,2586,2587],{"class":1084}," product",[560,2589,583],{"class":566},[560,2591,1158],{"class":1074},[560,2593,1096],{"class":566},[560,2595,1244],{"class":589},[560,2597,1096],{"class":566},[560,2599,735],{"class":566},[560,2601,1090],{"class":566},[560,2603,1253],{"class":589},[560,2605,1096],{"class":566},[560,2607,1690],{"class":1074},[560,2609,1357],{"class":566},[560,2611,702],{"class":566},[560,2613,2614,2617,2619,2621,2623],{"class":562,"line":658},[560,2615,2616],{"class":1084},"  enrich",[560,2618,1385],{"class":566},[560,2620,577],{"class":1718},[560,2622,1727],{"class":566},[560,2624,768],{"class":566},[560,2626,2627,2630],{"class":562,"line":705},[560,2628,2629],{"class":1374},"    return",[560,2631,768],{"class":566},[560,2633,2634,2637,2639],{"class":562,"line":756},[560,2635,2636],{"class":566},"      ...",[560,2638,577],{"class":1074},[560,2640,595],{"class":566},[560,2642,2643,2646,2648],{"class":562,"line":771},[560,2644,2645],{"class":1084},"      custom",[560,2647,583],{"class":566},[560,2649,768],{"class":566},[560,2651,2652,2655,2657,2659,2661],{"class":562,"line":793},[560,2653,2654],{"class":566},"        ...",[560,2656,577],{"class":1074},[560,2658,945],{"class":566},[560,2660,896],{"class":1074},[560,2662,595],{"class":566},[560,2664,2665,2668,2670,2672],{"class":562,"line":808},[560,2666,2667],{"class":1084},"        schemaVersion",[560,2669,583],{"class":566},[560,2671,1502],{"class":631},[560,2673,595],{"class":566},[560,2675,2676],{"class":562,"line":823},[560,2677,2678],{"class":566},"      },\n",[560,2680,2681],{"class":562,"line":838},[560,2682,2683],{"class":566},"    }\n",[560,2685,2686],{"class":562,"line":861},[560,2687,864],{"class":566},[560,2689,2690,2692],{"class":562,"line":867},[560,2691,1357],{"class":566},[560,2693,1360],{"class":1074},[546,2695,2696,2697,2699,2700,2702],{},"The hook cannot bypass sanitization rules — strings still require ",[557,2698,1002],{},". Server-side ",[557,2701,2315],{}," stays the source of truth.",[546,2704,2705,2708,2709,2712,2713,945],{},[932,2706,2707],{},"Namespaced keys"," — optional ",[557,2710,2711],{},"acme.product"," convention for multi-tool endpoints without prefix collisions. Would be documented in disclosure as ",[557,2714,2715],{},"acme.product: cli | action",[546,2717,2718,2719,2721],{},"If you need one of these before v2 lands, open a discussion on the repo — the v1 path (",[557,2720,896],{}," + server mapping) covers most product analytics needs.",[541,2723,2725],{"id":2724},"privacy","Privacy",[546,2727,2728,2729,2732,2733,2736],{},"Raw ",[557,2730,2731],{},"argv"," is never read. Sanitization applies to ",[932,2734,2735],{},"citty-parsed"," flags only:",[1010,2738,2739,2752,2766],{},[1013,2740,2741,2744,2745,2748,2749,1727],{},[932,2742,2743],{},"Booleans \u002F numbers"," → value stored (",[557,2746,2747],{},"json: true",", ",[557,2750,2751],{},"limit: 50",[1013,2753,2754,2757,2758,1018,2760,2763,2764],{},[932,2755,2756],{},"Strings"," → ",[557,2759,2465],{},[557,2761,2762],{},"output: \"\u003Cset>\"",") unless allowlisted in ",[557,2765,983],{},[1013,2767,2768,2772,2773,2775],{},[932,2769,2770],{},[557,2771,998],{}," → numbers and booleans always; strings only via ",[557,2774,1002],{}," (undeclared values are dropped at runtime, never thrown)",[550,2777,2779],{"className":1060,"code":2778,"filename":1062,"language":1063,"meta":555,"style":555},"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",[557,2780,2781,2789,2828,2865],{"__ignoreMap":555},[560,2782,2783,2785,2787],{"class":562,"line":563},[560,2784,1040],{"class":675},[560,2786,583],{"class":566},[560,2788,768],{"class":566},[560,2790,2791,2794,2796,2798,2801,2803,2805,2807,2809,2811,2813,2815,2818,2820,2822,2825],{"class":562,"line":570},[560,2792,2793],{"class":675},"  flags",[560,2795,583],{"class":566},[560,2797,670],{"class":566},[560,2799,2800],{"class":675}," format",[560,2802,583],{"class":566},[560,2804,1158],{"class":1084},[560,2806,1096],{"class":566},[560,2808,1163],{"class":589},[560,2810,1096],{"class":566},[560,2812,735],{"class":566},[560,2814,1090],{"class":566},[560,2816,2817],{"class":589},"csv",[560,2819,1096],{"class":566},[560,2821,1690],{"class":1084},[560,2823,2824],{"class":566},"},",[560,2826,2827],{"class":857},"           \u002F\u002F --format json → \"json\"; --format yaml → \"\u003Cset>\"\n",[560,2829,2830,2833,2835,2837,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862],{"class":562,"line":598},[560,2831,2832],{"class":675},"  fields",[560,2834,583],{"class":566},[560,2836,670],{"class":566},[560,2838,2839],{"class":675}," framework",[560,2841,583],{"class":566},[560,2843,1158],{"class":1084},[560,2845,1096],{"class":566},[560,2847,1320],{"class":589},[560,2849,1096],{"class":566},[560,2851,735],{"class":566},[560,2853,1090],{"class":566},[560,2855,1329],{"class":589},[560,2857,1096],{"class":566},[560,2859,1690],{"class":1084},[560,2861,2824],{"class":566},[560,2863,2864],{"class":857},"      \u002F\u002F telemetry.set({ framework: 'nuxt' }) ok\n",[560,2866,2867],{"class":562,"line":619},[560,2868,923],{"class":566},[546,2870,2871,2872,2874],{},"Three kinds of parser noise are dropped before the event is built, so ",[557,2873,663],{}," reads\nas what the user asked for rather than what the parser filled in:",[1010,2876,2877,2887,2897],{},[1013,2878,2879,2882,2883,2886],{},[932,2880,2881],{},"Positionals"," — citty's ",[557,2884,2885],{},"_"," bucket holds argument values, not flag names",[1013,2888,2889,2892,2893,2896],{},[932,2890,2891],{},"Defaults"," — a flag still sitting at its declared ",[557,2894,2895],{},"default"," is not a choice anyone made",[1013,2898,2899,2902,2903,2906,2907,2910,2911,2914,2915,2917],{},[932,2900,2901],{},"Kebab-case duplicates"," — ",[557,2904,2905],{},"--min-score"," arrives as both ",[557,2908,2909],{},"minScore"," and ",[557,2912,2913],{},"min-score","; only the camelCase name is kept, and that is the name ",[557,2916,983],{}," allowlists",[546,2919,2920,2921,2924,2925,2928,2929,945],{},"Negation still reports: ",[557,2922,2923],{},"--no-write"," against ",[557,2926,2927],{},"write: { default: true }"," records ",[557,2930,2931],{},"write: false",[546,2933,2934,2935,1053,2937,2939,2940,2942],{},"Declare allowlists in the same ",[557,2936,1052],{},[557,2938,1056],{}," call as ",[557,2941,1040],{}," — no separate config file.",[541,2944,2946],{"id":2945},"disclosure","Disclosure",[546,2948,2949,2952,2953,2955,2956,2958],{},[557,2950,2951],{},"generateDisclosure()"," produces markdown + JSON from the standard envelope plus your ",[557,2954,1040],{}," extensions. Commit the output (e.g. ",[557,2957,2239],{},") so it stays in sync with releases:",[550,2960,2963],{"className":1060,"code":2961,"filename":2962,"language":1063,"meta":555,"style":555},"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",[557,2964,2965,2985,3004,3008,3035,3068,3074,3078],{"__ignoreMap":555},[560,2966,2967,2969,2971,2974,2976,2978,2980,2983],{"class":562,"line":563},[560,2968,1567],{"class":1374},[560,2970,670],{"class":566},[560,2972,2973],{"class":1074}," writeFile",[560,2975,1575],{"class":566},[560,2977,1578],{"class":1374},[560,2979,1090],{"class":566},[560,2981,2982],{"class":589},"node:fs\u002Fpromises",[560,2984,1586],{"class":566},[560,2986,2987,2989,2991,2994,2996,2998,3000,3002],{"class":562,"line":570},[560,2988,1567],{"class":1374},[560,2990,670],{"class":566},[560,2992,2993],{"class":1074}," generateDisclosure",[560,2995,1575],{"class":566},[560,2997,1578],{"class":1374},[560,2999,1090],{"class":566},[560,3001,1025],{"class":589},[560,3003,1586],{"class":566},[560,3005,3006],{"class":562,"line":598},[560,3007,1592],{"emptyLinePlaceholder":1591},[560,3009,3010,3012,3014,3017,3019,3021,3023,3025,3027,3029,3031,3033],{"class":562,"line":619},[560,3011,1597],{"class":576},[560,3013,670],{"class":566},[560,3015,3016],{"class":1074}," markdown ",[560,3018,1357],{"class":566},[560,3020,1416],{"class":566},[560,3022,2993],{"class":1070},[560,3024,1385],{"class":1074},[560,3026,1096],{"class":566},[560,3028,730],{"class":589},[560,3030,1096],{"class":566},[560,3032,735],{"class":566},[560,3034,768],{"class":566},[560,3036,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065],{"class":562,"line":637},[560,3038,2793],{"class":1084},[560,3040,583],{"class":566},[560,3042,670],{"class":566},[560,3044,2800],{"class":1084},[560,3046,583],{"class":566},[560,3048,1158],{"class":1074},[560,3050,1096],{"class":566},[560,3052,1163],{"class":589},[560,3054,1096],{"class":566},[560,3056,735],{"class":566},[560,3058,1090],{"class":566},[560,3060,2817],{"class":589},[560,3062,1096],{"class":566},[560,3064,1690],{"class":1074},[560,3066,3067],{"class":566},"},\n",[560,3069,3070,3072],{"class":562,"line":658},[560,3071,1357],{"class":566},[560,3073,1360],{"class":1074},[560,3075,3076],{"class":562,"line":705},[560,3077,1592],{"emptyLinePlaceholder":1591},[560,3079,3080,3082,3084,3086,3088,3090,3092,3094],{"class":562,"line":756},[560,3081,1375],{"class":1374},[560,3083,2973],{"class":1070},[560,3085,1385],{"class":1074},[560,3087,1096],{"class":566},[560,3089,2239],{"class":589},[560,3091,1096],{"class":566},[560,3093,735],{"class":566},[560,3095,3096],{"class":1074}," markdown)\n",[546,3098,3099,3100,3103,3104,945],{},"Users can also read it at runtime via ",[557,3101,3102],{},"my-tool telemetry status"," when you wire ",[557,3105,3106],{},"defineTelemetryCommands()",[541,3108,3110],{"id":3109},"consent-and-reliability","Consent and reliability",[546,3112,3113,1536,3116,2757,3119,3122,3123,1053,3126,3129],{},[932,3114,3115],{},"Opt-out priority:",[557,3117,3118],{},"DO_NOT_TRACK=1",[557,3120,3121],{},"EVLOG_TELEMETRY=0"," → persisted preference (",[557,3124,3125],{},"disableTelemetry()",[557,3127,3128],{},"telemetry disable","). Opt-out purges the undelivered outbox.",[546,3131,3132,3135,3136,3139],{},[932,3133,3134],{},"Never harms the host:"," telemetry never throws, never blocks exit; ",[557,3137,3138],{},"flush()"," has a 500ms hard cap.",[546,3141,3142,3145,3146,945],{},[932,3143,3144],{},"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 ",[557,3147,3148],{},"2xx",[546,3150,3151,1536,3154,3157,3158,3161],{},[932,3152,3153],{},"Endpoint:",[557,3155,3156],{},"EVLOG_TELEMETRY_ENDPOINT"," env → ",[557,3159,3160],{},"endpoint"," option baked into the CLI. Omit both during local development; ship the URL when your ingest handler is live.",[3163,3164,3165],"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":555,"searchDepth":570,"depth":570,"links":3167},[3168,3169,3179,3180,3181],{"id":543,"depth":570,"text":544},{"id":926,"depth":570,"text":927,"children":3170},[3171,3172,3173,3174,3176,3177,3178],{"id":1045,"depth":598,"text":1046},{"id":1552,"depth":598,"text":1553},{"id":1837,"depth":598,"text":1838},{"id":2142,"depth":598,"text":3175},"Version breaking changes in custom",{"id":2246,"depth":598,"text":2247},{"id":2394,"depth":598,"text":2395},{"id":2508,"depth":598,"text":2509},{"id":2724,"depth":570,"text":2725},{"id":2945,"depth":570,"text":2946},{"id":3109,"depth":570,"text":3110},"RunEvent envelope, extending the schema with collect and custom fields, privacy rules, TELEMETRY.md disclosure, and consent \u002F outbox reliability.","md",[3185,3188,3189],{"label":36,"icon":39,"to":414,"color":3186,"variant":3187},"neutral","subtle",{"label":417,"icon":420,"to":418,"color":3186,"variant":3187},{"label":422,"icon":425,"to":423,"color":3186,"variant":3187},{},{"title":427,"icon":79},{"title":536,"description":3182},"liR3DngveogkE_w1UnQjwc8I0Z9Morn2b9hw96JVdxU",[3195,3197],{"title":422,"path":423,"stem":424,"description":3196,"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":3198,"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.",1786743658220]