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