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