@kortyx/usage-telemetry 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +126 -4
- package/dist/browser-node.d.ts +11 -3
- package/dist/browser-node.js +549 -23
- package/dist/browser-node.js.map +1 -1
- package/dist/{client-rVwo4XAO.d.ts → client-BPjAx5oh.d.ts} +8 -5
- package/dist/index.d.ts +12 -3
- package/dist/index.js +543 -23
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +10 -4
- package/dist/node.js +562 -24
- package/dist/node.js.map +1 -1
- package/package.json +1 -1
package/dist/browser-node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/browser-node.ts","../src/catalog.ts","../src/client.ts"],"sourcesContent":["// Browser fallback for libraries whose portable exports share a Node entry.\n// Default-on Node collection cannot infer a browser's operator opt-out policy.\n// Explicit browser bootstrap belongs to the embedding application's integration.\nimport {\n createUsageTelemetry,\n type UsageOptions,\n type UsageTelemetry,\n} from \"./client\";\n\nexport { scale } from \"./catalog\";\nexport { createUsageTelemetry, type UsageTelemetry } from \"./client\";\n\nconst clients = new Map<string, UsageTelemetry>();\nexport function createNodeUsageTelemetry(\n options: Pick<UsageOptions, \"context\"> &\n Partial<Omit<UsageOptions, \"context\">>,\n): UsageTelemetry {\n return createUsageTelemetry({\n ...options,\n identity: options.identity ?? (() => \"\"),\n transport: options.transport ?? (async () => {}),\n enabled: () => false,\n });\n}\nexport function configureUsageTelemetry(\n component: string,\n client: UsageTelemetry,\n): void {\n if (clients.get(component) === client) return;\n clients.get(component)?.dispose();\n clients.set(component, client);\n}\nexport function getUsageTelemetry(\n component: string,\n version = \"unknown\",\n product = \"sdk\",\n): UsageTelemetry {\n let client = clients.get(component);\n if (!client) {\n client = createNodeUsageTelemetry({\n context: { component, version, product },\n });\n clients.set(component, client);\n }\n return client;\n}\nexport function usageDisabled() {\n return true;\n}\nexport function publicUsageConfiguration() {\n return {\n enabled: false,\n debug: false,\n environment: \"production\" as const,\n key: \"\",\n host: \"https://eu.i.posthog.com\",\n };\n}\n","/** Only public product facts belong here. Other distributions register their own catalog. */\nexport const operations = [\n \"sdk.initialize\",\n \"sdk.registry\",\n \"sdk.execute\",\n \"sdk.resume\",\n \"sdk.chat.admission\",\n \"sdk.execution\",\n \"sdk.response\",\n \"sdk.model\",\n \"sdk.tool\",\n \"sdk.node\",\n \"sdk.parallel\",\n \"sdk.child\",\n \"sdk.structured\",\n \"sdk.complete_response\",\n \"sdk.prompt.resolve\",\n \"sdk.prompt.refresh\",\n \"sdk.eval\",\n \"sdk.mcp.connect\",\n \"sdk.mcp.discover\",\n \"sdk.mcp.close\",\n \"sdk.checkpoint.read\",\n \"sdk.checkpoint.list\",\n \"sdk.checkpoint.fork\",\n \"sdk.checkpoint.rollback\",\n \"sdk.export\",\n \"studio.setup\",\n \"studio.connection\",\n \"studio.read\",\n \"studio.render\",\n \"studio.navigation\",\n \"studio.inspect\",\n \"studio.filter\",\n \"studio.saved_view\",\n \"studio.live\",\n \"studio.prompt\",\n \"studio.eval\",\n \"studio.review\",\n \"studio.settings\",\n \"studio.update\",\n \"studio.ingest\",\n \"cli.topology\",\n \"cli.eval\",\n] as const;\n\nexport type Outcome =\n | \"success\"\n | \"failed\"\n | \"cancelled\"\n | \"suspended\"\n | \"denied\"\n | \"limit_reached\"\n | \"quality_failed\"\n | \"ungraded\";\nexport const outcomes: readonly Outcome[] = [\n \"success\",\n \"failed\",\n \"cancelled\",\n \"suspended\",\n \"denied\",\n \"limit_reached\",\n \"quality_failed\",\n \"ungraded\",\n];\nexport type PropertyRule = \"boolean\" | readonly string[];\nexport interface UsageCatalog {\n products: readonly string[];\n operations: readonly string[];\n properties: Readonly<Record<string, PropertyRule>>;\n errorCodes: readonly string[];\n}\n\nexport const publicCatalog: UsageCatalog = {\n products: [\"sdk\", \"oss_studio\"],\n operations,\n properties: {\n phase: [\n \"admission\",\n \"execution\",\n \"delivery\",\n \"parse\",\n \"network\",\n \"http\",\n \"configuration\",\n \"preflight\",\n \"state\",\n \"pull\",\n \"ports\",\n \"compose\",\n \"rollback\",\n \"backup\",\n \"migration\",\n \"health\",\n ],\n source: [\n \"memory\",\n \"file\",\n \"custom\",\n \"local\",\n \"studio\",\n \"cache\",\n \"fallback\",\n \"eval\",\n \"mcp\",\n \"native\",\n ],\n storage: [\"in-memory\", \"redis\", \"postgres\", \"custom\"],\n calling_mode: [\"direct\", \"model\"],\n provider: [\n \"openai\",\n \"anthropic\",\n \"google\",\n \"mistral\",\n \"groq\",\n \"deepseek\",\n \"openrouter\",\n ],\n transport: [\"stdio\", \"sse\", \"http\", \"custom\"],\n format: [\n \"text\",\n \"json\",\n \"json_schema\",\n \"set\",\n \"append\",\n \"text-delta\",\n \"final\",\n ],\n resource: [\n \"runs\",\n \"sessions\",\n \"interrupts\",\n \"workflows\",\n \"prompts\",\n \"evals\",\n \"diagnostics\",\n \"settings\",\n \"home\",\n ],\n surface: [\n \"runs\",\n \"sessions\",\n \"interrupts\",\n \"workflows\",\n \"prompts\",\n \"evals\",\n \"settings\",\n \"other\",\n ],\n action: [\n \"view\",\n \"select\",\n \"retry\",\n \"first_use\",\n \"observed\",\n \"copy\",\n \"create\",\n \"draft\",\n \"save\",\n \"discard-draft\",\n \"update\",\n \"promote\",\n \"review\",\n \"policy\",\n \"tag-set\",\n \"tag-remove\",\n \"bulk-update\",\n \"category-create\",\n \"category-update\",\n \"category-delete\",\n \"group-create\",\n \"group-update\",\n \"group-delete\",\n \"import\",\n \"export\",\n \"launch\",\n \"cancel\",\n \"compare\",\n \"inspect\",\n \"clear\",\n \"apply\",\n \"delete\",\n \"enable\",\n \"disable\",\n \"manual_refresh\",\n \"fallback_refresh\",\n \"refresh\",\n \"change\",\n ],\n tab: [\n \"overview\",\n \"trace\",\n \"events\",\n \"model-io\",\n \"calls\",\n \"feedback\",\n \"content\",\n \"versions\",\n \"reviews\",\n \"usage\",\n \"diff\",\n \"cases\",\n \"results\",\n \"definition\",\n ],\n origin: [\"foreground\", \"background\", \"server\", \"browser\", \"cli\"],\n status: [\n \"empty\",\n \"nonempty\",\n \"off\",\n \"connecting\",\n \"live\",\n \"reconnecting\",\n \"paused\",\n \"running\",\n \"completed\",\n \"failed\",\n \"interrupted\",\n \"pending\",\n \"expired\",\n ],\n filter: [\n \"search\",\n \"status\",\n \"provider\",\n \"model\",\n \"environment\",\n \"version\",\n \"duration\",\n \"cost\",\n \"tokens\",\n \"time\",\n \"sort\",\n \"other\",\n ],\n scale: [\"1\", \"2-5\", \"6-20\", \"21-100\", \"101+\"],\n error_category: [\n \"configuration\",\n \"provider\",\n \"validation\",\n \"domain\",\n \"workflow\",\n \"persistence\",\n \"request\",\n \"transport\",\n \"internal\",\n \"unknown\",\n ],\n http_status: [\n \"400\",\n \"401\",\n \"403\",\n \"404\",\n \"409\",\n \"413\",\n \"422\",\n \"429\",\n \"500\",\n \"502\",\n \"503\",\n \"504\",\n ],\n prompts: \"boolean\",\n data_reducers: \"boolean\",\n observability: \"boolean\",\n tools: \"boolean\",\n streaming: \"boolean\",\n requested_streaming: \"boolean\",\n executed: \"boolean\",\n cache: \"boolean\",\n reused: \"boolean\",\n continue_on_disconnect: \"boolean\",\n write_available: \"boolean\",\n },\n // Built-in contracts only; application codes and provider response text are excluded.\n errorCodes: [\n \"EXECUTION_FAILED\",\n \"INVALID_REQUEST\",\n \"INVALID_RESUME\",\n \"INVALID_RESPONSE\",\n \"INVALID_SESSION\",\n \"RESUME_MISMATCH\",\n \"RESUME_FAILED\",\n \"CONTRACT_MISMATCH\",\n \"INVALID_INPUT\",\n \"INVALID_OUTPUT\",\n \"MISSING_CONTRACT\",\n \"UNKNOWN_WORKFLOW\",\n \"DOMAIN_ERROR\",\n \"PERSISTENCE_ERROR\",\n \"WORKFLOW_CONTRACT_ERROR\",\n \"WORKFLOW_REDUCER_FAILED\",\n \"PROVIDER_REFUSAL\",\n \"PROVIDER_HTTP_ERROR\",\n \"PROVIDER_INVALID_RESPONSE\",\n \"PROVIDER_TRANSPORT_ERROR\",\n \"PROVIDER_REQUEST_FAILED\",\n \"INVALID_MODEL_JSON\",\n \"MODEL_OUTPUT_SCHEMA\",\n \"OUTPUT_TRUNCATED\",\n \"SCHEMA_VALIDATION\",\n \"PARALLEL_FAILED\",\n \"EVAL_TIMEOUT\",\n \"EVAL_HOOK_FAILED\",\n \"EVAL_INTERRUPT_CLEANUP_FAILED\",\n \"PROMPT_SOURCE_NOT_CONFIGURED\",\n \"PROMPT_REASON_CONFLICT\",\n \"PROMPT_REASON_INVALID\",\n \"REASON_OUTPUT_BUDGET_EXHAUSTED\",\n \"REASON_OUTPUT_CONTRACT_CORRECTION_EXHAUSTED\",\n \"PROMPT_CACHE_INVALID\",\n \"PROMPT_ENVIRONMENT_MISMATCH\",\n \"PROMPT_EVAL_PIN_CONFLICT\",\n \"PROMPT_EVAL_SNAPSHOT_INVALID\",\n \"PROMPT_NOT_ASSIGNED\",\n \"PROMPT_NOT_FOUND\",\n \"PROMPT_NOT_REGISTERED\",\n \"PROMPT_PIN_MISMATCH\",\n \"PROMPT_REFERENCE_DUPLICATE\",\n \"PROMPT_SNAPSHOT_INVALID\",\n \"PROMPT_SNAPSHOT_LIMIT\",\n \"PROMPT_SOURCE_HTTP\",\n \"PROMPT_SOURCE_INVALID\",\n \"PROMPT_TAG_MISMATCH\",\n \"PROMPT_CONTRACT_MISMATCH\",\n \"PROMPT_REFERENCE_INVALID\",\n \"PROMPT_SCHEMA_INVALID\",\n \"PROMPT_VARIABLE_CONFIG_OVERLAP\",\n \"PROMPT_VARIABLE_MISSING\",\n \"PROMPT_VARIABLE_UNKNOWN\",\n \"PROMPT_DEPENDENCY_CYCLE\",\n \"PROMPT_DEPENDENCY_MISMATCH\",\n \"PROMPT_HASH_MISMATCH\",\n \"PROMPT_REFERENCE_LIMIT\",\n \"PROMPT_REFERENCE_MISSING\",\n \"PROMPT_REFERENCE_ROLE\",\n \"STUDIO_PROTOCOL_MISMATCH\",\n ],\n};\n\nexport function scale(value: number): string {\n return value <= 1\n ? \"1\"\n : value <= 5\n ? \"2-5\"\n : value <= 20\n ? \"6-20\"\n : value <= 100\n ? \"21-100\"\n : \"101+\";\n}\n","import {\n type Outcome,\n outcomes,\n publicCatalog,\n type UsageCatalog,\n} from \"./catalog\";\n\nexport type UsageProperties = Readonly<Record<string, unknown>>;\nexport interface UsageContext {\n product: string;\n component: string;\n version: string;\n environment?: \"production\" | \"staging\";\n identityScope?: \"installation\" | \"browser\" | \"process\";\n runtimeMode?: \"development\" | \"production\" | \"ci\" | \"unknown\";\n}\nexport interface UsageRecord {\n schema_version: 1;\n event_id: string;\n timestamp: string;\n event: \"usage.operation\" | \"usage.feature\";\n product: string;\n component: string;\n version: string;\n analytics_environment: \"production\" | \"staging\";\n runtime_mode: string;\n identity_scope: \"installation\" | \"browser\" | \"process\";\n operation: string;\n outcome: Outcome;\n properties: Record<string, string | boolean>;\n count: number;\n duration_total_ms: number;\n duration_buckets: number[];\n}\nexport type UsageTransport = (\n records: readonly UsageRecord[],\n identity: string,\n) => Promise<void>;\nexport interface UsageOptions {\n context: UsageContext;\n catalog?: UsageCatalog;\n enabled?: () => boolean;\n debug?: () => boolean;\n inspect?: (records: readonly UsageRecord[]) => void;\n identity: () =>\n | string\n | { id: string; scope: \"installation\" | \"browser\" | \"process\" }\n | Promise<\n string | { id: string; scope: \"installation\" | \"browser\" | \"process\" }\n >;\n transport: UsageTransport;\n now?: () => number;\n schedule?: (callback: () => void, ms: number) => { cancel(): void };\n flushIntervalMs?: number;\n maxGroups?: number;\n maxRecordsPerHour?: number;\n}\nexport interface UsageOperation {\n end(outcome?: Outcome, properties?: UsageProperties): void;\n fail(error: unknown, properties?: UsageProperties): void;\n}\nexport interface UsageTelemetry {\n start(operation: string, properties?: UsageProperties): UsageOperation;\n feature(operation: string, properties?: UsageProperties): void;\n measure<T>(\n operation: string,\n callback: () => T | Promise<T>,\n properties?: UsageProperties,\n outcome?: (value: T) => Outcome,\n ): Promise<T>;\n flush(): Promise<void>;\n dispose(): void;\n stats(): { pending: number; dropped: number; delivered: number };\n}\n\n/** Do not invoke arbitrary getters while classifying application errors. */\nfunction property(value: unknown, key: string): unknown {\n try {\n if (!value || typeof value !== \"object\") return undefined;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor && \"value\" in descriptor ? descriptor.value : undefined;\n } catch {\n return undefined;\n }\n}\nexport function classifyUsageError(\n error: unknown,\n catalog = publicCatalog,\n): { outcome: Outcome; properties: UsageProperties } {\n const name = property(error, \"name\");\n const code =\n property(error, \"code\") ?? property(property(error, \"failure\"), \"code\");\n if (name === \"AbortError\" || code === \"EXECUTION_CANCELLED\")\n return { outcome: \"cancelled\", properties: {} };\n if (code === \"EXECUTION_LIMIT_REACHED\" || name === \"ExecutionLimitReached\")\n return { outcome: \"limit_reached\", properties: {} };\n if (\n name === \"GraphInterrupt\" ||\n name === \"NodeInterrupt\" ||\n name === \"Interrupt\"\n )\n return { outcome: \"suspended\", properties: {} };\n const known = typeof code === \"string\" && catalog.errorCodes.includes(code);\n const category =\n known && code !== \"EXECUTION_FAILED\"\n ? (property(error, \"category\") ??\n property(property(error, \"failure\"), \"category\") ??\n \"unknown\")\n : \"unknown\";\n const status =\n property(error, \"status\") ?? property(property(error, \"failure\"), \"status\");\n return {\n outcome: \"failed\",\n properties: {\n error_code: known ? code : \"other\",\n error_category: category,\n ...(typeof status === \"number\" ? { http_status: String(status) } : {}),\n },\n };\n}\n\nexport function sanitizeProperties(\n input: UsageProperties,\n catalog = publicCatalog,\n): Record<string, string | boolean> {\n const safe: Record<string, string | boolean> = {};\n for (const [key, rule] of Object.entries(catalog.properties)) {\n const value = property(input, key);\n if (value === undefined) continue;\n if (rule === \"boolean\") {\n if (typeof value === \"boolean\") safe[key] = value;\n } else if (typeof value === \"string\")\n safe[key] = rule.includes(value) ? value : \"other\";\n }\n const code = property(input, \"error_code\");\n if (typeof code === \"string\")\n safe.error_code = catalog.errorCodes.includes(code) ? code : \"other\";\n return safe;\n}\n\nconst durationBounds = [10, 100, 1000, 10000, 60000];\nconst noopOperation: UsageOperation = { end() {}, fail() {} };\nfunction schedule(callback: () => void, ms: number) {\n const timer = setTimeout(callback, ms);\n (timer as unknown as { unref?: () => void }).unref?.();\n return { cancel: () => clearTimeout(timer) };\n}\nexport function createUsageTelemetry(options: UsageOptions): UsageTelemetry {\n const catalog = options.catalog ?? publicCatalog;\n const now = options.now ?? Date.now;\n const pending = new Map<string, UsageRecord>();\n let timer: { cancel(): void } | undefined;\n let flight: Promise<void> | undefined;\n let disposed = false;\n let dropped = 0;\n let delivered = 0;\n let hour = Math.floor(now() / 3_600_000);\n let sent = 0;\n const active = () => {\n try {\n return !disposed && (options.enabled?.() ?? true);\n } catch {\n return false;\n }\n };\n const clear = () => {\n pending.clear();\n try {\n timer?.cancel();\n } catch {}\n timer = undefined;\n };\n const configured =\n catalog.products.includes(options.context.product) &&\n /^[a-z][a-z0-9_]{0,31}$/.test(options.context.component) &&\n /^(?:\\d+\\.\\d+\\.\\d+(?:-[a-z0-9.-]+)?|development|unknown)$/.test(\n options.context.version,\n ) &&\n options.context.version.length <= 64;\n\n const flush = async (): Promise<void> => {\n if (flight) return flight;\n if (!active() || !configured) {\n clear();\n return;\n }\n try {\n timer?.cancel();\n } catch {}\n timer = undefined;\n const records = [...pending.values()];\n pending.clear();\n if (!records.length) return;\n let attempted = records.length;\n flight = (async () => {\n try {\n if (options.debug?.()) {\n options.inspect?.(records);\n return;\n }\n const currentHour = Math.floor(now() / 3_600_000);\n if (hour !== currentHour) {\n hour = currentHour;\n sent = 0;\n }\n const allowance = Math.max(\n 0,\n (options.maxRecordsPerHour ?? 120) - sent,\n );\n const batch = records.slice(0, allowance);\n dropped += records.length - batch.length;\n attempted = batch.length;\n if (!batch.length || !active()) return;\n const identified = await options.identity();\n const identity =\n typeof identified === \"string\" ? identified : identified.id;\n if (typeof identified !== \"string\")\n for (const record of batch) record.identity_scope = identified.scope;\n if (!active() || options.debug?.()) return;\n if (\n !/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.test(\n identity,\n )\n ) {\n dropped += batch.length;\n return;\n }\n sent += batch.length;\n await options.transport(batch, identity);\n delivered += batch.length;\n } catch {\n dropped += attempted;\n }\n })().finally(() => {\n flight = undefined;\n try {\n if (pending.size && active() && !timer)\n timer = (options.schedule ?? schedule)(\n () => void flush(),\n options.flushIntervalMs ?? 60_000,\n );\n } catch {\n clear();\n }\n });\n return flight;\n };\n\n const record = (\n event: UsageRecord[\"event\"],\n operation: string,\n outcome: Outcome,\n duration: number,\n input: UsageProperties,\n ) => {\n try {\n if (!active()) {\n clear();\n return;\n }\n if (\n !configured ||\n !catalog.operations.includes(operation) ||\n !outcomes.includes(outcome)\n )\n return;\n const properties = sanitizeProperties(input, catalog);\n const key = JSON.stringify([event, operation, outcome, properties]);\n let existing = pending.get(key);\n if (!existing) {\n if (pending.size >= (options.maxGroups ?? 64)) {\n dropped++;\n return;\n }\n existing = {\n schema_version: 1,\n event_id: crypto.randomUUID(),\n timestamp: new Date(now()).toISOString(),\n event,\n product: options.context.product,\n component: options.context.component,\n version: options.context.version,\n analytics_environment: options.context.environment ?? \"production\",\n runtime_mode: options.context.runtimeMode ?? \"unknown\",\n identity_scope: options.context.identityScope ?? \"installation\",\n operation,\n outcome,\n properties,\n count: 0,\n duration_total_ms: 0,\n duration_buckets: [0, 0, 0, 0, 0, 0],\n };\n pending.set(key, existing);\n }\n const elapsed = Math.max(\n 0,\n Math.min(86_400_000, Number.isFinite(duration) ? duration : 0),\n );\n existing.count = Math.min(Number.MAX_SAFE_INTEGER, existing.count + 1);\n existing.duration_total_ms = Math.min(\n Number.MAX_SAFE_INTEGER,\n existing.duration_total_ms + elapsed,\n );\n const index = durationBounds.findIndex((bound) => elapsed <= bound);\n const bucket = index === -1 ? durationBounds.length : index;\n existing.duration_buckets[bucket] =\n (existing.duration_buckets[bucket] ?? 0) + 1;\n if (!timer)\n timer = (options.schedule ?? schedule)(\n () => void flush(),\n options.flushIntervalMs ?? 60_000,\n );\n } catch {\n /* Usage collection cannot participate in product execution. */\n }\n };\n const start = (\n operation: string,\n properties: UsageProperties = {},\n ): UsageOperation => {\n if (!active()) {\n clear();\n return noopOperation;\n }\n try {\n const initial = sanitizeProperties(properties, catalog);\n const began = now();\n let ended = false;\n return {\n end(outcome = \"success\", extra = {}) {\n if (ended) return;\n ended = true;\n try {\n record(\"usage.operation\", operation, outcome, now() - began, {\n ...initial,\n ...sanitizeProperties(extra, catalog),\n });\n } catch {}\n },\n fail(error, extra = {}) {\n if (ended) return;\n try {\n const failure = classifyUsageError(error, catalog);\n this.end(failure.outcome, {\n ...sanitizeProperties(extra, catalog),\n ...failure.properties,\n });\n } catch {}\n },\n };\n } catch {\n return noopOperation;\n }\n };\n return {\n start,\n feature(operation, properties = {}) {\n record(\"usage.feature\", operation, \"success\", 0, properties);\n },\n async measure(operation, callback, properties = {}, outcome) {\n const operationScope = start(operation, properties);\n try {\n const result = await callback();\n let status: Outcome = \"success\";\n try {\n status = outcome?.(result) ?? status;\n } catch {}\n operationScope.end(status);\n return result;\n } catch (error) {\n operationScope.fail(error);\n throw error;\n }\n },\n flush,\n dispose() {\n disposed = true;\n clear();\n },\n stats: () => ({ pending: pending.size, dropped, delivered }),\n };\n}\n"],"mappings":"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","names":["record"]}
|
|
1
|
+
{"version":3,"sources":["../src/browser-node.ts","../src/catalog.ts","../src/failure.ts","../src/measurement.ts","../src/client.ts"],"sourcesContent":["// Browser fallback for libraries whose portable exports share a Node entry.\n// Default-on Node collection cannot infer a browser's operator opt-out policy.\n// Explicit browser bootstrap belongs to the embedding application's integration.\nimport {\n createUsageTelemetry,\n type UsageOptions,\n type UsageTelemetry,\n} from \"./client\";\n\nexport { scale } from \"./catalog\";\nexport { createUsageTelemetry, type UsageTelemetry } from \"./client\";\n\nconst clients = new Map<string, UsageTelemetry>();\n/** Flush registered component replacements without adding another emitter. */\nexport async function flushUsageTelemetry(): Promise<void> {\n await Promise.all([...clients.values()].map((client) => client.flush()));\n}\n\nexport function createNodeUsageTelemetry(\n options: Pick<UsageOptions, \"context\"> &\n Partial<Omit<UsageOptions, \"context\">>,\n): UsageTelemetry {\n return createUsageTelemetry({\n ...options,\n identity: options.identity ?? (() => \"\"),\n transport: options.transport ?? (async () => {}),\n enabled: () => false,\n });\n}\nexport function configureUsageTelemetry(\n component: string,\n client: UsageTelemetry,\n): void {\n if (clients.get(component) === client) return;\n clients.get(component)?.dispose();\n clients.set(component, client);\n}\nexport function getUsageTelemetry(\n component: string,\n version = \"unknown\",\n product = \"sdk\",\n): UsageTelemetry {\n let client = clients.get(component);\n if (!client) {\n client = createNodeUsageTelemetry({\n context: { component, version, product },\n });\n clients.set(component, client);\n }\n return client;\n}\nexport function usageDisabled() {\n return true;\n}\nexport function runtimeUsageContext() {\n return { runtimeMode: \"unknown\" as const, trafficSource: \"unknown\" as const };\n}\nexport function publicUsageConfiguration() {\n return {\n enabled: false,\n runtimeMode: \"unknown\" as const,\n trafficSource: \"unknown\" as const,\n debug: false,\n environment: \"production\" as const,\n key: \"\",\n host: \"https://eu.i.posthog.com\",\n };\n}\n","/** Only public product facts belong here. Other distributions register their own catalog. */\nexport const operations = [\n \"sdk.initialize\",\n \"sdk.registry\",\n \"sdk.execute\",\n \"sdk.resume\",\n \"sdk.chat.admission\",\n \"sdk.execution\",\n \"sdk.response\",\n \"sdk.model\",\n \"sdk.tool\",\n \"sdk.node\",\n \"sdk.parallel\",\n \"sdk.child\",\n \"sdk.structured\",\n \"sdk.complete_response\",\n \"sdk.prompt.resolve\",\n \"sdk.prompt.refresh\",\n \"sdk.eval\",\n \"sdk.mcp.connect\",\n \"sdk.mcp.discover\",\n \"sdk.mcp.close\",\n \"sdk.checkpoint.read\",\n \"sdk.checkpoint.list\",\n \"sdk.checkpoint.fork\",\n \"sdk.checkpoint.rollback\",\n \"sdk.export\",\n \"studio.setup\",\n \"studio.sample\",\n \"studio.help\",\n \"studio.connection\",\n \"studio.read\",\n \"studio.render\",\n \"studio.navigation\",\n \"studio.inspect\",\n \"studio.filter\",\n \"studio.saved_view\",\n \"studio.live\",\n \"studio.prompt\",\n \"studio.eval\",\n \"studio.review\",\n \"studio.settings\",\n \"studio.update\",\n \"studio.ingest\",\n \"cli.command\",\n \"studio.eval.execution\",\n \"studio.diagnostic\",\n \"studio.table.layout\",\n \"studio.help\",\n \"cli.topology\",\n \"cli.eval\",\n] as const;\n\nexport type Outcome =\n | \"success\"\n | \"failed\"\n | \"cancelled\"\n | \"suspended\"\n | \"denied\"\n | \"limit_reached\"\n | \"quality_failed\"\n | \"ungraded\";\nexport const outcomes: readonly Outcome[] = [\n \"success\",\n \"failed\",\n \"cancelled\",\n \"suspended\",\n \"denied\",\n \"limit_reached\",\n \"quality_failed\",\n \"ungraded\",\n];\nexport type PropertyRule = \"boolean\" | readonly string[];\nexport interface UsageCatalog {\n products: readonly string[];\n operations: readonly string[];\n properties: Readonly<Record<string, PropertyRule>>;\n errorCodes: readonly string[];\n}\n\nexport const publicCatalog: UsageCatalog = {\n products: [\"sdk\", \"oss_studio\", \"cli\"],\n operations,\n properties: {\n help_action: [\n \"open\",\n \"documentation\",\n \"start\",\n \"step\",\n \"complete\",\n \"skip\",\n \"exit\",\n \"error\",\n \"example_request\",\n \"example_accept\",\n \"example_cancel\",\n ],\n help_page: [\n \"runs\",\n \"run\",\n \"sessions\",\n \"session\",\n \"workflows\",\n \"interrupts\",\n \"interrupt\",\n \"prompts\",\n \"prompt\",\n \"prompt-groups\",\n \"prompt-group\",\n \"evals\",\n \"eval-suites\",\n \"eval-suite\",\n \"evaluation\",\n \"eval-run\",\n \"eval-case\",\n \"eval-comparison\",\n \"eval-case-comparison\",\n \"diagnostic\",\n \"settings\",\n \"onboarding\",\n \"other\",\n ],\n help_context: [\"sample\", \"real\"],\n help_step: [\n \"overview\",\n \"controls\",\n \"records\",\n \"tabs\",\n \"content\",\n \"navigation\",\n \"state\",\n ],\n sample_action: [\n \"select\",\n \"view\",\n \"hide\",\n \"show\",\n \"tour_start\",\n \"tour_complete\",\n \"tour_skip\",\n \"tour_error\",\n \"tour_step\",\n \"tour_hub\",\n \"tour_resume\",\n \"tour_exit\",\n \"tour_full_start\",\n \"tour_full_complete\",\n \"tour_full_partial\",\n \"tour_reset\",\n ],\n tour_chapter: [\n \"sample-execution\",\n \"debug-execution\",\n \"conversation\",\n \"approvals\",\n \"prompt-versions\",\n \"evaluation-results\",\n \"error-diagnostics\",\n \"evaluation-progress\",\n \"personalize\",\n ],\n tour_step: [\n \"project-selector\",\n \"sample-run\",\n \"execution-details\",\n \"find-failed-run\",\n \"failure-summary\",\n \"failure-trace\",\n \"failure-model-io\",\n \"session-history\",\n \"session-runs\",\n \"workflow-topology\",\n \"workflow-system\",\n \"approval-decision\",\n \"approval-timeline\",\n \"approval-result\",\n \"prompt-original\",\n \"prompt-updated\",\n \"prompt-diff\",\n \"suite-definition\",\n \"evaluation-summary\",\n \"case-evidence\",\n \"saved-comparison\",\n \"diagnostic-exception\",\n \"diagnostic-capture\",\n \"diagnostic-context\",\n \"evaluation-progress-summary\",\n \"evaluation-grading\",\n \"evaluation-pending-evidence\",\n \"appearance\",\n \"sample-visibility\",\n ],\n tour_failure: [\"load\", \"target\", \"entry\"],\n tour_mode: [\"chapter\", \"full\"],\n tour_version: [\"1\"],\n help_placement: [\"card\", \"button\"],\n measurement_version: [\"2\"],\n measurement_kind: [\n \"invocation\",\n \"stage\",\n \"execution\",\n \"attempt\",\n \"chunk\",\n \"output\",\n \"update\",\n \"poll\",\n \"request\",\n \"call\",\n \"feature\",\n \"observation\",\n ],\n traffic_source: [\"internal\", \"synthetic\", \"external\", \"unknown\"],\n layout_action: [\n \"visibility\",\n \"show_all\",\n \"reset\",\n \"apply\",\n \"reset_width\",\n \"pin\",\n \"unpin\",\n \"resize\",\n \"reorder\",\n ],\n eval_phase: [\n \"params\",\n \"setup\",\n \"execute\",\n \"responder\",\n \"reference\",\n \"grading\",\n \"verification\",\n \"cleanup\",\n \"reporting\",\n ],\n cli_resource: [\"evals.runs\", \"evals.suites\"],\n retryable: \"boolean\",\n retried: \"boolean\",\n recovered: \"boolean\",\n retry_attempt: [\"1\", \"2-5\", \"6-20\", \"21-100\", \"101+\"],\n batch_size: [\"1\", \"2-5\", \"6-20\", \"21-100\", \"101+\"],\n http_status_class: [\"1xx\", \"2xx\", \"3xx\", \"4xx\", \"5xx\"],\n cause_category: [\n \"configuration\",\n \"provider\",\n \"validation\",\n \"domain\",\n \"workflow\",\n \"persistence\",\n \"request\",\n \"transport\",\n \"internal\",\n \"unknown\",\n ],\n cli_command: [\n \"studio.start\",\n \"studio.stop\",\n \"studio.restart\",\n \"studio.status\",\n \"studio.logs\",\n \"studio.credentials\",\n \"studio.reset\",\n \"studio.prompts\",\n \"studio.evals\",\n \"studio.runs\",\n \"studio.sessions\",\n \"studio.interrupts\",\n \"studio.workflows\",\n \"studio.diagnostics\",\n \"studio.inspect\",\n \"studio.doctor\",\n \"studio.catalogs\",\n \"connections\",\n \"evals.run\",\n \"evals.list\",\n \"topology.push\",\n \"help\",\n \"unknown\",\n ],\n cli_action: [\n \"start\",\n \"stop\",\n \"restart\",\n \"status\",\n \"logs\",\n \"credentials\",\n \"reset\",\n \"run\",\n \"list\",\n \"get\",\n \"show\",\n \"inspect\",\n \"analyze\",\n \"download\",\n \"doctor\",\n \"cancel\",\n \"compare\",\n \"create\",\n \"update\",\n \"delete\",\n \"import\",\n \"export\",\n \"pull\",\n \"push\",\n \"add\",\n \"remove\",\n \"use\",\n \"verify\",\n \"versions\",\n \"diff\",\n \"validate\",\n \"action\",\n \"tag\",\n \"untag\",\n \"rollback\",\n \"promote\",\n \"archive\",\n \"restore\",\n \"test\",\n \"copy\",\n \"apply\",\n \"wait\",\n \"catalogs\",\n \"help\",\n \"unknown\",\n ],\n dry_run: \"boolean\",\n json_output: \"boolean\",\n topology_strict: \"boolean\",\n settings_override: \"boolean\",\n case_timeout_override: \"boolean\",\n run_timeout_override: \"boolean\",\n phase: [\n \"admission\",\n \"execution\",\n \"delivery\",\n \"parse\",\n \"network\",\n \"http\",\n \"configuration\",\n \"preflight\",\n \"state\",\n \"pull\",\n \"ports\",\n \"compose\",\n \"rollback\",\n \"backup\",\n \"migration\",\n \"health\",\n ],\n source: [\n \"memory\",\n \"file\",\n \"custom\",\n \"local\",\n \"studio\",\n \"cache\",\n \"fallback\",\n \"eval\",\n \"mcp\",\n \"native\",\n ],\n storage: [\"in-memory\", \"redis\", \"postgres\", \"custom\"],\n calling_mode: [\"direct\", \"model\"],\n provider: [\n \"openai\",\n \"anthropic\",\n \"google\",\n \"mistral\",\n \"groq\",\n \"deepseek\",\n \"openrouter\",\n ],\n transport: [\"stdio\", \"sse\", \"http\", \"custom\"],\n format: [\n \"text\",\n \"json\",\n \"json_schema\",\n \"set\",\n \"append\",\n \"text-delta\",\n \"final\",\n ],\n resource: [\n \"runs\",\n \"sessions\",\n \"interrupts\",\n \"workflows\",\n \"prompts\",\n \"evals\",\n \"diagnostics\",\n \"settings\",\n \"home\",\n ],\n surface: [\n \"runs\",\n \"sessions\",\n \"interrupts\",\n \"workflows\",\n \"prompts\",\n \"evals\",\n \"settings\",\n \"other\",\n ],\n action: [\n \"view\",\n \"select\",\n \"retry\",\n \"first_use\",\n \"observed\",\n \"copy\",\n \"create\",\n \"draft\",\n \"save\",\n \"discard-draft\",\n \"update\",\n \"promote\",\n \"review\",\n \"policy\",\n \"tag-set\",\n \"tag-remove\",\n \"bulk-update\",\n \"category-create\",\n \"category-update\",\n \"category-delete\",\n \"group-create\",\n \"group-update\",\n \"group-delete\",\n \"import\",\n \"export\",\n \"launch\",\n \"cancel\",\n \"compare\",\n \"inspect\",\n \"clear\",\n \"apply\",\n \"delete\",\n \"enable\",\n \"disable\",\n \"manual_refresh\",\n \"fallback_refresh\",\n \"refresh\",\n \"change\",\n ],\n tab: [\n \"overview\",\n \"trace\",\n \"events\",\n \"model-io\",\n \"calls\",\n \"feedback\",\n \"content\",\n \"versions\",\n \"reviews\",\n \"usage\",\n \"diff\",\n \"cases\",\n \"results\",\n \"definition\",\n ],\n origin: [\"foreground\", \"background\", \"server\", \"browser\", \"cli\"],\n status: [\n \"empty\",\n \"nonempty\",\n \"off\",\n \"connecting\",\n \"live\",\n \"reconnecting\",\n \"paused\",\n \"running\",\n \"completed\",\n \"failed\",\n \"interrupted\",\n \"pending\",\n \"expired\",\n ],\n match: [\"all\", \"any\"],\n filter: [\n \"search\",\n \"status\",\n \"provider\",\n \"model\",\n \"environment\",\n \"version\",\n \"duration\",\n \"cost\",\n \"tokens\",\n \"time\",\n \"sort\",\n \"other\",\n ],\n scale: [\"1\", \"2-5\", \"6-20\", \"21-100\", \"101+\"],\n error_category: [\n \"configuration\",\n \"provider\",\n \"validation\",\n \"domain\",\n \"workflow\",\n \"persistence\",\n \"request\",\n \"transport\",\n \"internal\",\n \"unknown\",\n ],\n http_status: [\n \"400\",\n \"401\",\n \"403\",\n \"404\",\n \"408\",\n \"409\",\n \"413\",\n \"422\",\n \"429\",\n \"500\",\n \"502\",\n \"503\",\n \"504\",\n ],\n prompts: \"boolean\",\n data_reducers: \"boolean\",\n observability: \"boolean\",\n tools: \"boolean\",\n streaming: \"boolean\",\n requested_streaming: \"boolean\",\n executed: \"boolean\",\n cache: \"boolean\",\n reused: \"boolean\",\n continue_on_disconnect: \"boolean\",\n write_available: \"boolean\",\n },\n // Built-in contracts only; application codes and provider response text are excluded.\n errorCodes: [\n \"UNCLASSIFIED_FAILURE\",\n \"HTTP_UNAUTHORIZED\",\n \"HTTP_FORBIDDEN\",\n \"HTTP_NOT_FOUND\",\n \"HTTP_TIMEOUT\",\n \"HTTP_CONFLICT\",\n \"HTTP_TOO_LARGE\",\n \"HTTP_RATE_LIMITED\",\n \"HTTP_SERVER_ERROR\",\n \"HTTP_INVALID_REQUEST\",\n \"NETWORK_DNS_FAILED\",\n \"NETWORK_CONNECTION_REFUSED\",\n \"NETWORK_CONNECTION_RESET\",\n \"NETWORK_TIMEOUT\",\n \"NETWORK_TLS_FAILED\",\n \"CLI_ARGUMENT_INVALID\",\n \"CLI_EXIT_FAILED\",\n \"KTX_TOPOLOGY_INCOMPLETE\",\n \"STUDIO_NOT_CONFIGURED\",\n \"STUDIO_RESPONSE_INVALID\",\n \"EVAL_CONCURRENCY_CHANGED\",\n \"EVAL_CONSUMER_FAILED\",\n \"EVAL_CONTRACT_CHANGED\",\n \"EVAL_DISCOVERY_REJECTED\",\n \"EVAL_EXECUTION_CONFLICT\",\n \"EVAL_EXECUTION_STORE_CHANGED\",\n \"EVAL_EXECUTION_UNKNOWN\",\n \"EVAL_EXECUTOR_BUSY\",\n \"EVAL_EXECUTOR_FAILED\",\n \"EVAL_EXECUTOR_REJECTED\",\n \"EVAL_EXECUTOR_UNAUTHORIZED\",\n \"EVAL_GRADING_FAILED\",\n \"EVAL_GRADING_TIMEOUT\",\n \"EVAL_JUDGE_UNAVAILABLE\",\n \"EVAL_LEASE_LOST\",\n \"EVAL_RETRY_DELAY_EXCEEDED\",\n \"EVAL_SETUP_TIMEOUT\",\n \"EVAL_TRANSPORT_UNAVAILABLE\",\n \"EVAL_VERIFICATION_TIMEOUT\",\n \"EVAL_RESULT_INVALID\",\n \"EVAL_RUN_TIMEOUT\",\n \"EVAL_SETTINGS_INVALID\",\n \"EXECUTION_FAILED\",\n \"INVALID_REQUEST\",\n \"INVALID_RESUME\",\n \"INVALID_RESPONSE\",\n \"INVALID_SESSION\",\n \"RESUME_MISMATCH\",\n \"RESUME_FAILED\",\n \"CONTRACT_MISMATCH\",\n \"INVALID_INPUT\",\n \"INVALID_OUTPUT\",\n \"MISSING_CONTRACT\",\n \"UNKNOWN_WORKFLOW\",\n \"DOMAIN_ERROR\",\n \"PERSISTENCE_ERROR\",\n \"WORKFLOW_CONTRACT_ERROR\",\n \"WORKFLOW_REDUCER_FAILED\",\n \"PROVIDER_REFUSAL\",\n \"PROVIDER_HTTP_ERROR\",\n \"PROVIDER_INVALID_RESPONSE\",\n \"PROVIDER_TRANSPORT_ERROR\",\n \"PROVIDER_REQUEST_FAILED\",\n \"INVALID_MODEL_JSON\",\n \"MODEL_OUTPUT_SCHEMA\",\n \"OUTPUT_TRUNCATED\",\n \"SCHEMA_VALIDATION\",\n \"PARALLEL_FAILED\",\n \"EVAL_TIMEOUT\",\n \"EVAL_HOOK_FAILED\",\n \"EVAL_INTERRUPT_CLEANUP_FAILED\",\n \"PROMPT_SOURCE_NOT_CONFIGURED\",\n \"PROMPT_REASON_CONFLICT\",\n \"PROMPT_REASON_INVALID\",\n \"REASON_OUTPUT_BUDGET_EXHAUSTED\",\n \"REASON_OUTPUT_CONTRACT_CORRECTION_EXHAUSTED\",\n \"PROMPT_CACHE_INVALID\",\n \"PROMPT_ENVIRONMENT_MISMATCH\",\n \"PROMPT_EVAL_PIN_CONFLICT\",\n \"PROMPT_EVAL_SNAPSHOT_INVALID\",\n \"PROMPT_NOT_ASSIGNED\",\n \"PROMPT_NOT_FOUND\",\n \"PROMPT_NOT_REGISTERED\",\n \"PROMPT_PIN_MISMATCH\",\n \"PROMPT_REFERENCE_DUPLICATE\",\n \"PROMPT_SNAPSHOT_INVALID\",\n \"PROMPT_SNAPSHOT_LIMIT\",\n \"PROMPT_SOURCE_HTTP\",\n \"PROMPT_SOURCE_INVALID\",\n \"PROMPT_TAG_MISMATCH\",\n \"PROMPT_CONTRACT_MISMATCH\",\n \"PROMPT_REFERENCE_INVALID\",\n \"PROMPT_SCHEMA_INVALID\",\n \"PROMPT_VARIABLE_CONFIG_OVERLAP\",\n \"PROMPT_VARIABLE_MISSING\",\n \"PROMPT_VARIABLE_UNKNOWN\",\n \"PROMPT_DEPENDENCY_CYCLE\",\n \"PROMPT_DEPENDENCY_MISMATCH\",\n \"PROMPT_HASH_MISMATCH\",\n \"PROMPT_REFERENCE_LIMIT\",\n \"PROMPT_REFERENCE_MISSING\",\n \"PROMPT_REFERENCE_ROLE\",\n \"STUDIO_PROTOCOL_MISMATCH\",\n ],\n};\n\nexport function scale(value: number): string {\n return value <= 1\n ? \"1\"\n : value <= 5\n ? \"2-5\"\n : value <= 20\n ? \"6-20\"\n : value <= 100\n ? \"21-100\"\n : \"101+\";\n}\n","import { type Outcome, publicCatalog, type UsageCatalog } from \"./catalog\";\n\n/** Inspect data fields only; never serialize or evaluate application errors. */\nexport function usageErrorProperty(value: unknown, key: string): unknown {\n try {\n if (!value || typeof value !== \"object\") return undefined;\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor && \"value\" in descriptor ? descriptor.value : undefined;\n } catch {\n return undefined;\n }\n}\n\nconst networkCodes: Readonly<Record<string, string>> = {\n ENOTFOUND: \"NETWORK_DNS_FAILED\",\n EAI_AGAIN: \"NETWORK_DNS_FAILED\",\n ECONNREFUSED: \"NETWORK_CONNECTION_REFUSED\",\n ECONNRESET: \"NETWORK_CONNECTION_RESET\",\n EPIPE: \"NETWORK_CONNECTION_RESET\",\n ETIMEDOUT: \"NETWORK_TIMEOUT\",\n UND_ERR_CONNECT_TIMEOUT: \"NETWORK_TIMEOUT\",\n UND_ERR_HEADERS_TIMEOUT: \"NETWORK_TIMEOUT\",\n UND_ERR_BODY_TIMEOUT: \"NETWORK_TIMEOUT\",\n CERT_HAS_EXPIRED: \"NETWORK_TLS_FAILED\",\n DEPTH_ZERO_SELF_SIGNED_CERT: \"NETWORK_TLS_FAILED\",\n UNABLE_TO_VERIFY_LEAF_SIGNATURE: \"NETWORK_TLS_FAILED\",\n};\n\nexport type UsageFailure = {\n outcome: Outcome;\n properties: Record<string, string | boolean>;\n};\n\n/** HTTP facts only: no URL, response body, headers or error text is inspected. */\nexport function classifyUsageHttpStatus(status: number): UsageFailure {\n if (!Number.isInteger(status) || status < 100 || status > 599)\n return {\n outcome: \"failed\",\n properties: {\n error_code: \"UNCLASSIFIED_FAILURE\",\n error_category: \"unknown\",\n },\n };\n if (status < 400)\n return {\n outcome: \"success\",\n properties: { http_status_class: `${Math.floor(status / 100)}xx` },\n };\n const code =\n status === 401\n ? \"HTTP_UNAUTHORIZED\"\n : status === 403\n ? \"HTTP_FORBIDDEN\"\n : status === 404\n ? \"HTTP_NOT_FOUND\"\n : status === 408 || status === 504\n ? \"HTTP_TIMEOUT\"\n : status === 409\n ? \"HTTP_CONFLICT\"\n : status === 413\n ? \"HTTP_TOO_LARGE\"\n : status === 429\n ? \"HTTP_RATE_LIMITED\"\n : status >= 500\n ? \"HTTP_SERVER_ERROR\"\n : \"HTTP_INVALID_REQUEST\";\n return {\n outcome: \"failed\",\n properties: {\n error_code: code,\n error_category: status >= 500 || status === 408 ? \"transport\" : \"request\",\n http_status: String(status),\n http_status_class: `${Math.floor(status / 100)}xx`,\n retryable: status === 408 || status === 429 || status >= 500,\n },\n };\n}\n\nfunction nativeExceptionName(value: unknown): unknown {\n // Call the platform's brand-checked getter, never a value's custom getter.\n try {\n if (typeof DOMException !== \"undefined\")\n return Object.getOwnPropertyDescriptor(\n DOMException.prototype,\n \"name\",\n )?.get?.call(value);\n } catch {\n /* Not a native DOMException. */\n }\n return undefined;\n}\n\nfunction classifyOne(\n error: unknown,\n catalog: UsageCatalog,\n): UsageFailure | undefined {\n const read = (key: string) => usageErrorProperty(error, key);\n let name = read(\"name\") ?? nativeExceptionName(error);\n try {\n if (name === undefined && error instanceof SyntaxError)\n name = \"SyntaxError\";\n } catch {\n /* A hostile proxy is not diagnostic evidence. */\n }\n const code = read(\"code\");\n if (\n name === \"AbortError\" ||\n code === \"EXECUTION_CANCELLED\" ||\n code === \"ABORT_ERR\"\n )\n return { outcome: \"cancelled\", properties: {} };\n if (code === \"EXECUTION_LIMIT_REACHED\" || name === \"ExecutionLimitReached\")\n return { outcome: \"limit_reached\", properties: {} };\n if (\n typeof name === \"string\" &&\n [\n \"GraphInterrupt\",\n \"NodeInterrupt\",\n \"Interrupt\",\n \"ParallelChildWaiting\",\n ].includes(name)\n )\n return { outcome: \"suspended\", properties: {} };\n if (name === \"EvalConfigurationError\")\n return {\n outcome: \"failed\",\n properties: {\n error_code: \"EVAL_SETTINGS_INVALID\",\n error_category: \"configuration\",\n retryable: false,\n },\n };\n if (name === \"TimeoutError\")\n return {\n outcome: \"failed\",\n properties: {\n error_code: \"NETWORK_TIMEOUT\",\n error_category: \"transport\",\n retryable: true,\n },\n };\n if (typeof code === \"string\" && Object.hasOwn(networkCodes, code))\n return {\n outcome: \"failed\",\n properties: {\n error_code: networkCodes[code] ?? \"UNCLASSIFIED_FAILURE\",\n error_category: \"transport\",\n retryable: true,\n },\n };\n if (typeof code === \"string\" && catalog.errorCodes.includes(code)) {\n const failure = usageErrorProperty(error, \"failure\");\n const category =\n read(\"category\") ?? usageErrorProperty(failure, \"category\");\n const retryable =\n read(\"retryable\") ?? usageErrorProperty(failure, \"retryable\");\n const status = read(\"status\") ?? usageErrorProperty(failure, \"status\");\n return {\n outcome: \"failed\",\n properties: {\n ...(typeof status === \"number\"\n ? classifyUsageHttpStatus(status).properties\n : {}),\n // The framework code is more specific than its HTTP projection.\n error_code: code,\n error_category:\n code !== \"EXECUTION_FAILED\" &&\n typeof category === \"string\" &&\n Array.isArray(catalog.properties.error_category) &&\n catalog.properties.error_category.includes(category)\n ? category\n : \"unknown\",\n ...(typeof retryable === \"boolean\" ? { retryable } : {}),\n },\n };\n }\n const status = read(\"status\") ?? read(\"statusCode\");\n if (\n typeof status === \"number\" &&\n Number.isInteger(status) &&\n status >= 400 &&\n status <= 599\n )\n return classifyUsageHttpStatus(status);\n if (name === \"ZodError\" || name === \"SyntaxError\")\n return {\n outcome: \"failed\",\n properties: {\n error_code: \"SCHEMA_VALIDATION\",\n error_category: \"validation\",\n },\n };\n return undefined;\n}\n\n/** Bounded, cycle-safe projection of known codes, including wrapped network causes. */\nexport function classifyUsageError(\n error: unknown,\n catalog = publicCatalog,\n): UsageFailure {\n const seen = new Set<unknown>();\n const pending = [{ value: error, depth: 0 }];\n let result: UsageFailure | undefined;\n while (pending.length && seen.size < 8) {\n const current = pending.shift();\n if (!current || seen.has(current.value)) continue;\n seen.add(current.value);\n const found = classifyOne(current.value, catalog);\n if (found) {\n if (!result) result = found;\n else if (\n found.properties.error_code &&\n found.outcome === \"failed\" &&\n found.properties.error_code !== result.properties.error_code\n ) {\n result.properties.cause_code = found.properties.error_code;\n result.properties.cause_category =\n found.properties.error_category ?? \"unknown\";\n if (\n result.properties.retryable === undefined &&\n typeof found.properties.retryable === \"boolean\"\n )\n result.properties.retryable = found.properties.retryable;\n break;\n }\n if (result === found && found.outcome !== \"failed\") return found;\n }\n if (current.depth < 3)\n for (const key of [\"failure\", \"cause\", \"error\"]) {\n const value = usageErrorProperty(current.value, key);\n if (value && typeof value === \"object\")\n pending.push({ value, depth: current.depth + 1 });\n }\n }\n return (\n result ?? {\n outcome: \"failed\",\n properties: { error_code: \"other\", error_category: \"unknown\" },\n }\n );\n}\n","import type { UsageProperties } from \"./client\";\nimport { usageErrorProperty as property } from \"./failure\";\n\n/** Stable counting boundaries. Edition catalogs can supply a different approved kind. */\nexport function usageMeasurement(\n event: string,\n operation: string,\n input: UsageProperties,\n): string {\n if (event === \"usage.feature\")\n return property(input, \"origin\") === \"background\" ||\n property(input, \"origin\") === \"server\"\n ? \"observation\"\n : \"feature\";\n if (operation === \"cli.command\" || operation === \"sdk.eval\")\n return \"invocation\";\n if (operation === \"studio.setup\") return \"stage\";\n if (operation === \"sdk.execution\" || operation === \"studio.eval.execution\")\n return \"execution\";\n if (operation === \"sdk.export\" || operation === \"sdk.model\") return \"attempt\";\n if (operation === \"sdk.structured\") {\n const format = property(input, \"format\");\n return format === \"text-delta\"\n ? \"chunk\"\n : format === \"final\"\n ? \"output\"\n : \"update\";\n }\n if (property(input, \"origin\") === \"background\") return \"poll\";\n if (operation.startsWith(\"studio.\")) return \"request\";\n return \"call\";\n}\n","import {\n type Outcome,\n outcomes,\n publicCatalog,\n type UsageCatalog,\n} from \"./catalog\";\nimport {\n classifyUsageError,\n classifyUsageHttpStatus,\n usageErrorProperty as property,\n} from \"./failure\";\nimport { usageMeasurement } from \"./measurement\";\n\nexport type UsageProperties = Readonly<Record<string, unknown>>;\nexport interface UsageContext {\n product: string;\n component: string;\n version: string;\n environment?: \"production\" | \"staging\";\n identityScope?: \"installation\" | \"browser\" | \"process\";\n runtimeMode?: \"development\" | \"production\" | \"ci\" | \"unknown\";\n trafficSource?: \"internal\" | \"synthetic\" | \"external\" | \"unknown\";\n}\nexport interface UsageRecord {\n schema_version: 1;\n event_id: string;\n timestamp: string;\n event: \"usage.operation\" | \"usage.feature\";\n product: string;\n component: string;\n version: string;\n analytics_environment: \"production\" | \"staging\";\n runtime_mode: string;\n identity_scope: \"installation\" | \"browser\" | \"process\";\n operation: string;\n outcome: Outcome;\n properties: Record<string, string | boolean>;\n count: number;\n duration_total_ms: number;\n duration_buckets: number[];\n /** Loss since the last successfully delivered snapshot; attached once per batch. */\n delivery_health?: { dropped_observations: number; failed_batches: number };\n}\nexport type UsageTransport = (\n records: readonly UsageRecord[],\n identity: string,\n) => Promise<void>;\nexport interface UsageOptions {\n context: UsageContext;\n catalog?: UsageCatalog;\n enabled?: () => boolean;\n debug?: () => boolean;\n inspect?: (records: readonly UsageRecord[]) => void;\n identity: () =>\n | string\n | { id: string; scope: \"installation\" | \"browser\" | \"process\" }\n | Promise<\n string | { id: string; scope: \"installation\" | \"browser\" | \"process\" }\n >;\n transport: UsageTransport;\n now?: () => number;\n schedule?: (callback: () => void, ms: number) => { cancel(): void };\n flushIntervalMs?: number;\n maxGroups?: number;\n maxRecordsPerHour?: number;\n}\nexport interface UsageOperation {\n end(outcome?: Outcome, properties?: UsageProperties): void;\n fail(error: unknown, properties?: UsageProperties): void;\n}\nexport interface UsageTelemetry {\n start(operation: string, properties?: UsageProperties): UsageOperation;\n feature(operation: string, properties?: UsageProperties): void;\n measure<T>(\n operation: string,\n callback: () => T | Promise<T>,\n properties?: UsageProperties,\n outcome?: (value: T) => Outcome,\n ): Promise<T>;\n flush(): Promise<void>;\n dispose(): void;\n stats(): { pending: number; dropped: number; delivered: number };\n}\n\nexport { classifyUsageError } from \"./failure\";\n\nexport function sanitizeProperties(\n input: UsageProperties,\n catalog = publicCatalog,\n): Record<string, string | boolean> {\n const safe: Record<string, string | boolean> = {};\n for (const [key, rule] of Object.entries(catalog.properties)) {\n const value = property(input, key);\n if (value === undefined) continue;\n if (rule === \"boolean\") {\n if (typeof value === \"boolean\") safe[key] = value;\n } else if (typeof value === \"string\")\n safe[key] = rule.includes(value) ? value : \"other\";\n }\n for (const key of [\"error_code\", \"cause_code\"]) {\n const code = property(input, key);\n if (typeof code === \"string\")\n safe[key] = catalog.errorCodes.includes(code) ? code : \"other\";\n }\n return safe;\n}\n\nconst durationBounds = [10, 100, 1000, 10000, 60000];\nconst noopOperation: UsageOperation = { end() {}, fail() {} };\nfunction schedule(callback: () => void, ms: number) {\n const timer = setTimeout(callback, ms);\n (timer as unknown as { unref?: () => void }).unref?.();\n return { cancel: () => clearTimeout(timer) };\n}\nexport function createUsageTelemetry(options: UsageOptions): UsageTelemetry {\n const catalog = options.catalog ?? publicCatalog;\n const now = options.now ?? Date.now;\n const pending = new Map<string, UsageRecord>();\n let timer: { cancel(): void } | undefined;\n let flight: Promise<void> | undefined;\n let disposed = false;\n let dropped = 0;\n let delivered = 0;\n let lostObservations = 0;\n let failedBatches = 0;\n let reportedLoss = 0;\n let reportedFailures = 0;\n const lose = (count: number) => {\n lostObservations = Math.min(\n Number.MAX_SAFE_INTEGER,\n lostObservations + count,\n );\n };\n let hour = Math.floor(now() / 3_600_000);\n let sent = 0;\n const active = () => {\n try {\n return !disposed && (options.enabled?.() ?? true);\n } catch {\n return false;\n }\n };\n const clear = () => {\n pending.clear();\n try {\n timer?.cancel();\n } catch {}\n timer = undefined;\n };\n const configured =\n catalog.products.includes(options.context.product) &&\n /^[a-z][a-z0-9_]{0,31}$/.test(options.context.component) &&\n /^(?:\\d+\\.\\d+\\.\\d+(?:-[a-z0-9.-]+)?|development|unknown)$/.test(\n options.context.version,\n ) &&\n options.context.version.length <= 64;\n\n const flush = async (): Promise<void> => {\n if (flight) return flight;\n if (!active() || !configured) {\n clear();\n return;\n }\n try {\n timer?.cancel();\n } catch {}\n timer = undefined;\n const records = [...pending.values()];\n pending.clear();\n if (!records.length) return;\n let attempted = records.length;\n let attemptedObservations = records.reduce(\n (total, record) => total + record.count,\n 0,\n );\n flight = (async () => {\n try {\n if (options.debug?.()) {\n options.inspect?.(records);\n return;\n }\n const currentHour = Math.floor(now() / 3_600_000);\n if (hour !== currentHour) {\n hour = currentHour;\n sent = 0;\n }\n const allowance = Math.max(\n 0,\n (options.maxRecordsPerHour ?? 120) - sent,\n );\n const batch = records.slice(0, allowance);\n dropped += records.length - batch.length;\n lose(\n records\n .slice(allowance)\n .reduce((total, record) => total + record.count, 0),\n );\n attempted = batch.length;\n attemptedObservations = batch.reduce(\n (total, record) => total + record.count,\n 0,\n );\n if (!batch.length || !active()) return;\n const identified = await options.identity();\n const identity =\n typeof identified === \"string\" ? identified : identified.id;\n if (typeof identified !== \"string\")\n for (const record of batch) record.identity_scope = identified.scope;\n if (!active() || options.debug?.()) return;\n if (\n !/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.test(\n identity,\n )\n ) {\n dropped += batch.length;\n lose(attemptedObservations);\n return;\n }\n sent += batch.length;\n const lossSnapshot = lostObservations;\n const failureSnapshot = failedBatches;\n if (\n batch[0] &&\n (lossSnapshot > reportedLoss || failureSnapshot > reportedFailures)\n )\n batch[0].delivery_health = {\n dropped_observations: lossSnapshot - reportedLoss,\n failed_batches: failureSnapshot - reportedFailures,\n };\n await options.transport(batch, identity);\n reportedLoss = lossSnapshot;\n reportedFailures = failureSnapshot;\n delivered += batch.length;\n } catch {\n dropped += attempted;\n lose(attemptedObservations);\n failedBatches = Math.min(Number.MAX_SAFE_INTEGER, failedBatches + 1);\n }\n })().finally(() => {\n flight = undefined;\n try {\n if (pending.size && active() && !timer)\n timer = (options.schedule ?? schedule)(\n () => void flush(),\n options.flushIntervalMs ?? 60_000,\n );\n } catch {\n clear();\n }\n });\n return flight;\n };\n\n const record = (\n event: UsageRecord[\"event\"],\n operation: string,\n outcome: Outcome,\n duration: number,\n input: UsageProperties,\n ) => {\n try {\n if (!active()) {\n clear();\n return;\n }\n if (\n !configured ||\n !catalog.operations.includes(operation) ||\n !outcomes.includes(outcome)\n )\n return;\n const failed = outcome === \"failed\";\n const status = property(input, \"http_status\");\n const http =\n typeof status === \"string\" && /^\\d{3}$/.test(status)\n ? classifyUsageHttpStatus(Number(status)).properties\n : {};\n const properties = sanitizeProperties(\n {\n measurement_version: \"2\",\n measurement_kind: usageMeasurement(event, operation, input),\n ...(failed\n ? {\n error_code: \"UNCLASSIFIED_FAILURE\",\n error_category: \"unknown\",\n ...http,\n }\n : {}),\n ...sanitizeProperties(input, catalog),\n traffic_source: options.context.trafficSource ?? \"unknown\",\n },\n catalog,\n );\n const key = JSON.stringify([event, operation, outcome, properties]);\n let existing = pending.get(key);\n if (!existing) {\n if (pending.size >= (options.maxGroups ?? 64)) {\n dropped++;\n lose(1);\n return;\n }\n existing = {\n schema_version: 1,\n event_id: crypto.randomUUID(),\n timestamp: new Date(now()).toISOString(),\n event,\n product: options.context.product,\n component: options.context.component,\n version: options.context.version,\n analytics_environment: options.context.environment ?? \"production\",\n runtime_mode: [\"development\", \"production\", \"ci\"].includes(\n options.context.runtimeMode ?? \"\",\n )\n ? (options.context.runtimeMode ?? \"unknown\")\n : \"unknown\",\n identity_scope: options.context.identityScope ?? \"installation\",\n operation,\n outcome,\n properties,\n count: 0,\n duration_total_ms: 0,\n duration_buckets: [0, 0, 0, 0, 0, 0],\n };\n pending.set(key, existing);\n }\n const elapsed = Math.max(\n 0,\n Math.min(86_400_000, Number.isFinite(duration) ? duration : 0),\n );\n existing.count = Math.min(Number.MAX_SAFE_INTEGER, existing.count + 1);\n existing.duration_total_ms = Math.min(\n Number.MAX_SAFE_INTEGER,\n existing.duration_total_ms + elapsed,\n );\n const index = durationBounds.findIndex((bound) => elapsed <= bound);\n const bucket = index === -1 ? durationBounds.length : index;\n existing.duration_buckets[bucket] =\n (existing.duration_buckets[bucket] ?? 0) + 1;\n if (!timer)\n timer = (options.schedule ?? schedule)(\n () => void flush(),\n options.flushIntervalMs ?? 60_000,\n );\n } catch {\n /* Usage collection cannot participate in product execution. */\n }\n };\n const start = (\n operation: string,\n properties: UsageProperties = {},\n ): UsageOperation => {\n if (!active()) {\n clear();\n return noopOperation;\n }\n try {\n const initial = sanitizeProperties(properties, catalog);\n const began = now();\n let ended = false;\n return {\n end(outcome = \"success\", extra = {}) {\n if (ended) return;\n ended = true;\n try {\n // Classify before enum bucketing so uncommon statuses keep their class.\n const status = property(extra, \"http_status\");\n const http =\n outcome === \"failed\" &&\n typeof status === \"string\" &&\n /^\\d{3}$/.test(status)\n ? classifyUsageHttpStatus(Number(status)).properties\n : {};\n record(\"usage.operation\", operation, outcome, now() - began, {\n ...initial,\n ...http,\n ...sanitizeProperties(extra, catalog),\n });\n } catch {}\n },\n fail(error, extra = {}) {\n if (ended) return;\n try {\n const failure = classifyUsageError(error, catalog);\n this.end(failure.outcome, {\n ...sanitizeProperties(extra, catalog),\n ...failure.properties,\n });\n } catch {}\n },\n };\n } catch {\n return noopOperation;\n }\n };\n return {\n start,\n feature(operation, properties = {}) {\n record(\"usage.feature\", operation, \"success\", 0, properties);\n },\n async measure(operation, callback, properties = {}, outcome) {\n const operationScope = start(operation, properties);\n try {\n const result = await callback();\n let status: Outcome = \"success\";\n try {\n status = outcome?.(result) ?? status;\n } catch {}\n operationScope.end(status);\n return result;\n } catch (error) {\n operationScope.fail(error);\n throw error;\n }\n },\n flush,\n dispose() {\n disposed = true;\n clear();\n },\n stats: () => ({ pending: pending.size, dropped, delivered }),\n };\n}\n"],"mappings":"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A;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,MAAM,OAAuB;AAC3C,SAAO,SAAS,IACZ,MACA,SAAS,IACP,QACA,SAAS,KACP,SACA,SAAS,MACP,WACA;AACZ;;;ACroBO,SAAS,mBAAmB,OAAgB,KAAsB;AACvE,MAAI;AACF,QAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AA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","names":["status","record"]}
|
|
@@ -17,6 +17,7 @@ interface UsageContext {
|
|
|
17
17
|
environment?: "production" | "staging";
|
|
18
18
|
identityScope?: "installation" | "browser" | "process";
|
|
19
19
|
runtimeMode?: "development" | "production" | "ci" | "unknown";
|
|
20
|
+
trafficSource?: "internal" | "synthetic" | "external" | "unknown";
|
|
20
21
|
}
|
|
21
22
|
interface UsageRecord {
|
|
22
23
|
schema_version: 1;
|
|
@@ -35,6 +36,11 @@ interface UsageRecord {
|
|
|
35
36
|
count: number;
|
|
36
37
|
duration_total_ms: number;
|
|
37
38
|
duration_buckets: number[];
|
|
39
|
+
/** Loss since the last successfully delivered snapshot; attached once per batch. */
|
|
40
|
+
delivery_health?: {
|
|
41
|
+
dropped_observations: number;
|
|
42
|
+
failed_batches: number;
|
|
43
|
+
};
|
|
38
44
|
}
|
|
39
45
|
type UsageTransport = (records: readonly UsageRecord[], identity: string) => Promise<void>;
|
|
40
46
|
interface UsageOptions {
|
|
@@ -75,11 +81,8 @@ interface UsageTelemetry {
|
|
|
75
81
|
delivered: number;
|
|
76
82
|
};
|
|
77
83
|
}
|
|
78
|
-
|
|
79
|
-
outcome: Outcome;
|
|
80
|
-
properties: UsageProperties;
|
|
81
|
-
};
|
|
84
|
+
|
|
82
85
|
declare function sanitizeProperties(input: UsageProperties, catalog?: UsageCatalog): Record<string, string | boolean>;
|
|
83
86
|
declare function createUsageTelemetry(options: UsageOptions): UsageTelemetry;
|
|
84
87
|
|
|
85
|
-
export { type Outcome as O, type UsageTelemetry as U, type UsageOptions as a, type
|
|
88
|
+
export { type Outcome as O, type UsageTelemetry as U, type UsageOptions as a, type UsageCatalog as b, createUsageTelemetry as c, type UsageTransport as d, type UsageContext as e, type UsageOperation as f, type UsageRecord as g, sanitizeProperties as h, publicCatalog as p, scale as s };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
import { b as UsageTransport } from './client-
|
|
2
|
-
export {
|
|
1
|
+
import { O as Outcome, b as UsageCatalog, d as UsageTransport } from './client-BPjAx5oh.js';
|
|
2
|
+
export { e as UsageContext, f as UsageOperation, a as UsageOptions, g as UsageRecord, U as UsageTelemetry, c as createUsageTelemetry, p as publicCatalog, h as sanitizeProperties, s as scale } from './client-BPjAx5oh.js';
|
|
3
|
+
|
|
4
|
+
type UsageFailure = {
|
|
5
|
+
outcome: Outcome;
|
|
6
|
+
properties: Record<string, string | boolean>;
|
|
7
|
+
};
|
|
8
|
+
/** HTTP facts only: no URL, response body, headers or error text is inspected. */
|
|
9
|
+
declare function classifyUsageHttpStatus(status: number): UsageFailure;
|
|
10
|
+
/** Bounded, cycle-safe projection of known codes, including wrapped network causes. */
|
|
11
|
+
declare function classifyUsageError(error: unknown, catalog?: UsageCatalog): UsageFailure;
|
|
3
12
|
|
|
4
13
|
/** Capture keys are public. This transport never accepts a personal API token. */
|
|
5
14
|
declare function createPostHogTransport(options: {
|
|
@@ -13,4 +22,4 @@ declare function createCollectorTransport(options: {
|
|
|
13
22
|
fetch?: typeof fetch;
|
|
14
23
|
}): UsageTransport;
|
|
15
24
|
|
|
16
|
-
export { UsageTransport, createCollectorTransport, createPostHogTransport };
|
|
25
|
+
export { Outcome, UsageCatalog, type UsageFailure, UsageTransport, classifyUsageError, classifyUsageHttpStatus, createCollectorTransport, createPostHogTransport };
|