[{"data":1,"prerenderedAt":2344},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-telemetry-overview":451,"-use-cases-telemetry-overview-surround":2339},[4,30,80,245,365,420],{"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},"Integrate","\u002Fintegrate","3.integrate",[85,89,157],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147,152],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235,240],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":236,"path":237,"stem":238,"icon":239},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":241,"path":242,"stem":243,"icon":244},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":246,"path":247,"stem":248,"children":249,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[250,254,259,288,316,348,353,358],{"title":36,"path":251,"stem":252,"icon":253},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":255,"path":256,"stem":257,"icon":258},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[265,268,273,278,283],{"title":36,"path":266,"stem":267,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":269,"path":270,"stem":271,"icon":272},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":274,"path":275,"stem":276,"icon":277},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":279,"path":280,"stem":281,"icon":282},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":284,"path":285,"stem":286,"icon":287},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":289,"icon":290,"path":291,"stem":292,"children":293,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[294,297,302,307,311],{"title":36,"path":295,"stem":296,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":298,"path":299,"stem":300,"icon":301},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":303,"path":304,"stem":305,"icon":306},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":308,"path":309,"stem":310,"icon":258},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":312,"path":313,"stem":314,"icon":315},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":317,"icon":318,"path":319,"stem":320,"children":321,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[322,325,330,335,340,344],{"title":36,"path":323,"stem":324,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":326,"path":327,"stem":328,"icon":329},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":331,"path":332,"stem":333,"icon":334},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":336,"path":337,"stem":338,"icon":339},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":341,"path":342,"stem":343,"icon":318},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":345,"path":346,"stem":347,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":349,"path":350,"stem":351,"icon":352},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":354,"path":355,"stem":356,"icon":357},"eve","\u002Fuse-cases\u002Feve","4.use-cases\u002F5.eve","i-custom-eve",{"title":284,"path":359,"stem":360,"children":361,"page":29},"\u002Fuse-cases\u002Ftelemetry","4.use-cases\u002F6.telemetry",[362],{"title":284,"path":363,"stem":364,"icon":315},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","4.use-cases\u002F6.telemetry\u002F01.overview",{"title":366,"path":367,"stem":368,"children":369,"page":29},"Extend","\u002Fextend","5.extend",[370,374,379,384,389,393,397,401,405,410,415],{"title":36,"path":371,"stem":372,"icon":373},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":375,"path":376,"stem":377,"icon":378},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":380,"path":381,"stem":382,"icon":383},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":385,"path":386,"stem":387,"icon":388},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":390,"stem":391,"icon":392},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":394,"path":395,"stem":396,"icon":373},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":398,"path":399,"stem":400,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":402,"path":403,"stem":404,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":406,"path":407,"stem":408,"icon":409},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":411,"path":412,"stem":413,"icon":414},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":416,"path":417,"stem":418,"icon":419},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":421,"path":422,"stem":423,"children":424,"page":29},"Reference","\u002Freference","6.reference",[425,430,433,438,442,447],{"title":426,"path":427,"stem":428,"icon":429},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":431,"stem":432,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":434,"path":435,"stem":436,"icon":437},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":439,"path":440,"stem":441,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":443,"path":444,"stem":445,"icon":446},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":448,"path":449,"stem":450,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":452,"title":453,"body":454,"description":2329,"extension":2330,"links":2331,"meta":2335,"navigation":2336,"path":363,"seo":2337,"stem":364,"__hash__":2338},"docs\u002F4.use-cases\u002F6.telemetry\u002F01.overview.md","Tool telemetry",{"type":455,"value":456,"toc":2316},"minimark",[457,478,503,514,519,538,1350,1355,1365,1480,1490,1494,1500,1540,1554,1611,1615,1625,1790,1821,1825,1828,1924,1928,1938,1978,2069,2080,2084,2097,2190,2199,2203,2224,2234,2244,2257,2261,2297,2300,2304,2312],[458,459,460,464,465,472,473,477],"p",{},[461,462,463],"code",{},"@evlog\u002Ftelemetry"," brings ",[466,467,471],"a",{"href":468,"rel":469},"https:\u002F\u002Fevlog.dev",[470],"nofollow","evlog","'s wide-event model to tools that run on other people's machines — CLIs, GitHub Actions, dev scripts, and CI jobs. Same philosophy as HTTP logging: ",[474,475,476],"strong",{},"one command execution → one structured event",", not a stream of analytics calls.",[479,480,485],"pre",{"className":481,"code":482,"language":483,"meta":484,"style":484},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @evlog\u002Ftelemetry\n","bash","",[461,486,487],{"__ignoreMap":484},[488,489,492,496,500],"span",{"class":490,"line":491},"line",1,[488,493,495],{"class":494},"sBMFI","pnpm",[488,497,499],{"class":498},"sfazB"," add",[488,501,502],{"class":498}," @evlog\u002Ftelemetry\n",[458,504,505,506,509,510,513],{},"You get command name, sanitized flags, duration, and outcome automatically. Call ",[461,507,508],{},"telemetry.set()"," only when you have extra counters — numbers and booleans by default. Raw ",[461,511,512],{},"argv"," is never read; disclosure is generated from your runtime config so it cannot drift from what you actually collect.",[515,516,518],"h2",{"id":517},"setup-with-citty","Setup with citty",[458,520,521,522,525,526,529,530,533,534,537],{},"Wrap your root command in ",[461,523,524],{},"withTelemetry()"," — typically in ",[461,527,528],{},"src\u002Findex.ts",", the file that calls ",[461,531,532],{},"runMain()",". Subcommands can live in the same file or in ",[461,535,536],{},"src\u002Fcommands\u002F*.ts","; only the entrypoint needs the wrapper.",[479,539,543],{"className":540,"code":541,"filename":528,"language":542,"meta":484,"style":484},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineCommand, runMain } from 'citty'\nimport { withTelemetry, defineTelemetryCommands, telemetry } from '@evlog\u002Ftelemetry'\n\nconst TOOL = 'my-tool'\nconst VERSION = '1.0.0'\n\nexport const main = withTelemetry(\n  defineCommand({\n    meta: { name: 'my-tool', description: '…', version: VERSION },\n    subCommands: {\n      doctor: {\n        meta: { name: 'doctor', description: 'Check environment' },\n        args: {\n          json: { type: 'boolean', alias: 'j' },\n        },\n        async run({ args }) {\n          const checksFailed = 0 \u002F\u002F your logic…\n          telemetry.set({ checksFailed })\n          if (!args.json) process.stdout.write('ok\\n')\n        },\n      },\n      sync: {\n        meta: { name: 'sync', description: 'Pull remote state' },\n        args: {\n          dryRun: { type: 'boolean' },\n          output: { type: 'string', description: 'Output path' },\n        },\n        async run({ args }) {\n          telemetry.set({ itemsSynced: 42 })\n          \u002F\u002F …\n        },\n      },\n      telemetry: defineTelemetryCommands({ name: TOOL }),\n    },\n  }),\n  {\n    name: TOOL,\n    version: VERSION,\n    \u002F\u002F endpoint optional — omit for outbox-only until you ship ingestion\n    collect: {\n      flags: { format: ['json', 'csv'] },\n      fields: { framework: ['nuxt', 'next'] },\n    },\n  },\n)\n\nrunMain(main)\n","ts",[461,544,545,580,610,617,637,654,659,679,691,741,752,762,799,809,847,853,874,894,918,968,973,979,989,1024,1033,1055,1091,1096,1111,1136,1142,1147,1152,1181,1187,1197,1203,1216,1229,1235,1245,1283,1320,1325,1331,1336,1341],{"__ignoreMap":484},[488,546,547,551,555,559,562,565,568,571,574,577],{"class":490,"line":491},[488,548,550],{"class":549},"s7zQu","import",[488,552,554],{"class":553},"sMK4o"," {",[488,556,558],{"class":557},"sTEyZ"," defineCommand",[488,560,561],{"class":553},",",[488,563,564],{"class":557}," runMain",[488,566,567],{"class":553}," }",[488,569,570],{"class":549}," from",[488,572,573],{"class":553}," '",[488,575,576],{"class":498},"citty",[488,578,579],{"class":553},"'\n",[488,581,583,585,587,590,592,595,597,600,602,604,606,608],{"class":490,"line":582},2,[488,584,550],{"class":549},[488,586,554],{"class":553},[488,588,589],{"class":557}," withTelemetry",[488,591,561],{"class":553},[488,593,594],{"class":557}," defineTelemetryCommands",[488,596,561],{"class":553},[488,598,599],{"class":557}," telemetry",[488,601,567],{"class":553},[488,603,570],{"class":549},[488,605,573],{"class":553},[488,607,463],{"class":498},[488,609,579],{"class":553},[488,611,613],{"class":490,"line":612},3,[488,614,616],{"emptyLinePlaceholder":615},true,"\n",[488,618,620,624,627,630,632,635],{"class":490,"line":619},4,[488,621,623],{"class":622},"spNyl","const",[488,625,626],{"class":557}," TOOL ",[488,628,629],{"class":553},"=",[488,631,573],{"class":553},[488,633,634],{"class":498},"my-tool",[488,636,579],{"class":553},[488,638,640,642,645,647,649,652],{"class":490,"line":639},5,[488,641,623],{"class":622},[488,643,644],{"class":557}," VERSION ",[488,646,629],{"class":553},[488,648,573],{"class":553},[488,650,651],{"class":498},"1.0.0",[488,653,579],{"class":553},[488,655,657],{"class":490,"line":656},6,[488,658,616],{"emptyLinePlaceholder":615},[488,660,662,665,668,671,673,676],{"class":490,"line":661},7,[488,663,664],{"class":549},"export",[488,666,667],{"class":622}," const",[488,669,670],{"class":557}," main ",[488,672,629],{"class":553},[488,674,589],{"class":675},"s2Zo4",[488,677,678],{"class":557},"(\n",[488,680,682,685,688],{"class":490,"line":681},8,[488,683,684],{"class":675},"  defineCommand",[488,686,687],{"class":557},"(",[488,689,690],{"class":553},"{\n",[488,692,694,698,701,703,706,708,710,712,715,717,720,722,724,727,729,731,734,736,738],{"class":490,"line":693},9,[488,695,697],{"class":696},"swJcz","    meta",[488,699,700],{"class":553},":",[488,702,554],{"class":553},[488,704,705],{"class":696}," name",[488,707,700],{"class":553},[488,709,573],{"class":553},[488,711,634],{"class":498},[488,713,714],{"class":553},"'",[488,716,561],{"class":553},[488,718,719],{"class":696}," description",[488,721,700],{"class":553},[488,723,573],{"class":553},[488,725,726],{"class":498},"…",[488,728,714],{"class":553},[488,730,561],{"class":553},[488,732,733],{"class":696}," version",[488,735,700],{"class":553},[488,737,644],{"class":557},[488,739,740],{"class":553},"},\n",[488,742,744,747,749],{"class":490,"line":743},10,[488,745,746],{"class":696},"    subCommands",[488,748,700],{"class":553},[488,750,751],{"class":553}," {\n",[488,753,755,758,760],{"class":490,"line":754},11,[488,756,757],{"class":696},"      doctor",[488,759,700],{"class":553},[488,761,751],{"class":553},[488,763,765,768,770,772,774,776,778,781,783,785,787,789,791,794,796],{"class":490,"line":764},12,[488,766,767],{"class":696},"        meta",[488,769,700],{"class":553},[488,771,554],{"class":553},[488,773,705],{"class":696},[488,775,700],{"class":553},[488,777,573],{"class":553},[488,779,780],{"class":498},"doctor",[488,782,714],{"class":553},[488,784,561],{"class":553},[488,786,719],{"class":696},[488,788,700],{"class":553},[488,790,573],{"class":553},[488,792,793],{"class":498},"Check environment",[488,795,714],{"class":553},[488,797,798],{"class":553}," },\n",[488,800,802,805,807],{"class":490,"line":801},13,[488,803,804],{"class":696},"        args",[488,806,700],{"class":553},[488,808,751],{"class":553},[488,810,812,815,817,819,822,824,826,829,831,833,836,838,840,843,845],{"class":490,"line":811},14,[488,813,814],{"class":696},"          json",[488,816,700],{"class":553},[488,818,554],{"class":553},[488,820,821],{"class":696}," type",[488,823,700],{"class":553},[488,825,573],{"class":553},[488,827,828],{"class":498},"boolean",[488,830,714],{"class":553},[488,832,561],{"class":553},[488,834,835],{"class":696}," alias",[488,837,700],{"class":553},[488,839,573],{"class":553},[488,841,842],{"class":498},"j",[488,844,714],{"class":553},[488,846,798],{"class":553},[488,848,850],{"class":490,"line":849},15,[488,851,852],{"class":553},"        },\n",[488,854,856,859,862,865,869,872],{"class":490,"line":855},16,[488,857,858],{"class":622},"        async",[488,860,861],{"class":696}," run",[488,863,864],{"class":553},"({",[488,866,868],{"class":867},"sHdIc"," args",[488,870,871],{"class":553}," })",[488,873,751],{"class":553},[488,875,877,880,883,886,890],{"class":490,"line":876},17,[488,878,879],{"class":622},"          const",[488,881,882],{"class":557}," checksFailed",[488,884,885],{"class":553}," =",[488,887,889],{"class":888},"sbssI"," 0",[488,891,893],{"class":892},"sHwdD"," \u002F\u002F your logic…\n",[488,895,897,900,903,906,908,911,913,915],{"class":490,"line":896},18,[488,898,899],{"class":557},"          telemetry",[488,901,902],{"class":553},".",[488,904,905],{"class":675},"set",[488,907,687],{"class":696},[488,909,910],{"class":553},"{",[488,912,882],{"class":557},[488,914,567],{"class":553},[488,916,917],{"class":696},")\n",[488,919,921,924,927,930,933,935,938,941,944,946,949,951,954,956,958,961,964,966],{"class":490,"line":920},19,[488,922,923],{"class":549},"          if",[488,925,926],{"class":696}," (",[488,928,929],{"class":553},"!",[488,931,932],{"class":557},"args",[488,934,902],{"class":553},[488,936,937],{"class":557},"json",[488,939,940],{"class":696},") ",[488,942,943],{"class":557},"process",[488,945,902],{"class":553},[488,947,948],{"class":557},"stdout",[488,950,902],{"class":553},[488,952,953],{"class":675},"write",[488,955,687],{"class":696},[488,957,714],{"class":553},[488,959,960],{"class":498},"ok",[488,962,963],{"class":557},"\\n",[488,965,714],{"class":553},[488,967,917],{"class":696},[488,969,971],{"class":490,"line":970},20,[488,972,852],{"class":553},[488,974,976],{"class":490,"line":975},21,[488,977,978],{"class":553},"      },\n",[488,980,982,985,987],{"class":490,"line":981},22,[488,983,984],{"class":696},"      sync",[488,986,700],{"class":553},[488,988,751],{"class":553},[488,990,992,994,996,998,1000,1002,1004,1007,1009,1011,1013,1015,1017,1020,1022],{"class":490,"line":991},23,[488,993,767],{"class":696},[488,995,700],{"class":553},[488,997,554],{"class":553},[488,999,705],{"class":696},[488,1001,700],{"class":553},[488,1003,573],{"class":553},[488,1005,1006],{"class":498},"sync",[488,1008,714],{"class":553},[488,1010,561],{"class":553},[488,1012,719],{"class":696},[488,1014,700],{"class":553},[488,1016,573],{"class":553},[488,1018,1019],{"class":498},"Pull remote state",[488,1021,714],{"class":553},[488,1023,798],{"class":553},[488,1025,1027,1029,1031],{"class":490,"line":1026},24,[488,1028,804],{"class":696},[488,1030,700],{"class":553},[488,1032,751],{"class":553},[488,1034,1036,1039,1041,1043,1045,1047,1049,1051,1053],{"class":490,"line":1035},25,[488,1037,1038],{"class":696},"          dryRun",[488,1040,700],{"class":553},[488,1042,554],{"class":553},[488,1044,821],{"class":696},[488,1046,700],{"class":553},[488,1048,573],{"class":553},[488,1050,828],{"class":498},[488,1052,714],{"class":553},[488,1054,798],{"class":553},[488,1056,1058,1061,1063,1065,1067,1069,1071,1074,1076,1078,1080,1082,1084,1087,1089],{"class":490,"line":1057},26,[488,1059,1060],{"class":696},"          output",[488,1062,700],{"class":553},[488,1064,554],{"class":553},[488,1066,821],{"class":696},[488,1068,700],{"class":553},[488,1070,573],{"class":553},[488,1072,1073],{"class":498},"string",[488,1075,714],{"class":553},[488,1077,561],{"class":553},[488,1079,719],{"class":696},[488,1081,700],{"class":553},[488,1083,573],{"class":553},[488,1085,1086],{"class":498},"Output path",[488,1088,714],{"class":553},[488,1090,798],{"class":553},[488,1092,1094],{"class":490,"line":1093},27,[488,1095,852],{"class":553},[488,1097,1099,1101,1103,1105,1107,1109],{"class":490,"line":1098},28,[488,1100,858],{"class":622},[488,1102,861],{"class":696},[488,1104,864],{"class":553},[488,1106,868],{"class":867},[488,1108,871],{"class":553},[488,1110,751],{"class":553},[488,1112,1114,1116,1118,1120,1122,1124,1127,1129,1132,1134],{"class":490,"line":1113},29,[488,1115,899],{"class":557},[488,1117,902],{"class":553},[488,1119,905],{"class":675},[488,1121,687],{"class":696},[488,1123,910],{"class":553},[488,1125,1126],{"class":696}," itemsSynced",[488,1128,700],{"class":553},[488,1130,1131],{"class":888}," 42",[488,1133,567],{"class":553},[488,1135,917],{"class":696},[488,1137,1139],{"class":490,"line":1138},30,[488,1140,1141],{"class":892},"          \u002F\u002F …\n",[488,1143,1145],{"class":490,"line":1144},31,[488,1146,852],{"class":553},[488,1148,1150],{"class":490,"line":1149},32,[488,1151,978],{"class":553},[488,1153,1155,1158,1160,1162,1164,1166,1168,1170,1172,1175,1178],{"class":490,"line":1154},33,[488,1156,1157],{"class":696},"      telemetry",[488,1159,700],{"class":553},[488,1161,594],{"class":675},[488,1163,687],{"class":557},[488,1165,910],{"class":553},[488,1167,705],{"class":696},[488,1169,700],{"class":553},[488,1171,626],{"class":557},[488,1173,1174],{"class":553},"}",[488,1176,1177],{"class":557},")",[488,1179,1180],{"class":553},",\n",[488,1182,1184],{"class":490,"line":1183},34,[488,1185,1186],{"class":553},"    },\n",[488,1188,1190,1193,1195],{"class":490,"line":1189},35,[488,1191,1192],{"class":553},"  }",[488,1194,1177],{"class":557},[488,1196,1180],{"class":553},[488,1198,1200],{"class":490,"line":1199},36,[488,1201,1202],{"class":553},"  {\n",[488,1204,1206,1209,1211,1214],{"class":490,"line":1205},37,[488,1207,1208],{"class":696},"    name",[488,1210,700],{"class":553},[488,1212,1213],{"class":557}," TOOL",[488,1215,1180],{"class":553},[488,1217,1219,1222,1224,1227],{"class":490,"line":1218},38,[488,1220,1221],{"class":696},"    version",[488,1223,700],{"class":553},[488,1225,1226],{"class":557}," VERSION",[488,1228,1180],{"class":553},[488,1230,1232],{"class":490,"line":1231},39,[488,1233,1234],{"class":892},"    \u002F\u002F endpoint optional — omit for outbox-only until you ship ingestion\n",[488,1236,1238,1241,1243],{"class":490,"line":1237},40,[488,1239,1240],{"class":696},"    collect",[488,1242,700],{"class":553},[488,1244,751],{"class":553},[488,1246,1248,1251,1253,1255,1258,1260,1263,1265,1267,1269,1271,1273,1276,1278,1281],{"class":490,"line":1247},41,[488,1249,1250],{"class":696},"      flags",[488,1252,700],{"class":553},[488,1254,554],{"class":553},[488,1256,1257],{"class":696}," format",[488,1259,700],{"class":553},[488,1261,1262],{"class":557}," [",[488,1264,714],{"class":553},[488,1266,937],{"class":498},[488,1268,714],{"class":553},[488,1270,561],{"class":553},[488,1272,573],{"class":553},[488,1274,1275],{"class":498},"csv",[488,1277,714],{"class":553},[488,1279,1280],{"class":557},"] ",[488,1282,740],{"class":553},[488,1284,1286,1289,1291,1293,1296,1298,1300,1302,1305,1307,1309,1311,1314,1316,1318],{"class":490,"line":1285},42,[488,1287,1288],{"class":696},"      fields",[488,1290,700],{"class":553},[488,1292,554],{"class":553},[488,1294,1295],{"class":696}," framework",[488,1297,700],{"class":553},[488,1299,1262],{"class":557},[488,1301,714],{"class":553},[488,1303,1304],{"class":498},"nuxt",[488,1306,714],{"class":553},[488,1308,561],{"class":553},[488,1310,573],{"class":553},[488,1312,1313],{"class":498},"next",[488,1315,714],{"class":553},[488,1317,1280],{"class":557},[488,1319,740],{"class":553},[488,1321,1323],{"class":490,"line":1322},43,[488,1324,1186],{"class":553},[488,1326,1328],{"class":490,"line":1327},44,[488,1329,1330],{"class":553},"  },\n",[488,1332,1334],{"class":490,"line":1333},45,[488,1335,917],{"class":557},[488,1337,1339],{"class":490,"line":1338},46,[488,1340,616],{"emptyLinePlaceholder":615},[488,1342,1344,1347],{"class":490,"line":1343},47,[488,1345,1346],{"class":675},"runMain",[488,1348,1349],{"class":557},"(main)\n",[1351,1352,1354],"h3",{"id":1353},"what-gets-recorded-automatically","What gets recorded automatically",[458,1356,1357,1360,1361,1364],{},[461,1358,1359],{},"withTelemetry"," walks your citty tree. Each ",[461,1362,1363],{},"run"," handler produces one event — no per-command telemetry boilerplate.",[1366,1367,1368,1389],"table",{},[1369,1370,1371],"thead",{},[1372,1373,1374,1378,1383],"tr",{},[1375,1376,1377],"th",{},"Invocation",[1375,1379,1380],{},[461,1381,1382],{},"event.command",[1375,1384,1385,1386],{},"Notes on ",[461,1387,1388],{},"flags",[1390,1391,1392,1410,1425,1445,1465],"tbody",{},[1372,1393,1394,1400,1404],{},[1395,1396,1397],"td",{},[461,1398,1399],{},"my-tool doctor",[1395,1401,1402],{},[461,1403,780],{},[1395,1405,1406,1409],{},[461,1407,1408],{},"{ json: true }"," — booleans captured as values",[1372,1411,1412,1417,1421],{},[1395,1413,1414],{},[461,1415,1416],{},"my-tool doctor --json",[1395,1418,1419],{},[461,1420,780],{},[1395,1422,1423],{},[461,1424,1408],{},[1372,1426,1427,1432,1436],{},[1395,1428,1429],{},[461,1430,1431],{},"my-tool sync --dry-run --output .\u002Fout",[1395,1433,1434],{},[461,1435,1006],{},[1395,1437,1438,1441,1442],{},[461,1439,1440],{},"{ dryRun: true, output: true }"," — string path is ",[474,1443,1444],{},"presence only",[1372,1446,1447,1452,1456],{},[1395,1448,1449],{},[461,1450,1451],{},"my-tool sync --format json",[1395,1453,1454],{},[461,1455,1006],{},[1395,1457,1458,1461,1462],{},[461,1459,1460],{},"{ format: \"json\" }"," only if allowlisted in ",[461,1463,1464],{},"collect.flags",[1372,1466,1467,1472,1477],{},[1395,1468,1469],{},[461,1470,1471],{},"my-tool telemetry status",[1395,1473,1474],{},[461,1475,1476],{},"telemetry status",[1395,1478,1479],{},"nested subcommands join with a space",[458,1481,1482,1483,1486,1487,902],{},"The root ",[461,1484,1485],{},"meta.name"," is not prefixed when the root only delegates to ",[461,1488,1489],{},"subCommands",[1351,1491,1493],{"id":1492},"enriching-a-run","Enriching a run",[458,1495,1496,1497,1499],{},"Call ",[461,1498,508],{}," anywhere inside a command handler (or any code that runs within that handler's async stack):",[479,1501,1503],{"className":540,"code":1502,"language":542,"meta":484,"style":484},"telemetry.set({ checksFailed: 2, cacheHit: true })\n",[461,1504,1505],{"__ignoreMap":484},[488,1506,1507,1510,1512,1514,1516,1518,1520,1522,1525,1527,1530,1532,1536,1538],{"class":490,"line":491},[488,1508,1509],{"class":557},"telemetry",[488,1511,902],{"class":553},[488,1513,905],{"class":675},[488,1515,687],{"class":557},[488,1517,910],{"class":553},[488,1519,882],{"class":696},[488,1521,700],{"class":553},[488,1523,1524],{"class":888}," 2",[488,1526,561],{"class":553},[488,1528,1529],{"class":696}," cacheHit",[488,1531,700],{"class":553},[488,1533,1535],{"class":1534},"sfNiH"," true",[488,1537,567],{"class":553},[488,1539,917],{"class":557},[458,1541,1542,1543,1545,1546,1549,1550,1553],{},"Throw an error with a ",[461,1544,461],{}," property and ",[461,1547,1548],{},"outcome: \"error\""," plus ",[461,1551,1552],{},"errorCode"," are recorded automatically:",[479,1555,1557],{"className":540,"code":1556,"language":542,"meta":484,"style":484},"throw Object.assign(new Error('Config missing'), { code: 'CONFIG_NOT_FOUND' })\n",[461,1558,1559],{"__ignoreMap":484},[488,1560,1561,1564,1567,1569,1572,1574,1577,1580,1582,1584,1587,1589,1591,1593,1595,1598,1600,1602,1605,1607,1609],{"class":490,"line":491},[488,1562,1563],{"class":549},"throw",[488,1565,1566],{"class":557}," Object",[488,1568,902],{"class":553},[488,1570,1571],{"class":675},"assign",[488,1573,687],{"class":557},[488,1575,1576],{"class":553},"new",[488,1578,1579],{"class":675}," Error",[488,1581,687],{"class":557},[488,1583,714],{"class":553},[488,1585,1586],{"class":498},"Config missing",[488,1588,714],{"class":553},[488,1590,1177],{"class":557},[488,1592,561],{"class":553},[488,1594,554],{"class":553},[488,1596,1597],{"class":696}," code",[488,1599,700],{"class":553},[488,1601,573],{"class":553},[488,1603,1604],{"class":498},"CONFIG_NOT_FOUND",[488,1606,714],{"class":553},[488,1608,567],{"class":553},[488,1610,917],{"class":557},[515,1612,1614],{"id":1613},"setup-without-citty","Setup without citty",[458,1616,1617,1618,1621,1622,700],{},"For scripts, migrators, or custom CLIs, use ",[461,1619,1620],{},"createTelemetry()"," and wrap each logical run with ",[461,1623,1624],{},"t.run()",[479,1626,1628],{"className":540,"code":1627,"language":542,"meta":484,"style":484},"import { createTelemetry, telemetry } from '@evlog\u002Ftelemetry'\n\nconst t = createTelemetry({ name: 'my-migrator', version: '2.0.0' })\n\nawait t.run('migrate', async () => {\n  telemetry.set({ rowsMigrated: 120 })\n})\n\nawait t.flush() \u002F\u002F optional — also runs at end of each t.run()\n",[461,1629,1630,1653,1657,1700,1704,1738,1763,1769,1773],{"__ignoreMap":484},[488,1631,1632,1634,1636,1639,1641,1643,1645,1647,1649,1651],{"class":490,"line":491},[488,1633,550],{"class":549},[488,1635,554],{"class":553},[488,1637,1638],{"class":557}," createTelemetry",[488,1640,561],{"class":553},[488,1642,599],{"class":557},[488,1644,567],{"class":553},[488,1646,570],{"class":549},[488,1648,573],{"class":553},[488,1650,463],{"class":498},[488,1652,579],{"class":553},[488,1654,1655],{"class":490,"line":582},[488,1656,616],{"emptyLinePlaceholder":615},[488,1658,1659,1661,1664,1666,1668,1670,1672,1674,1676,1678,1681,1683,1685,1687,1689,1691,1694,1696,1698],{"class":490,"line":612},[488,1660,623],{"class":622},[488,1662,1663],{"class":557}," t ",[488,1665,629],{"class":553},[488,1667,1638],{"class":675},[488,1669,687],{"class":557},[488,1671,910],{"class":553},[488,1673,705],{"class":696},[488,1675,700],{"class":553},[488,1677,573],{"class":553},[488,1679,1680],{"class":498},"my-migrator",[488,1682,714],{"class":553},[488,1684,561],{"class":553},[488,1686,733],{"class":696},[488,1688,700],{"class":553},[488,1690,573],{"class":553},[488,1692,1693],{"class":498},"2.0.0",[488,1695,714],{"class":553},[488,1697,567],{"class":553},[488,1699,917],{"class":557},[488,1701,1702],{"class":490,"line":619},[488,1703,616],{"emptyLinePlaceholder":615},[488,1705,1706,1709,1712,1714,1716,1718,1720,1723,1725,1727,1730,1733,1736],{"class":490,"line":639},[488,1707,1708],{"class":549},"await",[488,1710,1711],{"class":557}," t",[488,1713,902],{"class":553},[488,1715,1363],{"class":675},[488,1717,687],{"class":557},[488,1719,714],{"class":553},[488,1721,1722],{"class":498},"migrate",[488,1724,714],{"class":553},[488,1726,561],{"class":553},[488,1728,1729],{"class":622}," async",[488,1731,1732],{"class":553}," ()",[488,1734,1735],{"class":622}," =>",[488,1737,751],{"class":553},[488,1739,1740,1743,1745,1747,1749,1751,1754,1756,1759,1761],{"class":490,"line":656},[488,1741,1742],{"class":557},"  telemetry",[488,1744,902],{"class":553},[488,1746,905],{"class":675},[488,1748,687],{"class":696},[488,1750,910],{"class":553},[488,1752,1753],{"class":696}," rowsMigrated",[488,1755,700],{"class":553},[488,1757,1758],{"class":888}," 120",[488,1760,567],{"class":553},[488,1762,917],{"class":696},[488,1764,1765,1767],{"class":490,"line":661},[488,1766,1174],{"class":553},[488,1768,917],{"class":557},[488,1770,1771],{"class":490,"line":681},[488,1772,616],{"emptyLinePlaceholder":615},[488,1774,1775,1777,1779,1781,1784,1787],{"class":490,"line":693},[488,1776,1708],{"class":549},[488,1778,1711],{"class":557},[488,1780,902],{"class":553},[488,1782,1783],{"class":675},"flush",[488,1785,1786],{"class":557},"() ",[488,1788,1789],{"class":892},"\u002F\u002F optional — also runs at end of each t.run()\n",[458,1791,1792,1793,1796,1797,1800,1801,1804,1805,1808,1809,1812,1813,1816,1817,1820],{},"GitHub Actions: swap ",[461,1794,1795],{},"createTelemetry"," for ",[461,1798,1799],{},"createGitHubActionsTelemetry()"," — it adds ",[461,1802,1803],{},"ghaAction"," and ",[461,1806,1807],{},"ghaEvent"," to ",[461,1810,1811],{},"custom"," from ",[461,1814,1815],{},"GITHUB_ACTION"," \u002F ",[461,1818,1819],{},"GITHUB_EVENT_NAME"," only (never repo content).",[515,1822,1824],{"id":1823},"standard-envelope","Standard envelope",[458,1826,1827],{},"Every run shares the same shape. You do not declare per-command schemas.",[479,1829,1833],{"className":1830,"code":1831,"language":1832,"meta":484,"style":484},"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",[461,1834,1835,1839,1844,1849,1854,1859,1864,1869,1874,1879,1884,1889,1894,1902,1906,1914,1919],{"__ignoreMap":484},[488,1836,1837],{"class":490,"line":491},[488,1838,690],{},[488,1840,1841],{"class":490,"line":582},[488,1842,1843],{},"  \"event\": \"run\",\n",[488,1845,1846],{"class":490,"line":612},[488,1847,1848],{},"  \"command\": \"sync\",\n",[488,1850,1851],{"class":490,"line":619},[488,1852,1853],{},"  \"durationMs\": 412,\n",[488,1855,1856],{"class":490,"line":639},[488,1857,1858],{},"  \"outcome\": \"success\",\n",[488,1860,1861],{"class":490,"line":656},[488,1862,1863],{},"  \"flags\": { \"dryRun\": true, \"output\": true },\n",[488,1865,1866],{"class":490,"line":661},[488,1867,1868],{},"  \"tool\": { \"name\": \"my-tool\", \"version\": \"1.0.0\" },\n",[488,1870,1871],{"class":490,"line":681},[488,1872,1873],{},"  \"env\": {\n",[488,1875,1876],{"class":490,"line":693},[488,1877,1878],{},"    \"node\": \"20.11\",\n",[488,1880,1881],{"class":490,"line":743},[488,1882,1883],{},"    \"ci\": false,\n",[488,1885,1886],{"class":490,"line":754},[488,1887,1888],{},"    \"provider\": null,\n",[488,1890,1891],{"class":490,"line":764},[488,1892,1893],{},"    \"tty\": true,\n",[488,1895,1896,1899],{"class":490,"line":801},[488,1897,1898],{},"    \"agent\": \"cursor\"",[488,1900,1901],{},"   \u002F\u002F std-env: cursor, claude, codex, … or null\n",[488,1903,1904],{"class":490,"line":811},[488,1905,1330],{},[488,1907,1908,1911],{"class":490,"line":849},[488,1909,1910],{},"  \"machineId\": \"ab3f…\",",[488,1912,1913],{}," \u002F\u002F hashed; omitted in ephemeral CI\n",[488,1915,1916],{"class":490,"line":855},[488,1917,1918],{},"  \"custom\": { \"itemsSynced\": 42 }\n",[488,1920,1921],{"class":490,"line":876},[488,1922,1923],{},"}\n",[515,1925,1927],{"id":1926},"privacy","Privacy",[458,1929,1930,1931,1933,1934,1937],{},"Raw ",[461,1932,512],{}," is never read. Sanitization applies to ",[474,1935,1936],{},"citty-parsed"," flags only:",[1939,1940,1941,1955,1967],"ul",{},[1942,1943,1944,1947,1948,1951,1952,1177],"li",{},[474,1945,1946],{},"Booleans \u002F numbers"," → value stored (",[461,1949,1950],{},"json: true",", ",[461,1953,1954],{},"limit: 50",[1942,1956,1957,1960,1961,1964,1965],{},[474,1958,1959],{},"Strings"," → presence only (",[461,1962,1963],{},"output: true",") unless allowlisted in ",[461,1966,1464],{},[1942,1968,1969,1973,1974,1977],{},[474,1970,1971],{},[461,1972,508],{}," → numbers and booleans always; strings only via ",[461,1975,1976],{},"collect.fields"," (undeclared values are dropped at runtime, never thrown)",[479,1979,1981],{"className":540,"code":1980,"language":542,"meta":484,"style":484},"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",[461,1982,1983,1992,2029,2065],{"__ignoreMap":484},[488,1984,1985,1988,1990],{"class":490,"line":491},[488,1986,1987],{"class":494},"collect",[488,1989,700],{"class":553},[488,1991,751],{"class":553},[488,1993,1994,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2026],{"class":490,"line":582},[488,1995,1996],{"class":494},"  flags",[488,1998,700],{"class":553},[488,2000,554],{"class":553},[488,2002,1257],{"class":494},[488,2004,700],{"class":553},[488,2006,1262],{"class":696},[488,2008,714],{"class":553},[488,2010,937],{"class":498},[488,2012,714],{"class":553},[488,2014,561],{"class":553},[488,2016,573],{"class":553},[488,2018,1275],{"class":498},[488,2020,714],{"class":553},[488,2022,1280],{"class":696},[488,2024,2025],{"class":553},"},",[488,2027,2028],{"class":892},"           \u002F\u002F --format json → \"json\"; --format yaml → true\n",[488,2030,2031,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062],{"class":490,"line":612},[488,2032,2033],{"class":494},"  fields",[488,2035,700],{"class":553},[488,2037,554],{"class":553},[488,2039,1295],{"class":494},[488,2041,700],{"class":553},[488,2043,1262],{"class":696},[488,2045,714],{"class":553},[488,2047,1304],{"class":498},[488,2049,714],{"class":553},[488,2051,561],{"class":553},[488,2053,573],{"class":553},[488,2055,1313],{"class":498},[488,2057,714],{"class":553},[488,2059,1280],{"class":696},[488,2061,2025],{"class":553},[488,2063,2064],{"class":892},"      \u002F\u002F telemetry.set({ framework: 'nuxt' }) ok\n",[488,2066,2067],{"class":490,"line":619},[488,2068,1923],{"class":553},[458,2070,2071,2072,1816,2074,2076,2077,2079],{},"Declare allowlists in the same ",[461,2073,524],{},[461,2075,1620],{}," call as ",[461,2078,1987],{}," — no separate config file.",[515,2081,2083],{"id":2082},"disclosure","Disclosure",[458,2085,2086,2089,2090,2092,2093,2096],{},[461,2087,2088],{},"generateDisclosure()"," produces markdown + JSON from the standard envelope plus your ",[461,2091,1987],{}," extensions. Commit the output (e.g. ",[461,2094,2095],{},"TELEMETRY.md",") so it stays in sync with releases:",[479,2098,2100],{"className":540,"code":2099,"language":542,"meta":484,"style":484},"import { generateDisclosure } from '@evlog\u002Ftelemetry'\n\nconst { markdown } = generateDisclosure('my-tool', {\n  flags: { format: ['json', 'csv'] },\n})\n",[461,2101,2102,2121,2125,2152,2184],{"__ignoreMap":484},[488,2103,2104,2106,2108,2111,2113,2115,2117,2119],{"class":490,"line":491},[488,2105,550],{"class":549},[488,2107,554],{"class":553},[488,2109,2110],{"class":557}," generateDisclosure",[488,2112,567],{"class":553},[488,2114,570],{"class":549},[488,2116,573],{"class":553},[488,2118,463],{"class":498},[488,2120,579],{"class":553},[488,2122,2123],{"class":490,"line":582},[488,2124,616],{"emptyLinePlaceholder":615},[488,2126,2127,2129,2131,2134,2136,2138,2140,2142,2144,2146,2148,2150],{"class":490,"line":612},[488,2128,623],{"class":622},[488,2130,554],{"class":553},[488,2132,2133],{"class":557}," markdown ",[488,2135,1174],{"class":553},[488,2137,885],{"class":553},[488,2139,2110],{"class":675},[488,2141,687],{"class":557},[488,2143,714],{"class":553},[488,2145,634],{"class":498},[488,2147,714],{"class":553},[488,2149,561],{"class":553},[488,2151,751],{"class":553},[488,2153,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182],{"class":490,"line":619},[488,2155,1996],{"class":696},[488,2157,700],{"class":553},[488,2159,554],{"class":553},[488,2161,1257],{"class":696},[488,2163,700],{"class":553},[488,2165,1262],{"class":557},[488,2167,714],{"class":553},[488,2169,937],{"class":498},[488,2171,714],{"class":553},[488,2173,561],{"class":553},[488,2175,573],{"class":553},[488,2177,1275],{"class":498},[488,2179,714],{"class":553},[488,2181,1280],{"class":557},[488,2183,740],{"class":553},[488,2185,2186,2188],{"class":490,"line":639},[488,2187,1174],{"class":553},[488,2189,917],{"class":557},[458,2191,2192,2193,2195,2196,902],{},"Users can also read it at runtime via ",[461,2194,1471],{}," when you wire ",[461,2197,2198],{},"defineTelemetryCommands()",[515,2200,2202],{"id":2201},"consent-and-reliability","Consent and reliability",[458,2204,2205,2208,2209,2212,2213,2216,2217,1816,2220,2223],{},[474,2206,2207],{},"Opt-out priority:"," ",[461,2210,2211],{},"DO_NOT_TRACK=1"," → ",[461,2214,2215],{},"EVLOG_TELEMETRY=0"," → persisted preference (",[461,2218,2219],{},"disableTelemetry()",[461,2221,2222],{},"telemetry disable","). Opt-out purges the undelivered outbox.",[458,2225,2226,2229,2230,2233],{},[474,2227,2228],{},"Never harms the host:"," telemetry never throws, never blocks exit; ",[461,2231,2232],{},"flush()"," has a 500ms hard cap.",[458,2235,2236,2239,2240,2243],{},[474,2237,2238],{},"Outbox:"," events append to ",[461,2241,2242],{},"~\u002F.config\u002F{toolName}\u002Ftelemetry\u002Foutbox.ndjson"," before any network send. Short-lived runs and offline machines drain the backlog on the next invocation.",[458,2245,2246,2208,2249,2252,2253,2256],{},[474,2247,2248],{},"Endpoint:",[461,2250,2251],{},"EVLOG_TELEMETRY_ENDPOINT"," env → ",[461,2254,2255],{},"endpoint"," option → outbox-only (default until you ship ingestion).",[515,2258,2260],{"id":2259},"debug","Debug",[479,2262,2264],{"className":481,"code":2263,"language":483,"meta":484,"style":484},"EVLOG_TELEMETRY_DEBUG=1 my-tool doctor\nEVLOG_TELEMETRY=0 my-tool sync\n",[461,2265,2266,2282],{"__ignoreMap":484},[488,2267,2268,2271,2273,2276,2279],{"class":490,"line":491},[488,2269,2270],{"class":557},"EVLOG_TELEMETRY_DEBUG",[488,2272,629],{"class":553},[488,2274,2275],{"class":498},"1",[488,2277,2278],{"class":494}," my-tool",[488,2280,2281],{"class":498}," doctor\n",[488,2283,2284,2287,2289,2292,2294],{"class":490,"line":582},[488,2285,2286],{"class":557},"EVLOG_TELEMETRY",[488,2288,629],{"class":553},[488,2290,2291],{"class":498},"0",[488,2293,2278],{"class":494},[488,2295,2296],{"class":498}," sync\n",[458,2298,2299],{},"Debug mode prints would-be payloads to stderr. Nothing is sent unless an endpoint is configured and delivery succeeds.",[515,2301,2303],{"id":2302},"see-also","See also",[1939,2305,2306],{},[1942,2307,2308,2311],{},[466,2309,2310],{"href":323},"Audit"," — wide events for security-sensitive actions",[2313,2314,2315],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":484,"searchDepth":582,"depth":582,"links":2317},[2318,2322,2323,2324,2325,2326,2327,2328],{"id":517,"depth":582,"text":518,"children":2319},[2320,2321],{"id":1353,"depth":612,"text":1354},{"id":1492,"depth":612,"text":1493},{"id":1613,"depth":582,"text":1614},{"id":1823,"depth":582,"text":1824},{"id":1926,"depth":582,"text":1927},{"id":2082,"depth":582,"text":2083},{"id":2201,"depth":582,"text":2202},{"id":2259,"depth":582,"text":2260},{"id":2302,"depth":582,"text":2303},"Wide-event telemetry for CLIs and automation — evlog's one-event-per-run model for tools on user machines, with privacy-safe flags, consent, outbox, and auto-generated disclosure.","md",[2332],{"label":2310,"icon":318,"to":323,"color":2333,"variant":2334},"neutral","subtle",{},{"title":284,"icon":315},{"title":453,"description":2329},"CO8LRw891W4yNfJ8cezS_PZrCKxr2hs9Ij6VOot_oaI",[2340,2342],{"title":354,"path":355,"stem":356,"description":2341,"icon":357,"children":-1},"Export one evlog wide event per eve agent turn — token usage, tool executions, business context, drains, enrichers, and tail sampling alongside Agent Runs and OpenTelemetry.",{"title":36,"path":371,"stem":372,"description":2343,"icon":373,"children":-1},"Observe what flows through the pipeline (stream, fs reader, consumer recipes), plug into the pipeline (plugins, enrichers, tail sampling, identity headers), or build your own bricks (custom drains, drain pipeline, custom framework integration).",1784142035597]