@kortyx/usage-telemetry 0.4.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 CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.0](https://github.com/kortyx-io/kortyx/compare/usage-telemetry-v0.4.0...usage-telemetry-v0.5.0) (2026-10-18)
4
+
5
+
6
+ ### Features
7
+
8
+ * **cli:** validate topology and update compatible dependencies ([6c16ef3](https://github.com/kortyx-io/kortyx/commit/6c16ef3d1c9e8329d31f1a28e87aa26ae6dbe651))
9
+ * **studio:** add contextual help and organize product documentation ([#366](https://github.com/kortyx-io/kortyx/issues/366)) ([aa4a624](https://github.com/kortyx-io/kortyx/commit/aa4a6242f6294e0f96968a8021440cdc55467121))
10
+ * **studio:** add sample project and guided onboarding ([#363](https://github.com/kortyx-io/kortyx/issues/363)) ([25da0b9](https://github.com/kortyx-io/kortyx/commit/25da0b9c92072446a7503b23ba4f157aebec8185))
11
+
3
12
  ## [0.4.0](https://github.com/kortyx-io/kortyx/compare/usage-telemetry-v0.3.0...usage-telemetry-v0.4.0) (2026-10-16)
4
13
 
5
14
 
package/README.md CHANGED
@@ -25,6 +25,21 @@ Node delivery lazily stores a random installation UUID in `~/.config/kortyx/usag
25
25
 
26
26
  The shared catalog allows fixed operation names, outcome enums, Kortyx release versions, provider families, storage/transport kinds, coarse HTTP status, known error codes and booleans. Arbitrary property keys are dropped; unrecognized enum values and error codes become `other`. The error projection reads only own data properties and does not invoke application getters.
27
27
 
28
+ Sample chapters use the bounded `studio.sample` chapter/step catalog, including
29
+ optional `error-diagnostics` and `evaluation-progress`. Optional starts/completions
30
+ have their own chapter denominator and do not increase the six-chapter full-tour
31
+ denominator. Completion is a displayed-guide outcome, not proof of learning.
32
+
33
+ Studio page explanations use `studio.help` with finite `help_page`, `help_step`,
34
+ `help_context` (real/sample), and `help_action` values. Starts count explanation
35
+ attempts; step events count displayed steps, including Back. Completion, skip,
36
+ exit, error, and example request/accept/cancel distinguish local help from a
37
+ confirmed sample transfer. Compare completions against starts within the same
38
+ page/context cohort, accounting for best-effort delivery and abandoned tabs.
39
+ Record identifiers, URLs, selectors, setting values, and page content are excluded.
40
+ Page-help facts are allowed in sample views while ordinary execution metrics remain
41
+ suppressed; they do not measure SDK activation or customer execution outcomes.
42
+
28
43
  Prompts, inputs/outputs, messages, schemas, workflow/node/tool names, URLs, paths, custom application error codes, customer IDs, credentials, raw errors and stacks are excluded. Capture requests omit browser cookies and referrers, disable PostHog person profiles and geolocation enrichment, and send `$ip: null`. Network infrastructure still receives a request's source IP; the payload is not proof of legal anonymity. There is no autocapture, session replay or global exception handler.
29
44
 
30
45
  Records aggregate matching operations, outcomes and approved dimensions over a 60-second flush window. A scope finishes once. Successes and failures use the same counting policy. `usage.operation` records reliability and duration; `usage.feature` records deliberate adoption or explicit feature configuration. Background reads/refreshes have separate origins and must not be used as click counts.
@@ -171,3 +186,28 @@ continues to serve original errors independently.
171
186
  Keep direct EU capture for this slice. A later collector can accept the existing versioned record envelope, validate the catalog again, cap body/group/count sizes, rate-limit installations and total daily ingestion, deduplicate `event_id`, strip network metadata, and route approved releases to the intended PostHog project. Keep retention and operational logs bounded and avoid logging request bodies. Forward asynchronously with its own retry/deduplication policy.
172
187
 
173
188
  This moves abuse controls and global budgets to an owned boundary: a public PostHog capture key can be copied and spoofed, so client caps alone cannot protect ingestion or establish authenticity. Replace the transport or set `KORTYX_USAGE_TELEMETRY_ENDPOINT`; product instrumentation does not change. Endpoint deployment, global limits and project routing belong to that follow-up. Existing released SDK versions continue direct capture until upgraded, so migration must account for them.
189
+
190
+ ### Studio contextual help
191
+
192
+ `studio.help` counts feature interactions using `help_action: open | documentation`
193
+ and `help_placement: card | button`. Count closed-to-open card transitions once;
194
+ count documentation navigation intent separately. Compare summed card-footer
195
+ navigation counts with summed card-open counts to assess help use. Standalone
196
+ button clicks are a separate population, and these aggregates do not establish
197
+ unique users, successful page loads, or completed reading. Existing opt-out,
198
+ budgets, aggregation and best-effort delivery apply. No help labels, descriptions,
199
+ URLs, customer identifiers or execution content are collected. This measures
200
+ maintainer product usage separately from customer execution observability.
201
+
202
+ ## Topology publication measurement
203
+
204
+ `cli.command` counts each `topology.push` invocation once, including dry runs.
205
+ The allowlisted `topology_strict` boolean records whether optional strict discovery
206
+ was selected. A blocked publication reports `KTX_TOPOLOGY_INCOMPLETE`, validation
207
+ category and `retryable: false`; the CLI's existing terminal outcome and opt-out,
208
+ bounded delivery and exporter-failure behavior apply. Compare `sum(count)` for
209
+ strict invocations with all topology-push invocations to measure adoption, and
210
+ blocked strict invocations with all strict invocations to measure rejection rate.
211
+ Do not interpret a successful invocation as complete discovery when strict mode
212
+ is off or intentional dynamic calls are exempt. Paths, expressions, import traces,
213
+ credentials and diagnostic messages are never usage properties.
@@ -60,6 +60,8 @@ var operations = [
60
60
  "sdk.checkpoint.rollback",
61
61
  "sdk.export",
62
62
  "studio.setup",
63
+ "studio.sample",
64
+ "studio.help",
63
65
  "studio.connection",
64
66
  "studio.read",
65
67
  "studio.render",
@@ -78,6 +80,7 @@ var operations = [
78
80
  "studio.eval.execution",
79
81
  "studio.diagnostic",
80
82
  "studio.table.layout",
83
+ "studio.help",
81
84
  "cli.topology",
82
85
  "cli.eval"
83
86
  ];
@@ -95,6 +98,118 @@ var publicCatalog = {
95
98
  products: ["sdk", "oss_studio", "cli"],
96
99
  operations,
97
100
  properties: {
101
+ help_action: [
102
+ "open",
103
+ "documentation",
104
+ "start",
105
+ "step",
106
+ "complete",
107
+ "skip",
108
+ "exit",
109
+ "error",
110
+ "example_request",
111
+ "example_accept",
112
+ "example_cancel"
113
+ ],
114
+ help_page: [
115
+ "runs",
116
+ "run",
117
+ "sessions",
118
+ "session",
119
+ "workflows",
120
+ "interrupts",
121
+ "interrupt",
122
+ "prompts",
123
+ "prompt",
124
+ "prompt-groups",
125
+ "prompt-group",
126
+ "evals",
127
+ "eval-suites",
128
+ "eval-suite",
129
+ "evaluation",
130
+ "eval-run",
131
+ "eval-case",
132
+ "eval-comparison",
133
+ "eval-case-comparison",
134
+ "diagnostic",
135
+ "settings",
136
+ "onboarding",
137
+ "other"
138
+ ],
139
+ help_context: ["sample", "real"],
140
+ help_step: [
141
+ "overview",
142
+ "controls",
143
+ "records",
144
+ "tabs",
145
+ "content",
146
+ "navigation",
147
+ "state"
148
+ ],
149
+ sample_action: [
150
+ "select",
151
+ "view",
152
+ "hide",
153
+ "show",
154
+ "tour_start",
155
+ "tour_complete",
156
+ "tour_skip",
157
+ "tour_error",
158
+ "tour_step",
159
+ "tour_hub",
160
+ "tour_resume",
161
+ "tour_exit",
162
+ "tour_full_start",
163
+ "tour_full_complete",
164
+ "tour_full_partial",
165
+ "tour_reset"
166
+ ],
167
+ tour_chapter: [
168
+ "sample-execution",
169
+ "debug-execution",
170
+ "conversation",
171
+ "approvals",
172
+ "prompt-versions",
173
+ "evaluation-results",
174
+ "error-diagnostics",
175
+ "evaluation-progress",
176
+ "personalize"
177
+ ],
178
+ tour_step: [
179
+ "project-selector",
180
+ "sample-run",
181
+ "execution-details",
182
+ "find-failed-run",
183
+ "failure-summary",
184
+ "failure-trace",
185
+ "failure-model-io",
186
+ "session-history",
187
+ "session-runs",
188
+ "workflow-topology",
189
+ "workflow-system",
190
+ "approval-decision",
191
+ "approval-timeline",
192
+ "approval-result",
193
+ "prompt-original",
194
+ "prompt-updated",
195
+ "prompt-diff",
196
+ "suite-definition",
197
+ "evaluation-summary",
198
+ "case-evidence",
199
+ "saved-comparison",
200
+ "diagnostic-exception",
201
+ "diagnostic-capture",
202
+ "diagnostic-context",
203
+ "evaluation-progress-summary",
204
+ "evaluation-grading",
205
+ "evaluation-pending-evidence",
206
+ "appearance",
207
+ "sample-visibility"
208
+ ],
209
+ tour_failure: ["load", "target", "entry"],
210
+ tour_mode: ["chapter", "full"],
211
+ tour_version: ["1"],
212
+ help_placement: ["card", "button"],
98
213
  measurement_version: ["2"],
99
214
  measurement_kind: [
100
215
  "invocation",
@@ -226,6 +341,7 @@ var publicCatalog = {
226
341
  ],
227
342
  dry_run: "boolean",
228
343
  json_output: "boolean",
344
+ topology_strict: "boolean",
229
345
  settings_override: "boolean",
230
346
  case_timeout_override: "boolean",
231
347
  run_timeout_override: "boolean",
@@ -447,6 +563,7 @@ var publicCatalog = {
447
563
  "NETWORK_TLS_FAILED",
448
564
  "CLI_ARGUMENT_INVALID",
449
565
  "CLI_EXIT_FAILED",
566
+ "KTX_TOPOLOGY_INCOMPLETE",
450
567
  "STUDIO_NOT_CONFIGURED",
451
568
  "STUDIO_RESPONSE_INVALID",
452
569
  "EVAL_CONCURRENCY_CHANGED",
@@ -1 +1 @@
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.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 \"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 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 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 \"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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","names":["status","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"]}