@sazabi/cli 0.15.3-dev.g6f02490 → 0.15.3-dev.ge4631f1
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/dist/index.js +21 -21
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6546,7 +6546,7 @@ When events are arriving, report back:
|
|
|
6546
6546
|
- That events are landing, with payload fields preserved under \`webhook.*\`.
|
|
6547
6547
|
|
|
6548
6548
|
Do not print \`PUBLIC_KEY\` (or the full keyed URL) in the summary.
|
|
6549
|
-
`;var l_=()=>{};var d_,g_;var y_=d(()=>{SD();ID();OD();TD();DD();zD();jD();RD();UD();ED();GD();JD();HD();FD();XD();QD();eC();nC();iC();aC();sC();lC();dC();yC();mC();wC();vC();SC();IC();OC();TC();DC();zC();jC();RC();UC();EC();GC();JC();HC();FC();XC();QC();ez();nz();iz();az();sz();lz();dz();yz();mz();wz();vz();Sz();Iz();Oz();Tz();Dz();zz();jz();Rz();Uz();Ez();Gz();Jz();Hz();Fz();Xz();Qz();e_();n_();i_();a_();s_();l_();d_={cloudflare:PD.trim(),cloudflare_workers:AD.trim(),cloudwatch:CD.trim(),convex:ND.trim(),datadog:MD.trim(),daytona:qD.trim(),digital_ocean:WD.trim(),e2b:YD.trim(),elastic_cloud:tC.trim(),fluent_bit:rC.trim(),fly_io:hC.trim(),gcp:gC.trim(),grafana_alloy:pC.trim(),inngest:kC.trim(),langchain:$C.trim(),mastra:LC.trim(),neon:_C.trim(),netlify:xC.trim(),openrouter:KC.trim(),otel:BC.trim(),otel_collector:ZC.trim(),otel_metrics:VC.trim(),plain:oz.trim(),posthog:uz.trim(),posthog_sdk:bz.trim(),porter:cz.trim(),prometheus:fz.trim(),railway:Pz.trim(),render:Az.trim(),respan:Cz.trim(),sentry:Nz.trim(),sentry_platform:Mz.trim(),supabase:qz.trim(),temporal:Wz.trim(),trigger_dev:Yz.trim(),vector:t_.trim(),vercel:r_.trim(),webhook_events:h_.trim()},g_={cloudflare:$D.trim(),cloudflare_workers:LD.trim(),cloudwatch:_D.trim(),convex:xD.trim(),datadog:KD.trim(),daytona:BD.trim(),digital_ocean:ZD.trim(),e2b:VD.trim(),elastic_cloud:oC.trim(),fluent_bit:cC.trim(),fly_io:uC.trim(),gcp:bC.trim(),grafana_alloy:fC.trim(),inngest:PC.trim(),langchain:AC.trim(),mastra:CC.trim(),neon:NC.trim(),netlify:MC.trim(),openrouter:qC.trim(),otel:WC.trim(),otel_collector:YC.trim(),otel_metrics:tz.trim(),plain:rz.trim(),posthog:gz.trim(),posthog_sdk:pz.trim(),porter:hz.trim(),prometheus:kz.trim(),railway:$z.trim(),render:Lz.trim(),respan:_z.trim(),sentry:xz.trim(),sentry_platform:Kz.trim(),supabase:Bz.trim(),temporal:Zz.trim(),trigger_dev:Vz.trim(),vector:o_.trim(),vercel:c_.trim(),webhook_events:u_.trim()}});var gv=(e)=>{let t=g_[e];if(t)return t;return d_[e]};var b_=d(()=>{y_()});var H="available";var Ue,cl=(e,t="http/protobuf")=>[{instruction:`Add the OpenTelemetry SDK to your ${e}.`,notes:[{text:"Most languages have official OpenTelemetry SDKs available (e.g., `@opentelemetry/api` for Node.js, `opentelemetry-api` for Python, etc.)."}]},{instruction:`Initialize OpenTelemetry in your ${e}.`},{instruction:`Set the following environment variables in your ${e} environment — \`OTEL_EXPORTER_OTLP_ENDPOINT\` is your intake URL (above).`,payloads:[{kind:"copyable",label:"`OTEL_EXPORTER_OTLP_PROTOCOL`",value:t,copyLabel:"OTLP protocol"}],notes:[t8]}],t8;var St=d(()=>{Ue={label:"Connect",pendingLabel:"Connecting..."},t8={text:"Most OpenTelemetry SDKs automatically detect these environment variables. If your SDK is already configured in code, use the same endpoint and protocol values there instead."}});var yv,bv,mv;var m_=d(()=>{St();yv={kind:"multi-step",steps:[{id:"prepare",title:"Create token",notes:[{variant:"requirement",text:"**Cloudflare Logpush is only available on the Enterprise plan.** Free, Pro, and Business accounts cannot create Logpush jobs."}],actions:[{kind:"instruction",instruction:"Create a Cloudflare API token with **Account Settings: Read**, **Zone: Read**, and **Zone Logs: Edit** permissions.",payloads:[{kind:"external-link",label:"Open Cloudflare API token template",href:"https://dash.cloudflare.com/profile/api-tokens?permissionGroupKeys=%5B%7B%22key%22%3A%22account_settings%22%2C%22type%22%3A%22read%22%2C%22scope%22%3A%22account%22%7D%2C%7B%22key%22%3A%22logs%22%2C%22type%22%3A%22edit%22%2C%22scope%22%3A%22zone%22%7D%2C%7B%22key%22%3A%22zone%22%2C%22type%22%3A%22read%22%2C%22scope%22%3A%22zone%22%7D%5D&name=Sazabi+Cloudflare+Logpush"}]},{kind:"instruction",instruction:"Pick the account you want to connect, click **Continue to summary**, then **Create Token**, and copy the token for the next step."}]},{id:"credentials",title:"Enter credentials",actions:[{id:"token",kind:"secret",label:"Cloudflare API token",instruction:"Enter your Cloudflare API token below.",description:"Token with Account Settings Read, Zone Read, and Logs Edit permissions.",placeholder:"Enter your Cloudflare API token"},{id:"accountId",kind:"text",label:"Cloudflare account ID",instruction:"Enter your Cloudflare account ID below.",description:"The 32-character hex ID from your Cloudflare dashboard URL or account overview.",placeholder:"e.g. a1b2c3d4e5f6...",pattern:"^[a-f0-9]{32}$",patternMessage:"Enter the 32-character Cloudflare account ID."}]}],submit:{actions:[{kind:"validate",action:"validate",input:{token:"$token",accountId:"$accountId"},resultAs:"validate"}],metadata:{cloudflareApiToken:"$token",accountId:"$accountId",accountName:"$validate.accountName"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/cloudflare"},bv={content:{kind:"list",listAction:"listLogpushDatasets",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"datasetName",header:"Dataset",cell:"badge"},{field:"scopeDetail",header:"Scope"}],searchPlaceholder:"Search datasets and zones...",searchFields:["datasetName","scopeDetail"],dedupeByConfigField:["scope","zoneId","dataset"],dedupeMissingFieldAsEmpty:!0,emptyState:{noMatches:"No Logpush datasets match your search.",allConfigured:"All Logpush datasets already have streams configured."},toStreamItem:{displayName:"$item.displayName",config:{scope:"$item.scope",accountId:"$item.accountId",zoneId:"$item.zoneId",zoneName:"$item.zoneName",dataset:"$item.dataset",datasetName:"$item.datasetName"}}}},mv={groups:[{id:"open-logpush",section:"config",title:"Open Logpush",notes:[{variant:"requirement",text:"**Cloudflare Logpush is only available on the Enterprise plan.** Free, Pro, and Business accounts cannot create Logpush jobs."}],actions:[{instruction:"Create a Logpush job in your [Cloudflare dashboard](https://dash.cloudflare.com) under **Analytics & Logs > Logpush**, or via the Cloudflare API."},{instruction:"Select **HTTP** as the destination type."}]},{id:"destination",section:"config",title:"Set the destination",actions:[{instruction:"Paste your Sazabi intake URL (above) into the Logpush HTTP destination field."}]},{id:"output-options",section:"config",title:"Set output options",actions:[{instruction:"In the Logpush job's **Output options**, set **Timestamp format** to **RFC3339** so Sazabi can parse event times accurately."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/cloudflare"}});var n8,o8,p_;var w_=d(()=>{m_();n8=["cloudflareApiToken"],o8={id:"cloudflare-logpush",label:"Cloudflare Logpush",subdomain:"cloudflare-logpush",transform:"cloudflare-logpush"},p_={id:"cloudflare",name:"Cloudflare Logpush",searchAliases:["cloudflare","cf","logpush"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:n8,intake:[o8],subtitle:"Stream your Cloudflare Logpush jobs to Sazabi for edge network observability.",features:["Zone Logpush","Account Logpush","Edge analytics"],evidenceHints:["Cloudflare zones, account Logpush config, or Terraform cloudflare provider","CLOUDFLARE_* environment variables or scripts that call the Cloudflare API","README/docs naming Cloudflare for edge, DNS, CDN, firewall, or Workers traffic"],setupSkill:H,dashboard:{iconKey:"cloudflare",intakeSourceId:"cloudflare-logpush",streamSelectorLayout:"sidepanel",actions:{submit:{validate:{procedure:"cloudflare.validateToken"}},list:{listLogpushDatasets:{procedure:"cloudflare.listLogpushDatasets",itemsField:"items"}}}}}});var pv;var f_=d(()=>{pv={perStreamInstructions:!0,docsUrl:"https://docs.sazabi.com/data/sources/endpoint/cloudflare-workers",groups:[{id:"open-telemetry",section:"config",title:"Open telemetry destinations",actions:[{instruction:"In your Cloudflare dashboard, go to **Workers & Pages > Observability > Telemetry** and click **Add Destination**."},{instruction:"Add one destination for logs and a second for traces."}]},{id:"logs",section:"config",title:"Configure logs destination",actions:[{instruction:"Paste these values into Cloudflare's **Add New Destination** dialog for logs — the endpoint is your **OTLP logs endpoint** (above).",payloads:[{kind:"copyable",label:"Destination type",value:"Logs"},{kind:"copyable",label:"Destination name",value:"sazabi-logs"}]}]},{id:"traces",section:"config",title:"Configure traces destination",actions:[{instruction:"Paste these values into Cloudflare's **Add New Destination** dialog for traces — the endpoint is your **OTLP traces endpoint** (above).",payloads:[{kind:"copyable",label:"Destination type",value:"Traces"},{kind:"copyable",label:"Destination name",value:"sazabi-traces"}]}]},{id:"enable-worker",section:"config",title:"Enable destinations",actions:[{instruction:"In each Worker's `wrangler.jsonc` / `wrangler.toml`, enable observability and list the log and trace destination names you created."},{instruction:"Redeploy the Worker after updating Wrangler config.",notes:[{text:"The destination is enabled only after the deployed Worker references it by name."}]}]}]}});var v_;var k_=d(()=>{f_();v_={id:"cloudflare_workers",name:"Cloudflare Workers",searchAliases:["cloudflare","cf","workers"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"cloudflare-workers",label:"Cloudflare Workers Observability",subdomain:"cloudflare",aliases:["cloudflare"],transform:"otlp-strict-signal",transformOptions:{missingAuthMessage:"Missing Cloudflare Workers Observability auth: provide Authorization: Bearer <publicKey>"}}],lifecycleEligible:!0,subtitle:"Stream Cloudflare Workers Observability logs and traces to Sazabi via OTLP.",features:["Workers Observability OTLP logs","Workers Observability OTLP traces"],evidenceHints:["wrangler.toml/json config with observability or Workers deployments","@cloudflare/workers-types, hono on Workers, or Worker entrypoints such as src/worker.ts","README/docs naming Cloudflare Workers, Pages Functions, or Durable Objects"],setupSkill:H,dashboard:{iconKey:"cloudflare",intakeSourceId:"cloudflare",streamSelectorLayout:"sidepanel"},streamCardinality:"multi"}});var wv,fv,vv,kv,Sv,Pv;var S_=d(()=>{St();wv={action:"prefetch",input:{projectId:"${context.projectId}",templateUrl:"${context.cloudformationTemplateUrl}"},resultAs:"cloudwatch"},fv={id:"role-arn",title:"Enter role ARN",actions:[{id:"arn",kind:"text",label:"Role ARN",instruction:"Enter the IAM role ARN below.",placeholder:"arn:aws:iam::123456789012:role/SazabiLogIngestion-Sazabi-...",pattern:"^arn:aws:iam::(\\d{12}):role\\/[\\w+=,.@\\-\\/]+$",patternMessage:"Invalid ARN format. Expected: arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"}]},vv={actions:[{kind:"validate",action:"validate",input:{projectId:"${context.projectId}",roleArn:"$arn",externalId:"${context.extras.cloudwatch.externalId}"},resultAs:"validateRole"}],metadata:{roleArn:"$arn",awsAccountId:"$validateRole.awsAccountId",externalId:"${context.extras.cloudwatch.externalId}"},displayName:"AWS Account $validateRole.awsAccountId",button:Ue},kv={kind:"choice",title:"Choose setup method",description:"Select how you want to create the CloudWatch IAM role.",options:[{id:"cloudformation",label:"CloudFormation",description:"Launch a stack with the required trust and permissions.",flow:{kind:"multi-step",prefetch:wv,steps:[{id:"prepare",title:"Launch stack",actions:[{kind:"instruction",instruction:"Launch a CloudFormation stack in your AWS account to create the IAM role that lets Sazabi read your CloudWatch logs.",payloads:[{kind:"external-link",label:"Launch CloudFormation stack",href:"${context.extras.cloudwatch.cloudFormationQuickCreateUrl}"}]},{kind:"instruction",instruction:"After the stack is created, find your role ARN under **Stacks → ${context.extras.cloudwatch.stackName} → Outputs** and copy the `RoleArn` value."}]},fv],submit:vv}},{id:"terraform",label:"Terraform",description:"Apply Terraform resources in your AWS account.",flow:{kind:"multi-step",prefetch:wv,steps:[{id:"prepare",title:"Apply Terraform",actions:[{kind:"instruction",instruction:"Add this configuration to your Terraform files. It creates the IAM role that lets Sazabi read your CloudWatch logs.",payloads:[{kind:"code",language:"hcl",copyLabel:"Terraform",value:`data "aws_caller_identity" "current" {}
|
|
6549
|
+
`;var l_=()=>{};var d_,g_;var y_=d(()=>{SD();ID();OD();TD();DD();zD();jD();RD();UD();ED();GD();JD();HD();FD();XD();QD();eC();nC();iC();aC();sC();lC();dC();yC();mC();wC();vC();SC();IC();OC();TC();DC();zC();jC();RC();UC();EC();GC();JC();HC();FC();XC();QC();ez();nz();iz();az();sz();lz();dz();yz();mz();wz();vz();Sz();Iz();Oz();Tz();Dz();zz();jz();Rz();Uz();Ez();Gz();Jz();Hz();Fz();Xz();Qz();e_();n_();i_();a_();s_();l_();d_={cloudflare:PD.trim(),cloudflare_workers:AD.trim(),cloudwatch:CD.trim(),convex:ND.trim(),datadog:MD.trim(),daytona:qD.trim(),digital_ocean:WD.trim(),e2b:YD.trim(),elastic_cloud:tC.trim(),fluent_bit:rC.trim(),fly_io:hC.trim(),gcp:gC.trim(),grafana_alloy:pC.trim(),inngest:kC.trim(),langchain:$C.trim(),mastra:LC.trim(),neon:_C.trim(),netlify:xC.trim(),openrouter:KC.trim(),otel:BC.trim(),otel_collector:ZC.trim(),otel_metrics:VC.trim(),plain:oz.trim(),posthog:uz.trim(),posthog_sdk:bz.trim(),porter:cz.trim(),prometheus:fz.trim(),railway:Pz.trim(),render:Az.trim(),respan:Cz.trim(),sentry:Nz.trim(),sentry_platform:Mz.trim(),supabase:qz.trim(),temporal:Wz.trim(),trigger_dev:Yz.trim(),vector:t_.trim(),vercel:r_.trim(),webhook_events:h_.trim()},g_={cloudflare:$D.trim(),cloudflare_workers:LD.trim(),cloudwatch:_D.trim(),convex:xD.trim(),datadog:KD.trim(),daytona:BD.trim(),digital_ocean:ZD.trim(),e2b:VD.trim(),elastic_cloud:oC.trim(),fluent_bit:cC.trim(),fly_io:uC.trim(),gcp:bC.trim(),grafana_alloy:fC.trim(),inngest:PC.trim(),langchain:AC.trim(),mastra:CC.trim(),neon:NC.trim(),netlify:MC.trim(),openrouter:qC.trim(),otel:WC.trim(),otel_collector:YC.trim(),otel_metrics:tz.trim(),plain:rz.trim(),posthog:gz.trim(),posthog_sdk:pz.trim(),porter:hz.trim(),prometheus:kz.trim(),railway:$z.trim(),render:Lz.trim(),respan:_z.trim(),sentry:xz.trim(),sentry_platform:Kz.trim(),supabase:Bz.trim(),temporal:Zz.trim(),trigger_dev:Vz.trim(),vector:o_.trim(),vercel:c_.trim(),webhook_events:u_.trim()}});var gv=(e)=>{let t=g_[e];if(t)return t;return d_[e]};var b_=d(()=>{y_()});var H="available";var Ue,cl=(e,t="http/protobuf")=>[{instruction:`Add the OpenTelemetry SDK to your ${e}.`,notes:[{text:"Most languages have official OpenTelemetry SDKs available (e.g., `@opentelemetry/api` for Node.js, `opentelemetry-api` for Python, etc.)."}]},{instruction:`Initialize OpenTelemetry in your ${e}.`},{instruction:`Set the following environment variables in your ${e} environment — \`OTEL_EXPORTER_OTLP_ENDPOINT\` is your intake URL (above).`,payloads:[{kind:"copyable",label:"`OTEL_EXPORTER_OTLP_PROTOCOL`",value:t,copyLabel:"OTLP protocol"}],notes:[t8]}],t8;var St=d(()=>{Ue={label:"Connect",pendingLabel:"Connecting..."},t8={text:"Most OpenTelemetry SDKs automatically detect these environment variables. If your SDK is already configured in code, use the same endpoint and protocol values there instead."}});var yv,bv,mv;var m_=d(()=>{St();yv={kind:"multi-step",steps:[{id:"prepare",title:"Create token",notes:[{variant:"requirement",text:"**Cloudflare Logpush is only available on the Enterprise plan.** Free, Pro, and Business accounts cannot create Logpush jobs."}],actions:[{kind:"instruction",instruction:"Create a Cloudflare API token with **Account Settings: Read**, **Zone: Read**, and **Zone Logs: Edit** permissions.",payloads:[{kind:"external-link",label:"Open Cloudflare API token template",href:"https://dash.cloudflare.com/profile/api-tokens?permissionGroupKeys=%5B%7B%22key%22%3A%22account_settings%22%2C%22type%22%3A%22read%22%2C%22scope%22%3A%22account%22%7D%2C%7B%22key%22%3A%22logs%22%2C%22type%22%3A%22edit%22%2C%22scope%22%3A%22zone%22%7D%2C%7B%22key%22%3A%22zone%22%2C%22type%22%3A%22read%22%2C%22scope%22%3A%22zone%22%7D%5D&name=Sazabi+Cloudflare+Logpush"}]},{kind:"instruction",instruction:"Pick the account you want to connect, click **Continue to summary**, then **Create Token**, and copy the token for the next step."}]},{id:"credentials",title:"Enter credentials",actions:[{id:"token",kind:"secret",label:"Cloudflare API token",instruction:"Enter your Cloudflare API token below.",description:"Token with Account Settings Read, Zone Read, and Logs Edit permissions.",placeholder:"Enter your Cloudflare API token"},{id:"accountId",kind:"text",label:"Cloudflare account ID",instruction:"Enter your Cloudflare account ID below.",description:"The 32-character hex ID from your Cloudflare dashboard URL or account overview.",placeholder:"e.g. a1b2c3d4e5f6...",pattern:"^[a-f0-9]{32}$",patternMessage:"Enter the 32-character Cloudflare account ID."}]}],submit:{actions:[{kind:"validate",action:"validate",input:{token:"$token",accountId:"$accountId"},resultAs:"validate"}],metadata:{cloudflareApiToken:"$token",accountId:"$accountId",accountName:"$validate.accountName"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/cloudflare"},bv={content:{kind:"list",listAction:"listLogpushDatasets",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"datasetName",header:"Dataset",cell:"badge"},{field:"scopeDetail",header:"Scope"}],searchPlaceholder:"Search datasets and zones...",searchFields:["datasetName","scopeDetail"],dedupeByConfigField:["scope","zoneId","dataset"],dedupeMissingFieldAsEmpty:!0,emptyState:{noMatches:"No Logpush datasets match your search.",allConfigured:"All Logpush datasets already have streams configured."},toStreamItem:{displayName:"$item.displayName",config:{scope:"$item.scope",accountId:"$item.accountId",zoneId:"$item.zoneId",zoneName:"$item.zoneName",dataset:"$item.dataset",datasetName:"$item.datasetName"}}}},mv={groups:[{id:"open-logpush",section:"config",title:"Open Logpush",notes:[{variant:"requirement",text:"**Cloudflare Logpush is only available on the Enterprise plan.** Free, Pro, and Business accounts cannot create Logpush jobs."}],actions:[{instruction:"Create a Logpush job in your [Cloudflare dashboard](https://dash.cloudflare.com) under **Analytics & Logs > Logpush**, or via the Cloudflare API."},{instruction:"Select **HTTP** as the destination type."}]},{id:"destination",section:"config",title:"Set the destination",actions:[{instruction:"Paste your Sazabi intake URL (above) into the Logpush HTTP destination field."}]},{id:"output-options",section:"config",title:"Set output options",actions:[{instruction:"In the Logpush job's **Output options**, set **Timestamp format** to **RFC3339** so Sazabi can parse event times accurately."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/cloudflare"}});var n8,o8,p_;var w_=d(()=>{m_();n8=["cloudflareApiToken"],o8={id:"cloudflare-logpush",label:"Cloudflare Logpush",transform:"cloudflare-logpush"},p_={id:"cloudflare",name:"Cloudflare Logpush",searchAliases:["cloudflare","cf","logpush"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:n8,intake:[o8],subtitle:"Stream your Cloudflare Logpush jobs to Sazabi for edge network observability.",features:["Zone Logpush","Account Logpush","Edge analytics"],evidenceHints:["Cloudflare zones, account Logpush config, or Terraform cloudflare provider","CLOUDFLARE_* environment variables or scripts that call the Cloudflare API","README/docs naming Cloudflare for edge, DNS, CDN, firewall, or Workers traffic"],setupSkill:H,dashboard:{iconKey:"cloudflare",intakeSourceId:"cloudflare-logpush",streamSelectorLayout:"sidepanel",actions:{submit:{validate:{procedure:"cloudflare.validateToken"}},list:{listLogpushDatasets:{procedure:"cloudflare.listLogpushDatasets",itemsField:"items"}}}}}});var pv;var f_=d(()=>{pv={perStreamInstructions:!0,docsUrl:"https://docs.sazabi.com/data/sources/endpoint/cloudflare-workers",groups:[{id:"open-telemetry",section:"config",title:"Open telemetry destinations",actions:[{instruction:"In your Cloudflare dashboard, go to **Workers & Pages > Observability > Telemetry** and click **Add Destination**."},{instruction:"Add one destination for logs and a second for traces."}]},{id:"logs",section:"config",title:"Configure logs destination",actions:[{instruction:"Paste these values into Cloudflare's **Add New Destination** dialog for logs — the endpoint is your **OTLP logs endpoint** (above).",payloads:[{kind:"copyable",label:"Destination type",value:"Logs"},{kind:"copyable",label:"Destination name",value:"sazabi-logs"}]}]},{id:"traces",section:"config",title:"Configure traces destination",actions:[{instruction:"Paste these values into Cloudflare's **Add New Destination** dialog for traces — the endpoint is your **OTLP traces endpoint** (above).",payloads:[{kind:"copyable",label:"Destination type",value:"Traces"},{kind:"copyable",label:"Destination name",value:"sazabi-traces"}]}]},{id:"enable-worker",section:"config",title:"Enable destinations",actions:[{instruction:"In each Worker's `wrangler.jsonc` / `wrangler.toml`, enable observability and list the log and trace destination names you created."},{instruction:"Redeploy the Worker after updating Wrangler config.",notes:[{text:"The destination is enabled only after the deployed Worker references it by name."}]}]}]}});var v_;var k_=d(()=>{f_();v_={id:"cloudflare_workers",name:"Cloudflare Workers",searchAliases:["cloudflare","cf","workers"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"cloudflare-workers",label:"Cloudflare Workers Observability",aliases:["cloudflare"],transform:"otlp-strict-signal",transformOptions:{missingAuthMessage:"Missing Cloudflare Workers Observability auth: provide Authorization: Bearer <publicKey>"}}],lifecycleEligible:!0,subtitle:"Stream Cloudflare Workers Observability logs and traces to Sazabi via OTLP.",features:["Workers Observability OTLP logs","Workers Observability OTLP traces"],evidenceHints:["wrangler.toml/json config with observability or Workers deployments","@cloudflare/workers-types, hono on Workers, or Worker entrypoints such as src/worker.ts","README/docs naming Cloudflare Workers, Pages Functions, or Durable Objects"],setupSkill:H,dashboard:{iconKey:"cloudflare",intakeSourceId:"cloudflare",streamSelectorLayout:"sidepanel"},streamCardinality:"multi"}});var wv,fv,vv,kv,Sv,Pv;var S_=d(()=>{St();wv={action:"prefetch",input:{projectId:"${context.projectId}",templateUrl:"${context.cloudformationTemplateUrl}"},resultAs:"cloudwatch"},fv={id:"role-arn",title:"Enter role ARN",actions:[{id:"arn",kind:"text",label:"Role ARN",instruction:"Enter the IAM role ARN below.",placeholder:"arn:aws:iam::123456789012:role/SazabiLogIngestion-Sazabi-...",pattern:"^arn:aws:iam::(\\d{12}):role\\/[\\w+=,.@\\-\\/]+$",patternMessage:"Invalid ARN format. Expected: arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"}]},vv={actions:[{kind:"validate",action:"validate",input:{projectId:"${context.projectId}",roleArn:"$arn",externalId:"${context.extras.cloudwatch.externalId}"},resultAs:"validateRole"}],metadata:{roleArn:"$arn",awsAccountId:"$validateRole.awsAccountId",externalId:"${context.extras.cloudwatch.externalId}"},displayName:"AWS Account $validateRole.awsAccountId",button:Ue},kv={kind:"choice",title:"Choose setup method",description:"Select how you want to create the CloudWatch IAM role.",options:[{id:"cloudformation",label:"CloudFormation",description:"Launch a stack with the required trust and permissions.",flow:{kind:"multi-step",prefetch:wv,steps:[{id:"prepare",title:"Launch stack",actions:[{kind:"instruction",instruction:"Launch a CloudFormation stack in your AWS account to create the IAM role that lets Sazabi read your CloudWatch logs.",payloads:[{kind:"external-link",label:"Launch CloudFormation stack",href:"${context.extras.cloudwatch.cloudFormationQuickCreateUrl}"}]},{kind:"instruction",instruction:"After the stack is created, find your role ARN under **Stacks → ${context.extras.cloudwatch.stackName} → Outputs** and copy the `RoleArn` value."}]},fv],submit:vv}},{id:"terraform",label:"Terraform",description:"Apply Terraform resources in your AWS account.",flow:{kind:"multi-step",prefetch:wv,steps:[{id:"prepare",title:"Apply Terraform",actions:[{kind:"instruction",instruction:"Add this configuration to your Terraform files. It creates the IAM role that lets Sazabi read your CloudWatch logs.",payloads:[{kind:"code",language:"hcl",copyLabel:"Terraform",value:`data "aws_caller_identity" "current" {}
|
|
6550
6550
|
|
|
6551
6551
|
resource "aws_iam_role" "sazabi_log_ingestion" {
|
|
6552
6552
|
name = "SazabiLogIngestion"
|
|
@@ -6621,7 +6621,7 @@ service:
|
|
|
6621
6621
|
pipelines:
|
|
6622
6622
|
logs:
|
|
6623
6623
|
receivers: [awscloudwatch]
|
|
6624
|
-
exporters: [otlphttp]`}],notes:[{text:"The key is embedded in the endpoint hostname, so no OTLP auth header is required."}]}]},{id:"run",section:"verify",title:"Run and verify",actions:[{instruction:"Deploy the collector, then write a new log event in one of the forwarded log groups and check the collector logs for export errors. Logs should appear in Sazabi within a few minutes."}]}]}});var i8,P_;var I_=d(()=>{S_();i8=["externalId"],P_={id:"cloudwatch",name:"CloudWatch",searchAliases:["aws","amazon","amazon web services","amazon cloudwatch"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,requiresConnectionPublicKey:!0,sensitiveFields:i8,subtitle:"Stream your AWS CloudWatch logs directly to Sazabi for real-time analysis and alerting.",features:["Log forwarding","Real-time streaming","Multi-region support"],evidenceHints:["AWS ECS, Lambda, CloudFormation, CDK, SAM, Serverless, or Terraform AWS resources","CloudWatch log group names, awslogs drivers, or logs:* IAM permissions","AWS_REGION/AWS_DEFAULT_REGION environment variables with runtime logging to CloudWatch"],setupSkill:H,dashboard:{iconKey:"cloudwatch",intakeSourceId:"cloudwatch",streamSelectorLayout:"sidepanel",connectionMetadataSection:{title:"AWS account details",description:"The AWS account and IAM role used for log ingestion.",fields:[{key:"awsAccountId",label:"AWS account ID",description:"AWS account connected to this data source."},{key:"roleArn",label:"IAM role ARN",description:"IAM role Sazabi assumes for log ingestion."}]},actions:{submit:{validate:{kind:"source-action",actionId:"validate-role"}},list:{list:{kind:"source-action",actionId:"list-log-groups",itemsField:"logGroups"}},prefetch:{prefetch:{kind:"source-action",actionId:"get-setup-info"}}}}}});var Iv,$v,Ov;var $_=d(()=>{St();Iv={kind:"multi-step",steps:[{id:"credentials",title:"Enter access token",actions:[{kind:"instruction",instruction:"Create a team access token in your [Convex dashboard team settings](https://dashboard.convex.dev)."},{id:"token",kind:"secret",label:"Team access token",instruction:"Enter your Team access token below.",placeholder:"eyJ..."}]},{id:"team",title:"Choose team",actions:[{id:"team",kind:"select",label:"Team",instruction:"Select the Convex team whose deployments Sazabi should list.",placeholder:"Select a team",optionsAction:"options",optionsInput:{token:"$token"},optionValueField:"id",optionLabelField:"name",optionDescriptionField:"slug"}]}],submit:{metadata:{accessToken:"$token",teamId:"$team.id",teamName:"$team.name"},displayName:"$team.name",button:Ue}},$v={groups:[{id:"open-log-streams",section:"config",title:"Open Log Streams",notes:[{variant:"requirement",text:"**Convex log streams require the Pro plan.** Free/Starter teams cannot configure log streams."}],actions:[{instruction:"In your [Convex dashboard](https://dashboard.convex.dev), open the deployment you want to forward, then go to **Settings > Integrations** and configure a **Webhook** log stream.",notes:[{text:"Log streams are **per deployment** — repeat this setup for each deployment you want to forward. To onboard many deployments at once, connect your Convex account instead and Sazabi creates the log streams for you."}]}]},{id:"endpoint",section:"config",title:"Set webhook URL",actions:[{instruction:"Paste your Sazabi intake URL (above) into the webhook configuration."}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the log stream, then trigger activity — run a Convex function or hit a deployed endpoint. Logs appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/convex"},Ov={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"name",header:"Name"},{field:"slug",header:"Slug",width:"w-48",cell:"muted"}],searchPlaceholder:"Search deployments...",searchFields:["name"],dedupeByConfigField:"deploymentId",emptyState:{noMatches:"No deployments found.",allConfigured:"All deployments already have log streams configured."},toStreamItem:{displayName:"$item.name",config:{deploymentId:"$item.id",deploymentName:"$item.name"}}}}});var r8,a8,O_;var A_=d(()=>{$_();r8=["accessToken"],a8={id:"convex",label:"Convex",
|
|
6624
|
+
exporters: [otlphttp]`}],notes:[{text:"The key is embedded in the endpoint hostname, so no OTLP auth header is required."}]}]},{id:"run",section:"verify",title:"Run and verify",actions:[{instruction:"Deploy the collector, then write a new log event in one of the forwarded log groups and check the collector logs for export errors. Logs should appear in Sazabi within a few minutes."}]}]}});var i8,P_;var I_=d(()=>{S_();i8=["externalId"],P_={id:"cloudwatch",name:"CloudWatch",searchAliases:["aws","amazon","amazon web services","amazon cloudwatch"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,requiresConnectionPublicKey:!0,sensitiveFields:i8,subtitle:"Stream your AWS CloudWatch logs directly to Sazabi for real-time analysis and alerting.",features:["Log forwarding","Real-time streaming","Multi-region support"],evidenceHints:["AWS ECS, Lambda, CloudFormation, CDK, SAM, Serverless, or Terraform AWS resources","CloudWatch log group names, awslogs drivers, or logs:* IAM permissions","AWS_REGION/AWS_DEFAULT_REGION environment variables with runtime logging to CloudWatch"],setupSkill:H,dashboard:{iconKey:"cloudwatch",intakeSourceId:"cloudwatch",streamSelectorLayout:"sidepanel",connectionMetadataSection:{title:"AWS account details",description:"The AWS account and IAM role used for log ingestion.",fields:[{key:"awsAccountId",label:"AWS account ID",description:"AWS account connected to this data source."},{key:"roleArn",label:"IAM role ARN",description:"IAM role Sazabi assumes for log ingestion."}]},actions:{submit:{validate:{kind:"source-action",actionId:"validate-role"}},list:{list:{kind:"source-action",actionId:"list-log-groups",itemsField:"logGroups"}},prefetch:{prefetch:{kind:"source-action",actionId:"get-setup-info"}}}}}});var Iv,$v,Ov;var $_=d(()=>{St();Iv={kind:"multi-step",steps:[{id:"credentials",title:"Enter access token",actions:[{kind:"instruction",instruction:"Create a team access token in your [Convex dashboard team settings](https://dashboard.convex.dev)."},{id:"token",kind:"secret",label:"Team access token",instruction:"Enter your Team access token below.",placeholder:"eyJ..."}]},{id:"team",title:"Choose team",actions:[{id:"team",kind:"select",label:"Team",instruction:"Select the Convex team whose deployments Sazabi should list.",placeholder:"Select a team",optionsAction:"options",optionsInput:{token:"$token"},optionValueField:"id",optionLabelField:"name",optionDescriptionField:"slug"}]}],submit:{metadata:{accessToken:"$token",teamId:"$team.id",teamName:"$team.name"},displayName:"$team.name",button:Ue}},$v={groups:[{id:"open-log-streams",section:"config",title:"Open Log Streams",notes:[{variant:"requirement",text:"**Convex log streams require the Pro plan.** Free/Starter teams cannot configure log streams."}],actions:[{instruction:"In your [Convex dashboard](https://dashboard.convex.dev), open the deployment you want to forward, then go to **Settings > Integrations** and configure a **Webhook** log stream.",notes:[{text:"Log streams are **per deployment** — repeat this setup for each deployment you want to forward. To onboard many deployments at once, connect your Convex account instead and Sazabi creates the log streams for you."}]}]},{id:"endpoint",section:"config",title:"Set webhook URL",actions:[{instruction:"Paste your Sazabi intake URL (above) into the webhook configuration."}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the log stream, then trigger activity — run a Convex function or hit a deployed endpoint. Logs appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/convex"},Ov={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"name",header:"Name"},{field:"slug",header:"Slug",width:"w-48",cell:"muted"}],searchPlaceholder:"Search deployments...",searchFields:["name"],dedupeByConfigField:"deploymentId",emptyState:{noMatches:"No deployments found.",allConfigured:"All deployments already have log streams configured."},toStreamItem:{displayName:"$item.name",config:{deploymentId:"$item.id",deploymentName:"$item.name"}}}}});var r8,a8,O_;var A_=d(()=>{$_();r8=["accessToken"],a8={id:"convex",label:"Convex",transform:"convex-webhook"},O_={id:"convex",name:"Convex",capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:r8,intake:[a8],subtitle:"Forward your Convex deployment logs directly to Sazabi for serverless observability.",features:["Function logs","Database mutations","Scheduled job monitoring"],evidenceHints:["convex/ directory, convex.json, or convex package imports","CONVEX_* or NEXT_PUBLIC_CONVEX_URL environment variables","README/docs naming Convex for serverless functions or database state"],setupSkill:H,dashboard:{iconKey:"convex",intakeSourceId:"convex",streamSelectorLayout:"sidepanel",actions:{list:{options:{procedure:"convex.listTeams",itemsField:"teams",sensitiveInputFields:["token"]},list:{procedure:"convex.listDeployments",itemsField:"deployments",sensitiveInputFields:["token"]}}}}}});var Av;var T_=d(()=>{Av={perStreamInstructions:!0,groups:[{id:"configure",section:"config",title:"Configure the Datadog Agent",actions:[{instruction:"Choose how this Datadog Agent should ship logs to Sazabi, then apply the matching configuration.",payloads:[{kind:"options",options:[{id:"datadog-yaml-dual-ship",label:"`datadog.yaml` dual-ship",description:"Keep the Agent's Datadog API key and add Sazabi as an additional logs endpoint.",payloads:[{kind:"copyable",label:"Intake host",value:"${context.ingestHost}",copyLabel:"Datadog intake host",description:"Use this host in `logs_config.additional_endpoints`."},{kind:"code",language:"yaml",copyLabel:"datadog.yaml dual-ship configuration",value:`# Enable logs collection if it is not already enabled.
|
|
6625
6625
|
logs_enabled: true
|
|
6626
6626
|
|
|
6627
6627
|
# Send a copy of logs to Sazabi while the primary Agent config
|
|
@@ -6644,7 +6644,7 @@ DD_API_KEY=any-non-empty-value
|
|
|
6644
6644
|
DD_LOGS_ENABLED=true
|
|
6645
6645
|
DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true
|
|
6646
6646
|
DD_LOGS_CONFIG_LOGS_DD_URL=https://\${context.ingestHost}
|
|
6647
|
-
DD_LOGS_CONFIG_FORCE_USE_HTTP=true`}],notes:[{text:"`DD_API_KEY` is not used by Sazabi — the intake URL carries your public key in the hostname — but the Datadog Agent requires it to be a non-empty value to start."}]}]}]}]},{id:"restart",section:"verify",title:"Restart and verify",description:"Restart or redeploy the Agent after applying the config.",actions:[{instruction:"Restart or redeploy the Agent so it picks up the updated configuration.",notes:[{variant:"requirement",text:"Avoid configuring both a Sazabi additional endpoint and a Sazabi-only logs URL in the same Agent, or you may send duplicate logs."}]}]}]}});var L_;var D_=d(()=>{T_();L_={id:"datadog",name:"Datadog Agent",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"datadog",label:"Datadog",
|
|
6647
|
+
DD_LOGS_CONFIG_FORCE_USE_HTTP=true`}],notes:[{text:"`DD_API_KEY` is not used by Sazabi — the intake URL carries your public key in the hostname — but the Datadog Agent requires it to be a non-empty value to start."}]}]}]}]},{id:"restart",section:"verify",title:"Restart and verify",description:"Restart or redeploy the Agent after applying the config.",actions:[{instruction:"Restart or redeploy the Agent so it picks up the updated configuration.",notes:[{variant:"requirement",text:"Avoid configuring both a Sazabi additional endpoint and a Sazabi-only logs URL in the same Agent, or you may send duplicate logs."}]}]}]}});var L_;var D_=d(()=>{T_();L_={id:"datadog",name:"Datadog Agent",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"datadog",label:"Datadog",transform:"datadog-agent"}],lifecycleSkipReason:"Manual SDK/agent setup is not exercised by automated lifecycle tests yet.",subtitle:"Forward your Datadog Agent logs directly to Sazabi for AI-powered observability.",features:["Agent log forwarding","Minimal configuration","Keep existing setup"],evidenceHints:["datadog-agent config, DD_* environment variables, or docker-compose Datadog sidecars","dd-trace, @datadog/*, datadog-lambda-js, or Datadog CI/deploy scripts","README/docs naming Datadog as the current logs, metrics, traces, or APM provider"],setupSkill:H,dashboard:{iconKey:"datadog",intakeSourceId:"datadog"}}});var Tv;var C_=d(()=>{Tv={groups:[{id:"open-settings",section:"config",title:"Open OpenTelemetry card",notes:[{variant:"requirement",text:"The OpenTelemetry card is visible to organization owners only."}],actions:[{instruction:"Open the [Daytona dashboard](https://app.daytona.io), choose your organization, open **Settings**, and find the **OpenTelemetry** card."}]},{id:"values",section:"config",title:"Set OTLP values",actions:[{instruction:"Set the **OTLP Endpoint** on the Daytona OpenTelemetry card to your intake URL (above)."}]},{id:"save",section:"verify",title:"Save and verify",actions:[{instruction:"Save the OpenTelemetry card, then restart or start a sandbox.",payloads:[{kind:"bulleted-list",items:["Filter in Sazabi using the resource attributes Daytona stamps on each record: `daytona_organization_id`, `daytona_region_id`, `daytona_snapshot`.","Sazabi currently stores logs and traces from this source. Metrics sent to the endpoint aren't stored yet.","Daytona only retains sandbox telemetry for 3 days in its own dashboard, so Sazabi is the durable store."]}],notes:[{text:"Sandboxes begin exporting telemetry automatically on their next start with no per-sandbox change required."}]}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/daytona"}});var z_;var __=d(()=>{C_();z_={id:"daytona",name:"Daytona",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"daytona",label:"Daytona",transform:"otlp-signal-dispatch",transformOptions:{unsupportedPathMessage:"Unsupported Daytona OTLP path: expected /v1/logs, /v1/traces, or /v1/metrics",metricsWarningMessage:"Daytona metrics received but not yet supported"}}],lifecycleSkipReason:"Manual webhook setup is not exercised by automated lifecycle tests yet.",subtitle:"Stream sandbox telemetry from your Daytona organization to Sazabi via org-level OpenTelemetry export.",features:["Org-level OTLP logs and traces","Sandbox resource attributes (organization, region, snapshot)","Durable retention beyond Daytona's 3-day window"],evidenceHints:["Daytona SDK/CLI usage, Daytona sandbox config, or DAYTONA_* environment variables","Code execution sandbox infrastructure backed by Daytona snapshots","README/docs naming Daytona for agent or development sandboxes"],setupSkill:H,dashboard:{iconKey:"daytona",intakeSourceId:"daytona"}}});var Lv,Dv,Cv;var j_=d(()=>{St();Lv={kind:"multi-step",steps:[{id:"prepare",title:"Create access token",actions:[{kind:"instruction",instruction:"Create a [DigitalOcean personal access token](https://cloud.digitalocean.com/account/api/tokens) with **Full Access** scope, or use Custom Scopes with `app:read`, `app:update`, `actions:read`, `regions:read`, and `sizes:read` so Sazabi can set up log forwarding on your apps."}]},{id:"credentials",title:"Enter access token",actions:[{id:"token",kind:"secret",label:"Personal access token",instruction:"Enter your personal access token below.",placeholder:"dop_v1_..."}]}],submit:{actions:[{kind:"validate",action:"validate",input:{token:"$token"}}],metadata:{apiToken:"$token"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/digitalocean"},Dv={docsUrl:"https://docs.sazabi.com/data/sources/endpoint/digital-ocean",groups:[{id:"open-log-forwarding",section:"config",title:"Open Log Forwarding",actions:[{instruction:"In the [DigitalOcean control panel](https://cloud.digitalocean.com/apps), open the App Platform app you want to forward, then go to **Settings > Log Forwarding** and add a **Datadog** destination. You can also add the destination through your app spec (`app.yaml`) or `doctl apps update`."},{instruction:"Repeat this setup for every app you want to forward — log destinations are configured **per app** and attach to each service, worker, and job.",notes:[{text:"To add forwarding across an app in one step from a picker, connect your DigitalOcean account instead."},{text:"App Platform Functions, Droplets, Spaces, Managed Databases, and Managed Kubernetes are not covered by this path — forward those with Sazabi's [OpenTelemetry endpoint](https://docs.sazabi.com/data/sources/endpoint/opentelemetry)."}]}]},{id:"endpoint",section:"config",title:"Set Datadog destination values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **Endpoint (API URL)** field, and this key into the **API key** field.",payloads:[{kind:"copyable",label:"Datadog API key",value:"${context.publicKey}",copyLabel:"Sazabi public key",description:"App Platform requires a Datadog API key field — the key embedded in the endpoint hostname is what actually authenticates the stream."}]}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the log destination, then trigger activity — deploy the app or hit one of its routes. Logs appear in Sazabi within a few minutes."}]}]},Cv={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"name",header:"Name"},{field:"componentCount",header:"Components",width:"w-40",cell:"badge"}],searchPlaceholder:"Search apps...",searchFields:["name"],dedupeByConfigField:"appId",emptyState:{noMatches:"No apps found.",allConfigured:"All apps already have log streams configured.",noItems:"No App Platform apps found in this DigitalOcean account. Create an app in DigitalOcean first, then return here to forward its logs."},toStreamItem:{displayName:"$item.name",config:{appId:"$item.id",appName:"$item.name"}}}}});var c8,s8,N_;var R_=d(()=>{j_();c8=["apiToken"],s8={id:"digital-ocean",label:"DigitalOcean",transform:"datadog-agent"},N_={id:"digital_ocean",name:"DigitalOcean",searchAliases:["digital ocean","do"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:c8,intake:[s8],subtitle:"Forward your DigitalOcean infrastructure logs directly to Sazabi for unified observability.",features:["Log forwarding","App Platform logs"],evidenceHints:[".do/app.yaml, DigitalOcean App Platform specs, or doctl scripts","DIGITALOCEAN_* environment variables or Terraform digitalocean provider resources","README/docs naming DigitalOcean Apps, Droplets, Kubernetes, or Spaces"],setupSkill:H,dashboard:{iconKey:"digital-ocean",intakeSourceId:"digital-ocean",streamSelectorLayout:"sidepanel",streamTableColumns:[{kind:"config-text",header:"App",width:"w-32",configField:"appName",fallbackLabel:"Unknown app"}],actions:{submit:{validate:{kind:"source-action",actionId:"validate-token",sensitiveInputFields:["token"]}},list:{list:{kind:"source-action",actionId:"list-apps",itemsField:"apps"}}}}}});var h8,zv;var x_=d(()=>{h8=[{instruction:"Set `SAZABI_INTAKE_URL` to your intake URL (above) in the application that creates E2B sandboxes."}],zv={groups:[{id:"values",section:"config",title:"Set environment variables",actions:h8},{id:"instrument",section:"config",title:"Instrument sandbox logs",actions:[{instruction:"Emit sandbox stdout and stderr through the OpenTelemetry logs SDK.",payloads:[{kind:"code-tabs",label:"SDK integration",tabs:[{id:"typescript",label:"TypeScript",language:"typescript",value:`import { Sandbox } from '@e2b/code-interpreter'
|
|
6648
6648
|
import { logs, SeverityNumber } from '@opentelemetry/api-logs'
|
|
6649
6649
|
import { LoggerProvider, BatchLogRecordProcessor } from '@opentelemetry/sdk-logs'
|
|
6650
6650
|
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'
|
|
@@ -6767,7 +6767,7 @@ finally:
|
|
|
6767
6767
|
sandbox.kill()
|
|
6768
6768
|
finally:
|
|
6769
6769
|
# Flush logs before exit; runs even if sandbox.kill() raises.
|
|
6770
|
-
logger_provider.shutdown()`,copyLabel:"Python code"}]}]}]},{id:"verify",section:"verify",title:"Run and verify",actions:[{instruction:"Run a sandbox with the instrumentation in place. Its stdout and stderr should appear in Sazabi within a couple of minutes."}]}]}});var U_;var M_=d(()=>{x_();U_={id:"e2b",name:"E2B",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",intake:[{id:"e2b",label:"E2B",
|
|
6770
|
+
logger_provider.shutdown()`,copyLabel:"Python code"}]}]}]},{id:"verify",section:"verify",title:"Run and verify",actions:[{instruction:"Run a sandbox with the instrumentation in place. Its stdout and stderr should appear in Sazabi within a couple of minutes."}]}]}});var U_;var M_=d(()=>{x_();U_={id:"e2b",name:"E2B",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",intake:[{id:"e2b",label:"E2B",transform:"otlp-passthrough"}],subtitle:"Stream your E2B sandbox logs directly to Sazabi for code execution observability.",features:["Sandbox stdout/stderr capture"],evidenceHints:["e2b packages, E2B_API_KEY, or sandbox template config","Code execution sandbox workflows using E2B","README/docs naming E2B for agent sandboxes or code interpreter workloads"],setupSkill:H,dashboard:{iconKey:"e2b",intakeSourceId:"e2b"}}});var _v;var E_=d(()=>{_v={perStreamInstructions:!0,kind:"choice",title:"Choose Elastic forwarder",description:"Forward Elastic Cloud logs to Sazabi with Elastic Agent's embedded Collector or with a self-managed Logstash pipeline.",options:[{id:"elastic-agent",label:"Elastic Agent",description:"Use Elastic Agent 8.13+ or Fleet 9.2+ with an OpenTelemetry Collector config.",flow:{groups:[{id:"prepare-agent",section:"config",title:"Prepare Elastic Agent",notes:[{text:"Elastic Agent 8.13+ ships an embedded OpenTelemetry Collector (EDOT)."}],actions:[{instruction:"Point Elastic Agent at Sazabi through the embedded OTel Collector, not via a Fleet output.",notes:[{text:"Fleet's **Outputs** UI does not expose an OTLP type."}]}]},{id:"copy-config",section:"config",title:"Copy Collector config",actions:[{instruction:"Configure Sazabi as a standard `otlphttp` exporter.",payloads:[{kind:"code",label:"sazabi-otel.yml",language:"yaml",copyLabel:"OTel Collector config",value:`receivers:
|
|
6771
6771
|
filelog:
|
|
6772
6772
|
include: ["/var/log/**/*.log"]
|
|
6773
6773
|
start_at: beginning
|
|
@@ -6837,7 +6837,7 @@ output {
|
|
|
6837
6837
|
content_type => "application/json"
|
|
6838
6838
|
message => "%{[@metadata][otlp_body]}"
|
|
6839
6839
|
}
|
|
6840
|
-
}`}],notes:[{text:'The pipeline polls the index every minute via the `schedule` setting, builds an OTLP/HTTP `resourceLogs` envelope in a `ruby` filter, and POSTs the raw JSON via the `http` output (using `format => "message"` so Logstash sends the exact body the filter builds).'},{text:"The `ruby` filter is included with Logstash by default."}]}]},{id:"update-endpoint",section:"config",title:"Update endpoint",actions:[{instruction:"Replace `<your-deployment>` and `<region>` with your Elastic Cloud deployment's Elasticsearch endpoint, for example `https://acme.es.us-central1.gcp.cloud.es.io:443`."}]}]}}]}});var K_;var G_=d(()=>{E_();K_={id:"elastic_cloud",name:"Elastic Cloud",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"elastic-cloud",label:"Elastic Cloud",
|
|
6840
|
+
}`}],notes:[{text:'The pipeline polls the index every minute via the `schedule` setting, builds an OTLP/HTTP `resourceLogs` envelope in a `ruby` filter, and POSTs the raw JSON via the `http` output (using `format => "message"` so Logstash sends the exact body the filter builds).'},{text:"The `ruby` filter is included with Logstash by default."}]}]},{id:"update-endpoint",section:"config",title:"Update endpoint",actions:[{instruction:"Replace `<your-deployment>` and `<region>` with your Elastic Cloud deployment's Elasticsearch endpoint, for example `https://acme.es.us-central1.gcp.cloud.es.io:443`."}]}]}}]}});var K_;var G_=d(()=>{E_();K_={id:"elastic_cloud",name:"Elastic Cloud",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"elastic-cloud",label:"Elastic Cloud",transform:"otlp-passthrough"}],subtitle:"Forward logs from your Elastic Cloud deployment to Sazabi using Elastic Agent or Logstash.",features:["Elastic Agent OTel Collector output","Logstash pipeline forwarding","No Sazabi infrastructure required"],evidenceHints:["Elastic Agent, Beats, Logstash, or Elasticsearch/Kibana config","ELASTIC_* environment variables or Terraform elasticstack/elastic provider resources","README/docs naming Elastic Cloud, Elasticsearch, or Kibana for observability"],setupSkill:H,dashboard:{iconKey:"elastic-cloud",intakeSourceId:"elastic-cloud"}}});var jv;var q_=d(()=>{jv={perStreamInstructions:!0,groups:[{id:"copy-config",section:"config",title:"Copy output configuration",notes:[{variant:"requirement",text:"Requires Fluent Bit v2.0 or later. The `opentelemetry` output plugin is included in the default distribution, so no additional installation is needed."}],actions:[{instruction:"Configure Fluent Bit's built-in `opentelemetry` output plugin.",payloads:[{kind:"code-tabs",label:"Output configuration",description:"Choose the snippet format that matches how you manage Fluent Bit.",tabs:[{id:"classic",label:"Classic config",language:"bash",copyLabel:"Classic Fluent Bit output configuration",value:`[OUTPUT]
|
|
6841
6841
|
name opentelemetry
|
|
6842
6842
|
match *
|
|
6843
6843
|
host \${context.ingestHost}
|
|
@@ -6853,7 +6853,7 @@ output {
|
|
|
6853
6853
|
port 443
|
|
6854
6854
|
logs_uri /v1/logs
|
|
6855
6855
|
tls on
|
|
6856
|
-
tls.verify on`}]}]}]},{id:"restart",section:"verify",title:"Restart and verify",actions:[{instruction:"Restart Fluent Bit so it picks up the updated output configuration, then trigger some log activity.",notes:[{text:"If logs do not appear after restart, check the Fluent Bit process logs for TLS, DNS, or authorization errors."}]}]}]}});var J_;var B_=d(()=>{q_();J_={id:"fluent_bit",name:"Fluent Bit",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"fluent-bit",label:"Fluent Bit",subdomain:"fluent-bit",transform:"otlp-passthrough"}],subtitle:"Forward logs from your Kubernetes cluster or any infrastructure to Sazabi using the Fluent Bit agent.",features:["Kubernetes DaemonSet","Container log collection","Multi-pipeline routing","Low resource footprint"],evidenceHints:["fluent-bit.conf, parsers.conf, Helm values, or Kubernetes DaemonSets","Fluent Bit outputs already shipping container logs","README/docs naming Fluent Bit as the log forwarder"],setupSkill:H,dashboard:{iconKey:"fluent-bit",intakeSourceId:"fluent-bit"}}});var Nv,Rv,xv;var H_=d(()=>{St();Nv={kind:"multi-step",steps:[{id:"prepare",title:"Create token",actions:[{kind:"instruction",instruction:"Create a read-only organization token from the CLI or the Fly.io dashboard.",payloads:[{kind:"options",options:[{id:"cli",label:"CLI",payloads:[{kind:"code",language:"bash",copyLabel:"flyctl read-only token command",value:"flyctl tokens create readonly -o <org-slug>"}]},{id:"dashboard",label:"Dashboard",payloads:[{kind:"external-link",label:"Open the Fly.io dashboard",href:"https://fly.io/dashboard",description:"Open the org's Tokens tab and create a read-only token."}]}]}]}]},{id:"credentials",title:"Enter credentials",actions:[{id:"token",kind:"secret",label:"API token",instruction:"Enter your Fly.io API token below.",placeholder:"FlyV1 ..."},{id:"orgSlug",kind:"text",label:"Organization slug",instruction:"Enter your organization slug below.",placeholder:"personal"}]}],submit:{actions:[{kind:"validate",action:"validate",input:{dataSourceType:"fly_io",metadata:{apiToken:"$token",organizationSlug:"$orgSlug"}}}],metadata:{apiToken:"$token",organizationSlug:"$orgSlug"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/fly-io"},Rv={groups:[{id:"shipper",section:"config",title:"Run a log shipper",description:"Fly.io has no managed log-drain API, so you run a log shipper inside your Fly organization and point it at Sazabi.",notes:[{text:"The shipper reads Fly's internal NATS log stream, so it must run in the **same Fly organization** as the apps you want to monitor. The shipper is required either way — to also let Sazabi discover and verify your apps from a read-only token, connect your Fly.io account instead."}],actions:[{instruction:"Pick a log-shipper option — you run **one**, not both. **Option A — fly-log-shipper (simplest):** launch the stock [superfly/fly-log-shipper](https://github.com/superfly/fly-log-shipper) image in your org and enable its generic `http` sink with the two secrets below; Sazabi parses Fly's native JSON event format directly. **Option B — dedicated OTLP shipper:** for per-app keys and richer OTLP resource attributes, build a Vector app that wraps events in an OTLP `resourceLogs` envelope and POSTs to the OTLP endpoint below."}]},{id:"endpoint",section:"config",title:"Set the shipper secrets",actions:[{instruction:"Set the fly-log-shipper secrets (Option A): `HTTP_URL` is your intake URL (above); `HTTP_TOKEN` is the key below.",payloads:[{kind:"copyable",label:"`HTTP_TOKEN`",value:"${context.publicKey}",description:"Your Sazabi public key, sent as a bearer token. Paste the raw key with no `Bearer ` prefix."},{kind:"code",label:"Set both secrets on the shipper app",language:"bash",value:'fly secrets set -a <log-shipper-app> \\\n HTTP_URL="https://${context.ingestHost}/fly-log-shipper" \\\n HTTP_TOKEN="${context.publicKey}"'}]},{instruction:"If you chose the dedicated OTLP shipper (Option B), POST OTLP `resourceLogs` to the endpoint below — with the same public key as a bearer token — instead of setting the two secrets above.",payloads:[{kind:"showIngestUrl",label:"OTLP endpoint (Option B)",pathSuffix:"/v1/logs"}]}]},{id:"verify",section:"verify",title:"Deploy and verify",actions:[{instruction:"Deploy the shipper, then trigger activity — deploy an app or hit a deployed route. Logs appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/fly-io"},xv={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"name",header:"Name"}],searchPlaceholder:"Search apps...",searchFields:["name"],dedupeByConfigField:"appName",emptyState:{noMatches:"No apps found.",allConfigured:"All apps already have log streams configured."},toStreamItem:{displayName:"$item.name",config:{appName:"$item.name"}}}}});var l8,u8,W_;var F_=d(()=>{H_();l8=["apiToken"],u8={id:"fly-io",label:"Fly.io",subdomain:"fly-io",transform:"otlp-with-fly-log-shipper"},W_={id:"fly_io",name:"Fly.io",searchAliases:["fly","flyio"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:l8,intake:[u8],subtitle:"Forward your Fly.io application logs directly to Sazabi for global monitoring.",features:["Log shipping","Multi-region logs","Machine monitoring"],evidenceHints:["fly.toml or .fly/ app configuration","FLY_* environment variables or scripts that run flyctl/fly deploy","README/docs naming Fly.io as the deployment host"],setupSkill:H,dashboard:{iconKey:"fly-io",intakeSourceId:"fly-io",streamSelectorLayout:"sidepanel",actions:{submit:{validate:{procedure:"dataSources.validateConnection"}},list:{list:{kind:"source-action",actionId:"list-apps",itemsField:"apps"}}}}}});var Uv,Mv,Ev;var Z_=d(()=>{St();Uv={kind:"choice",title:"Choose setup method",description:"Select how you want to connect Google Cloud logs.",options:[{id:"service-account",label:"Service account",description:"Let Sazabi set up the log sink, Pub/Sub topic, and pull subscription automatically.",flow:{kind:"multi-step",steps:[{id:"prepare",title:"Prepare access",description:"Create a service account key with permissions for log forwarding.",notes:[{text:"Sazabi turns on the required APIs and sets up the log pipeline in your GCP project automatically."}],actions:[{kind:"instruction",instruction:"Grant the service account the following roles on the target GCP project(s).",payloads:[{kind:"copyable-list",items:[{value:"roles/serviceusage.serviceUsageAdmin"},{value:"roles/logging.configWriter"},{value:"roles/pubsub.admin"},{value:"roles/browser"}]},{kind:"external-link",label:"Enable the Service Usage API",href:"https://console.cloud.google.com/apis/library/serviceusage.googleapis.com"}],notes:[{text:'New or auto-created projects (for example a `gen-lang-client-...` project from Google AI Studio) may also need the Service Usage API enabled first. Sazabi uses that API to turn on the others, but it cannot enable itself. If you hit a "Service Usage API has not been used / is disabled" error, enable it on the project, wait about a minute, then retry.'}]},{kind:"instruction",instruction:"To create the key: go to [Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts) in the Google Cloud Console, select (or create) the service account, open **Keys**, then choose **Add key → Create new key → JSON**. Download the file — you'll paste its contents in the next step. Alternatively, use `gcloud iam service-accounts keys create sazabi-key.json --iam-account=YOUR_SERVICE_ACCOUNT_EMAIL`.",payloads:[{kind:"external-link",label:"Open service accounts in GCP Console",href:"https://console.cloud.google.com/iam-admin/serviceaccounts"}]}]},{id:"credentials",title:"Enter service account key",actions:[{id:"key",kind:"secret",label:"Service account key (JSON)",instruction:"Paste your service account key JSON below.",placeholder:'{"type": "service_account", "project_id": "...", ...}'}]}],submit:{actions:[{kind:"validate",action:"validate",input:{serviceAccountKey:"$key"},resultAs:"validateKey"},{kind:"preflight",action:"preflight",input:{serviceAccountKey:"$key"}}],metadata:{serviceAccountKey:"$key"},displayName:"GCP $validateKey.projectId",button:Ue}}},{id:"connectionless",label:"Your own collector",description:"Configure the sink, Pub/Sub topic, and collector yourself.",flow:{kind:"connectionless"}}],docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/gcp"},Mv={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"displayName",header:"Name"},{field:"projectId",header:"Project ID",width:"w-48",cell:"muted"}],searchPlaceholder:"Search projects...",searchFields:["displayName","projectId"],dedupeByConfigField:"gcpProjectId",emptyState:{noMatches:"No projects found.",allConfigured:"All accessible projects already have log streams configured."},toStreamItem:{displayName:"$item.displayName",config:{gcpProjectId:"$item.projectId",gcpProjectName:"$item.displayName"}}}},Ev={groups:[{id:"prepare",section:"config",title:"Prepare GCP pipeline",description:"Create a Cloud Logging sink, Pub/Sub topic, and collector subscription.",notes:[{variant:"requirement",text:"Required GCP permissions: the person performing these steps needs a role that grants `logging.sinks.create` (e.g. `roles/logging.configWriter`) and `pubsub.topics.setIamPolicy` (e.g. `roles/pubsub.admin`)."}],actions:[{instruction:"Create a Pub/Sub topic and subscription in your GCP project (e.g. `sazabi-logs` and `sazabi-logs-sub`)."},{instruction:"Create a Cloud Logging sink that routes logs to the Pub/Sub topic. Grant the sink's service account the `roles/pubsub.publisher` role on the topic."},{instruction:"Deploy an OpenTelemetry Collector (e.g. on a GCE instance, GKE pod, or Cloud Run service) using the `opentelemetry-collector-contrib` distribution."},{instruction:"Ensure the collector's service account has the `roles/pubsub.subscriber` IAM role on the subscription."}]},{id:"collector",section:"config",title:"Configure collector",notes:[{variant:"requirement",text:"The receiver requires the `googlecloudlogentry_encoding` encoding extension."}],actions:[{instruction:"Use a `googlecloudpubsub` receiver and `otlp_http` exporter.",payloads:[{kind:"code",label:"Example collector configuration",language:"yaml",copyLabel:"Collector configuration",value:`extensions:
|
|
6856
|
+
tls.verify on`}]}]}]},{id:"restart",section:"verify",title:"Restart and verify",actions:[{instruction:"Restart Fluent Bit so it picks up the updated output configuration, then trigger some log activity.",notes:[{text:"If logs do not appear after restart, check the Fluent Bit process logs for TLS, DNS, or authorization errors."}]}]}]}});var J_;var B_=d(()=>{q_();J_={id:"fluent_bit",name:"Fluent Bit",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"fluent-bit",label:"Fluent Bit",transform:"otlp-passthrough"}],subtitle:"Forward logs from your Kubernetes cluster or any infrastructure to Sazabi using the Fluent Bit agent.",features:["Kubernetes DaemonSet","Container log collection","Multi-pipeline routing","Low resource footprint"],evidenceHints:["fluent-bit.conf, parsers.conf, Helm values, or Kubernetes DaemonSets","Fluent Bit outputs already shipping container logs","README/docs naming Fluent Bit as the log forwarder"],setupSkill:H,dashboard:{iconKey:"fluent-bit",intakeSourceId:"fluent-bit"}}});var Nv,Rv,xv;var H_=d(()=>{St();Nv={kind:"multi-step",steps:[{id:"prepare",title:"Create token",actions:[{kind:"instruction",instruction:"Create a read-only organization token from the CLI or the Fly.io dashboard.",payloads:[{kind:"options",options:[{id:"cli",label:"CLI",payloads:[{kind:"code",language:"bash",copyLabel:"flyctl read-only token command",value:"flyctl tokens create readonly -o <org-slug>"}]},{id:"dashboard",label:"Dashboard",payloads:[{kind:"external-link",label:"Open the Fly.io dashboard",href:"https://fly.io/dashboard",description:"Open the org's Tokens tab and create a read-only token."}]}]}]}]},{id:"credentials",title:"Enter credentials",actions:[{id:"token",kind:"secret",label:"API token",instruction:"Enter your Fly.io API token below.",placeholder:"FlyV1 ..."},{id:"orgSlug",kind:"text",label:"Organization slug",instruction:"Enter your organization slug below.",placeholder:"personal"}]}],submit:{actions:[{kind:"validate",action:"validate",input:{dataSourceType:"fly_io",metadata:{apiToken:"$token",organizationSlug:"$orgSlug"}}}],metadata:{apiToken:"$token",organizationSlug:"$orgSlug"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/fly-io"},Rv={groups:[{id:"shipper",section:"config",title:"Run a log shipper",description:"Fly.io has no managed log-drain API, so you run a log shipper inside your Fly organization and point it at Sazabi.",notes:[{text:"The shipper reads Fly's internal NATS log stream, so it must run in the **same Fly organization** as the apps you want to monitor. The shipper is required either way — to also let Sazabi discover and verify your apps from a read-only token, connect your Fly.io account instead."}],actions:[{instruction:"Pick a log-shipper option — you run **one**, not both. **Option A — fly-log-shipper (simplest):** launch the stock [superfly/fly-log-shipper](https://github.com/superfly/fly-log-shipper) image in your org and enable its generic `http` sink with the two secrets below; Sazabi parses Fly's native JSON event format directly. **Option B — dedicated OTLP shipper:** for per-app keys and richer OTLP resource attributes, build a Vector app that wraps events in an OTLP `resourceLogs` envelope and POSTs to the OTLP endpoint below."}]},{id:"endpoint",section:"config",title:"Set the shipper secrets",actions:[{instruction:"Set the fly-log-shipper secrets (Option A): `HTTP_URL` is your intake URL (above); `HTTP_TOKEN` is the key below.",payloads:[{kind:"copyable",label:"`HTTP_TOKEN`",value:"${context.publicKey}",description:"Your Sazabi public key, sent as a bearer token. Paste the raw key with no `Bearer ` prefix."},{kind:"code",label:"Set both secrets on the shipper app",language:"bash",value:'fly secrets set -a <log-shipper-app> \\\n HTTP_URL="https://${context.ingestHost}/fly-log-shipper" \\\n HTTP_TOKEN="${context.publicKey}"'}]},{instruction:"If you chose the dedicated OTLP shipper (Option B), POST OTLP `resourceLogs` to the endpoint below — with the same public key as a bearer token — instead of setting the two secrets above.",payloads:[{kind:"showIngestUrl",label:"OTLP endpoint (Option B)",pathSuffix:"/v1/logs"}]}]},{id:"verify",section:"verify",title:"Deploy and verify",actions:[{instruction:"Deploy the shipper, then trigger activity — deploy an app or hit a deployed route. Logs appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/fly-io"},xv={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"name",header:"Name"}],searchPlaceholder:"Search apps...",searchFields:["name"],dedupeByConfigField:"appName",emptyState:{noMatches:"No apps found.",allConfigured:"All apps already have log streams configured."},toStreamItem:{displayName:"$item.name",config:{appName:"$item.name"}}}}});var l8,u8,W_;var F_=d(()=>{H_();l8=["apiToken"],u8={id:"fly-io",label:"Fly.io",transform:"otlp-with-fly-log-shipper"},W_={id:"fly_io",name:"Fly.io",searchAliases:["fly","flyio"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:l8,intake:[u8],subtitle:"Forward your Fly.io application logs directly to Sazabi for global monitoring.",features:["Log shipping","Multi-region logs","Machine monitoring"],evidenceHints:["fly.toml or .fly/ app configuration","FLY_* environment variables or scripts that run flyctl/fly deploy","README/docs naming Fly.io as the deployment host"],setupSkill:H,dashboard:{iconKey:"fly-io",intakeSourceId:"fly-io",streamSelectorLayout:"sidepanel",actions:{submit:{validate:{procedure:"dataSources.validateConnection"}},list:{list:{kind:"source-action",actionId:"list-apps",itemsField:"apps"}}}}}});var Uv,Mv,Ev;var Z_=d(()=>{St();Uv={kind:"choice",title:"Choose setup method",description:"Select how you want to connect Google Cloud logs.",options:[{id:"service-account",label:"Service account",description:"Let Sazabi set up the log sink, Pub/Sub topic, and pull subscription automatically.",flow:{kind:"multi-step",steps:[{id:"prepare",title:"Prepare access",description:"Create a service account key with permissions for log forwarding.",notes:[{text:"Sazabi turns on the required APIs and sets up the log pipeline in your GCP project automatically."}],actions:[{kind:"instruction",instruction:"Grant the service account the following roles on the target GCP project(s).",payloads:[{kind:"copyable-list",items:[{value:"roles/serviceusage.serviceUsageAdmin"},{value:"roles/logging.configWriter"},{value:"roles/pubsub.admin"},{value:"roles/browser"}]},{kind:"external-link",label:"Enable the Service Usage API",href:"https://console.cloud.google.com/apis/library/serviceusage.googleapis.com"}],notes:[{text:'New or auto-created projects (for example a `gen-lang-client-...` project from Google AI Studio) may also need the Service Usage API enabled first. Sazabi uses that API to turn on the others, but it cannot enable itself. If you hit a "Service Usage API has not been used / is disabled" error, enable it on the project, wait about a minute, then retry.'}]},{kind:"instruction",instruction:"To create the key: go to [Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts) in the Google Cloud Console, select (or create) the service account, open **Keys**, then choose **Add key → Create new key → JSON**. Download the file — you'll paste its contents in the next step. Alternatively, use `gcloud iam service-accounts keys create sazabi-key.json --iam-account=YOUR_SERVICE_ACCOUNT_EMAIL`.",payloads:[{kind:"external-link",label:"Open service accounts in GCP Console",href:"https://console.cloud.google.com/iam-admin/serviceaccounts"}]}]},{id:"credentials",title:"Enter service account key",actions:[{id:"key",kind:"secret",label:"Service account key (JSON)",instruction:"Paste your service account key JSON below.",placeholder:'{"type": "service_account", "project_id": "...", ...}'}]}],submit:{actions:[{kind:"validate",action:"validate",input:{serviceAccountKey:"$key"},resultAs:"validateKey"},{kind:"preflight",action:"preflight",input:{serviceAccountKey:"$key"}}],metadata:{serviceAccountKey:"$key"},displayName:"GCP $validateKey.projectId",button:Ue}}},{id:"connectionless",label:"Your own collector",description:"Configure the sink, Pub/Sub topic, and collector yourself.",flow:{kind:"connectionless"}}],docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/gcp"},Mv={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"displayName",header:"Name"},{field:"projectId",header:"Project ID",width:"w-48",cell:"muted"}],searchPlaceholder:"Search projects...",searchFields:["displayName","projectId"],dedupeByConfigField:"gcpProjectId",emptyState:{noMatches:"No projects found.",allConfigured:"All accessible projects already have log streams configured."},toStreamItem:{displayName:"$item.displayName",config:{gcpProjectId:"$item.projectId",gcpProjectName:"$item.displayName"}}}},Ev={groups:[{id:"prepare",section:"config",title:"Prepare GCP pipeline",description:"Create a Cloud Logging sink, Pub/Sub topic, and collector subscription.",notes:[{variant:"requirement",text:"Required GCP permissions: the person performing these steps needs a role that grants `logging.sinks.create` (e.g. `roles/logging.configWriter`) and `pubsub.topics.setIamPolicy` (e.g. `roles/pubsub.admin`)."}],actions:[{instruction:"Create a Pub/Sub topic and subscription in your GCP project (e.g. `sazabi-logs` and `sazabi-logs-sub`)."},{instruction:"Create a Cloud Logging sink that routes logs to the Pub/Sub topic. Grant the sink's service account the `roles/pubsub.publisher` role on the topic."},{instruction:"Deploy an OpenTelemetry Collector (e.g. on a GCE instance, GKE pod, or Cloud Run service) using the `opentelemetry-collector-contrib` distribution."},{instruction:"Ensure the collector's service account has the `roles/pubsub.subscriber` IAM role on the subscription."}]},{id:"collector",section:"config",title:"Configure collector",notes:[{variant:"requirement",text:"The receiver requires the `googlecloudlogentry_encoding` encoding extension."}],actions:[{instruction:"Use a `googlecloudpubsub` receiver and `otlp_http` exporter.",payloads:[{kind:"code",label:"Example collector configuration",language:"yaml",copyLabel:"Collector configuration",value:`extensions:
|
|
6857
6857
|
googlecloudlogentry_encoding:
|
|
6858
6858
|
|
|
6859
6859
|
receivers:
|
|
@@ -6871,7 +6871,7 @@ service:
|
|
|
6871
6871
|
pipelines:
|
|
6872
6872
|
logs:
|
|
6873
6873
|
receivers: [googlecloudpubsub]
|
|
6874
|
-
exporters: [otlp_http]`}]}]},{id:"run",section:"verify",title:"Run and verify",actions:[{instruction:"Deploy the collector, then write a test log entry in the project and check for delivery errors on the collector and Pub/Sub subscription."}]}]}});var d8,g8,X_;var Y_=d(()=>{Z_();d8=["serviceAccountKey"],g8={id:"gcp",label:"Google Cloud Platform",
|
|
6874
|
+
exporters: [otlp_http]`}]}]},{id:"run",section:"verify",title:"Run and verify",actions:[{instruction:"Deploy the collector, then write a test log entry in the project and check for delivery errors on the collector and Pub/Sub subscription."}]}]}});var d8,g8,X_;var Y_=d(()=>{Z_();d8=["serviceAccountKey"],g8={id:"gcp",label:"Google Cloud Platform",transform:"gcp-pubsub-push"},X_={id:"gcp",name:"GCP",searchAliases:["google cloud","google cloud platform","gcloud"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["pull"],lifecycleEligible:!0,sensitiveFields:d8,intake:[g8],subtitle:"Connect your GCP logs to Sazabi for AI-powered observability. Automatically provision log sinks with a service account, or run your own collector.",features:["Log forwarding","Real-time streaming","Log sink support"],evidenceHints:["Google Cloud Run, GKE, Cloud Functions, Pub/Sub, or Cloud Logging resources","gcloud scripts, GOOGLE_CLOUD_PROJECT, GCLOUD_PROJECT, or Terraform google provider","README/docs naming Google Cloud as the runtime or log provider"],setupSkill:H,dashboard:{iconKey:"gcp",intakeSourceId:"gcp",streamSelectorLayout:"sidepanel",actions:{submit:{validate:{kind:"source-action",actionId:"validate-service-account-key"},preflight:{kind:"source-action",actionId:"run-preflight-checks",normalize:"preflight"}},list:{list:{kind:"source-action",actionId:"list-projects",itemsField:"projects"}}}}}});var Kv;var Q_=d(()=>{Kv={perStreamInstructions:!0,groups:[{id:"copy-config",section:"config",title:"Copy Alloy pipeline",actions:[{instruction:"Add Sazabi as an OTLP HTTP exporter in your Alloy deployment.",payloads:[{kind:"code-tabs",label:"Alloy configuration",description:"Choose the snippet format that matches how you deploy Alloy.",tabs:[{id:"river",label:"`config.alloy`",language:"hcl",copyLabel:"Alloy config",value:`otelcol.receiver.otlp "default" {
|
|
6875
6875
|
grpc {}
|
|
6876
6876
|
http {}
|
|
6877
6877
|
|
|
@@ -6916,7 +6916,7 @@ otelcol.exporter.otlphttp "sazabi" {
|
|
|
6916
6916
|
client {
|
|
6917
6917
|
endpoint = "https://\${context.ingestHost}"
|
|
6918
6918
|
}
|
|
6919
|
-
}`}]}]}]},{id:"wire-receivers",section:"config",title:"Wire receivers",actions:[{instruction:"Replace `otelcol.receiver.otlp` with the OpenTelemetry receiver(s) that match your sources, such as `otelcol.receiver.filelog` for log files or `otelcol.receiver.jaeger` for Jaeger traces."},{instruction:"Ensure each upstream `otelcol.*` component lists `otelcol.processor.batch.default.input` in its `output` block to ship data to Sazabi."}]}]}});var V_;var ej=d(()=>{Q_();V_={id:"grafana_alloy",name:"Grafana Alloy",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"grafana-alloy",label:"Grafana Alloy",
|
|
6919
|
+
}`}]}]}]},{id:"wire-receivers",section:"config",title:"Wire receivers",actions:[{instruction:"Replace `otelcol.receiver.otlp` with the OpenTelemetry receiver(s) that match your sources, such as `otelcol.receiver.filelog` for log files or `otelcol.receiver.jaeger` for Jaeger traces."},{instruction:"Ensure each upstream `otelcol.*` component lists `otelcol.processor.batch.default.input` in its `output` block to ship data to Sazabi."}]}]}});var V_;var ej=d(()=>{Q_();V_={id:"grafana_alloy",name:"Grafana Alloy",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"grafana-alloy",label:"Grafana Alloy",transform:"otlp-passthrough"}],subtitle:"Forward logs and traces from your infrastructure to Sazabi using Grafana Alloy.",features:["Kubernetes DaemonSet","OpenTelemetry native","Flexible River pipeline","Logs and traces"],evidenceHints:["config.alloy, Grafana Alloy Helm values, or River pipeline config","Alloy components that collect Kubernetes, Docker, logs, or traces","README/docs naming Grafana Alloy or Grafana Agent for telemetry forwarding"],setupSkill:H,dashboard:{iconKey:"grafana-alloy",intakeSourceId:"grafana-alloy"}}});var Gv;var tj=d(()=>{St();Gv={groups:[{id:"instrument",section:"config",title:"Instrument the host application",description:"Configure the application that serves your Inngest functions to export OpenTelemetry data.",actions:[...cl("host application")]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy or restart the application that serves your Inngest functions, then invoke a function to generate fresh telemetry."}]}]}});var nj;var oj=d(()=>{tj();nj={id:"inngest",name:"Inngest",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",intake:[{id:"inngest",label:"Inngest",transform:"otlp-passthrough"}],subtitle:"Forward your Inngest function logs directly to Sazabi for workflow observability.",features:["Function logs","Event tracing","Step monitoring"],evidenceHints:["inngest package imports, inngest/client files, or serve handlers","INNGEST_* environment variables or functions under inngest/","README/docs naming Inngest for background jobs, workflows, or event handling"],setupSkill:H,dashboard:{iconKey:"inngest",intakeSourceId:"inngest"}}});var y8,qv;var ij=d(()=>{y8={instruction:"Set the following environment variables in your application environment so they are present when the process starts — `OTEL_EXPORTER_OTLP_ENDPOINT` is your intake URL (above).",payloads:[{kind:"copyable",label:"`OTEL_EXPORTER_OTLP_PROTOCOL`",value:"http/protobuf",copyLabel:"OTLP protocol"}]},qv={groups:[{id:"install-initialize",section:"config",title:"Install and initialize OpenInference",description:"LangChain doesn't send OpenTelemetry traces on its own; OpenInference instruments it.",actions:[{instruction:"Install OpenInference for your LangChain runtime, then run the init snippet once at startup before importing LangChain.",payloads:[{kind:"options",options:[{id:"python",label:"Python",description:"Install OpenInference and initialize tracing before importing LangChain.",payloads:[{kind:"code",label:"Python install command",language:"bash",copyLabel:"Python install command",value:"pip install openinference-instrumentation-langchain \\\n opentelemetry-sdk \\\n opentelemetry-exporter-otlp-proto-http"},{kind:"code",label:"Python init snippet",language:"python",copyLabel:"Python init snippet",value:`from opentelemetry import trace
|
|
6920
6920
|
from opentelemetry.sdk.resources import Resource
|
|
6921
6921
|
from opentelemetry.sdk.trace import TracerProvider
|
|
6922
6922
|
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
@@ -6941,7 +6941,7 @@ provider.register();
|
|
|
6941
6941
|
|
|
6942
6942
|
// LangChain.js has no traditional auto-instrumentable module structure, so the
|
|
6943
6943
|
// callbacks manager must be wired in by hand.
|
|
6944
|
-
new LangChainInstrumentation().manuallyInstrument(CallbackManagerModule);`}],notes:[{text:"LangChain.js has no module structure that OpenInference can auto-instrument, so you wire in the callbacks manager by hand."}]}]}]}]},{id:"environment",section:"config",title:"Set OTLP environment",description:"The OpenTelemetry SDK reads these variables automatically.",actions:[y8]},{id:"verify",section:"verify",title:"Run and verify",actions:[{instruction:"Run a chain or agent invocation, then confirm traces arrive in Sazabi within a few minutes."}]}]}});var rj;var aj=d(()=>{ij();rj={id:"langchain",name:"LangChain",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",intake:[{id:"langchain",label:"LangChain",
|
|
6944
|
+
new LangChainInstrumentation().manuallyInstrument(CallbackManagerModule);`}],notes:[{text:"LangChain.js has no module structure that OpenInference can auto-instrument, so you wire in the callbacks manager by hand."}]}]}]}]},{id:"environment",section:"config",title:"Set OTLP environment",description:"The OpenTelemetry SDK reads these variables automatically.",actions:[y8]},{id:"verify",section:"verify",title:"Run and verify",actions:[{instruction:"Run a chain or agent invocation, then confirm traces arrive in Sazabi within a few minutes."}]}]}});var rj;var aj=d(()=>{ij();rj={id:"langchain",name:"LangChain",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",intake:[{id:"langchain",label:"LangChain",transform:"otlp-passthrough"}],subtitle:"Forward LangChain traces to Sazabi for end-to-end LLM observability.",features:["Chain tracing","Tool & agent traces","LLM call traces"],evidenceHints:["langchain packages in Python or JavaScript dependencies","LANGCHAIN_* environment variables or LangSmith tracing configuration","Agent, chain, retriever, or tool code built on LangChain"],setupSkill:H,dashboard:{iconKey:"langchain",intakeSourceId:"langchain"}}});var Jv;var cj=d(()=>{Jv={groups:[{id:"environment",section:"config",title:"Set intake URL",actions:[{instruction:"Set `SAZABI_INTAKE_URL` to your intake URL (above) in the application that initializes Mastra."}]},{id:"configure",section:"config",title:"Configure Mastra",actions:[{instruction:"Add Sazabi as a custom OTEL exporter in your Mastra observability config.",payloads:[{kind:"code",label:"Configuration",language:"typescript",copyLabel:"TypeScript code",value:`// src/mastra/index.ts
|
|
6945
6945
|
import { Mastra } from "@mastra/core";
|
|
6946
6946
|
import { OtelExporter } from "@mastra/otel-exporter";
|
|
6947
6947
|
import { Observability } from "@mastra/observability";
|
|
@@ -6969,7 +6969,7 @@ export const mastra = new Mastra({
|
|
|
6969
6969
|
|
|
6970
6970
|
// Use your Mastra instance
|
|
6971
6971
|
const agent = mastra.getAgent("my-agent");
|
|
6972
|
-
const response = await agent.generate("Hello, world!");`}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy or restart the service, then run an agent, tool, or workflow to generate a trace."}]}]}});var sj;var hj=d(()=>{cj();sj={id:"mastra",name:"Mastra",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",intake:[{id:"mastra",label:"Mastra",subdomain:"mastra",transform:"otlp-passthrough"}],subtitle:"Stream your Mastra agent traces directly to Sazabi for AI workflow observability.",features:["Agent traces","Tool tracing","Workflow monitoring"],evidenceHints:["@mastra packages, mastra.config files, or Mastra agent definitions","MASTRA_* environment variables","README/docs naming Mastra for agents, workflows, or LLM orchestration"],setupSkill:H,dashboard:{iconKey:"mastra",intakeSourceId:"mastra"}}});var Bv;var lj=d(()=>{Bv={perStreamInstructions:!0,docsUrl:"https://docs.sazabi.com/data/sources/endpoint/neon",groups:[{id:"open-integration",section:"config",title:"Open Neon integration",notes:[{text:"Neon's OpenTelemetry integration forwards Postgres logs to Sazabi."},{variant:"requirement",text:"The integration is available on Neon's **Scale** plan, and both the integration itself and Postgres logs export are currently in Beta."},{variant:"requirement",text:"You'll need admin access on the Neon project to add it."}],actions:[{instruction:"Add Neon's OpenTelemetry integration for Postgres logs.",payloads:[{kind:"external-link",label:"Open Neon integrations",href:"https://console.neon.tech/app/projects",description:"Choose the Neon project you want to monitor, then open the project's **Integrations** page."}]}]},{id:"select-data",section:"config",title:"Select exported data",actions:[{instruction:"In **Select data to export**, enable `Postgres logs` and leave `Metrics` disabled. Neon does not expose a traces export for this integration."},{instruction:"Choose the `HTTP` protocol."},{instruction:"Configure authentication as `Bearer`. Neon adds the `Bearer` prefix to outgoing requests automatically."}]},{id:"values",section:"config",title:"Set integration values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **OTLP endpoint URL** field, then paste these values into the Neon OpenTelemetry configuration sidebar.",payloads:[{kind:"copyable",label:"Connection protocol",value:"HTTP"},{kind:"copyable",label:"Data to export",value:"Postgres logs only"},{kind:"copyable",label:"Authentication method",value:"Bearer"},{kind:"copyable",label:"Bearer token value",value:"sazabi",copyLabel:"Neon bearer token value",description:"Neon requires a non-empty Bearer token, but Sazabi authenticates using the public key hex embedded in the endpoint hostname and ignores this value — any placeholder works."},{kind:"copyable",label:"`service.name` resource attribute",value:"neon-postgres",copyLabel:"Neon service.name value",description:"Optional but recommended — paste under **Resource attributes** in Neon. Change the suffix (e.g. `neon-postgres-prod`, `neon-checkout-db`) when you have more than one Neon project so streams stay easy to filter in Sazabi."}]}]},{id:"save",section:"verify",title:"Save and verify",actions:[{instruction:"Save the integration, then wait a few minutes for logs to start arriving; if the compute has Scale to Zero enabled and is currently suspended, run a query against the database to wake it and begin log delivery."},{instruction:"If logs do not arrive after a few minutes, check the Neon integration's status panel for OTLP export errors."}]}]}});var b8,uj;var dj=d(()=>{lj();b8=[],uj={id:"neon",name:"Neon",capabilities:["connectionless"],auth:[],delivery:["push"],sensitiveFields:b8,lifecycleSkipReason:"Manual OTLP setup is not exercised by automated lifecycle tests yet.",intake:[{id:"neon",label:"Neon",subdomain:"neon",transform:"otlp-passthrough"}],subtitle:"Forward Neon Postgres logs to Sazabi for database observability without sending metrics or traces.",features:["Postgres logs","Connection events","Error and warning logs"],evidenceHints:["Neon connection strings, neon.tech hosts, or @neondatabase/serverless packages","DATABASE_URL/POSTGRES_URL values documented as Neon","README/docs naming Neon as the Postgres provider"],setupSkill:H,dashboard:{iconKey:"neon",intakeSourceId:"neon"}}});var Hv;var gj=d(()=>{Hv={groups:[{id:"open-form",section:"config",title:"Open log drain form",notes:[{variant:"requirement",text:"Log drains require a Netlify Enterprise plan."}],actions:[{instruction:"Configure a log drain in your [Netlify site settings](https://app.netlify.com) under **Logs & Metrics > Log Drains**."},{instruction:"Select **General HTTP endpoint** as the service."}]},{id:"values",section:"config",title:"Set drain values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **Full URL** field, and set the log drain format below.",payloads:[{kind:"copyable",label:"Log drain format",value:"JSON"}]}]},{id:"save",section:"verify",title:"Save and verify",actions:[{instruction:"Save the drain, then deploy or request the site so Netlify emits fresh logs."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/netlify"}});var yj;var bj=d(()=>{gj();yj={id:"netlify",name:"Netlify",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual drain setup is not exercised by automated lifecycle tests yet.",intake:[{id:"netlify",label:"Netlify",subdomain:"netlify",transform:"netlify-drain"}],subtitle:"Forward your Netlify deployment logs directly to Sazabi for Jamstack observability.",features:["Build logs","Function logs","Edge handler logs"],evidenceHints:["netlify.toml, .netlify/, or Netlify build/deploy scripts","NETLIFY_* environment variables or functions under netlify/functions","README/docs naming Netlify as the deployment host"],setupSkill:H,dashboard:{iconKey:"netlify",intakeSourceId:"netlify"}}});var Wv;var mj=d(()=>{Wv={groups:[{id:"open-form",section:"config",title:"Open observability settings",actions:[{instruction:"In the OpenRouter dashboard, open **Settings > Observability**, toggle **Enable Broadcast** on, then click the edit icon next to **OpenTelemetry Collector**.",payloads:[{kind:"external-link",label:"Settings > Observability",href:"https://openrouter.ai/settings/observability"}]}]},{id:"values",section:"config",title:"Set destination values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **Endpoint** field of the OpenTelemetry Collector destination form."}]},{id:"test",section:"verify",title:"Test and save",description:"OpenRouter saves the destination only after a successful connection test.",actions:[{instruction:"Click **Test Connection** to verify Sazabi accepts the trace.",notes:[{text:"A green check confirms forwarding is enabled."}]}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/openrouter"}});var pj;var wj=d(()=>{mj();pj={id:"openrouter",name:"OpenRouter",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"OpenRouter Broadcast destination setup is not exercised by automated lifecycle tests yet.",intake:[{id:"openrouter",label:"OpenRouter",subdomain:"openrouter",transform:"otlp-passthrough"}],subtitle:"Forward OpenRouter trace spans to Sazabi from the OpenRouter dashboard.",features:["Trace spans per generation","Token & cost tracking","Model & provider attribution"],evidenceHints:["OpenRouter API URLs, OPENROUTER_* environment variables, or openrouter packages","LLM gateway code sending requests to openrouter.ai","README/docs naming OpenRouter for model routing or tracing"],setupSkill:H,dashboard:{iconKey:"openrouter",intakeSourceId:"openrouter"}}});var Fv;var fj=d(()=>{Fv={perStreamInstructions:!0,groups:[{id:"instrument",section:"config",title:"Instrument application",notes:[{text:"Metrics sent to the endpoint aren't stored yet."}],actions:[{instruction:"Add the OpenTelemetry SDK to your application. Most languages have official SDKs available (e.g., `@opentelemetry/api` for Node.js, `opentelemetry-api` for Python, etc.)."},{instruction:"Initialize the OpenTelemetry SDK in your application and configure the OTLP exporters for the signals you want (logs and/or traces)."}]},{id:"environment",section:"config",title:"Set OTLP environment",actions:[{instruction:"Set these variables in the environment that runs your application — `OTEL_EXPORTER_OTLP_ENDPOINT` is your intake URL (above).",payloads:[{kind:"copyable",label:"`OTEL_EXPORTER_OTLP_PROTOCOL`",value:"http/protobuf",copyLabel:"OTLP protocol"}],notes:[{text:"These variables work with any OpenTelemetry SDK (Node.js, Python, Go, Java, .NET, etc.)."}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Restart or redeploy the application, then generate a test log or trace to confirm Sazabi receives telemetry."}]}]}});var m8,vj;var kj=d(()=>{fj();m8={id:"otel-trace",label:"OpenTelemetry Traces",subdomain:"otel-trace",aliases:["mastra","otlp-trace","otlp-traces","otel-traces"],transform:"otlp-traces-only"},vj={id:"otel",name:"OpenTelemetry",searchAliases:["otel","open telemetry"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"otel",label:"OpenTelemetry",subdomain:"otel",aliases:["gcl","otlp"],transform:"otlp-passthrough"},m8],lifecycleSkipReason:"Manual OTLP setup is not exercised by automated lifecycle tests yet.",subtitle:"Send OpenTelemetry logs and traces directly to Sazabi's OTLP-compatible intake for AI-powered observability.",features:["OTLP log export","OTLP trace export","Any OTEL SDK"],evidenceHints:["@opentelemetry packages, opentelemetry-* SDKs, or OTEL_* environment variables","OTLP exporter configuration in application code or deployment manifests","Existing OpenTelemetry instrumentation without a more specific Sazabi source"],setupSkill:H,dashboard:{slug:"opentelemetry",iconKey:"opentelemetry",intakeSourceId:"otel"}}});var Zv;var Sj=d(()=>{Zv={perStreamInstructions:!0,groups:[{id:"copy-config",section:"config",title:"Copy Collector config",actions:[{instruction:"Add the Sazabi exporter and include it in the logs and traces pipelines.",payloads:[{kind:"code-tabs",label:"Collector configuration",description:"Choose the snippet format that matches how you deploy the Collector.",tabs:[{id:"yaml",label:"`otelcol.yaml`",language:"yaml",copyLabel:"Collector config",value:`exporters:
|
|
6972
|
+
const response = await agent.generate("Hello, world!");`}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy or restart the service, then run an agent, tool, or workflow to generate a trace."}]}]}});var sj;var hj=d(()=>{cj();sj={id:"mastra",name:"Mastra",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",intake:[{id:"mastra",label:"Mastra",transform:"otlp-passthrough"}],subtitle:"Stream your Mastra agent traces directly to Sazabi for AI workflow observability.",features:["Agent traces","Tool tracing","Workflow monitoring"],evidenceHints:["@mastra packages, mastra.config files, or Mastra agent definitions","MASTRA_* environment variables","README/docs naming Mastra for agents, workflows, or LLM orchestration"],setupSkill:H,dashboard:{iconKey:"mastra",intakeSourceId:"mastra"}}});var Bv;var lj=d(()=>{Bv={perStreamInstructions:!0,docsUrl:"https://docs.sazabi.com/data/sources/endpoint/neon",groups:[{id:"open-integration",section:"config",title:"Open Neon integration",notes:[{text:"Neon's OpenTelemetry integration forwards Postgres logs to Sazabi."},{variant:"requirement",text:"The integration is available on Neon's **Scale** plan, and both the integration itself and Postgres logs export are currently in Beta."},{variant:"requirement",text:"You'll need admin access on the Neon project to add it."}],actions:[{instruction:"Add Neon's OpenTelemetry integration for Postgres logs.",payloads:[{kind:"external-link",label:"Open Neon integrations",href:"https://console.neon.tech/app/projects",description:"Choose the Neon project you want to monitor, then open the project's **Integrations** page."}]}]},{id:"select-data",section:"config",title:"Select exported data",actions:[{instruction:"In **Select data to export**, enable `Postgres logs` and leave `Metrics` disabled. Neon does not expose a traces export for this integration."},{instruction:"Choose the `HTTP` protocol."},{instruction:"Configure authentication as `Bearer`. Neon adds the `Bearer` prefix to outgoing requests automatically."}]},{id:"values",section:"config",title:"Set integration values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **OTLP endpoint URL** field, then paste these values into the Neon OpenTelemetry configuration sidebar.",payloads:[{kind:"copyable",label:"Connection protocol",value:"HTTP"},{kind:"copyable",label:"Data to export",value:"Postgres logs only"},{kind:"copyable",label:"Authentication method",value:"Bearer"},{kind:"copyable",label:"Bearer token value",value:"sazabi",copyLabel:"Neon bearer token value",description:"Neon requires a non-empty Bearer token, but Sazabi authenticates using the public key hex embedded in the endpoint hostname and ignores this value — any placeholder works."},{kind:"copyable",label:"`service.name` resource attribute",value:"neon-postgres",copyLabel:"Neon service.name value",description:"Optional but recommended — paste under **Resource attributes** in Neon. Change the suffix (e.g. `neon-postgres-prod`, `neon-checkout-db`) when you have more than one Neon project so streams stay easy to filter in Sazabi."}]}]},{id:"save",section:"verify",title:"Save and verify",actions:[{instruction:"Save the integration, then wait a few minutes for logs to start arriving; if the compute has Scale to Zero enabled and is currently suspended, run a query against the database to wake it and begin log delivery."},{instruction:"If logs do not arrive after a few minutes, check the Neon integration's status panel for OTLP export errors."}]}]}});var b8,uj;var dj=d(()=>{lj();b8=[],uj={id:"neon",name:"Neon",capabilities:["connectionless"],auth:[],delivery:["push"],sensitiveFields:b8,lifecycleSkipReason:"Manual OTLP setup is not exercised by automated lifecycle tests yet.",intake:[{id:"neon",label:"Neon",transform:"otlp-passthrough"}],subtitle:"Forward Neon Postgres logs to Sazabi for database observability without sending metrics or traces.",features:["Postgres logs","Connection events","Error and warning logs"],evidenceHints:["Neon connection strings, neon.tech hosts, or @neondatabase/serverless packages","DATABASE_URL/POSTGRES_URL values documented as Neon","README/docs naming Neon as the Postgres provider"],setupSkill:H,dashboard:{iconKey:"neon",intakeSourceId:"neon"}}});var Hv;var gj=d(()=>{Hv={groups:[{id:"open-form",section:"config",title:"Open log drain form",notes:[{variant:"requirement",text:"Log drains require a Netlify Enterprise plan."}],actions:[{instruction:"Configure a log drain in your [Netlify site settings](https://app.netlify.com) under **Logs & Metrics > Log Drains**."},{instruction:"Select **General HTTP endpoint** as the service."}]},{id:"values",section:"config",title:"Set drain values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **Full URL** field, and set the log drain format below.",payloads:[{kind:"copyable",label:"Log drain format",value:"JSON"}]}]},{id:"save",section:"verify",title:"Save and verify",actions:[{instruction:"Save the drain, then deploy or request the site so Netlify emits fresh logs."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/netlify"}});var yj;var bj=d(()=>{gj();yj={id:"netlify",name:"Netlify",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual drain setup is not exercised by automated lifecycle tests yet.",intake:[{id:"netlify",label:"Netlify",transform:"netlify-drain"}],subtitle:"Forward your Netlify deployment logs directly to Sazabi for Jamstack observability.",features:["Build logs","Function logs","Edge handler logs"],evidenceHints:["netlify.toml, .netlify/, or Netlify build/deploy scripts","NETLIFY_* environment variables or functions under netlify/functions","README/docs naming Netlify as the deployment host"],setupSkill:H,dashboard:{iconKey:"netlify",intakeSourceId:"netlify"}}});var Wv;var mj=d(()=>{Wv={groups:[{id:"open-form",section:"config",title:"Open observability settings",actions:[{instruction:"In the OpenRouter dashboard, open **Settings > Observability**, toggle **Enable Broadcast** on, then click the edit icon next to **OpenTelemetry Collector**.",payloads:[{kind:"external-link",label:"Settings > Observability",href:"https://openrouter.ai/settings/observability"}]}]},{id:"values",section:"config",title:"Set destination values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **Endpoint** field of the OpenTelemetry Collector destination form."}]},{id:"test",section:"verify",title:"Test and save",description:"OpenRouter saves the destination only after a successful connection test.",actions:[{instruction:"Click **Test Connection** to verify Sazabi accepts the trace.",notes:[{text:"A green check confirms forwarding is enabled."}]}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/openrouter"}});var pj;var wj=d(()=>{mj();pj={id:"openrouter",name:"OpenRouter",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"OpenRouter Broadcast destination setup is not exercised by automated lifecycle tests yet.",intake:[{id:"openrouter",label:"OpenRouter",transform:"otlp-passthrough"}],subtitle:"Forward OpenRouter trace spans to Sazabi from the OpenRouter dashboard.",features:["Trace spans per generation","Token & cost tracking","Model & provider attribution"],evidenceHints:["OpenRouter API URLs, OPENROUTER_* environment variables, or openrouter packages","LLM gateway code sending requests to openrouter.ai","README/docs naming OpenRouter for model routing or tracing"],setupSkill:H,dashboard:{iconKey:"openrouter",intakeSourceId:"openrouter"}}});var Fv;var fj=d(()=>{Fv={perStreamInstructions:!0,groups:[{id:"instrument",section:"config",title:"Instrument application",notes:[{text:"Metrics sent to the endpoint aren't stored yet."}],actions:[{instruction:"Add the OpenTelemetry SDK to your application. Most languages have official SDKs available (e.g., `@opentelemetry/api` for Node.js, `opentelemetry-api` for Python, etc.)."},{instruction:"Initialize the OpenTelemetry SDK in your application and configure the OTLP exporters for the signals you want (logs and/or traces)."}]},{id:"environment",section:"config",title:"Set OTLP environment",actions:[{instruction:"Set these variables in the environment that runs your application — `OTEL_EXPORTER_OTLP_ENDPOINT` is your intake URL (above).",payloads:[{kind:"copyable",label:"`OTEL_EXPORTER_OTLP_PROTOCOL`",value:"http/protobuf",copyLabel:"OTLP protocol"}],notes:[{text:"These variables work with any OpenTelemetry SDK (Node.js, Python, Go, Java, .NET, etc.)."}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Restart or redeploy the application, then generate a test log or trace to confirm Sazabi receives telemetry."}]}]}});var m8,vj;var kj=d(()=>{fj();m8={id:"otel-trace",label:"OpenTelemetry Traces",aliases:["mastra","otlp-trace","otlp-traces","otel-traces"],transform:"otlp-traces-only"},vj={id:"otel",name:"OpenTelemetry",searchAliases:["otel","open telemetry"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"otel",label:"OpenTelemetry",aliases:["gcl","otlp"],transform:"otlp-passthrough"},m8],lifecycleSkipReason:"Manual OTLP setup is not exercised by automated lifecycle tests yet.",subtitle:"Send OpenTelemetry logs and traces directly to Sazabi's OTLP-compatible intake for AI-powered observability.",features:["OTLP log export","OTLP trace export","Any OTEL SDK"],evidenceHints:["@opentelemetry packages, opentelemetry-* SDKs, or OTEL_* environment variables","OTLP exporter configuration in application code or deployment manifests","Existing OpenTelemetry instrumentation without a more specific Sazabi source"],setupSkill:H,dashboard:{slug:"opentelemetry",iconKey:"opentelemetry",intakeSourceId:"otel"}}});var Zv;var Sj=d(()=>{Zv={perStreamInstructions:!0,groups:[{id:"copy-config",section:"config",title:"Copy Collector config",actions:[{instruction:"Add the Sazabi exporter and include it in the logs and traces pipelines.",payloads:[{kind:"code-tabs",label:"Collector configuration",description:"Choose the snippet format that matches how you deploy the Collector.",tabs:[{id:"yaml",label:"`otelcol.yaml`",language:"yaml",copyLabel:"Collector config",value:`exporters:
|
|
6973
6973
|
otlphttp/sazabi:
|
|
6974
6974
|
endpoint: "https://\${context.ingestHost}"
|
|
6975
6975
|
|
|
@@ -6995,7 +6995,7 @@ service:
|
|
|
6995
6995
|
traces:
|
|
6996
6996
|
receivers: [otlp]
|
|
6997
6997
|
processors: [batch]
|
|
6998
|
-
exporters: [otlphttp/sazabi]`}]}]}]},{id:"adjust-pipelines",section:"config",title:"Adjust pipelines",actions:[{instruction:"Match the receivers to the sources you have configured.",notes:[{text:"The `filelog` receiver collects container logs on Kubernetes; the `otlp` receiver accepts spans from instrumented services."}]}]}]}});var Pj;var Ij=d(()=>{Sj();Pj={id:"otel_collector",name:"OpenTelemetry Collector",searchAliases:["otel","otel collector","open telemetry collector"],capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"otel-collector",label:"OpenTelemetry Collector",
|
|
6998
|
+
exporters: [otlphttp/sazabi]`}]}]}]},{id:"adjust-pipelines",section:"config",title:"Adjust pipelines",actions:[{instruction:"Match the receivers to the sources you have configured.",notes:[{text:"The `filelog` receiver collects container logs on Kubernetes; the `otlp` receiver accepts spans from instrumented services."}]}]}]}});var Pj;var Ij=d(()=>{Sj();Pj={id:"otel_collector",name:"OpenTelemetry Collector",searchAliases:["otel","otel collector","open telemetry collector"],capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"otel-collector",label:"OpenTelemetry Collector",transform:"otlp-passthrough"}],subtitle:"Forward logs and traces from your infrastructure to Sazabi using the OpenTelemetry Collector.",features:["Kubernetes DaemonSet","Vendor-neutral standard","Extensible via contrib","Logs and traces"],evidenceHints:["otelcol, opentelemetry-collector, or collector config YAML","Kubernetes DaemonSets or Helm values for OpenTelemetry Collector","OTLP receiver/exporter pipelines that can add a Sazabi exporter"],setupSkill:H,dashboard:{iconKey:"otel-collector",intakeSourceId:"otel-collector"}}});var Xv;var $j=d(()=>{Xv={perStreamInstructions:!0,groups:[{id:"instrument",section:"config",title:"Instrument application",notes:[{text:"Sazabi stores each incoming metric data point as a log record, so you can search metrics alongside your logs and traces and line them up with each other."}],actions:[{instruction:"Add or enable the OpenTelemetry metrics SDK in your application, or configure the OTLP metrics exporter on your OpenTelemetry Collector."}]},{id:"environment",section:"config",title:"Set OTLP metrics environment",actions:[{instruction:"Set these variables in the environment that runs your application or Collector — `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` is your intake URL (above).",payloads:[{kind:"copyable",label:"`OTEL_EXPORTER_OTLP_PROTOCOL`",value:"http/protobuf",copyLabel:"OTLP protocol"}],notes:[{text:"These variables work with any OpenTelemetry SDK or Collector that exports OTLP metrics."}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Restart or redeploy, then generate a metric to confirm Sazabi receives it as a log record."}]}]}});var Oj;var Aj=d(()=>{$j();Oj={id:"otel_metrics",name:"OpenTelemetry Metrics",searchAliases:["otel metrics","opentelemetry metrics","otlp metrics","metrics as logs"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"otel-metrics",label:"OpenTelemetry Metrics",aliases:["otlp-metrics"],transform:"otlp-metrics-as-logs"}],lifecycleSkipReason:"Manual OTLP metrics setup is not exercised by automated lifecycle tests yet.",subtitle:"Send OpenTelemetry metrics to Sazabi's OTLP intake and store them as searchable log records.",features:["OTLP metric export","Metrics stored as log records","Any OTEL SDK or Collector"],evidenceHints:["OTLP metric exporters (OTEL_EXPORTER_OTLP_METRICS_* env vars) without a metrics backend","OpenTelemetry metrics instrumentation routed to a generic OTLP endpoint","A desire to query metrics alongside logs and traces in one place"],setupSkill:H,dashboard:{slug:"opentelemetry-metrics",iconKey:"opentelemetry-metrics",intakeSourceId:"otel-metrics"}}});var Yv,Qv,Vv;var Tj=d(()=>{St();Yv={kind:"multi-step",steps:[{id:"prepare",title:"Create API key",actions:[{kind:"instruction",instruction:"In Plain, open **Settings → Machine users** and create a machine user API key. The API key settings live under a workspace-scoped URL (`app.plain.com/workspace/<your-org-id>/settings/machine-users`), so open it from within your own Plain workspace."},{kind:"instruction",instruction:"Grant the key these permissions: `webhookTarget:create`, `webhookTarget:edit`, `webhookTarget:delete`, `webhookTarget:read`, and `subscriptionEventTypes:read`. Workspace read access is included with every key."}]},{id:"credentials",title:"Enter API key",actions:[{id:"apiKey",kind:"secret",label:"Plain API key",instruction:"Enter your Plain API key below.",description:"Machine user API key with webhookTarget and subscriptionEventTypes permissions.",placeholder:"plainApiKey_..."}]}],submit:{actions:[{kind:"validate",action:"validate",input:{apiKey:"$apiKey"},resultAs:"workspace"}],metadata:{plainApiKey:"$apiKey"},displayName:"$workspace.workspaceName",button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/plain"},Qv={groups:[{id:"open-webhooks",section:"config",title:"Open Plain webhooks",actions:[{instruction:"In your [Plain workspace](https://app.plain.com/settings/webhooks), go to **Settings > Webhooks** and click **Create webhook target**.",notes:[{text:"You configure and own this webhook target — you choose which event types it subscribes to in Plain. Sazabi never receives a Plain API key on this path and does not create, edit, or delete the target. To have Sazabi enumerate event types and manage the webhook target for you, connect your Plain account instead."}]}]},{id:"endpoint",section:"config",title:"Set webhook URL",actions:[{instruction:"Paste your Sazabi intake URL (above) into the webhook target configuration."},{instruction:"Enable the target and select the event types you want to forward."}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the webhook target, then trigger a subscribed event in Plain (for example create or update a thread). Events appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/plain"},Vv={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"eventType",header:"Event type",cell:"mono"},{field:"description",header:"Description",cell:"muted"}],searchPlaceholder:"Search event types...",searchFields:["eventType","description"],dedupeByConfigField:"eventType",dedupeExpandArrayField:"eventTypes",aggregateSelection:{displayName:"Plain events",itemField:"eventType",configField:"eventTypes"},emptyState:{noMatches:"No event types found.",allConfigured:"All Plain event types already have streams configured.",noItems:"Plain returned no subscribable event types for this API key. Confirm the key has subscriptionEventTypes:read permission."},toStreamItem:{displayName:"$item.eventType",config:{eventType:"$item.eventType"}}}}});var p8,w8,Lj;var Dj=d(()=>{Tj();p8=["plainApiKey"],w8={id:"plain",label:"Plain",transform:"plain-webhook"},Lj={id:"plain",name:"Plain",searchAliases:["plain.com","plain support","plain customer support"],capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!1,lifecycleSkipReason:"No automated integration fixture yet: Plain has no sandbox workspace API for minting disposable API keys and webhook targets in CI.",sensitiveFields:p8,intake:[w8],subtitle:"Stream Plain customer support events into Sazabi for unified observability of your support workflows.",features:["Webhook event streaming","Multi-event webhook targets","Thread and customer activity"],evidenceHints:["@team-plain/typescript-sdk usage or PLAIN_API_KEY environment variables","core-api.uk.plain.com GraphQL calls or Plain webhook handlers","README/docs naming Plain for customer support, tickets, or threads"],setupSkill:H,dashboard:{iconKey:"plain",intakeSourceId:"plain",streamSelectorLayout:"sidepanel",streamTableColumns:[{kind:"config-text",header:"Event types",width:"w-96",configField:"eventTypes",fallbackLabel:"Unknown events"}],actions:{submit:{validate:{kind:"source-action",actionId:"validate",sensitiveInputFields:["apiKey"]}},list:{list:{kind:"source-action",actionId:"list-event-types",itemsField:"eventTypes"}}}}}});var ek;var Cj=d(()=>{ek={groups:[{id:"send-telemetry",section:"config",title:"Send OpenTelemetry",actions:[{instruction:"Send OTLP telemetry to Sazabi directly from your app, or from a collector running in Porter.",payloads:[{kind:"external-link",label:"Open Porter dashboard",href:"https://dashboard.porter.run"}],notes:[{text:"Porter does not provide a generic log drain."}]}]},{id:"configure-exporter",section:"config",title:"Configure the exporter",actions:[{instruction:"Set these environment variables on the Porter service you want to monitor.",payloads:[{kind:"code",label:"Porter environment variables",description:"Porter injects the `PORTER_*` values from its app and deployment metadata at runtime. The keyed endpoint URL embeds your project key, so no auth header is needed.",language:"bash",value:`OTEL_EXPORTER_OTLP_ENDPOINT=https://\${context.ingestHost}
|
|
6999
6999
|
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
|
|
7000
7000
|
OTEL_SERVICE_NAME=$PORTER_APP_SERVICE_NAME
|
|
7001
7001
|
OTEL_RESOURCE_ATTRIBUTES=service.version=$PORTER_IMAGE_TAG,porter.revision=$PORTER_POD_REVISION,porter.pod.name=$PORTER_POD_NAME`,copyLabel:"Porter environment variables"}],notes:[{text:"You can also put shared values in a Porter environment group."}]},{instruction:"Install the OpenTelemetry SDK if your app does not already initialize OpenTelemetry.",payloads:[{kind:"code-tabs",label:"Install the OpenTelemetry SDK",tabs:[{id:"node",label:"Node.js",language:"bash",value:"bun add @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-proto @opentelemetry/exporter-logs-otlp-proto @opentelemetry/sdk-logs",copyLabel:"Node.js OpenTelemetry install"},{id:"python",label:"Python",language:"bash",value:`pip install opentelemetry-distro opentelemetry-exporter-otlp-proto-http
|
|
@@ -7029,10 +7029,10 @@ try {
|
|
|
7029
7029
|
});
|
|
7030
7030
|
} catch (err) {
|
|
7031
7031
|
console.error("OpenTelemetry initialization failed", err);
|
|
7032
|
-
}`,copyLabel:"Node.js instrumentation.cjs",collapsible:!0}]},{instruction:"Redeploy the Porter service, then generate a request or test log line."},{instruction:"Return to Sazabi and check for incoming logs or traces. If nothing appears, check the Porter logs for OpenTelemetry exporter errors."}]}]}});var zj;var _j=d(()=>{Cj();zj={id:"porter",name:"Porter",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleEligible:!1,lifecycleSkipReason:"Manual OTEL setup is not exercised by automated lifecycle tests yet.",intake:[{id:"porter",label:"Porter",
|
|
7032
|
+
}`,copyLabel:"Node.js instrumentation.cjs",collapsible:!0}]},{instruction:"Redeploy the Porter service, then generate a request or test log line."},{instruction:"Return to Sazabi and check for incoming logs or traces. If nothing appears, check the Porter logs for OpenTelemetry exporter errors."}]}]}});var zj;var _j=d(()=>{Cj();zj={id:"porter",name:"Porter",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleEligible:!1,lifecycleSkipReason:"Manual OTEL setup is not exercised by automated lifecycle tests yet.",intake:[{id:"porter",label:"Porter",transform:"otlp-passthrough"}],subtitle:"Forward your Porter application logs and traces directly to Sazabi for real-time monitoring.",features:["Application logs","Deployment logs","Service monitoring"],evidenceHints:["porter.yaml or .github/workflows/porter.yml","PORTER_* environment variables","README/docs naming Porter (porter.run) as the deploy host"],setupSkill:H,dashboard:{iconKey:"porter",intakeSourceId:"porter"}}});var tk,f8,nk,ok;var jj=d(()=>{St();tk={kind:"multi-step",steps:[{id:"prepare",title:"Create key",actions:[{kind:"instruction",instruction:"Create a personal API key in your PostHog account under **Settings > Personal API keys** ([US](https://us.posthog.com/settings/user-api-keys) · [EU](https://eu.posthog.com/settings/user-api-keys))."},{kind:"instruction",instruction:"Grant it these scopes:\n\n- `project:read` - list your projects\n- `organization:read` - show your organization\n- `hog_function:write` - install the webhook destination"}]},{id:"credentials",title:"Enter API key",actions:[{id:"token",kind:"secret",label:"Personal API key",instruction:"Enter your personal API key below.",placeholder:"phx_..."}]}],submit:{actions:[{kind:"validate",action:"validate",input:{token:"$token"},resultAs:"validate"},{kind:"preflight",action:"preflight",input:{token:"$token",region:"$validate.posthogApiRegion",organizationId:"$validate.posthogOrganizationId"}}],metadata:{posthogPersonalApiKey:"$token",posthogApiRegion:"$validate.posthogApiRegion",posthogOrganizationId:"$validate.posthogOrganizationId",posthogOrganizationName:"$validate.posthogOrganizationName"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/posthog"},f8=[{field:"name",header:"Project"},{field:"organizationName",header:"Organization",width:"w-48",transform:"fallback: - "}],nk={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:f8,searchPlaceholder:"Search projects...",searchFields:["name","organizationName"],dedupeByConfigField:"posthogProjectId",emptyState:{noMatches:"No projects found.",allConfigured:"All projects already have PostHog destinations configured."},toStreamItem:{displayName:"$item.name",config:{posthogProjectId:"$item.id",posthogProjectName:"$item.name"}}}},ok={docsUrl:"https://docs.sazabi.com/data/sources/endpoint/posthog",groups:[{id:"prepare",section:"config",title:"Open destination form",actions:[{instruction:"Configure an [HTTP Webhook destination](https://${context.posthogRegion}.posthog.com/pipeline/new/hog-template-webhook) in PostHog under **Data Pipeline > Destinations**."}]},{id:"values",section:"config",title:"Set destination values",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **Destination URL** field, then set these values in the PostHog HTTP Webhook destination form.",payloads:[{kind:"copyable",label:"Method",value:"POST"},{kind:"code",label:"Body template",language:"json",copyLabel:"Body template",value:`{
|
|
7033
7033
|
"event": "{event}",
|
|
7034
7034
|
"person": "{person}"
|
|
7035
|
-
}`}]}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the PostHog destination, send a test event, and check Sazabi for the incoming product event."}]}]}});var v8,k8,Nj;var Rj=d(()=>{jj();v8=["posthogPersonalApiKey"],k8={id:"posthog",label:"PostHog",
|
|
7035
|
+
}`}]}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the PostHog destination, send a test event, and check Sazabi for the incoming product event."}]}]}});var v8,k8,Nj;var Rj=d(()=>{jj();v8=["posthogPersonalApiKey"],k8={id:"posthog",label:"PostHog",transform:"posthog-cdp"},Nj={id:"posthog",name:"PostHog",capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:v8,intake:[k8],subtitle:"Forward your PostHog events directly to Sazabi for real-time product and error observability.",features:["CDP webhook forwarding","Event property mapping","Real-time streaming"],evidenceHints:["posthog-js, posthog-node, or posthog-python packages","POSTHOG_* or NEXT_PUBLIC_POSTHOG_* environment variables","README/docs naming PostHog for product analytics, feature flags, or session replay"],setupSkill:H,dashboard:{iconKey:"posthog",intakeSourceId:"posthog",streamSelectorLayout:"sidepanel",actions:{submit:{validate:{kind:"source-action",actionId:"validate-personal-api-key",sensitiveInputFields:["token"]},preflight:{kind:"source-action",actionId:"run-preflight-checks",normalize:"preflight",sensitiveInputFields:["token"]}},list:{list:{kind:"source-action",actionId:"list-projects",itemsField:"projects"}}}}}});var ik;var xj=d(()=>{ik={perStreamInstructions:!0,groups:[{id:"plan-proxy",section:"config",title:"Plan reverse proxy",actions:[{instruction:"Configure posthog-js to use a reverse proxy as `api_host`."},{instruction:"Send capture paths (`/e/`, `/i/`, `/s/`) to Sazabi, and send PostHog config, flags, and assets to PostHog.",notes:[{text:"Session replay is controlled by your PostHog project settings, not a `posthog.init` option."}]}]},{id:"target",section:"config",title:"Set capture target",actions:[{instruction:"Use your Sazabi intake URL (above) as the upstream destination for capture-path proxy rules."}]},{id:"initialize",section:"config",title:"Initialize posthog-js",actions:[{instruction:"Point posthog-js at your reverse proxy path.",payloads:[{kind:"code-tabs",label:"Initialize posthog-js",tabs:[{id:"javascript",label:"JavaScript",language:"javascript",copyLabel:"JavaScript",value:`import posthog from "posthog-js";
|
|
7036
7036
|
|
|
7037
7037
|
posthog.init("<your phc_* project token>", {
|
|
7038
7038
|
api_host: "/ingest",
|
|
@@ -7073,7 +7073,7 @@ const config: NextConfig = {
|
|
|
7073
7073
|
},
|
|
7074
7074
|
};
|
|
7075
7075
|
|
|
7076
|
-
export default config;`}]}]}]}});var S8,Uj;var Mj=d(()=>{xj();S8=[],Uj={id:"posthog_sdk",name:"PostHog SDK",searchAliases:["posthog","post hog"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"posthog-sdk",label:"PostHog SDK",
|
|
7076
|
+
export default config;`}]}]}]}});var S8,Uj;var Mj=d(()=>{xj();S8=[],Uj={id:"posthog_sdk",name:"PostHog SDK",searchAliases:["posthog","post hog"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"posthog-sdk",label:"PostHog SDK",transform:"posthog-sdk"}],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",subtitle:"Forward PostHog SDK analytics and session replay to Sazabi by repointing posthog-js api_host.",features:["Session replay forwarding","Event capture","SDK integration"],evidenceHints:["posthog-js browser SDK initialization with api_host or capture options","NEXT_PUBLIC_POSTHOG_* browser environment variables","Frontend session replay or product analytics setup that should be proxied through Sazabi"],sensitiveFields:S8,setupSkill:H,dashboard:{iconKey:"posthog",intakeSourceId:"posthog-sdk"}}});var rk;var Ej=d(()=>{rk={perStreamInstructions:!0,groups:[{id:"collector-config",section:"config",title:"Export metrics through the OpenTelemetry Collector",notes:[{variant:"requirement",text:"Requires the OpenTelemetry Collector (Contrib distribution) with the `prometheus` receiver and `otlphttp` exporter."},{text:"Sazabi ingests each metric data point as a searchable log record, so there are no dashboards to configure."}],actions:[{instruction:"Prometheus does not speak OTLP directly, so run an OpenTelemetry Collector that scrapes your Prometheus targets and forwards the metrics to Sazabi.",payloads:[{kind:"code",label:"Collector configuration",language:"yaml",copyLabel:"OpenTelemetry Collector configuration for Prometheus",description:"Point `scrape_configs.static_configs.targets` at your existing Prometheus targets or scrape endpoints.",value:`receivers:
|
|
7077
7077
|
prometheus:
|
|
7078
7078
|
config:
|
|
7079
7079
|
scrape_configs:
|
|
@@ -7092,14 +7092,14 @@ service:
|
|
|
7092
7092
|
pipelines:
|
|
7093
7093
|
metrics:
|
|
7094
7094
|
receivers: [prometheus]
|
|
7095
|
-
exporters: [otlphttp/sazabi]`}]}]},{id:"restart",section:"verify",title:"Restart and verify",actions:[{instruction:"Restart or redeploy the Collector so the new metrics pipeline is loaded."},{instruction:"If metrics do not appear after restart, check the Collector logs for TLS, DNS, or authorization errors, and confirm the exporter posts to `/v1/metrics` with a valid Bearer public key."}]}]}});var Kj;var Gj=d(()=>{Ej();Kj={id:"prometheus",name:"Prometheus",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"prometheus",label:"Prometheus",
|
|
7095
|
+
exporters: [otlphttp/sazabi]`}]}]},{id:"restart",section:"verify",title:"Restart and verify",actions:[{instruction:"Restart or redeploy the Collector so the new metrics pipeline is loaded."},{instruction:"If metrics do not appear after restart, check the Collector logs for TLS, DNS, or authorization errors, and confirm the exporter posts to `/v1/metrics` with a valid Bearer public key."}]}]}});var Kj;var Gj=d(()=>{Ej();Kj={id:"prometheus",name:"Prometheus",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"prometheus",label:"Prometheus",transform:"otlp-metrics-as-logs"}],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",subtitle:"Forward Prometheus metrics to Sazabi as searchable log records via the OpenTelemetry Collector.",features:["Metrics as log records","OpenTelemetry Collector export","Labels preserved as attributes","No dashboards to maintain"],searchAliases:["prom","promql","prometheus operator","otel collector prometheus"],evidenceHints:["prometheus.yml scrape_configs or an existing Prometheus server","ServiceMonitor / PodMonitor CRDs or prometheus-operator / kube-prometheus-stack","/metrics scrape endpoints forwarded through an OpenTelemetry Collector"],setupSkill:H,dashboard:{slug:"prometheus",iconKey:"prometheus",intakeSourceId:"prometheus"}}});var P8,ak;var qj=d(()=>{P8={instruction:"Add these variables in the Railway service Variables page — `OTEL_EXPORTER_OTLP_ENDPOINT` is your intake URL (above).",payloads:[{kind:"code",label:"Railway Raw Editor variables",description:"Railway fills in the `${{...}}` references from its own service and deployment metadata.",language:"bash",value:"OTEL_EXPORTER_OTLP_ENDPOINT=https://${context.ingestHost}\nOTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf\nOTEL_SERVICE_NAME=${{RAILWAY_SERVICE_NAME}}\nOTEL_RESOURCE_ATTRIBUTES=deployment.environment=${{RAILWAY_ENVIRONMENT_NAME}},service.version=${{RAILWAY_GIT_COMMIT_SHA}},railway.project.name=${{RAILWAY_PROJECT_NAME}},railway.deployment.id=${{RAILWAY_DEPLOYMENT_ID}}",copyLabel:"Railway environment variables"},{kind:"copyable",label:"`OTEL_EXPORTER_OTLP_PROTOCOL`",value:"http/protobuf",copyLabel:"OTLP protocol"},{kind:"copyable",label:"`OTEL_SERVICE_NAME`",value:"${{RAILWAY_SERVICE_NAME}}",copyLabel:"OTEL service name"},{kind:"copyable",label:"`OTEL_RESOURCE_ATTRIBUTES`",value:"deployment.environment=${{RAILWAY_ENVIRONMENT_NAME}},service.version=${{RAILWAY_GIT_COMMIT_SHA}},railway.project.name=${{RAILWAY_PROJECT_NAME}},railway.deployment.id=${{RAILWAY_DEPLOYMENT_ID}}",copyLabel:"OTEL resource attributes"}]},ak={groups:[{id:"prepare",section:"config",title:"Prepare service",actions:[{instruction:"Set up each Railway service you want to monitor so the application sends OpenTelemetry data directly to Sazabi.",payloads:[{kind:"external-link",label:"Open Railway dashboard",href:"https://railway.com/dashboard"}],notes:[{text:"Railway has no managed external OTLP drain. If you cannot add the SDK, run a log forwarder such as Vector or Fluent Bit as its own Railway service and point it at the same OTLP endpoint."}]}]},{id:"environment",section:"config",title:"Set Railway variables",actions:[P8]},{id:"bootstrap",section:"config",title:"Bootstrap the runtime",actions:[{instruction:"Install the OpenTelemetry packages for your runtime and load auto-instrumentation at startup.",payloads:[{kind:"code-tabs",tabs:[{id:"node",label:"Node.js",language:"bash",value:`bun add @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-proto @opentelemetry/exporter-logs-otlp-proto
|
|
7096
7096
|
|
|
7097
7097
|
# Railway variable or start-command prefix:
|
|
7098
7098
|
NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register"`,copyLabel:"Node.js OpenTelemetry bootstrap"},{id:"python",label:"Python",language:"bash",value:`pip install opentelemetry-distro opentelemetry-exporter-otlp-proto-http
|
|
7099
7099
|
opentelemetry-bootstrap -a install
|
|
7100
7100
|
|
|
7101
7101
|
# Railway start command example:
|
|
7102
|
-
opentelemetry-instrument python app.py`,copyLabel:"Python OpenTelemetry bootstrap"}]}]}]},{id:"deploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Review and deploy the staged variable change set when prompted, then send some traffic to the service.",notes:[{text:"If nothing appears, check the Railway deployment logs for OpenTelemetry exporter errors and confirm your app is sending through OpenTelemetry, not only to stdout."}]}]}]}});var Jj;var Bj=d(()=>{qj();Jj={id:"railway",name:"Railway",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual drain setup is not exercised by automated lifecycle tests yet.",intake:[{id:"railway",label:"Railway",
|
|
7102
|
+
opentelemetry-instrument python app.py`,copyLabel:"Python OpenTelemetry bootstrap"}]}]}]},{id:"deploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Review and deploy the staged variable change set when prompted, then send some traffic to the service.",notes:[{text:"If nothing appears, check the Railway deployment logs for OpenTelemetry exporter errors and confirm your app is sending through OpenTelemetry, not only to stdout."}]}]}]}});var Jj;var Bj=d(()=>{qj();Jj={id:"railway",name:"Railway",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual drain setup is not exercised by automated lifecycle tests yet.",intake:[{id:"railway",label:"Railway",transform:"otlp-passthrough"}],subtitle:"Forward your Railway deployment logs directly to Sazabi for real-time monitoring.",features:["Log drains","Deployment logs","Service monitoring"],evidenceHints:["railway.json, railway.toml, or Railway deploy scripts","RAILWAY_* environment variables","README/docs naming Railway as the deploy host"],setupSkill:H,dashboard:{iconKey:"railway",intakeSourceId:"railway"}}});var ck,sk,hk;var Hj=d(()=>{St();ck={kind:"multi-step",steps:[{id:"credentials",title:"Enter API key",actions:[{kind:"instruction",instruction:"Create an API key in your [Render dashboard](https://dashboard.render.com/settings#api-keys)."},{id:"token",kind:"secret",label:"API key",instruction:"Enter your Render API key below.",placeholder:"rnd_..."}]},{id:"workspace",title:"Choose workspace",actions:[{id:"workspace",kind:"select",label:"Workspace",instruction:"Select the Render workspace whose services Sazabi should list.",placeholder:"Select a workspace",optionsAction:"options",optionsInput:{token:"$token"},optionValueField:"id",optionLabelField:"name",optionDescriptionField:"type"}]}],submit:{metadata:{apiToken:"$token",ownerId:"$workspace.id",ownerName:"$workspace.name"},displayName:"$workspace.name",button:Ue}},sk={groups:[{id:"open-log-streams",section:"config",title:"Open Log Streams",actions:[{instruction:"In your [Render dashboard](https://dashboard.render.com), open the workspace you want to forward, then go to **Workspace Settings > Log Streams** and add a log stream.",notes:[{text:"This log stream is **workspace-wide** — Render sends logs from every service in the workspace. To pick individual services instead, connect your Render account and Sazabi sets up a per-service log stream for each one."}]}]},{id:"endpoint",section:"config",title:"Set endpoint and token",actions:[{instruction:"Paste the endpoint and token (above) into the log stream form."}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the log stream, then trigger activity — deploy a service or hit an application route. Logs appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/render"},hk={content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:[{field:"name",header:"Name"},{field:"type",header:"Type",width:"w-40",cell:"badge"}],searchPlaceholder:"Search services...",searchFields:["name"],dedupeByConfigField:"serviceId",emptyState:{noMatches:"No services found.",allConfigured:"All services already have log streams configured."},toStreamItem:{displayName:"$item.name",config:{serviceId:"$item.id",serviceName:"$item.name",serviceType:"$item.type"}}}}});var I8,$8,Wj;var Fj=d(()=>{Hj();I8=["apiToken"],$8={id:"render-syslog",label:"Render",transform:"otlp-key-stripping-logs"},Wj={id:"render",name:"Render",capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:I8,intake:[$8],subtitle:"Forward your Render service logs directly to Sazabi for real-time monitoring.",features:["Log forwarding","Service monitoring","Environment filtering"],evidenceHints:["render.yaml or Render blueprint files","README/docs naming Render as the deploy host","Services, workers, or cron jobs deployed to Render"],setupSkill:H,dashboard:{iconKey:"render",intakeSourceId:"render-syslog",streamSelectorLayout:"sidepanel",connectionMetadataSection:{title:"Render details",description:"The Render workspace linked to this connection.",fields:[{key:"ownerId",label:"Workspace ID",description:"Render workspace linked to this connection."}]},actions:{list:{options:{procedure:"render.listWorkspaces",itemsField:"workspaces",sensitiveInputFields:["token"]},list:{procedure:"render.listServices",itemsField:"services"}}}}}});var lk;var Zj=d(()=>{lk={groups:[{id:"environment",section:"config",title:"Set your Respan base URL",actions:[{instruction:"Set `RESPAN_BASE_URL` to your intake URL (above) in the app you want to trace."}]},{id:"install",section:"config",title:"Install the Respan SDK",actions:[{instruction:"Install the Respan SDK in the app you want to trace.",payloads:[{kind:"code",label:"Install",language:"bash",copyLabel:"Install command",value:`# Python
|
|
7103
7103
|
pip install respan-ai
|
|
7104
7104
|
|
|
7105
7105
|
# TypeScript
|
|
@@ -7118,7 +7118,7 @@ const respan = new Respan({
|
|
|
7118
7118
|
});
|
|
7119
7119
|
await respan.initialize();
|
|
7120
7120
|
|
|
7121
|
-
// All supported LLM and agent calls are now auto-traced and exported to Sazabi.`}],notes:[{text:"The SDK sends its auto-instrumented spans to Sazabi over OTLP/HTTP — you do not need a separate OpenTelemetry exporter."},{text:"Using an agent framework? Pass the matching instrumentor, e.g. `Respan({ instrumentations: [...] })`, exactly as you would when exporting to Respan's own backend — only the base URL changes."},{text:"Already send OpenTelemetry directly (or run an OTel Collector)? Skip the Respan SDK and point your existing OTLP/HTTP trace exporter at the same host with the standard `/v1/traces` path (http/json or http/protobuf). This source accepts both the Respan SDK's `/api/v2/traces` path and the standard OTLP `/v1/traces` path."}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy or restart the service, then run an LLM or agent workload to generate a trace."}]}]}});var Xj;var Yj=d(()=>{Zj();Xj={id:"respan",name:"Respan",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"respan",label:"Respan",
|
|
7121
|
+
// All supported LLM and agent calls are now auto-traced and exported to Sazabi.`}],notes:[{text:"The SDK sends its auto-instrumented spans to Sazabi over OTLP/HTTP — you do not need a separate OpenTelemetry exporter."},{text:"Using an agent framework? Pass the matching instrumentor, e.g. `Respan({ instrumentations: [...] })`, exactly as you would when exporting to Respan's own backend — only the base URL changes."},{text:"Already send OpenTelemetry directly (or run an OTel Collector)? Skip the Respan SDK and point your existing OTLP/HTTP trace exporter at the same host with the standard `/v1/traces` path (http/json or http/protobuf). This source accepts both the Respan SDK's `/api/v2/traces` path and the standard OTLP `/v1/traces` path."}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy or restart the service, then run an LLM or agent workload to generate a trace."}]}]}});var Xj;var Yj=d(()=>{Zj();Xj={id:"respan",name:"Respan",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"respan",label:"Respan",transform:"otlp-passthrough",transformOptions:{tracePathSuffixes:["/api/v2/traces","/v1/traces"]}}],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",subtitle:"Stream your Respan LLM traces directly to Sazabi for AI application observability.",features:["LLM traces","Token & cost tracking","Agent workflow monitoring"],evidenceHints:["respan-ai or @respan/respan packages, or a Respan() initializer","RESPAN_API_KEY environment variables","README/docs naming Respan for LLM tracing or observability"],setupSkill:H,dashboard:{iconKey:"respan",intakeSourceId:"respan"}}});var uk;var Qj=d(()=>{uk={kind:"choice",title:"Choose Sentry SDK",description:"Choose the SDK snippet that matches your application, or copy the DSN for any other official Sentry SDK.",options:[{id:"javascript",label:"JavaScript / Node.js",description:"Initialize `@sentry/node` with the Sazabi DSN.",flow:{groups:[{id:"configure",section:"config",title:"Initialize SDK",actions:[{instruction:"Pick how you want events routed, then initialize the SDK with the matching snippet.",payloads:[{kind:"options",options:[{id:"sazabi-only",label:"Send only to Sazabi",description:"Replaces your Sentry project DSN with the Sazabi DSN — the simplest setup; your existing Sentry project no longer receives these events.",payloads:[{kind:"code",language:"javascript",copyLabel:"JavaScript",value:`import * as Sentry from "@sentry/node";
|
|
7122
7122
|
|
|
7123
7123
|
Sentry.init({
|
|
7124
7124
|
dsn: "https://sazabi@\${context.ingestHost}/0",
|
|
@@ -7162,7 +7162,7 @@ sentry_sdk.init(
|
|
|
7162
7162
|
dsn=SENTRY_DSN,
|
|
7163
7163
|
enable_logs=True,
|
|
7164
7164
|
before_send=_forward_to_sazabi,
|
|
7165
|
-
)`}],notes:[{text:"The Python SDK has no built-in multiplexed transport, so a second `Client` plus a `before_send` hook forwards a copy of each event to Sazabi; returning `event` keeps your primary Sentry project receiving it."},{text:"`before_send` forwards error events only — structured logs stay on your primary Sentry project on this path. Verify Sazabi delivery with a test exception."}]}]}]}]},{id:"verify",section:"verify",title:"Verify telemetry",actions:[{instruction:"Restart the app, then send a test exception and write a structured log to confirm they arrive in Sazabi.",notes:[{text:"The snippet above already enables structured logging (`enable_logs=True`)."},{text:"This DSN also works with other official Sentry SDKs including Go, Ruby, Java, and .NET."}]}]}]}}]}});var Vj;var eN=d(()=>{Qj();Vj={id:"sentry",name:"Sentry SDK",searchAliases:["sentry"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"sentry-dsn",label:"Sentry SDK",subdomain:"sentry-dsn",transform:"sentry-envelope"}],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",subtitle:"Forward Sentry SDK errors, structured logs, and envelope telemetry directly to Sazabi.",features:["Error forwarding","Structured logs","Envelope telemetry","SDK integration"],evidenceHints:["@sentry packages, sentry.properties, SENTRY_DSN, or sentry-cli releases","Sentry.init calls or framework-specific Sentry config files","README/docs naming Sentry as the error tracking provider"],setupSkill:H,dashboard:{iconKey:"sentry",intakeSourceId:"sentry-dsn"}}});var dk,gk;var tN=d(()=>{St();dk={kind:"multi-step",steps:[{id:"prepare",title:"Create token",notes:[{variant:"requirement",text:"You must be an **Owner** or **Manager** in the Sentry organization — creating an Internal Integration needs the `org:write` scope, which Admin, Member, and Billing roles do not have (Sentry returns 403)."}],actions:[{kind:"instruction",instruction:"Create a Sentry user auth token with **Organization: Read & Write** (`org:write`), **Project: Read**, and **Issue & Event: Read**.",payloads:[{kind:"external-link",label:"Open Sentry auth token settings",href:"https://sentry.io/settings/account/api/auth-tokens/new-token/"}],notes:[{text:"The `org:write` scope only lets Sazabi create the Internal Integration; the integration itself only receives read-level webhook events."}]},{kind:"instruction",instruction:"Confirm the Permissions Preview at the bottom of the Sentry form shows `event:read, org:write, project:read` before submitting."}]},{id:"credentials",title:"Enter credentials",actions:[{id:"token",kind:"secret",label:"Sentry auth token",instruction:"Enter your Sentry auth token below.",description:"A token with the org:write, project:read, and event:read scopes.",placeholder:"Enter your Sentry auth token"},{id:"organizationSlug",kind:"text",label:"Sentry organization slug",instruction:"Enter your Sentry organization slug below.",description:"The slug from your Sentry URL: sentry.io/organizations/<slug>/",placeholder:"e.g. my-org",pattern:"^[a-z0-9][a-z0-9-]*[a-z0-9]$",patternMessage:"Enter a valid Sentry organization slug (lowercase, hyphens allowed)."}]}],submit:{actions:[{kind:"validate",action:"validate",input:{token:"$token",organizationSlug:"$organizationSlug"},resultAs:"validate"}],metadata:{sentryAuthToken:"$token",organizationSlug:"$organizationSlug"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/sentry"},gk={groups:[{id:"create-integration",section:"config",title:"Create the Internal Integration",notes:[{variant:"requirement",text:"Creating an Internal Integration needs the **`org:write`** scope, which Sentry grants only to organization **Owners** and **Managers**. On this path the scope never leaves Sentry — you give Sazabi no auth token."}],actions:[{instruction:"In Sentry, go to **Settings → Developer Settings → Custom Integrations** and choose **New Internal Integration**.",payloads:[{kind:"external-link",label:"Open Sentry Custom Integrations",href:"https://sentry.io/settings/developer-settings/"}]},{instruction:"Under **Webhooks**, enable webhooks and subscribe to the **Issue** and **Comment** resources. To route alerts as well, enable **Alert Rule Action** so the integration can be added as a notification destination on Issue Alert and Metric Alert rules."}]},{id:"endpoint",section:"config",title:"Set the webhook URL",actions:[{instruction:"Paste your Sazabi intake URL (above) into the Internal Integration's Webhook URL field."},{instruction:"Save the integration."}]},{id:"verify",section:"verify",title:"Verify",actions:[{instruction:"Do something in Sentry to trigger an event — comment on an issue, change an issue's status, or create a fresh issue by throwing an exception in an instrumented project. `issue` and `comment` webhooks arrive within a few minutes."},{instruction:"To stream `event_alert` / `metric_alert` webhooks, edit each Issue Alert or Metric Alert rule in Sentry and add this integration as a notification destination — alerts are opt-in."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/sentry-platform"}});var O8,A8,nN;var oN=d(()=>{tN();O8=["sentryAuthToken"],A8={id:"sentry-platform",label:"Sentry Platform",subdomain:"sentry-platform",transform:"sentry-platform-webhook"},nN={id:"sentry_platform",name:"Sentry",capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],streamCardinality:"single",sensitiveFields:O8,intake:[A8],subtitle:"Connect your Sentry organization to stream errors, issues, and alerts to Sazabi in real-time.",features:["Error streaming","Issue tracking","Alert forwarding","Metric alerts"],evidenceHints:["Sentry organization or project config where org-level event forwarding is preferred","sentry-cli release/deploy automation that would benefit from platform context","Multiple Sentry SDK projects that should be connected through one Sentry platform integration"],setupSkill:H,dashboard:{iconKey:"sentry",intakeSourceId:"sentry-platform",actions:{submit:{validate:{kind:"source-action",actionId:"validate",sensitiveInputFields:["token"]}}}}}});var yk;var iN=d(()=>{yk={groups:[{id:"open-form",section:"config",title:"Open log drain form",notes:[{variant:"requirement",text:"Log Drains require a Supabase Pro, Team, or Enterprise plan."}],actions:[{instruction:"In the [Supabase dashboard](https://supabase.com/dashboard), open the project whose logs you want to forward, then open **Project Settings > Log Drains** and click **Add destination**."}]},{id:"fields",section:"config",title:"Copy drain fields",actions:[{instruction:"Fill in the **Name** and **Description** fields.",payloads:[{kind:"copyable",label:"Name",value:"Sazabi"},{kind:"copyable",label:"Description",value:"Forward Supabase logs to Sazabi for observability and AI analysis."}]},{instruction:"Set **Type** to **OpenTelemetry Protocol (OTLP)**."}]},{id:"otlp-endpoint",section:"config",title:"OTLP Endpoint",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **OTLP Endpoint** field."}]},{id:"delivery-fields",section:"config",title:"Finish drain fields",actions:[{instruction:"Fill in the **Protocol** field.",payloads:[{kind:"copyable",label:"Protocol",value:"HTTP/Protobuf"}]},{instruction:"Set **Gzip Compression** to **Enabled**."}]},{id:"save",section:"verify",title:"Save and verify",actions:[{instruction:"Save the log drain, then trigger activity — run a query or hit your project's API. Logs appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/supabase"}});var rN;var aN=d(()=>{iN();rN={id:"supabase",name:"Supabase",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"supabase",label:"Supabase",subdomain:"supabase",transform:"supabase-drain"}],lifecycleSkipReason:"Manual drain setup is not exercised by automated lifecycle tests yet.",subtitle:"Stream your Supabase project logs directly to Sazabi for unified observability.",features:["Database logs","Auth events","Edge Function logs"],evidenceHints:["supabase/ directory, supabase/config.toml, or Supabase CLI scripts","@supabase/* packages, SUPABASE_URL, or SUPABASE_SERVICE_ROLE_KEY","README/docs naming Supabase for Postgres, Auth, Storage, or Edge Functions"],setupSkill:H,dashboard:{iconKey:"supabase",intakeSourceId:"supabase"}}});var bk;var cN=d(()=>{St();bk={groups:[{id:"instrument",section:"config",title:"Instrument workers",description:"Set up each Temporal worker runtime to send OpenTelemetry data.",actions:[...cl("Temporal worker")]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy or restart your Temporal workers, then run a workflow or activity to generate fresh telemetry."}]}]}});var sN;var hN=d(()=>{cN();sN={id:"temporal",name:"Temporal",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual worker setup is not exercised by automated lifecycle tests yet.",intake:[{id:"temporal",label:"Temporal",subdomain:"temporal",transform:"otlp-passthrough"}],subtitle:"Forward OpenTelemetry logs and traces from your Temporal workers to Sazabi for durable execution observability.",features:["Worker logs","Workflow and activity traces"],evidenceHints:["@temporalio packages, Temporal worker entrypoints, workflows/, or activities/","TEMPORAL_ADDRESS, TEMPORAL_NAMESPACE, or Temporal Cloud deployment docs","Background workflows or durable orchestration code that already emits OTLP telemetry"],setupSkill:H,dashboard:{iconKey:"temporal",intakeSourceId:"temporal"}}});var mk;var lN=d(()=>{mk={perStreamInstructions:!0,groups:[{id:"prepare",section:"config",title:"Prepare Trigger.dev project",actions:[{instruction:"Install `@opentelemetry/exporter-logs-otlp-http` in the package that owns your `trigger.config.ts` file."},{instruction:"If your project already sets up OpenTelemetry in code, reuse the Sazabi log intake URL in that setup instead of adding a second exporter."}]},{id:"configure",section:"config",title:"Configure log exporter",actions:[{instruction:"Add the OTLP log exporter to `trigger.config.ts`.",payloads:[{kind:"code",label:"`trigger.config.ts`",language:"typescript",value:`import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
7165
|
+
)`}],notes:[{text:"The Python SDK has no built-in multiplexed transport, so a second `Client` plus a `before_send` hook forwards a copy of each event to Sazabi; returning `event` keeps your primary Sentry project receiving it."},{text:"`before_send` forwards error events only — structured logs stay on your primary Sentry project on this path. Verify Sazabi delivery with a test exception."}]}]}]}]},{id:"verify",section:"verify",title:"Verify telemetry",actions:[{instruction:"Restart the app, then send a test exception and write a structured log to confirm they arrive in Sazabi.",notes:[{text:"The snippet above already enables structured logging (`enable_logs=True`)."},{text:"This DSN also works with other official Sentry SDKs including Go, Ruby, Java, and .NET."}]}]}]}}]}});var Vj;var eN=d(()=>{Qj();Vj={id:"sentry",name:"Sentry SDK",searchAliases:["sentry"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"sentry-dsn",label:"Sentry SDK",transform:"sentry-envelope"}],lifecycleSkipReason:"Manual SDK setup is not exercised by automated lifecycle tests yet.",subtitle:"Forward Sentry SDK errors, structured logs, and envelope telemetry directly to Sazabi.",features:["Error forwarding","Structured logs","Envelope telemetry","SDK integration"],evidenceHints:["@sentry packages, sentry.properties, SENTRY_DSN, or sentry-cli releases","Sentry.init calls or framework-specific Sentry config files","README/docs naming Sentry as the error tracking provider"],setupSkill:H,dashboard:{iconKey:"sentry",intakeSourceId:"sentry-dsn"}}});var dk,gk;var tN=d(()=>{St();dk={kind:"multi-step",steps:[{id:"prepare",title:"Create token",notes:[{variant:"requirement",text:"You must be an **Owner** or **Manager** in the Sentry organization — creating an Internal Integration needs the `org:write` scope, which Admin, Member, and Billing roles do not have (Sentry returns 403)."}],actions:[{kind:"instruction",instruction:"Create a Sentry user auth token with **Organization: Read & Write** (`org:write`), **Project: Read**, and **Issue & Event: Read**.",payloads:[{kind:"external-link",label:"Open Sentry auth token settings",href:"https://sentry.io/settings/account/api/auth-tokens/new-token/"}],notes:[{text:"The `org:write` scope only lets Sazabi create the Internal Integration; the integration itself only receives read-level webhook events."}]},{kind:"instruction",instruction:"Confirm the Permissions Preview at the bottom of the Sentry form shows `event:read, org:write, project:read` before submitting."}]},{id:"credentials",title:"Enter credentials",actions:[{id:"token",kind:"secret",label:"Sentry auth token",instruction:"Enter your Sentry auth token below.",description:"A token with the org:write, project:read, and event:read scopes.",placeholder:"Enter your Sentry auth token"},{id:"organizationSlug",kind:"text",label:"Sentry organization slug",instruction:"Enter your Sentry organization slug below.",description:"The slug from your Sentry URL: sentry.io/organizations/<slug>/",placeholder:"e.g. my-org",pattern:"^[a-z0-9][a-z0-9-]*[a-z0-9]$",patternMessage:"Enter a valid Sentry organization slug (lowercase, hyphens allowed)."}]}],submit:{actions:[{kind:"validate",action:"validate",input:{token:"$token",organizationSlug:"$organizationSlug"},resultAs:"validate"}],metadata:{sentryAuthToken:"$token",organizationSlug:"$organizationSlug"},button:Ue},docsUrl:"https://docs.sazabi.com/data/sources/connect-your-account/sentry"},gk={groups:[{id:"create-integration",section:"config",title:"Create the Internal Integration",notes:[{variant:"requirement",text:"Creating an Internal Integration needs the **`org:write`** scope, which Sentry grants only to organization **Owners** and **Managers**. On this path the scope never leaves Sentry — you give Sazabi no auth token."}],actions:[{instruction:"In Sentry, go to **Settings → Developer Settings → Custom Integrations** and choose **New Internal Integration**.",payloads:[{kind:"external-link",label:"Open Sentry Custom Integrations",href:"https://sentry.io/settings/developer-settings/"}]},{instruction:"Under **Webhooks**, enable webhooks and subscribe to the **Issue** and **Comment** resources. To route alerts as well, enable **Alert Rule Action** so the integration can be added as a notification destination on Issue Alert and Metric Alert rules."}]},{id:"endpoint",section:"config",title:"Set the webhook URL",actions:[{instruction:"Paste your Sazabi intake URL (above) into the Internal Integration's Webhook URL field."},{instruction:"Save the integration."}]},{id:"verify",section:"verify",title:"Verify",actions:[{instruction:"Do something in Sentry to trigger an event — comment on an issue, change an issue's status, or create a fresh issue by throwing an exception in an instrumented project. `issue` and `comment` webhooks arrive within a few minutes."},{instruction:"To stream `event_alert` / `metric_alert` webhooks, edit each Issue Alert or Metric Alert rule in Sentry and add this integration as a notification destination — alerts are opt-in."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/sentry-platform"}});var O8,A8,nN;var oN=d(()=>{tN();O8=["sentryAuthToken"],A8={id:"sentry-platform",label:"Sentry Platform",transform:"sentry-platform-webhook"},nN={id:"sentry_platform",name:"Sentry",capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],streamCardinality:"single",sensitiveFields:O8,intake:[A8],subtitle:"Connect your Sentry organization to stream errors, issues, and alerts to Sazabi in real-time.",features:["Error streaming","Issue tracking","Alert forwarding","Metric alerts"],evidenceHints:["Sentry organization or project config where org-level event forwarding is preferred","sentry-cli release/deploy automation that would benefit from platform context","Multiple Sentry SDK projects that should be connected through one Sentry platform integration"],setupSkill:H,dashboard:{iconKey:"sentry",intakeSourceId:"sentry-platform",actions:{submit:{validate:{kind:"source-action",actionId:"validate",sensitiveInputFields:["token"]}}}}}});var yk;var iN=d(()=>{yk={groups:[{id:"open-form",section:"config",title:"Open log drain form",notes:[{variant:"requirement",text:"Log Drains require a Supabase Pro, Team, or Enterprise plan."}],actions:[{instruction:"In the [Supabase dashboard](https://supabase.com/dashboard), open the project whose logs you want to forward, then open **Project Settings > Log Drains** and click **Add destination**."}]},{id:"fields",section:"config",title:"Copy drain fields",actions:[{instruction:"Fill in the **Name** and **Description** fields.",payloads:[{kind:"copyable",label:"Name",value:"Sazabi"},{kind:"copyable",label:"Description",value:"Forward Supabase logs to Sazabi for observability and AI analysis."}]},{instruction:"Set **Type** to **OpenTelemetry Protocol (OTLP)**."}]},{id:"otlp-endpoint",section:"config",title:"OTLP Endpoint",actions:[{instruction:"Paste your Sazabi intake URL (above) into the **OTLP Endpoint** field."}]},{id:"delivery-fields",section:"config",title:"Finish drain fields",actions:[{instruction:"Fill in the **Protocol** field.",payloads:[{kind:"copyable",label:"Protocol",value:"HTTP/Protobuf"}]},{instruction:"Set **Gzip Compression** to **Enabled**."}]},{id:"save",section:"verify",title:"Save and verify",actions:[{instruction:"Save the log drain, then trigger activity — run a query or hit your project's API. Logs appear in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/supabase"}});var rN;var aN=d(()=>{iN();rN={id:"supabase",name:"Supabase",capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"supabase",label:"Supabase",transform:"supabase-drain"}],lifecycleSkipReason:"Manual drain setup is not exercised by automated lifecycle tests yet.",subtitle:"Stream your Supabase project logs directly to Sazabi for unified observability.",features:["Database logs","Auth events","Edge Function logs"],evidenceHints:["supabase/ directory, supabase/config.toml, or Supabase CLI scripts","@supabase/* packages, SUPABASE_URL, or SUPABASE_SERVICE_ROLE_KEY","README/docs naming Supabase for Postgres, Auth, Storage, or Edge Functions"],setupSkill:H,dashboard:{iconKey:"supabase",intakeSourceId:"supabase"}}});var bk;var cN=d(()=>{St();bk={groups:[{id:"instrument",section:"config",title:"Instrument workers",description:"Set up each Temporal worker runtime to send OpenTelemetry data.",actions:[...cl("Temporal worker")]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy or restart your Temporal workers, then run a workflow or activity to generate fresh telemetry."}]}]}});var sN;var hN=d(()=>{cN();sN={id:"temporal",name:"Temporal",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual worker setup is not exercised by automated lifecycle tests yet.",intake:[{id:"temporal",label:"Temporal",transform:"otlp-passthrough"}],subtitle:"Forward OpenTelemetry logs and traces from your Temporal workers to Sazabi for durable execution observability.",features:["Worker logs","Workflow and activity traces"],evidenceHints:["@temporalio packages, Temporal worker entrypoints, workflows/, or activities/","TEMPORAL_ADDRESS, TEMPORAL_NAMESPACE, or Temporal Cloud deployment docs","Background workflows or durable orchestration code that already emits OTLP telemetry"],setupSkill:H,dashboard:{iconKey:"temporal",intakeSourceId:"temporal"}}});var mk;var lN=d(()=>{mk={perStreamInstructions:!0,groups:[{id:"prepare",section:"config",title:"Prepare Trigger.dev project",actions:[{instruction:"Install `@opentelemetry/exporter-logs-otlp-http` in the package that owns your `trigger.config.ts` file."},{instruction:"If your project already sets up OpenTelemetry in code, reuse the Sazabi log intake URL in that setup instead of adding a second exporter."}]},{id:"configure",section:"config",title:"Configure log exporter",actions:[{instruction:"Add the OTLP log exporter to `trigger.config.ts`.",payloads:[{kind:"code",label:"`trigger.config.ts`",language:"typescript",value:`import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
7166
7166
|
import { defineConfig } from "@trigger.dev/sdk";
|
|
7167
7167
|
|
|
7168
7168
|
export default defineConfig({
|
|
@@ -7175,7 +7175,7 @@ export default defineConfig({
|
|
|
7175
7175
|
],
|
|
7176
7176
|
},
|
|
7177
7177
|
});
|
|
7178
|
-
`,copyLabel:"Trigger.dev config snippet"}],notes:[{text:"Trigger.dev reserves `OTEL_*` environment variables for its own internal telemetry, so do not use them for this integration."}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy Trigger.dev so it picks up the new log exporter, then run a task to confirm its logs arrive in Sazabi.",notes:[{text:"This source stores logs only — trace exporters, metrics exporters, alert webhooks, and management API polling are intentionally out of scope. Use `telemetry.logExporters`; do not configure this source through `telemetry.exporters`, Trigger.dev alert webhooks, or management API polling."}]}]}]}});var uN;var dN=d(()=>{lN();uN={id:"trigger_dev",name:"Trigger.dev",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual trigger.config.ts setup is not exercised by automated lifecycle tests yet.",intake:[{id:"trigger-dev",label:"Trigger.dev",
|
|
7178
|
+
`,copyLabel:"Trigger.dev config snippet"}],notes:[{text:"Trigger.dev reserves `OTEL_*` environment variables for its own internal telemetry, so do not use them for this integration."}]}]},{id:"redeploy",section:"verify",title:"Redeploy and verify",actions:[{instruction:"Redeploy Trigger.dev so it picks up the new log exporter, then run a task to confirm its logs arrive in Sazabi.",notes:[{text:"This source stores logs only — trace exporters, metrics exporters, alert webhooks, and management API polling are intentionally out of scope. Use `telemetry.logExporters`; do not configure this source through `telemetry.exporters`, Trigger.dev alert webhooks, or management API polling."}]}]}]}});var uN;var dN=d(()=>{lN();uN={id:"trigger_dev",name:"Trigger.dev",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual trigger.config.ts setup is not exercised by automated lifecycle tests yet.",intake:[{id:"trigger-dev",label:"Trigger.dev",transform:"otlp-passthrough"}],subtitle:"Stream your Trigger.dev job logs directly to Sazabi for background job monitoring.",features:["Task logs","Run failure logs","Background job monitoring"],evidenceHints:["trigger.config.ts/js or @trigger.dev packages","TRIGGER_* environment variables or tasks under trigger/ or src/trigger","README/docs naming Trigger.dev for background jobs"],setupSkill:H,dashboard:{iconKey:"trigger-dev",intakeSourceId:"trigger-dev"}}});var pk;var gN=d(()=>{pk={perStreamInstructions:!0,groups:[{id:"copy-config",section:"config",title:"Copy logs pipeline",notes:[{variant:"requirement",text:"Vector 0.51.0 or later is required for the `otlp` encoding codec."}],actions:[{instruction:"Add a remap transform and OpenTelemetry sink to your Vector config.",payloads:[{kind:"code-tabs",label:"Vector configuration",description:"Choose the snippet format that matches how you deploy Vector.",tabs:[{id:"yaml",label:"`vector.yaml`",language:"yaml",copyLabel:"Vector YAML config",value:`transforms:
|
|
7179
7179
|
sazabi_logs_otlp:
|
|
7180
7180
|
type: remap
|
|
7181
7181
|
inputs: ["*"] # replace with explicit source/transform IDs
|
|
@@ -7249,10 +7249,10 @@ sinks:
|
|
|
7249
7249
|
uri: "https://\${context.ingestHost}/v1/logs"
|
|
7250
7250
|
method: post
|
|
7251
7251
|
encoding:
|
|
7252
|
-
codec: otlp`}]}]}]},{id:"wire-sources",section:"config",title:"Wire sources",actions:[{instruction:'Replace `inputs: ["*"]` on the `remap` transform with your specific source or transform IDs in production. `["*"]` also matches `internal_metrics` and other unrelated components.',notes:[{variant:"requirement",text:"The sink's `otlp` codec doesn't build the OTLP envelope on its own. If you wire raw sources straight into it, Vector drops every event."},{text:"Sazabi indexes logs and traces from Vector. It accepts metrics at the intake but silently drops them."}]}]},{id:"traces",section:"config",title:"Forward traces (optional)",actions:[{instruction:'Add a second `opentelemetry` sink with `uri` ending in `/v1/traces` and explicit `inputs` referencing an already-OTLP-shaped source, typically an `opentelemetry` Vector source with `use_otlp_decoding.traces: true` (use `inputs: ["otlp_in.traces"]`).',notes:[{text:"No remap is needed for traces."},{variant:"requirement",text:'Do not wire `["*"]` into a traces sink.'}]}]}]}});var yN;var bN=d(()=>{gN();yN={id:"vector",name:"Vector",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"vector",label:"Vector",
|
|
7252
|
+
codec: otlp`}]}]}]},{id:"wire-sources",section:"config",title:"Wire sources",actions:[{instruction:'Replace `inputs: ["*"]` on the `remap` transform with your specific source or transform IDs in production. `["*"]` also matches `internal_metrics` and other unrelated components.',notes:[{variant:"requirement",text:"The sink's `otlp` codec doesn't build the OTLP envelope on its own. If you wire raw sources straight into it, Vector drops every event."},{text:"Sazabi indexes logs and traces from Vector. It accepts metrics at the intake but silently drops them."}]}]},{id:"traces",section:"config",title:"Forward traces (optional)",actions:[{instruction:'Add a second `opentelemetry` sink with `uri` ending in `/v1/traces` and explicit `inputs` referencing an already-OTLP-shaped source, typically an `opentelemetry` Vector source with `use_otlp_decoding.traces: true` (use `inputs: ["otlp_in.traces"]`).',notes:[{text:"No remap is needed for traces."},{variant:"requirement",text:'Do not wire `["*"]` into a traces sink.'}]}]}]}});var yN;var bN=d(()=>{gN();yN={id:"vector",name:"Vector",capabilities:["connectionless"],auth:[],delivery:["push"],lifecycleSkipReason:"Manual agent setup is not exercised by automated lifecycle tests yet.",intake:[{id:"vector",label:"Vector",transform:"otlp-passthrough"}],subtitle:"Forward logs and traces from your infrastructure to Sazabi using the Vector observability pipeline.",features:["Kubernetes DaemonSet","High-throughput pipeline","Built-in transforms","Multiple source types"],evidenceHints:["vector.toml/yaml/json, vector.dev Helm values, or Vector sidecars","VECTOR_* environment variables or VRL transform config","README/docs naming Vector as the observability pipeline"],setupSkill:H,dashboard:{iconKey:"vector",intakeSourceId:"vector"}}});var fk,vk,wk,kk;var mN=d(()=>{St();fk={kind:"multi-step",steps:[{id:"prepare",title:"Create token",actions:[{kind:"instruction",instruction:"Create a full-access API token in your [Vercel account settings](https://vercel.com/account/tokens). For team accounts, create the token while scoped to the correct team.",notes:[{text:"A token gets the same permissions as your account."}]}]},{id:"credentials",title:"Enter token",actions:[{id:"token",kind:"secret",label:"API token",instruction:"Enter your Vercel API token below.",placeholder:"Enter your Vercel API token"}]}],submit:{actions:[{kind:"validate",action:"validate",input:{token:"$token"},resultAs:"validate"}],metadata:{vercelApiToken:"$token",vercelTeamId:"$validate.teamId",vercelTeamName:"$validate.teamName"},button:Ue}},vk={groups:[{id:"open-drains",section:"config",title:"Open Drains",notes:[{variant:"requirement",text:"**Vercel Drains require the Pro or Enterprise plan.** Hobby and Pro Trial teams cannot create drains."}],actions:[{instruction:"In your [Vercel dashboard](https://vercel.com/dashboard), go to **Team Settings > Drains** and create a new drain."},{instruction:"Choose **Logs** as the data to deliver.",notes:[{text:"This path covers logs only — to send traces or Web Analytics events, connect your Vercel account instead and Sazabi creates those drains for you."}]}]},{id:"endpoint",section:"config",title:"Set the endpoint",actions:[{instruction:"Paste your Sazabi intake URL (above) into the drain's endpoint field."}]},{id:"delivery-settings",section:"config",title:"Set delivery options",actions:[{instruction:"Set the delivery format to **JSON**.",notes:[{text:"Sazabi does not parse NDJSON on this endpoint."}]},{instruction:"Pick the projects, environments, and log sources to send.",notes:[{text:"Sazabi accepts every Vercel log source (Static, Lambda, Edge, Build, External, Firewall, Redirect)."}]}]},{id:"verify",section:"verify",title:"Save and verify",actions:[{instruction:"Save the drain, then send some traffic — push a deployment or hit an application route. Logs show up in Sazabi within a few minutes."}]}],docsUrl:"https://docs.sazabi.com/data/sources/endpoint/vercel"},wk=[{field:"name",header:"Project"},{field:"framework",header:"Framework",width:"w-32",cell:"badge",transform:"fallback:Unspecified"}],kk={content:{kind:"tabs",tabs:[{id:"logs",label:"Logs",content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:wk,searchPlaceholder:"Search projects...",searchFields:["name","framework"],dedupeByConfigField:"vercelProjectId",dedupeExtraMatch:{drainType:"logs"},emptyState:{noMatches:"No projects found.",allConfigured:"All projects already have logs drains configured."},toStreamItem:{displayName:"$item.name (Logs)",config:{vercelProjectId:"$item.id",vercelProjectName:"$item.name",drainType:"logs"}}}},{id:"traces",label:"Traces",content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:wk,searchPlaceholder:"Search projects...",searchFields:["name","framework"],dedupeByConfigField:"vercelProjectId",dedupeExtraMatch:{drainType:"traces"},emptyState:{noMatches:"No projects found.",allConfigured:"All projects already have traces drains configured."},toStreamItem:{displayName:"$item.name (Traces)",config:{vercelProjectId:"$item.id",vercelProjectName:"$item.name",drainType:"traces"}}}},{id:"analytics",label:"Analytics",content:{kind:"list",listAction:"list",listInput:{connectionId:"${context.connectionId}"},columns:wk,searchPlaceholder:"Search projects...",searchFields:["name","framework"],dedupeByConfigField:"vercelProjectId",dedupeExtraMatch:{drainType:"analytics"},emptyState:{noMatches:"No projects found.",allConfigured:"All projects already have analytics drains configured."},toStreamItem:{displayName:"$item.name (Analytics)",config:{vercelProjectId:"$item.id",vercelProjectName:"$item.name",drainType:"analytics"}}}}]}}});var T8,L8,D8,pN;var wN=d(()=>{mN();T8=["vercelApiToken"],L8={id:"vercel",label:"Vercel",transform:"vercel-drain"},D8={id:"vercel-analytics",label:"Vercel Analytics",transform:"vercel-analytics-drain"},pN={id:"vercel",name:"Vercel",capabilities:["connectionless","managed"],auth:["apiToken"],delivery:["push"],lifecycleEligible:!0,sensitiveFields:T8,intake:[L8,D8],subtitle:"Forward your Vercel deployment logs, traces, and Web Analytics events directly to Sazabi for real-time analysis and alerting.",features:["Log forwarding","Trace forwarding","Web Analytics forwarding","Real-time streaming"],evidenceHints:["vercel.json, .vercel/, or Vercel build/deploy scripts","@vercel packages, VERCEL_* environment variables, or GitHub Actions that run vercel","README/docs naming Vercel as the deployment host"],setupSkill:H,dashboard:{iconKey:"vercel",intakeSourceId:"vercel",streamSelectorLayout:"sidepanel",streamTableColumns:[{kind:"config-enum-badge",header:"Type",width:"w-24",configField:"drainType",values:[{value:"logs",label:"Logs"},{value:"traces",label:"Traces"},{value:"analytics",label:"Analytics"}],fallbackLabel:"N/A"}],actions:{submit:{validate:{kind:"source-action",actionId:"validate-token"}},list:{list:{kind:"source-action",actionId:"list-projects",itemsField:"projects"}}}}}});var Sk;var fN=d(()=>{Sk={perStreamInstructions:!0,groups:[{id:"endpoint",section:"config",title:"Send events",actions:[{instruction:"Send an HTTP `POST` with a JSON body to your webhook URL (above).",notes:[{text:"A single JSON object is stored as one event; a JSON array of objects is stored as one event per element."},{text:"You can append any path — for example `/deploys` — to record the event's origin; the path is passed through and stored as `webhook.path`."}]}]},{id:"configure-vendor",section:"config",title:"Paste the URL into your vendor",actions:[{instruction:"Open your vendor's webhook or outbound-event settings, add a new endpoint, and paste the URL above. Choose JSON as the payload format if the vendor offers a choice.",notes:[{text:"Sazabi reads the time, severity, and message from common field names when present, and stores every field of the payload under `webhook.*` either way. There is nothing to map or declare."}]}]},{id:"verify",section:"verify",title:"Send a test event and verify",actions:[{instruction:"Trigger a test event from your vendor — most webhook settings pages have a “Send test” button — or POST a sample event yourself, then watch for it below.",payloads:[{kind:"code",label:"Send a test event",language:"bash",copyLabel:"curl test event",value:`curl -X POST \\
|
|
7253
7253
|
https://\${context.ingestHost}/test \\
|
|
7254
7254
|
-H 'content-type: application/json' \\
|
|
7255
|
-
-d '{"event":"hello.world","level":"info","message":"first webhook event"}'`}]}]}]}});var vN;var kN=d(()=>{fN();vN={id:"webhook_events",name:"Webhook Events",searchAliases:["webhook","webhooks","json events","http events","generic webhook","event stream"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"webhook-events",label:"Webhook Events",subdomain:"webhook-events",transform:"webhook-events"}],lifecycleSkipReason:"Manual webhook setup is not exercised by automated lifecycle tests yet.",subtitle:"Point any vendor's webhooks at Sazabi. Arbitrary JSON events land as searchable log records with zero vendor-specific configuration.",features:["Any JSON event stream","One keyed URL per endpoint","Full payload preserved as attributes","No schema or field mapping"],evidenceHints:["A vendor that emits plain JSON webhooks without a dedicated Sazabi source","An internal service, deploy bot, or cron that POSTs JSON events","Existing outbound webhook configuration with no other Sazabi destination"],setupSkill:H,dashboard:{slug:"webhook-events",iconKey:"webhook-events",intakeSourceId:"webhook-events"}}});var sl,SN,GCe,qCe,Ni,JCe,BCe,C8,z8,_8,HCe;var PN=d(()=>{w_();k_();I_();A_();D_();__();R_();M_();G_();B_();F_();Y_();ej();oj();aj();hj();dj();bj();wj();kj();Ij();Aj();Dj();_j();Rj();Mj();Gj();Bj();Fj();Yj();eN();oN();aN();hN();dN();bN();wN();kN();sl=[p_,v_,P_,O_,L_,z_,N_,U_,K_,J_,W_,X_,V_,nj,rj,sj,uj,yj,pj,vj,Pj,Oj,Lj,zj,Nj,Uj,Kj,Jj,Wj,Xj,nN,Vj,rN,sN,uN,yN,pN,vN],SN=sl,GCe=Object.fromEntries(SN.map((e)=>[e.id,e.sensitiveFields??[]])),qCe=Object.fromEntries(SN.flatMap((e)=>[...Object.values(e.dashboard?.actions?.submit??{}),...Object.values(e.dashboard?.actions?.list??{}),...Object.values(e.dashboard?.actions?.prefetch??{})].flatMap((t)=>{let n=t.sensitiveInputFields??[];if(n.length===0)return[];return[["procedure"in t?t.procedure:`${e.id}.${t.actionId}`,n]]}))),Ni=["vercel","cloudflare","railway","render","fly_io","netlify","supabase","digital_ocean","inngest","trigger_dev","temporal","mastra","neon","langchain","daytona","e2b","cloudwatch","convex","datadog","sentry","sentry_platform","openrouter","posthog","posthog_sdk","gcp","otel","otel_metrics","fluent_bit","vector","grafana_alloy","otel_collector","cloudflare_workers","elastic_cloud","porter","respan","plain","prometheus","webhook_events"],JCe=sl.map((e)=>({id:e.id,name:e.name,capabilities:e.capabilities})),BCe=Object.fromEntries(sl.map((e)=>[e.id,{name:e.name,setupSkill:e.setupSkill}])),C8={cloudflare:yv,cloudwatch:kv,convex:Iv,digital_ocean:Lv,fly_io:Nv,gcp:Uv,plain:Yv,posthog:tk,render:ck,sentry_platform:dk,vercel:fk},z8={cloudflare:bv,cloudwatch:Sv,convex:Ov,digital_ocean:Cv,fly_io:xv,gcp:Mv,plain:Vv,posthog:nk,render:hk,vercel:kk},_8={cloudflare:mv,cloudflare_workers:pv,cloudwatch:Pv,convex:$v,datadog:Av,daytona:Tv,digital_ocean:Dv,fluent_bit:jv,fly_io:Rv,grafana_alloy:Kv,e2b:zv,elastic_cloud:_v,gcp:Ev,inngest:Gv,langchain:qv,mastra:Jv,neon:Bv,netlify:Hv,openrouter:Wv,otel:Fv,otel_collector:Zv,otel_metrics:Xv,plain:Qv,posthog:ok,posthog_sdk:ik,porter:ek,prometheus:rk,railway:ak,render:sk,respan:lk,sentry:uk,sentry_platform:gk,supabase:yk,temporal:bk,trigger_dev:mk,vector:pk,vercel:vk,webhook_events:Sk},HCe=sl.map((e)=>({sourceId:e.id,name:e.name,capabilities:e.capabilities,setupAuthModes:e.auth,deliveryModes:e.delivery,hasDashboardMetadata:Boolean(e.dashboard),hasManagedFlow:Boolean(C8[e.id]),hasConnectionlessFlow:Boolean(_8[e.id]),hasStreamSelector:Boolean(z8[e.id]),lifecycleEligible:e.lifecycleEligible??!1,lifecycleSkipReason:e.lifecycleSkipReason}))});var IN=d(()=>{PN()});var Pk=d(()=>{b_();IN()});var $N,Ik,j8,hl,N8,ON,$k,Wa,Fa,AN,TN,LN,ll,DN,CN,Ri,zN,_N,xi,jN,NN,ul,RN,xN,dl,UN,MN,gl,EN,KN,yl,GN,qN,bl,JN,BN,ml,HN,WN,pl,FN,ZN,wl,R8;var Ok=d(()=>{Pk();me();Ce();$N=Ni,Ik=a.enum($N),j8=a.enum(["pending","provisioning","active","error"]),hl=a.enum(["managed","connectionless"]),N8=a.object({name:a.string().describe("Field name used as the JSON key in metadata."),type:a.string().describe('Zod type name, e.g. "string", "boolean", "enum".'),required:a.boolean().describe("Whether the field is required."),sensitive:a.boolean().describe("Whether the field contains a secret and will be encrypted."),description:a.string().nullable().describe("Human-readable description of the field.")}),ON=a.object({id:a.string().describe("Data source type identifier."),name:a.string().describe("Human-readable display name."),modes:a.array(hl).describe("Setup modes this source supports. `managed` sources take vendor credentials; `connectionless` sources mint a keyed intake endpoint."),metadataFields:a.array(N8).describe("Fields required in the metadata object when creating a managed instance. Empty for connectionless-only sources."),setupSkill:a.string().nullable().describe("Markdown setup skill for AI agents. Null when no skill is available.")}),$k=a.object({kind:a.enum(["url","hostPort"]).describe("Card shape. `url` = a complete keyed URL whose hostname authenticates; `hostPort` = a non-keyed listener host + port whose credential travels separately."),label:a.string().optional().describe("Card label. Present when a source exposes several endpoints (e.g. separate logs and traces destinations)."),url:a.string().optional().describe("The complete keyed intake URL. Present when kind is `url`."),host:a.string().optional().describe("The regional listener hostname (no scheme). Present when kind is `hostPort`."),port:a.number().int().optional().describe("The listener port. Present when kind is `hostPort`."),description:a.string().optional().describe("Vendor-specific guidance rendered under the value."),extraCredential:a.object({label:a.string(),value:a.string(),description:a.string().optional()}).optional().describe("The credential the sender must attach when the hostname alone does not authenticate. Present when kind is `hostPort`.")}),Wa=a.object({id:a.string().uuid(),instanceId:a.string().uuid().describe("Root instance ID. Every stream roots on exactly one data source instance."),displayName:a.string(),config:a.record(a.string(),a.unknown()),status:j8,errorMessage:a.string().nullable(),enabled:a.boolean().describe("Whether the stream is currently ingesting. Independent of provisioning status: a paused stream stays configured but stops accepting new data."),createdAt:a.string().datetime(),endpointCards:a.array($k).optional().describe("Server-computed endpoint card(s) for this stream's delivery key — where to point the sender. Present only for streams that carry their own intake key.")}),Fa=a.object({id:a.string().uuid(),dataSourceType:Ik,mode:hl,name:a.string().nullable().describe("Display name. For connectionless instances this falls back to the stream's name when no explicit name is set."),streamCount:a.number().int(),createdAt:a.string().datetime()}),AN=Fa.extend({streams:a.array(Wa).describe("The instance's live streams, newest first.")}),TN=a.object({}),LN=a.object({types:a.array(ON)}),ll=I({operationId:"dataSources.listTypes",description:"List all supported data source types with their setup modes and metadata requirements.",backend:"api",route:{method:"GET",path:"/data-sources/types",tags:["Data Sources"]},input:TN,output:LN,pagination:"none",async:"sync"}),DN=a.object({projectId:a.string().uuid().optional().describe("Project to list instances for. Auto-filled from SDK context when omitted."),dataSourceType:Ik.optional().describe("Filter instances by data source type.")}),CN=a.object({instances:a.array(Fa)}),Ri=I({operationId:"dataSources.listInstances",description:"List data source instances within one project.",backend:"api",route:{method:"GET",path:"/data-sources/instances",tags:["Data Sources"]},input:DN,output:CN,pagination:"none",async:"sync"}),zN=a.object({projectId:a.string().uuid().optional().describe("Project to create the instance in. Auto-filled from SDK context when omitted."),dataSourceType:Ik.describe("Data source type identifier."),mode:hl.optional().describe("Setup mode. Defaults to `managed` when metadata is provided, otherwise `connectionless`. Must be a mode the source supports (see `modes` on the type catalog)."),name:a.string().optional().describe("Optional human-readable name for this instance."),metadata:a.record(a.string(),a.unknown()).optional().describe("Vendor credentials and configuration for managed setup. Fields vary by data source type (see `metadataFields` on the type catalog). Required for managed mode; must be omitted for connectionless mode.")}),_N=a.object({instance:Fa.describe("The created instance."),streamId:a.string().uuid().optional().describe("ID of the stream created alongside the instance. Present for connectionless instances (which always mint their keyed stream) and for managed sources that auto-provision a default stream."),publicKey:a.string().optional().describe("Intake key minted for the instance. Store this securely — it is only shown once. Present for connectionless instances and for managed sources that ingest through a Sazabi endpoint."),endpointCards:a.array($k).optional().describe("Server-computed endpoint card(s) for the minted key — where to point the sender. Present for connectionless instances.")}),xi=I({operationId:"dataSources.createInstance",description:"Create a data source instance. Managed mode takes vendor credentials in `metadata`, validates them, and provisions delivery behind the instance. Connectionless mode mints the instance plus a keyed stream and returns the intake key and endpoint card(s) to point the sender at.",backend:"api",route:{method:"POST",path:"/data-sources/instances",successStatus:201,tags:["Data Sources"]},input:zN,output:_N,pagination:"none",async:"sync"}),jN=a.object({instanceId:a.string().uuid().describe("Instance ID to fetch.")}),NN=a.object({instance:AN}),ul=I({operationId:"dataSources.getInstance",description:"Get one data source instance by ID, including its streams and their endpoint card(s).",backend:"api",route:{method:"GET",path:"/data-sources/instances/{instanceId}",tags:["Data Sources"]},input:jN,output:NN,pagination:"none",async:"sync"}),RN=a.object({instanceId:a.string().uuid().describe("Instance ID to update."),name:a.string().min(1).optional().describe("New display name for the instance."),enabled:a.boolean().optional().describe("Pause (`false`) or resume (`true`) ingestion for all of the instance's streams. Reversible; never deletes anything.")}),xN=a.object({instance:Fa}),dl=I({operationId:"dataSources.updateInstance",description:"Update a data source instance: rename it and/or pause or resume ingestion across its streams.",backend:"api",route:{method:"PATCH",path:"/data-sources/instances/{instanceId}",tags:["Data Sources"]},input:RN,output:xN,pagination:"none",async:"sync"}),UN=a.object({instanceId:a.string().uuid().describe("Instance ID to delete.")}),MN=a.object({success:a.boolean(),teardownError:a.string().nullable().describe("Null when vendor-side cleanup succeeded or was not needed; error message when remote cleanup failed and must be finished manually.")}),gl=I({operationId:"dataSources.deleteInstance",description:"Delete a data source instance. Tombstones the instance and its streams, deactivates their intake keys (already-ingested data is preserved with its attribution), and runs vendor-side cleanup for managed instances when the source supports it.",backend:"api",route:{method:"DELETE",path:"/data-sources/instances/{instanceId}",successStatus:200,tags:["Data Sources"]},input:UN,output:MN,pagination:"none",async:"sync"}),EN=a.object({instanceId:a.string().uuid().describe("Instance ID to list streams for."),enabled:a.boolean().optional().describe("Optional filter on stream ingestion state. Omit to list all streams; pass true for only enabled streams or false for only paused streams.")}),KN=a.object({streams:a.array(Wa)}),yl=I({operationId:"dataSources.listStreams",description:"List the streams that belong to a data source instance.",backend:"api",route:{method:"GET",path:"/data-sources/instances/{instanceId}/streams",tags:["Data Sources"]},input:EN,output:KN,pagination:"none",async:"sync"}),GN=a.object({instanceId:a.string().uuid().describe("Instance ID to create the stream under."),displayName:a.string().min(1).describe("Resource name, e.g. service or app name."),config:a.record(a.string(),a.unknown()).optional().describe("Platform-specific stream configuration.")}),qN=a.object({streamId:a.string().uuid().describe("ID of the created stream.")}),bl=I({operationId:"dataSources.createStream",description:"Create a new stream under a managed data source instance. Triggers async provisioning; poll the stream to track it. Connectionless instances are single-stream — create another instance instead.",backend:"api",route:{method:"POST",path:"/data-sources/instances/{instanceId}/streams",successStatus:201,tags:["Data Sources"]},input:GN,output:qN,pagination:"none",async:"sync"}),JN=a.object({streamId:a.string().uuid().describe("Stream ID to fetch.")}),BN=a.object({stream:Wa}),ml=I({operationId:"dataSources.getStream",description:"Get one data source stream by ID. Use to poll provisioning status.",backend:"api",route:{method:"GET",path:"/data-sources/streams/{streamId}",tags:["Data Sources"]},input:JN,output:BN,pagination:"none",async:"sync"}),HN=a.object({streamId:a.string().uuid().describe("Stream ID to update."),displayName:a.string().min(1).optional().describe("New display name for the stream."),enabled:a.boolean().optional().describe("Pause (`false`) or resume (`true`) ingestion for this stream. Reversible; never deletes anything.")}),WN=a.object({stream:Wa}),pl=I({operationId:"dataSources.updateStream",description:"Update a data source stream: rename it and/or pause or resume its ingestion.",backend:"api",route:{method:"PATCH",path:"/data-sources/streams/{streamId}",tags:["Data Sources"]},input:HN,output:WN,pagination:"none",async:"sync"}),FN=a.object({streamId:a.string().uuid().describe("Stream ID to delete.")}),ZN=a.object({success:a.boolean()}),wl=I({operationId:"dataSources.deleteStream",description:"Delete a data source stream. Tombstones the stream and deactivates its intake key. Deleting a connectionless instance's only stream tombstones the instance too.",backend:"api",route:{method:"DELETE",path:"/data-sources/streams/{streamId}",successStatus:204,tags:["Data Sources"]},input:FN,output:ZN,pagination:"none",async:"sync"}),R8={listTypes:ll.contract,listInstances:Ri.contract,createInstance:xi.contract,getInstance:ul.contract,updateInstance:dl.contract,deleteInstance:gl.contract,listStreams:yl.contract,createStream:bl.contract,getStream:ml.contract,updateStream:pl.contract,deleteStream:wl.contract}});var x8,Ak,U8,M8,E8,K8,G8,XN,q8,J8,YN,B8,H8,QN,W8,F8,VN;var e1=d(()=>{me();Ce();x8=["slack","github","linear","pagerduty","victorops","rootly","incident_io","webhook","teams","bitbucket","jira"],Ak=a.enum(x8),U8=a.enum(["oauth","app_installation","api_key"]),M8=a.enum(["alert_routing","inbound_webhooks","messaging","code_search","health_check"]),E8=a.enum(["pending","connected","error","revoked"]),K8=a.enum(["healthy","unhealthy","unknown"]),G8=a.object({id:Ak.describe("Integration provider identifier."),name:a.string().describe("Human-readable display name."),description:a.string().describe("Short description of the provider."),authType:U8.describe("Auth flow used to connect this provider."),capabilities:a.array(M8).describe("Capabilities the provider exposes once connected."),connectionCount:a.number().int().describe("Number of active connections for this provider in the organization, including error-status connections that need attention.")}),XN=a.object({id:a.string().uuid(),provider:Ak,displayName:a.string().nullable(),status:E8,isActive:a.boolean().describe("Whether this connection counts as connected (status 'connected' or 'error'). An error-status connection is the organization's connection — broken, not absent."),needsAttention:a.boolean().describe("Whether the connection should surface a reconnect prompt (status 'error' or health status 'unhealthy')."),metadata:a.record(a.string(),a.unknown()).describe("Non-secret provider metadata (e.g. workspace/team names)."),healthStatus:K8,healthMessage:a.string().nullable(),healthCheckedAt:a.string().datetime().nullable(),healthConsecutiveFailures:a.number().int(),connectedBy:a.string().nullable(),createdAt:a.string().datetime(),updatedAt:a.string().datetime()}),q8=a.object({organizationId:a.string().min(1).optional().describe("Organization to list providers for. Auto-filled from CLI and SDK context when omitted.")}),J8=a.object({providers:a.array(G8)}),YN=I({operationId:"integrations.listProviders",description:"List supported integration providers and how many connections the organization has for each.",backend:"api",route:{method:"GET",path:"/integrations/providers",tags:["Integrations"]},input:q8,output:J8,pagination:"none",async:"sync"}),B8=a.object({organizationId:a.string().min(1).optional().describe("Organization to list connections for. Auto-filled from CLI and SDK context when omitted."),provider:Ak.optional().describe("Filter connections by provider.")}),H8=a.object({connections:a.array(XN)}),QN=I({operationId:"integrations.listConnections",description:"List integration connections and their connection state for the organization.",backend:"api",route:{method:"GET",path:"/integrations/connections",tags:["Integrations"]},input:B8,output:H8,pagination:"none",async:"sync"}),W8=a.object({organizationId:a.string().min(1).optional().describe("Organization the connection belongs to. Auto-filled from CLI and SDK context when omitted."),connectionId:a.string().uuid().describe("Connection ID to fetch.")}),F8=a.object({connection:XN}),VN=I({operationId:"integrations.getConnection",description:"Get one integration connection by ID (non-secret config only).",backend:"api",route:{method:"GET",path:"/integrations/connections/{connectionId}",tags:["Integrations"]},input:W8,output:F8,pagination:"none",async:"sync"})});var on,Z8,X8,t1,fl,vl,n1,Tk,o1,Lk,i1,r1,Y8,Q8,a1,c1,s1,h1,l1,u1,d1,g1,y1,b1,m1,p1,w1,f1,v1,Ui,kl,Sl,Pl,Il,$l,Ol,Al,Tl,Ll,Dl,V8;var Dk=d(()=>{me();Ce();on=a.object({id:a.string().uuid(),projectId:a.string().uuid(),name:a.string(),description:a.string().nullable(),status:a.enum(["open","resolved","ignored"]),severity:a.enum(["low","medium","high","critical"]),statusComponentId:a.string().uuid().nullable(),createdAt:a.string().datetime(),resolvedAt:a.string().datetime().nullable(),mutedAt:a.string().datetime().nullable(),muteHitCount:a.number().int().nonnegative(),lastActivityAt:a.string().datetime().nullable(),lastDeliveredAt:a.string().datetime().nullable(),locked:a.boolean(),redacted:a.boolean()}),Z8=a.object({channelId:a.string().nullable(),channelName:a.string().nullable(),threadTs:a.string().nullable(),permalink:a.string().nullable(),workspaceName:a.string().nullable()}),X8=on.extend({slackChannels:a.array(Z8)}),t1=on.extend({delivery:a.record(a.string(),a.unknown()).nullable().optional()}),fl=a.object({projectId:a.string().uuid().optional().describe("Project to create the issue in. Auto-filled from CLI and SDK context when omitted."),name:a.string().trim().min(1).optional().describe("Stable issue name for indexing and mute matching. When omitted, the name is derived from contentMdx."),contentMdx:a.string().trim().min(1,"contentMdx cannot be empty").describe("Safe Sazabi MDX document for the issue body (impact, root cause, remediation, evidence)."),severity:a.enum(["low","medium","high","critical"]).default("medium").describe("Issue severity used for prioritization and triage."),statusComponentId:a.string().uuid().optional().describe("Optional status component ID to link to the issue."),statusStartedAt:a.string().datetime({offset:!0}).optional().describe("Optional ISO timestamp for when the linked status-page incident began.")}),vl=fl.superRefine((e,t)=>{if(e.statusStartedAt&&!e.statusComponentId)t.addIssue({code:"custom",path:["statusStartedAt"],message:"statusStartedAt requires statusComponentId."})}),n1=a.object({issue:on,duplicateIssueId:a.string().uuid().optional().describe("Present when creation reused an existing open issue instead of creating a new one.")}),Tk=a.object({projectId:a.string().uuid().optional().describe("Project to list issues for. Auto-filled from CLI and SDK context when omitted."),limit:a.coerce.number().int().min(1).max(100).default(50).describe("Maximum number of issues to return per page."),cursor:a.string().uuid().optional().describe("Cursor from a previous response's nextCursor to fetch the next page."),status:a.enum(["open","resolved","ignored"]).optional().describe("Filter by issue status."),severity:a.enum(["low","medium","high","critical"]).optional().describe("Filter by severity."),statusComponentId:a.string().uuid().optional().describe("Filter by status component ID.")}),o1=a.object({issues:a.array(on),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),Lk=Tk.extend({name:a.string().trim().optional().describe("Case-insensitive partial match on issue name."),includeDeliveryMetadata:a.union([a.boolean(),a.stringbool()]).default(!1).describe("When true, include raw delivery metadata in each issue.")}),i1=a.object({issues:a.array(t1),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),r1=Lk.omit({limit:!0,cursor:!0,includeDeliveryMetadata:!0}),Y8=a.object({open:a.number().int().nonnegative(),resolved:a.number().int().nonnegative(),ignored:a.number().int().nonnegative()}),Q8=a.object({low:a.number().int().nonnegative(),medium:a.number().int().nonnegative(),high:a.number().int().nonnegative(),critical:a.number().int().nonnegative()}),a1=a.object({total:a.number().int().nonnegative(),byStatus:Y8,bySeverity:Q8,filters:a.object({name:a.string().nullable(),status:a.enum(["open","resolved","ignored"]).nullable(),severity:a.enum(["low","medium","high","critical"]).nullable(),statusComponentId:a.string().uuid().nullable()})}),c1=a.object({issueId:a.string().uuid().describe("Issue ID to retrieve.")}),s1=a.object({issue:X8}),h1=a.object({issueId:a.string().uuid().describe("Issue ID to resolve."),statusResolvedAt:a.string().datetime({offset:!0}).optional().describe("Optional ISO timestamp for when the linked status-page incident ended.")}),l1=a.object({issue:on}),u1=a.object({issueId:a.string().uuid().describe("Issue ID to ignore.")}),d1=a.object({issue:on}),g1=a.object({issueId:a.string().uuid().describe("Issue ID to reopen.")}),y1=a.object({issue:on}),b1=a.object({issueId:a.string().uuid().describe("Issue ID to reassign and reopen."),targetComponentId:a.string().uuid().describe("Active canonical component that will own the reopened issue.")}),m1=a.object({issue:on,sourceComponentId:a.string().uuid(),targetComponentId:a.string().uuid()}),p1=a.object({issueId:a.string().uuid().describe("Issue ID to mute.")}),w1=a.object({issue:on}),f1=a.object({issueId:a.string().uuid().describe("Issue ID to unmute.")}),v1=a.object({issue:on}),Ui=I({operationId:"issues.create",description:"Create an issue in a project, returning an existing open issue when root-cause deduplication finds a match.",backend:"api",route:{method:"POST",path:"/issues",tags:["Issues"],successStatus:201},input:vl,output:n1,pagination:"none",async:"sync"}),kl=I({operationId:"issues.list",description:"List issues in a project, optionally filtered by status and severity.",backend:"api",route:{method:"GET",path:"/issues",tags:["Issues"]},input:Tk,output:o1,pagination:"cursor",async:"sync"}),Sl=I({operationId:"issues.search",description:"Search issues in a project by name, status, and severity.",backend:"api",route:{method:"GET",path:"/issues/search",tags:["Issues"]},input:Lk,output:i1,pagination:"cursor",async:"sync"}),Pl=I({operationId:"issues.count",description:"Count issues in a project with status and severity breakdowns.",backend:"api",route:{method:"GET",path:"/issues/count",tags:["Issues"]},input:r1,output:a1,pagination:"none",async:"sync"}),Il=I({operationId:"issues.get",description:"Get a single issue by ID.",backend:"api",route:{method:"GET",path:"/issues/{issueId}",tags:["Issues"]},input:c1,output:s1,pagination:"none",async:"sync"}),$l=I({operationId:"issues.resolve",description:"Resolve an open issue.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/resolve",tags:["Issues"]},input:h1,output:l1,pagination:"none",async:"sync"}),Ol=I({operationId:"issues.ignore",description:"Ignore an open issue.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/ignore",tags:["Issues"]},input:u1,output:d1,pagination:"none",async:"sync"}),Al=I({operationId:"issues.reopen",description:"Reopen a resolved or ignored issue.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/reopen",tags:["Issues"]},input:g1,output:y1,pagination:"none",async:"sync"}),Tl=I({operationId:"issues.reassignAndReopen",description:"Atomically reassign a resolved or ignored issue to an active component and reopen it.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/reassign-and-reopen",tags:["Issues"]},input:b1,output:m1,pagination:"none",async:"sync"}),Ll=I({operationId:"issues.mute",description:"Mute an issue, suppressing future re-fires without changing status.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/mute",tags:["Issues"]},input:p1,output:w1,pagination:"none",async:"sync"}),Dl=I({operationId:"issues.unmute",description:"Unmute an issue, preserving its current status.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/unmute",tags:["Issues"]},input:f1,output:v1,pagination:"none",async:"sync"}),V8={count:Pl.contract,create:Ui.contract,list:kl.contract,search:Sl.contract,get:Il.contract,resolve:$l.contract,ignore:Ol.contract,reopen:Al.contract,reassignAndReopen:Tl.contract,mute:Ll.contract,unmute:Dl.contract}});var Ck,k1,Cl,zl,S1,P1,I1,$1,_l,zk,O1,A1,T1,L1,D1,C1,z1,_1,j1,N1,R1,x1,Mi,Ei,Ki,Gi,qi,jl,Nl,Rl,xl,Ul,e5,t5;var _k=d(()=>{me();Ce();Ck=/^[a-zA-Z0-9\s\-_]+$/,k1=a.object({id:a.string().uuid(),name:a.string(),expiresAt:a.string().datetime().nullable(),lastUsedAt:a.string().datetime().nullable(),createdAt:a.string().datetime()}),Cl=k1.extend({projectId:a.string().uuid(),dataSourceConnectionId:a.string().uuid().nullable().describe("Linked data source connection ID when this key is scoped to one data source."),deactivatedAt:a.string().datetime().nullable().describe("Timestamp when this public key was deactivated.")}),zl=k1.extend({projectId:a.string().uuid().nullable()}),S1=a.object({projectId:a.string().uuid().optional().describe("Project to list keys for. Auto-filled from CLI and SDK context when omitted."),limit:a.coerce.number().int().min(1).max(100).default(50).describe("Maximum number of keys to return per page."),cursor:a.string().uuid().optional().describe("Cursor from a previous response's nextCursor to fetch the next page.")}),P1=a.object({publicKeys:a.array(Cl),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),I1=a.object({secretKeys:a.array(zl),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),$1=a.object({projectId:a.string().uuid().optional().describe("Project containing the key. Auto-filled from CLI and SDK context when omitted."),keyId:a.string().uuid().describe("Key ID to fetch.")}),_l=a.object({publicKey:Cl}),zk=a.object({secretKey:zl}),O1=a.object({publicKey:Cl.extend({value:a.string()})}),A1=a.object({projectId:a.string().uuid().optional().describe("Project to ensure the log forwarding key for. Auto-filled from CLI and SDK context when omitted.")}),T1=a.object({secretKey:zl.extend({value:a.string()})}),L1=a.object({projectId:a.string().uuid().optional().describe("Project containing the key. Auto-filled from CLI and SDK context when omitted."),keyId:a.string().uuid().describe("Key ID to update."),name:a.string().min(1,"Name is required").max(100,"Name must be 100 characters or less").regex(Ck,"Name can only contain letters, numbers, spaces, hyphens, and underscores").optional().describe("New human-readable name for the key."),expiresAt:a.string().datetime().nullable().optional().describe("New expiration timestamp for the key, or null to clear it.")}),D1=a.object({params:a.object({keyId:a.string().uuid().describe("Public key ID to deactivate.")}),query:a.object({projectId:a.string().uuid().optional().describe("Project containing the key. Auto-filled from CLI and SDK context when omitted.")})}).transform(({params:e,query:t})=>({...t,...e})),C1=_l,z1=a.void(),_1=a.object({limit:a.coerce.number().int().min(1).max(100).default(50).describe("Maximum number of keys to return per page."),cursor:a.string().uuid().optional().describe("Cursor from a previous response's nextCursor to fetch the next page.")}),j1=a.object({keyId:a.string().uuid().describe("Key ID to fetch.")}),N1=a.object({projectId:a.string().uuid().optional().describe("Project to scope this key to. When set, the key can only access resources within this project. Omit for organization-wide access."),name:a.string().min(1,"Name is required").max(100,"Name must be 100 characters or less").regex(Ck,"Name can only contain letters, numbers, spaces, hyphens, and underscores").describe("Human-readable name for the key."),expiresAt:a.string().datetime().optional().describe("Optional expiration timestamp for the key.")}),R1=a.object({keyId:a.string().uuid().describe("Key ID to update."),name:a.string().min(1,"Name is required").max(100,"Name must be 100 characters or less").regex(Ck,"Name can only contain letters, numbers, spaces, hyphens, and underscores").optional().describe("New human-readable name for the key."),expiresAt:a.string().datetime().nullable().optional().describe("New expiration timestamp for the key, or null to clear it.")}),x1=a.object({params:a.object({keyId:a.string().uuid().describe("Key ID to delete.")})}).transform(({params:e})=>({...e})),Mi=I({operationId:"publicKeys.list",description:"List public keys within one project.",backend:"api",route:{method:"GET",path:"/public-keys",tags:["Public Keys"]},input:S1,output:P1,pagination:"cursor",async:"sync",examples:[{name:"list-public-keys",input:{projectId:"11111111-1111-4111-8111-111111111111",limit:25},output:{publicKeys:[{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"CLI forwarder",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}],nextCursor:null}}]}),Ei=I({operationId:"publicKeys.get",description:"Get one public key within one project.",backend:"api",route:{method:"GET",path:"/public-keys/{keyId}",tags:["Public Keys"]},input:$1,output:_l,pagination:"none",async:"sync",examples:[{name:"get-public-key",input:{projectId:"11111111-1111-4111-8111-111111111111",keyId:"22222222-2222-4222-8222-222222222222"},output:{publicKey:{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"CLI forwarder",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),Ki=I({operationId:"publicKeys.ensureLogForwarding",description:"Ensure a reusable project-scoped public key exists for CLI log forwarding.",backend:"api",route:{method:"POST",path:"/public-keys/log-forwarding/ensure",tags:["Public Keys"]},input:A1,output:O1,pagination:"none",async:"sync",examples:[{name:"ensure-log-forwarding-public-key",input:{projectId:"11111111-1111-4111-8111-111111111111"},output:{publicKey:{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"sazabi-cli-forward",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z",value:"sazabi_public_example"}}}]}),Gi=I({operationId:"publicKeys.update",description:"Update one public key within one project.",backend:"api",route:{method:"PATCH",path:"/public-keys/{keyId}",tags:["Public Keys"]},input:L1,output:_l,pagination:"none",async:"sync",examples:[{name:"rename-public-key",input:{projectId:"11111111-1111-4111-8111-111111111111",keyId:"22222222-2222-4222-8222-222222222222",name:"Updated CLI forwarder"},output:{publicKey:{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"Updated CLI forwarder",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),qi=I({operationId:"publicKeys.deactivate",description:"Deactivate one public key within one project. Recently validated requests may continue to authenticate for a short period after deactivation.",backend:"api",route:{method:"POST",path:"/public-keys/{keyId}/deactivate",tags:["Public Keys"],inputStructure:"detailed"},input:D1,output:C1,pagination:"none",async:"sync"}),jl=I({operationId:"secretKeys.list",description:"List secret keys within the organization.",backend:"api",route:{method:"GET",path:"/secret-keys",tags:["Secret Keys"]},input:_1,output:I1,pagination:"cursor",async:"sync",examples:[{name:"list-secret-keys",input:{limit:25},output:{secretKeys:[{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}],nextCursor:null}}]}),Nl=I({operationId:"secretKeys.get",description:"Get one secret key within the organization.",backend:"api",route:{method:"GET",path:"/secret-keys/{keyId}",tags:["Secret Keys"]},input:j1,output:zk,pagination:"none",async:"sync",examples:[{name:"get-secret-key",input:{keyId:"33333333-3333-4333-8333-333333333333"},output:{secretKey:{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),Rl=I({operationId:"secretKeys.create",description:"Create one secret key within the organization.",backend:"api",route:{method:"POST",path:"/secret-keys",successStatus:201,tags:["Secret Keys"]},input:N1,output:T1,pagination:"none",async:"sync",examples:[{name:"create-secret-key",input:{name:"CI agent"},output:{secretKey:{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z",value:"sazabi_secret_example"}}}]}),xl=I({operationId:"secretKeys.update",description:"Update one secret key within the organization.",backend:"api",route:{method:"PATCH",path:"/secret-keys/{keyId}",tags:["Secret Keys"]},input:R1,output:zk,pagination:"none",async:"sync",examples:[{name:"rename-secret-key",input:{keyId:"33333333-3333-4333-8333-333333333333",name:"Updated CI agent"},output:{secretKey:{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"Updated CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),Ul=I({operationId:"secretKeys.delete",description:"Delete one secret key within the organization.",backend:"api",route:{method:"DELETE",path:"/secret-keys/{keyId}",successStatus:204,tags:["Secret Keys"],inputStructure:"detailed"},input:x1,output:z1,pagination:"none",async:"sync"}),e5={list:Mi.contract,get:Ei.contract,ensureLogForwarding:Ki.contract,update:Gi.contract,deactivate:qi.contract},t5={list:jl.contract,get:Nl.contract,create:Rl.contract,update:xl.contract,delete:Ul.contract}});var jk,U1,Nk,Za,n5,o5,i5,r5,a5,c5,s5,h5,l5,u5,Rk,xk,Uk,Mk,Ek,o_e;var M1=d(()=>{me();Ce();jk=a.string().uuid().describe("Log match expression ID."),U1=a.string().min(1).max(200).describe("Human-readable expression name."),Nk=a.string().min(1).max(8192).describe("CEL expression evaluated against ingested log events."),Za=a.object({id:a.string().uuid(),projectId:a.string().uuid(),name:a.string(),expression:Nk,enabled:a.boolean(),compiledVersion:a.number().int(),linkedAutomationIds:a.array(a.string().uuid()).optional().describe("Automations bound to this expression. Included on list/get when available."),createdAt:a.string().datetime(),updatedAt:a.string().datetime()}),n5=a.object({projectId:a.string().uuid().optional().describe("Project to list expressions for. Auto-filled from CLI and SDK context when omitted.")}),o5=a.object({expressions:a.array(Za)}),i5=a.object({expressionId:jk,projectId:a.string().uuid().optional().describe("Project that owns the expression. Auto-filled from CLI and SDK context when omitted.")}),r5=a.object({expression:Za}),a5=a.object({projectId:a.string().uuid().optional().describe("Project to create the expression in. Auto-filled from CLI and SDK context when omitted."),name:U1,expression:Nk,enabled:a.boolean().optional().describe("Whether the expression starts enabled. Defaults to true.")}),c5=a.object({expression:Za}),s5=a.object({expressionId:jk,projectId:a.string().uuid().optional().describe("Project that owns the expression. Auto-filled from CLI and SDK context when omitted."),name:U1.optional(),expression:Nk.optional(),enabled:a.boolean().optional().describe("Whether the expression is enabled.")}),h5=a.object({expression:Za}),l5=a.object({expressionId:jk,projectId:a.string().uuid().optional().describe("Project that owns the expression. Auto-filled from CLI and SDK context when omitted.")}),u5=a.object({expression:Za}),Rk=I({operationId:"logMatchExpressions.list",description:"List CEL log-match expressions in a project.",backend:"api",route:{method:"GET",path:"/log-match-expressions",tags:["Log match expressions"]},input:n5,output:o5,pagination:"none",async:"sync"}),xk=I({operationId:"logMatchExpressions.get",description:"Get a single log-match expression by ID.",backend:"api",route:{method:"GET",path:"/log-match-expressions/{expressionId}",tags:["Log match expressions"]},input:i5,output:r5,pagination:"none",async:"sync"}),Uk=I({operationId:"logMatchExpressions.create",description:"Create a CEL log-match expression for a project.",backend:"api",route:{method:"POST",path:"/log-match-expressions",successStatus:201,tags:["Log match expressions"]},input:a5,output:c5,pagination:"none",async:"sync"}),Mk=I({operationId:"logMatchExpressions.update",description:"Update a log-match expression's name, CEL body, or enabled state.",backend:"api",route:{method:"PATCH",path:"/log-match-expressions/{expressionId}",tags:["Log match expressions"]},input:s5,output:h5,pagination:"none",async:"sync"}),Ek=I({operationId:"logMatchExpressions.disable",description:"Disable a log-match expression so it stops matching logs.",backend:"api",route:{method:"POST",path:"/log-match-expressions/{expressionId}/disable",tags:["Log match expressions"]},input:l5,output:u5,pagination:"none",async:"sync"}),o_e={list:Rk.contract,get:xk.contract,create:Uk.contract,update:Mk.contract,disable:Ek.contract}});var E1,K1,G1,q1,J1,B1,H1,Xa,W1,F1,Z1,Kk,X1,Y1,Q1,V1,e4,t4,n4,o4,i4,r4,d5,a4,c4,Ji,Bi,Hi,Wi,Fi,Ml,g5;var Gk=d(()=>{me();Ce();E1=a.enum(["eq","neq","in","contains","starts_with","gt","gte","lt","lte","between","exists"]).describe("Filter operator: 'eq' (equals), 'neq' (not equals), 'in' (in array), 'contains' (substring), 'starts_with' (prefix), 'gt' (greater than), 'gte' (greater than or equal), 'lt' (less than), 'lte' (less than or equal), 'between' (range), 'exists' (field exists)"),K1=a.enum(["any","all","phrase"]).describe("Search mode: 'any' (match any token), 'all' (match all tokens), 'phrase' (exact phrase match)"),G1=a.object({query:a.string().min(1,"Search query must be at least 1 character").max(500,"Search query must be at most 500 characters").describe("Search query text (1-500 characters)"),fields:a.array(a.string()).optional().describe("Fields to search in (defaults to backend allowlist)"),mode:K1.optional().default("all").describe("Token matching mode")}),q1=a.object({field:a.string().describe("Field name to filter on"),op:E1.describe("Filter operator"),value:a.union([a.string(),a.number(),a.boolean(),a.array(a.union([a.string(),a.number()])),a.object({from:a.string(),to:a.string()})]).describe("Filter value (type depends on operator)")}).superRefine((e,t)=>{if(e.op==="in"&&!Array.isArray(e.value))t.addIssue({code:a.ZodIssueCode.custom,message:"Value must be an array when op is 'in'",path:["value"]});if(e.op==="between"){let n=e.value;if(!(typeof n==="object"&&n!==null&&("from"in n)&&("to"in n)))t.addIssue({code:a.ZodIssueCode.custom,message:"Value must be an object with from/to when op is 'between'",path:["value"]})}if(e.op==="exists"&&typeof e.value!=="boolean")t.addIssue({code:a.ZodIssueCode.custom,message:"Value must be boolean when op is 'exists'",path:["value"]})}),J1=a.object({field:a.string().describe("Field name to sort by"),direction:a.enum(["asc","desc"]).default("desc").describe("Sort direction: 'asc' for ascending, 'desc' for descending")}),B1=a.object({limit:a.number().int().min(1,"Limit must be at least 1").max(1000,"Limit must be at most 1000").default(50).describe("Maximum number of rows to return"),cursor:a.string().optional().describe("Opaque cursor from previous response for pagination")}),H1=a.object({projectId:a.string().uuid().optional().describe("Project to query logs for. Auto-filled from CLI and SDK context when omitted."),search:G1.optional().describe("Full-text search configuration"),filters:a.array(q1).optional().describe("Structured filter clauses (ANDed together). When no `timestamp` filter is provided, queries default to a 24h look-back window; pass an explicit `timestamp` filter to query a different range."),select:a.array(a.string()).optional().describe("Fields to return (defaults to backend default set)"),sort:J1.optional().describe("Sort configuration (defaults to timestamp desc)"),pagination:B1.optional().describe("Pagination configuration")}),Xa=a.enum(["clickhouse","better-stack","datadog","gcp","axiom","cloudwatch","sentry","posthog","mezmo"]),W1=a.enum(["native","external"]),F1=a.object({projectId:a.string().uuid().optional().describe("Project to inspect. Auto-filled from CLI and SDK context when omitted.")}),Z1=a.object({backend:a.object({id:Xa,name:a.string(),kind:W1}).describe("Active log backend for the project"),features:a.array(a.string()).describe("Backend features registered on the server"),commands:a.array(a.enum(["schema","query","volume","patterns","nativeQuery"])).describe("CLI/API commands available for this backend"),queryableFields:a.array(a.string()).describe("Fields accepted by the normalized logs.query contract"),searchableFields:a.array(a.string()).describe("Fields accepted by logs.query full-text search"),observedServiceNames:a.array(a.string()).describe("Recently observed service names for this project"),observedAttributeKeys:a.array(a.string()).describe("Recently observed log attribute keys for this project"),schemaContext:a.record(a.string(),a.any()).optional().describe("Backend-specific schema guidance and examples")}),Kk=a.enum(["1m","5m","15m","1h"]),X1=a.enum(["service_name","severity_text","environment"]),Y1=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),startDate:a.string().datetime({offset:!0}),endDate:a.string().datetime({offset:!0}),interval:Kk.optional().describe("Aggregation bucket size for the volume series"),groupBy:X1.optional().describe("Optional field to split volume series by"),filters:a.object({service_name:a.string().optional(),severity_text:a.string().optional(),environment:a.string().optional()}).optional()}).refine((e)=>new Date(e.startDate)<new Date(e.endDate),{message:"startDate must be before endDate",path:["endDate"]}),Q1=a.object({total:a.number().nonnegative(),startDate:a.string().datetime({offset:!0}),endDate:a.string().datetime({offset:!0}),interval:Kk,series:a.array(a.object({group:a.string(),total:a.number().nonnegative(),points:a.array(a.object({bucket:a.string(),count:a.number().nonnegative()}))}))}),V1=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),query:a.string().min(1).max(500).optional().describe("Optional text to match against normalized log patterns"),severity:a.string().optional().describe("Optional severity_text value, for example ERROR"),startDate:a.string().datetime({offset:!0}).optional().describe("Optional earliest last-seen timestamp"),endDate:a.string().datetime({offset:!0}).optional().describe("Optional latest last-seen timestamp"),limit:a.number().int().min(1).max(100).default(25).describe("Maximum number of log patterns to return")}).refine((e)=>!e.startDate||!e.endDate||new Date(e.startDate)<new Date(e.endDate),{message:"startDate must be before endDate",path:["endDate"]}),e4=a.object({serviceName:a.string().nullable(),fingerprint:a.string(),pattern:a.string(),severity:a.string().nullable(),occurrences:a.number().nonnegative(),firstSeen:a.string().nullable(),lastSeen:a.string().nullable(),representativeId:a.string().nullable()}),t4=a.object({patterns:a.array(e4),meta:a.object({backendId:Xa,count:a.number().int().nonnegative(),took:a.number().nonnegative()})}),n4=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),query:a.string().min(1,"Query cannot be empty").max(1e4,"Query must be 10000 characters or less")}),o4=a.object({result:a.string().describe("Backend-formatted query result"),format:a.literal("text"),meta:a.object({backendId:Xa,took:a.number().nonnegative(),truncated:a.boolean()})}),i4=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),query:a.string().min(1,"Query must be at least 1 character long.").max(4000,"Query must be at most 4000 characters").describe("Natural-language logs question. Examples: 'api request failures in the last day', 'timeouts in intake', 'top ERROR patterns for public-api'.")}),r4=a.object({answer:a.string().describe("Evidence-backed natural-language answer to the logs question"),steps:a.number().int().nonnegative().describe("Number of nested model steps used"),toolCalls:a.number().int().nonnegative().describe("Number of nested tool calls used"),compacted:a.boolean().describe("Whether nested messages were compacted during the search"),meta:a.object({backendId:Xa,took:a.number().nonnegative(),modelProvider:a.string().optional(),modelId:a.string().optional()})}),d5=a.object({cursor:a.string().nullable().describe("Cursor for next page (null if no more results)"),hasMore:a.boolean().describe("Whether more results are available")}),a4=a.object({count:a.number().int().nonnegative().describe("Number of log rows returned in this response"),took:a.number().nonnegative().describe("Query execution time in milliseconds")}),c4=a.object({data:a.array(a.record(a.string(),a.any())).describe("Array of log rows with selected fields"),nextCursor:a.string().nullable().describe("Pass as 'cursor' in the next query to fetch the next page. Null when there are no more results."),meta:a4.describe("Query execution metadata")}),Ji=I({operationId:"logs.query",description:"Query logs within one project.",backend:"api",route:{method:"POST",path:"/logs/query",tags:["Logs"]},input:H1,output:c4,pagination:"cursor",async:"sync"}),Bi=I({operationId:"logs.schema",description:"Describe the active log backend, supported commands, query fields, and schema context.",backend:"api",route:{method:"POST",path:"/logs/schema",tags:["Logs"]},input:F1,output:Z1,pagination:"none",async:"sync"}),Hi=I({operationId:"logs.volume",description:"Query pre-aggregated log volume for one project.",backend:"api",route:{method:"POST",path:"/logs/volume",tags:["Logs"]},input:Y1,output:Q1,pagination:"none",async:"sync"}),Wi=I({operationId:"logs.patterns",description:"Query normalized log patterns for discovery workflows.",backend:"api",route:{method:"POST",path:"/logs/patterns",tags:["Logs"]},input:V1,output:t4,pagination:"none",async:"sync"}),Fi=I({operationId:"logs.nativeQuery",description:"Run a read-only query in the log store's native query language, with server-side guardrails.",backend:"api",route:{method:"POST",path:"/logs/native-query",tags:["Logs"]},input:n4,output:o4,pagination:"none",async:"sync"}),Ml=I({operationId:"logs.searchNatural",summary:"Natural Language Log Search",description:"Search project logs by asking a natural-language question. Experimental.",backend:"api",route:{method:"POST",path:"/logs/search-natural",tags:["Logs"]},input:i4,output:r4,pagination:"none",async:"sync"}),g5={query:Ji.contract,schema:Bi.contract,volume:Hi.contract,patterns:Wi.contract,nativeQuery:Fi.contract,searchNatural:Ml.contract}});var s4=d(()=>{al()});var qk=d(()=>{s4()});var l4=()=>{};var Jk,Bk,El,y5,b5,Zi,Kl,u4,d4,Hk,g4,y4,m5,b4,Wk,p5,w5,f5,v5,k5,S5,P5,I5,$5,O5,A5,T5,L5,Fk,m4,p4,D5,Zk;var Gl=d(()=>{me();Jk=["streamable-http","sse"],Bk=["none","headers","oauth","aws-sigv4"],El=["none","client_secret_basic","client_secret_post"],y5=["preset","custom"],b5=["configured","authorizing","connected","error"],Zi=["enabled","disabled","custom-only"],Kl=["enabled","write_blocked","disabled"],u4=a.enum(Jk),d4=a.enum(Bk),Hk=a.enum(El),g4=a.enum(y5),y4=a.enum(b5),m5=a.enum(Zi),b4=a.enum(Kl),Wk=a.object({id:a.string().min(1),name:a.string().min(1),value:a.string().min(1)}),p5=a.object({id:a.string().min(1),name:a.string().min(1),maskedValue:a.string().min(1)}),w5=a.object({authMode:a.literal("none")}),f5=a.object({tokenUrl:a.string().url(),clientId:a.string().min(1),clientSecret:a.string().min(1).optional(),tokenEndpointAuthMethod:Hk.optional(),refreshToken:a.string().min(1),headerName:a.string().min(1).default("Authorization"),headerValuePrefix:a.string().default("Bearer "),expiresAt:a.string().datetime().optional()}),v5=a.object({authMode:a.literal("headers"),headers:a.array(Wk),refreshCredentials:f5.optional()}),k5=a.object({authMode:a.literal("aws-sigv4"),accessKeyId:a.string().min(1),secretAccessKey:a.string().min(1),sessionToken:a.string().min(1).optional(),region:a.string().min(1),service:a.string().min(1).default("aws-mcp")}),S5=a.preprocess((e)=>{if(typeof e!=="string")return;let t=e.trim();return t.length>0?t:void 0},a.string().min(1).optional()).optional(),P5=a.object({accessToken:a.string().min(1),refreshToken:a.string().min(1).optional(),tokenType:a.string().min(1).optional(),scope:S5,expiresAt:a.string().datetime().optional()}).transform(({scope:e,...t})=>{return e===void 0?t:{...t,scope:e}}),I5=a.object({authMode:a.literal("oauth"),providerId:a.string().min(1),tokens:P5,headers:a.array(Wk).optional()}),$5=a.discriminatedUnion("authMode",[w5,v5,I5,k5]),O5=a.string().min(1).regex(/^enc:v1:/,"Encrypted auth config must use enc:v1 format."),A5=a.object({codeVerifier:a.string().min(1),clientId:a.string().min(1),clientSecret:a.string().min(1).optional(),tokenEndpointAuthMethod:Hk.optional(),tokenUrl:a.string().url().optional(),resourceUrl:a.string().url().optional(),projectId:a.string().uuid().optional(),returnTo:a.string().min(1).max(2000).optional(),messageId:a.string().min(1).max(240).optional(),scopes:a.array(a.string().min(1)).optional()}),T5=a.object({type:a.string().optional(),properties:a.record(a.string(),a.unknown()).optional(),required:a.array(a.string()).optional(),additionalProperties:a.boolean().optional()}).catchall(a.unknown()),L5=a.object({supportsOAuth:a.boolean().default(!1),supportsCustomHeaders:a.boolean().default(!0),supportsToolDiscovery:a.boolean().default(!0),readOnlyToolNames:a.array(a.string()).default([])}),Fk=a.object({name:a.string().min(1),title:a.string().min(1),description:a.string().min(1),inputSchema:T5,annotations:a.record(a.string(),a.unknown()).default({}),availability:b4,isReadOnly:a.boolean()}),m4=a.object({discoveredAt:a.string().datetime(),tools:a.array(Fk)}),p4=a.object({mode:a.enum(["user","system"]),managedBy:a.object({type:a.literal("integration"),id:a.string().min(1),displayName:a.string().min(1),iconKey:a.string().min(1)}).nullable(),capabilities:a.object({canRename:a.boolean(),canEditCredentials:a.boolean(),canSetReadOnly:a.boolean(),canConfigureTools:a.boolean(),canDisconnect:a.boolean()})}),D5=a.object({id:a.string().uuid(),organizationId:a.string().min(1),projectId:a.string().uuid(),providerId:a.string().min(1),source:g4,displayName:a.string().min(1),connectionKey:a.string().min(1),serverUrl:a.string().url(),transport:u4,authMode:d4,installStatus:y4,installedByUserId:a.string().nullable(),connectedAt:a.string().datetime().nullable(),toolSnapshot:m4.nullable(),enabledToolNames:a.array(a.string()),readOnly:a.boolean().default(!1),version:a.number().int().nonnegative(),createdAt:a.string().datetime(),updatedAt:a.string().datetime(),deletedAt:a.string().datetime().nullable()}),Zk=p4});var Yk=q((b_e,Bl)=>{var w4,f4,v4,k4,S4,P4,I4,$4,O4,A4,T4,L4,D4,ql,Xk,C4,z4,_4,Xi,j4,N4,R4,x4,U4,M4,E4,K4,G4,Jl,q4,J4,B4;(function(e){var t=typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:{};if(typeof define==="function"&&define.amd)define("tslib",["exports"],function(i){e(n(t,n(i)))});else if(typeof Bl==="object"&&typeof b_e==="object")e(n(t,n(b_e)));else e(n(t));function n(i,o){if(i!==t)if(typeof Object.create==="function")Object.defineProperty(i,"__esModule",{value:!0});else i.__esModule=!0;return function(r,c){return i[r]=o?o(r,c):c}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,c){r.__proto__=c}||function(r,c){for(var s in c)if(Object.prototype.hasOwnProperty.call(c,s))r[s]=c[s]};w4=function(r,c){if(typeof c!=="function"&&c!==null)throw TypeError("Class extends value "+String(c)+" is not a constructor or null");t(r,c);function s(){this.constructor=r}r.prototype=c===null?Object.create(c):(s.prototype=c.prototype,new s)},f4=Object.assign||function(r){for(var c,s=1,h=arguments.length;s<h;s++){c=arguments[s];for(var l in c)if(Object.prototype.hasOwnProperty.call(c,l))r[l]=c[l]}return r},v4=function(r,c){var s={};for(var h in r)if(Object.prototype.hasOwnProperty.call(r,h)&&c.indexOf(h)<0)s[h]=r[h];if(r!=null&&typeof Object.getOwnPropertySymbols==="function"){for(var l=0,h=Object.getOwnPropertySymbols(r);l<h.length;l++)if(c.indexOf(h[l])<0&&Object.prototype.propertyIsEnumerable.call(r,h[l]))s[h[l]]=r[h[l]]}return s},k4=function(r,c,s,h){var l=arguments.length,u=l<3?c:h===null?h=Object.getOwnPropertyDescriptor(c,s):h,g;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")u=Reflect.decorate(r,c,s,h);else for(var y=r.length-1;y>=0;y--)if(g=r[y])u=(l<3?g(u):l>3?g(c,s,u):g(c,s))||u;return l>3&&u&&Object.defineProperty(c,s,u),u},S4=function(r,c){return function(s,h){c(s,h,r)}},P4=function(r,c,s,h,l,u){function g(we){if(we!==void 0&&typeof we!=="function")throw TypeError("Function expected");return we}var y=h.kind,b=y==="getter"?"get":y==="setter"?"set":"value",w=!c&&r?h.static?r:r.prototype:null,v=c||(w?Object.getOwnPropertyDescriptor(w,h.name):{}),P,T=!1;for(var x=s.length-1;x>=0;x--){var j={};for(var Z in h)j[Z]=Z==="access"?{}:h[Z];for(var Z in h.access)j.access[Z]=h.access[Z];j.addInitializer=function(we){if(T)throw TypeError("Cannot add initializers after decoration has completed");u.push(g(we||null))};var U=(0,s[x])(y==="accessor"?{get:v.get,set:v.set}:v[b],j);if(y==="accessor"){if(U===void 0)continue;if(U===null||typeof U!=="object")throw TypeError("Object expected");if(P=g(U.get))v.get=P;if(P=g(U.set))v.set=P;if(P=g(U.init))l.unshift(P)}else if(P=g(U))if(y==="field")l.unshift(P);else v[b]=P}if(w)Object.defineProperty(w,h.name,v);T=!0},I4=function(r,c,s){var h=arguments.length>2;for(var l=0;l<c.length;l++)s=h?c[l].call(r,s):c[l].call(r);return h?s:void 0},$4=function(r){return typeof r==="symbol"?r:"".concat(r)},O4=function(r,c,s){if(typeof c==="symbol")c=c.description?"[".concat(c.description,"]"):"";return Object.defineProperty(r,"name",{configurable:!0,value:s?"".concat(s," ",c):c})},A4=function(r,c){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(r,c)},T4=function(r,c,s,h){function l(u){return u instanceof s?u:new s(function(g){g(u)})}return new(s||(s=Promise))(function(u,g){function y(v){try{w(h.next(v))}catch(P){g(P)}}function b(v){try{w(h.throw(v))}catch(P){g(P)}}function w(v){v.done?u(v.value):l(v.value).then(y,b)}w((h=h.apply(r,c||[])).next())})},L4=function(r,c){var s={label:0,sent:function(){if(u[0]&1)throw u[1];return u[1]},trys:[],ops:[]},h,l,u,g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=y(0),g.throw=y(1),g.return=y(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function y(w){return function(v){return b([w,v])}}function b(w){if(h)throw TypeError("Generator is already executing.");while(g&&(g=0,w[0]&&(s=0)),s)try{if(h=1,l&&(u=w[0]&2?l.return:w[0]?l.throw||((u=l.return)&&u.call(l),0):l.next)&&!(u=u.call(l,w[1])).done)return u;if(l=0,u)w=[w[0]&2,u.value];switch(w[0]){case 0:case 1:u=w;break;case 4:return s.label++,{value:w[1],done:!1};case 5:s.label++,l=w[1],w=[0];continue;case 7:w=s.ops.pop(),s.trys.pop();continue;default:if((u=s.trys,!(u=u.length>0&&u[u.length-1]))&&(w[0]===6||w[0]===2)){s=0;continue}if(w[0]===3&&(!u||w[1]>u[0]&&w[1]<u[3])){s.label=w[1];break}if(w[0]===6&&s.label<u[1]){s.label=u[1],u=w;break}if(u&&s.label<u[2]){s.label=u[2],s.ops.push(w);break}if(u[2])s.ops.pop();s.trys.pop();continue}w=c.call(r,s)}catch(v){w=[6,v],l=0}finally{h=u=0}if(w[0]&5)throw w[1];return{value:w[0]?w[1]:void 0,done:!0}}},D4=function(r,c){for(var s in r)if(s!=="default"&&!Object.prototype.hasOwnProperty.call(c,s))Jl(c,r,s)},Jl=Object.create?function(r,c,s,h){if(h===void 0)h=s;var l=Object.getOwnPropertyDescriptor(c,s);if(!l||("get"in l?!c.__esModule:l.writable||l.configurable))l={enumerable:!0,get:function(){return c[s]}};Object.defineProperty(r,h,l)}:function(r,c,s,h){if(h===void 0)h=s;r[h]=c[s]},ql=function(r){var c=typeof Symbol==="function"&&Symbol.iterator,s=c&&r[c],h=0;if(s)return s.call(r);if(r&&typeof r.length==="number")return{next:function(){if(r&&h>=r.length)r=void 0;return{value:r&&r[h++],done:!r}}};throw TypeError(c?"Object is not iterable.":"Symbol.iterator is not defined.")},Xk=function(r,c){var s=typeof Symbol==="function"&&r[Symbol.iterator];if(!s)return r;var h=s.call(r),l,u=[],g;try{while((c===void 0||c-- >0)&&!(l=h.next()).done)u.push(l.value)}catch(y){g={error:y}}finally{try{if(l&&!l.done&&(s=h.return))s.call(h)}finally{if(g)throw g.error}}return u},C4=function(){for(var r=[],c=0;c<arguments.length;c++)r=r.concat(Xk(arguments[c]));return r},z4=function(){for(var r=0,c=0,s=arguments.length;c<s;c++)r+=arguments[c].length;for(var h=Array(r),l=0,c=0;c<s;c++)for(var u=arguments[c],g=0,y=u.length;g<y;g++,l++)h[l]=u[g];return h},_4=function(r,c,s){if(s||arguments.length===2){for(var h=0,l=c.length,u;h<l;h++)if(u||!(h in c)){if(!u)u=Array.prototype.slice.call(c,0,h);u[h]=c[h]}}return r.concat(u||Array.prototype.slice.call(c))},Xi=function(r){return this instanceof Xi?(this.v=r,this):new Xi(r)},j4=function(r,c,s){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var h=s.apply(r,c||[]),l,u=[];return l=Object.create((typeof AsyncIterator==="function"?AsyncIterator:Object).prototype),y("next"),y("throw"),y("return",g),l[Symbol.asyncIterator]=function(){return this},l;function g(x){return function(j){return Promise.resolve(j).then(x,P)}}function y(x,j){if(h[x]){if(l[x]=function(Z){return new Promise(function(U,we){u.push([x,Z,U,we])>1||b(x,Z)})},j)l[x]=j(l[x])}}function b(x,j){try{w(h[x](j))}catch(Z){T(u[0][3],Z)}}function w(x){x.value instanceof Xi?Promise.resolve(x.value.v).then(v,P):T(u[0][2],x)}function v(x){b("next",x)}function P(x){b("throw",x)}function T(x,j){if(x(j),u.shift(),u.length)b(u[0][0],u[0][1])}},N4=function(r){var c,s;return c={},h("next"),h("throw",function(l){throw l}),h("return"),c[Symbol.iterator]=function(){return this},c;function h(l,u){c[l]=r[l]?function(g){return(s=!s)?{value:Xi(r[l](g)),done:!1}:u?u(g):g}:u}},R4=function(r){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var c=r[Symbol.asyncIterator],s;return c?c.call(r):(r=typeof ql==="function"?ql(r):r[Symbol.iterator](),s={},h("next"),h("throw"),h("return"),s[Symbol.asyncIterator]=function(){return this},s);function h(u){s[u]=r[u]&&function(g){return new Promise(function(y,b){g=r[u](g),l(y,b,g.done,g.value)})}}function l(u,g,y,b){Promise.resolve(b).then(function(w){u({value:w,done:y})},g)}},x4=function(r,c){if(Object.defineProperty)Object.defineProperty(r,"raw",{value:c});else r.raw=c;return r};var n=Object.create?function(r,c){Object.defineProperty(r,"default",{enumerable:!0,value:c})}:function(r,c){r.default=c},i=function(r){return i=Object.getOwnPropertyNames||function(c){var s=[];for(var h in c)if(Object.prototype.hasOwnProperty.call(c,h))s[s.length]=h;return s},i(r)};U4=function(r){if(r&&r.__esModule)return r;var c={};if(r!=null){for(var s=i(r),h=0;h<s.length;h++)if(s[h]!=="default")Jl(c,r,s[h])}return n(c,r),c},M4=function(r){return r&&r.__esModule?r:{default:r}},E4=function(r,c,s,h){if(s==="a"&&!h)throw TypeError("Private accessor was defined without a getter");if(typeof c==="function"?r!==c||!h:!c.has(r))throw TypeError("Cannot read private member from an object whose class did not declare it");return s==="m"?h:s==="a"?h.call(r):h?h.value:c.get(r)},K4=function(r,c,s,h,l){if(h==="m")throw TypeError("Private method is not writable");if(h==="a"&&!l)throw TypeError("Private accessor was defined without a setter");if(typeof c==="function"?r!==c||!l:!c.has(r))throw TypeError("Cannot write private member to an object whose class did not declare it");return h==="a"?l.call(r,s):l?l.value=s:c.set(r,s),s},G4=function(r,c){if(c===null||typeof c!=="object"&&typeof c!=="function")throw TypeError("Cannot use 'in' operator on non-object");return typeof r==="function"?c===r:r.has(c)},q4=function(r,c,s){if(c!==null&&c!==void 0){if(typeof c!=="object"&&typeof c!=="function")throw TypeError("Object expected.");var h,l;if(s){if(!Symbol.asyncDispose)throw TypeError("Symbol.asyncDispose is not defined.");h=c[Symbol.asyncDispose]}if(h===void 0){if(!Symbol.dispose)throw TypeError("Symbol.dispose is not defined.");if(h=c[Symbol.dispose],s)l=h}if(typeof h!=="function")throw TypeError("Object not disposable.");if(l)h=function(){try{l.call(this)}catch(u){return Promise.reject(u)}};r.stack.push({value:c,dispose:h,async:s})}else if(s)r.stack.push({async:!0});return c};var o=typeof SuppressedError==="function"?SuppressedError:function(r,c,s){var h=Error(s);return h.name="SuppressedError",h.error=r,h.suppressed=c,h};J4=function(r){function c(u){r.error=r.hasError?new o(u,r.error,"An error was suppressed during disposal."):u,r.hasError=!0}var s,h=0;function l(){while(s=r.stack.pop())try{if(!s.async&&h===1)return h=0,r.stack.push(s),Promise.resolve().then(l);if(s.dispose){var u=s.dispose.call(s.value);if(s.async)return h|=2,Promise.resolve(u).then(l,function(g){return c(g),l()})}else h|=1}catch(g){c(g)}if(h===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return l()},B4=function(r,c){if(typeof r==="string"&&/^\.\.?\//.test(r))return r.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(s,h,l,u,g){return h?c?".jsx":".js":l&&(!u||!g)?s:l+u+"."+g.toLowerCase()+"js"});return r},e("__extends",w4),e("__assign",f4),e("__rest",v4),e("__decorate",k4),e("__param",S4),e("__esDecorate",P4),e("__runInitializers",I4),e("__propKey",$4),e("__setFunctionName",O4),e("__metadata",A4),e("__awaiter",T4),e("__generator",L4),e("__exportStar",D4),e("__createBinding",Jl),e("__values",ql),e("__read",Xk),e("__spread",C4),e("__spreadArrays",z4),e("__spreadArray",_4),e("__await",Xi),e("__asyncGenerator",j4),e("__asyncDelegator",N4),e("__asyncValues",R4),e("__makeTemplateObject",x4),e("__importStar",U4),e("__importDefault",M4),e("__classPrivateFieldGet",E4),e("__classPrivateFieldSet",K4),e("__classPrivateFieldIn",G4),e("__addDisposableResource",q4),e("__disposeResources",J4),e("__rewriteRelativeImportExtension",B4)})});var Qk=q((H4)=>{Object.defineProperty(H4,"__esModule",{value:!0});H4.MAX_HASHABLE_LENGTH=H4.INIT=H4.KEY=H4.DIGEST_LENGTH=H4.BLOCK_SIZE=void 0;H4.BLOCK_SIZE=64;H4.DIGEST_LENGTH=32;H4.KEY=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);H4.INIT=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];H4.MAX_HASHABLE_LENGTH=Math.pow(2,53)-1});var X4=q((F4)=>{Object.defineProperty(F4,"__esModule",{value:!0});F4.RawSha256=void 0;var Bt=Qk(),N5=function(){function e(){this.state=Int32Array.from(Bt.INIT),this.temp=new Int32Array(64),this.buffer=new Uint8Array(64),this.bufferLength=0,this.bytesHashed=0,this.finished=!1}return e.prototype.update=function(t){if(this.finished)throw Error("Attempted to update an already finished hash.");var n=0,i=t.byteLength;if(this.bytesHashed+=i,this.bytesHashed*8>Bt.MAX_HASHABLE_LENGTH)throw Error("Cannot hash more than 2^53 - 1 bits");while(i>0)if(this.buffer[this.bufferLength++]=t[n++],i--,this.bufferLength===Bt.BLOCK_SIZE)this.hashBuffer(),this.bufferLength=0},e.prototype.digest=function(){if(!this.finished){var t=this.bytesHashed*8,n=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),i=this.bufferLength;if(n.setUint8(this.bufferLength++,128),i%Bt.BLOCK_SIZE>=Bt.BLOCK_SIZE-8){for(var o=this.bufferLength;o<Bt.BLOCK_SIZE;o++)n.setUint8(o,0);this.hashBuffer(),this.bufferLength=0}for(var o=this.bufferLength;o<Bt.BLOCK_SIZE-8;o++)n.setUint8(o,0);n.setUint32(Bt.BLOCK_SIZE-8,Math.floor(t/4294967296),!0),n.setUint32(Bt.BLOCK_SIZE-4,t),this.hashBuffer(),this.finished=!0}var r=new Uint8Array(Bt.DIGEST_LENGTH);for(var o=0;o<8;o++)r[o*4]=this.state[o]>>>24&255,r[o*4+1]=this.state[o]>>>16&255,r[o*4+2]=this.state[o]>>>8&255,r[o*4+3]=this.state[o]>>>0&255;return r},e.prototype.hashBuffer=function(){var t=this,n=t.buffer,i=t.state,o=i[0],r=i[1],c=i[2],s=i[3],h=i[4],l=i[5],u=i[6],g=i[7];for(var y=0;y<Bt.BLOCK_SIZE;y++){if(y<16)this.temp[y]=(n[y*4]&255)<<24|(n[y*4+1]&255)<<16|(n[y*4+2]&255)<<8|n[y*4+3]&255;else{var b=this.temp[y-2],w=(b>>>17|b<<15)^(b>>>19|b<<13)^b>>>10;b=this.temp[y-15];var v=(b>>>7|b<<25)^(b>>>18|b<<14)^b>>>3;this.temp[y]=(w+this.temp[y-7]|0)+(v+this.temp[y-16]|0)}var P=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&l^~h&u)|0)+(g+(Bt.KEY[y]+this.temp[y]|0)|0)|0,T=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&r^o&c^r&c)|0;g=u,u=l,l=h,h=s+P|0,s=c,c=r,r=o,o=P+T|0}i[0]+=o,i[1]+=r,i[2]+=c,i[3]+=s,i[4]+=h,i[5]+=l,i[6]+=u,i[7]+=g},e}();F4.RawSha256=N5});var V4=q((w_e,Q4)=>{var{defineProperty:Hl,getOwnPropertyDescriptor:R5,getOwnPropertyNames:x5}=Object,U5=Object.prototype.hasOwnProperty,M5=(e,t)=>Hl(e,"name",{value:t,configurable:!0}),E5=(e,t)=>{for(var n in t)Hl(e,n,{get:t[n],enumerable:!0})},K5=(e,t,n,i)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let o of x5(t))if(!U5.call(e,o)&&o!==n)Hl(e,o,{get:()=>t[o],enumerable:!(i=R5(t,o))||i.enumerable})}return e},G5=(e)=>K5(Hl({},"__esModule",{value:!0}),e),Y4={};E5(Y4,{isArrayBuffer:()=>q5});Q4.exports=G5(Y4);var q5=M5((e)=>typeof ArrayBuffer==="function"&&e instanceof ArrayBuffer||Object.prototype.toString.call(e)==="[object ArrayBuffer]","isArrayBuffer")});var oR=q((f_e,nR)=>{var{defineProperty:Wl,getOwnPropertyDescriptor:J5,getOwnPropertyNames:B5}=Object,H5=Object.prototype.hasOwnProperty,eR=(e,t)=>Wl(e,"name",{value:t,configurable:!0}),W5=(e,t)=>{for(var n in t)Wl(e,n,{get:t[n],enumerable:!0})},F5=(e,t,n,i)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let o of B5(t))if(!H5.call(e,o)&&o!==n)Wl(e,o,{get:()=>t[o],enumerable:!(i=J5(t,o))||i.enumerable})}return e},Z5=(e)=>F5(Wl({},"__esModule",{value:!0}),e),tR={};W5(tR,{fromArrayBuffer:()=>Y5,fromString:()=>Q5});nR.exports=Z5(tR);var X5=V4(),Vk=pO("buffer"),Y5=eR((e,t=0,n=e.byteLength-t)=>{if(!(0,X5.isArrayBuffer)(e))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof e} (${e})`);return Vk.Buffer.from(e,t,n)},"fromArrayBuffer"),Q5=eR((e,t)=>{if(typeof e!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof e} (${e})`);return t?Vk.Buffer.from(e,t):Vk.Buffer.from(e)},"fromString")});var sR=q((v_e,cR)=>{var{defineProperty:Fl,getOwnPropertyDescriptor:V5,getOwnPropertyNames:e7}=Object,t7=Object.prototype.hasOwnProperty,eS=(e,t)=>Fl(e,"name",{value:t,configurable:!0}),n7=(e,t)=>{for(var n in t)Fl(e,n,{get:t[n],enumerable:!0})},o7=(e,t,n,i)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let o of e7(t))if(!t7.call(e,o)&&o!==n)Fl(e,o,{get:()=>t[o],enumerable:!(i=V5(t,o))||i.enumerable})}return e},i7=(e)=>o7(Fl({},"__esModule",{value:!0}),e),iR={};n7(iR,{fromUtf8:()=>aR,toUint8Array:()=>r7,toUtf8:()=>a7});cR.exports=i7(iR);var rR=oR(),aR=eS((e)=>{let t=(0,rR.fromString)(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength/Uint8Array.BYTES_PER_ELEMENT)},"fromUtf8"),r7=eS((e)=>{if(typeof e==="string")return aR(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(e)},"toUint8Array"),a7=eS((e)=>{if(typeof e==="string")return e;if(typeof e!=="object"||typeof e.byteOffset!=="number"||typeof e.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return(0,rR.fromArrayBuffer)(e.buffer,e.byteOffset,e.byteLength).toString("utf8")},"toUtf8")});var uR=q((hR)=>{Object.defineProperty(hR,"__esModule",{value:!0});hR.convertToBuffer=void 0;var c7=sR(),s7=typeof Buffer<"u"&&Buffer.from?function(e){return Buffer.from(e,"utf8")}:c7.fromUtf8;function h7(e){if(e instanceof Uint8Array)return e;if(typeof e==="string")return s7(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(e)}hR.convertToBuffer=h7});var yR=q((dR)=>{Object.defineProperty(dR,"__esModule",{value:!0});dR.isEmptyData=void 0;function l7(e){if(typeof e==="string")return e.length===0;return e.byteLength===0}dR.isEmptyData=l7});var pR=q((bR)=>{Object.defineProperty(bR,"__esModule",{value:!0});bR.numToUint8=void 0;function u7(e){return new Uint8Array([(e&4278190080)>>24,(e&16711680)>>16,(e&65280)>>8,e&255])}bR.numToUint8=u7});var vR=q((wR)=>{Object.defineProperty(wR,"__esModule",{value:!0});wR.uint32ArrayFrom=void 0;function d7(e){if(!Uint32Array.from){var t=new Uint32Array(e.length),n=0;while(n<e.length)t[n]=e[n],n+=1;return t}return Uint32Array.from(e)}wR.uint32ArrayFrom=d7});var kR=q((Yi)=>{Object.defineProperty(Yi,"__esModule",{value:!0});Yi.uint32ArrayFrom=Yi.numToUint8=Yi.isEmptyData=Yi.convertToBuffer=void 0;var g7=uR();Object.defineProperty(Yi,"convertToBuffer",{enumerable:!0,get:function(){return g7.convertToBuffer}});var y7=yR();Object.defineProperty(Yi,"isEmptyData",{enumerable:!0,get:function(){return y7.isEmptyData}});var b7=pR();Object.defineProperty(Yi,"numToUint8",{enumerable:!0,get:function(){return b7.numToUint8}});var m7=vR();Object.defineProperty(Yi,"uint32ArrayFrom",{enumerable:!0,get:function(){return m7.uint32ArrayFrom}})});var $R=q((PR)=>{Object.defineProperty(PR,"__esModule",{value:!0});PR.Sha256=void 0;var SR=Yk(),Xl=Qk(),Zl=X4(),tS=kR(),w7=function(){function e(t){this.secret=t,this.hash=new Zl.RawSha256,this.reset()}return e.prototype.update=function(t){if((0,tS.isEmptyData)(t)||this.error)return;try{this.hash.update((0,tS.convertToBuffer)(t))}catch(n){this.error=n}},e.prototype.digestSync=function(){if(this.error)throw this.error;if(this.outer){if(!this.outer.finished)this.outer.update(this.hash.digest());return this.outer.digest()}return this.hash.digest()},e.prototype.digest=function(){return SR.__awaiter(this,void 0,void 0,function(){return SR.__generator(this,function(t){return[2,this.digestSync()]})})},e.prototype.reset=function(){if(this.hash=new Zl.RawSha256,this.secret){this.outer=new Zl.RawSha256;var t=f7(this.secret),n=new Uint8Array(Xl.BLOCK_SIZE);n.set(t);for(var i=0;i<Xl.BLOCK_SIZE;i++)t[i]^=54,n[i]^=92;this.hash.update(t),this.outer.update(n);for(var i=0;i<t.byteLength;i++)t[i]=0}},e}();PR.Sha256=w7;function f7(e){var t=(0,tS.convertToBuffer)(e);if(t.byteLength>Xl.BLOCK_SIZE){var n=new Zl.RawSha256;n.update(t),t=n.digest()}var i=new Uint8Array(Xl.BLOCK_SIZE);return i.set(t),i}});var OR=q((nS)=>{Object.defineProperty(nS,"__esModule",{value:!0});var v7=Yk();v7.__exportStar($R(),nS)});var Yl=()=>{};var AR="io.modelcontextprotocol/related-task",Vl="2.0",Be,TR,LR,z_e,k7,S7,oS,_t,eu,et,Ht,Wt,tt,tu,P7,I7,DR,Ya,CR,zR,__e,iS,$7,rS,O7,Qa,Qi,_R,A7,T7,L7,D7,C7,z7,_7,j7,jR,N7,aS,R7,x7,cS,U7,Va,ec,M7,tc,nu,E7,sS,hS,lS,uS,j_e,dS,gS,yS,K7,NR,RR,bS,xR,nc,Vi,UR,G7,q7,MR,J7,ER,mS,B7,H7,KR,GR,W7,F7,Z7,X7,Y7,Q7,V7,e2,t2,qR,n2,o2,pS,wS,fS,i2,r2,a2,vS,c2,JR,BR,s2,h2,HR,l2,WR,ou,N_e,u2,d2,FR,g2,ZR,y2,b2,m2,p2,w2,f2,v2,k2,S2,Ql,P2,I2,XR,YR,QR,$2,O2,A2,T2,L2,D2,C2,z2,_2,j2,N2,R2,x2,U2,M2,VR,E2,K2,ex,G2,q2,J2,B2,tx,H2,W2,F2,Z2,R_e,x_e,U_e,M_e,E_e,K_e;var Eo=d(()=>{qk();Be=rl((e)=>e!==null&&(typeof e==="object"||typeof e==="function")),TR=De([k(),be().int()]),LR=k(),z_e=Ke({ttl:be().optional(),pollInterval:be().optional()}),k7=B({ttl:be().optional()}),S7=B({taskId:k()}),oS=Ke({progressToken:TR.optional(),[AR]:S7.optional()}),_t=B({_meta:oS.optional()}),eu=_t.extend({task:k7.optional()}),et=B({method:k(),params:_t.loose().optional()}),Ht=B({_meta:oS.optional()}),Wt=B({method:k(),params:Ht.loose().optional()}),tt=Ke({_meta:oS.optional()}),tu=De([k(),be().int()]),P7=B({jsonrpc:Y(Vl),id:tu,...et.shape}).strict(),I7=B({jsonrpc:Y(Vl),...Wt.shape}).strict(),DR=B({jsonrpc:Y(Vl),id:tu,result:tt}).strict();(function(e){e[e.ConnectionClosed=-32000]="ConnectionClosed",e[e.RequestTimeout=-32001]="RequestTimeout",e[e.ParseError=-32700]="ParseError",e[e.InvalidRequest=-32600]="InvalidRequest",e[e.MethodNotFound=-32601]="MethodNotFound",e[e.InvalidParams=-32602]="InvalidParams",e[e.InternalError=-32603]="InternalError",e[e.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Ya||(Ya={}));CR=B({jsonrpc:Y(Vl),id:tu.optional(),error:B({code:be().int(),message:k(),data:Le().optional()})}).strict(),zR=De([P7,I7,DR,CR]),__e=De([DR,CR]),iS=tt.strict(),$7=Ht.extend({requestId:tu.optional(),reason:k().optional()}),rS=Wt.extend({method:Y("notifications/cancelled"),params:$7}),O7=B({src:k(),mimeType:k().optional(),sizes:J(k()).optional(),theme:Ve(["light","dark"]).optional()}),Qa=B({icons:J(O7).optional()}),Qi=B({name:k(),title:k().optional()}),_R=Qi.extend({...Qi.shape,...Qa.shape,version:k(),websiteUrl:k().optional(),description:k().optional()}),A7=ji(B({applyDefaults:$e().optional()}),Oe(k(),Le())),T7=Ja((e)=>{if(e&&typeof e==="object"&&!Array.isArray(e)){if(Object.keys(e).length===0)return{form:{}}}return e},ji(B({form:A7.optional(),url:Be.optional()}),Oe(k(),Le()).optional())),L7=Ke({list:Be.optional(),cancel:Be.optional(),requests:Ke({sampling:Ke({createMessage:Be.optional()}).optional(),elicitation:Ke({create:Be.optional()}).optional()}).optional()}),D7=Ke({list:Be.optional(),cancel:Be.optional(),requests:Ke({tools:Ke({call:Be.optional()}).optional()}).optional()}),C7=B({experimental:Oe(k(),Be).optional(),sampling:B({context:Be.optional(),tools:Be.optional()}).optional(),elicitation:T7.optional(),roots:B({listChanged:$e().optional()}).optional(),tasks:L7.optional(),extensions:Oe(k(),Be).optional()}),z7=_t.extend({protocolVersion:k(),capabilities:C7,clientInfo:_R}),_7=et.extend({method:Y("initialize"),params:z7}),j7=B({experimental:Oe(k(),Be).optional(),logging:Be.optional(),completions:Be.optional(),prompts:B({listChanged:$e().optional()}).optional(),resources:B({subscribe:$e().optional(),listChanged:$e().optional()}).optional(),tools:B({listChanged:$e().optional()}).optional(),tasks:D7.optional(),extensions:Oe(k(),Be).optional()}),jR=tt.extend({protocolVersion:k(),capabilities:j7,serverInfo:_R,instructions:k().optional()}),N7=Wt.extend({method:Y("notifications/initialized"),params:Ht.optional()}),aS=et.extend({method:Y("ping"),params:_t.optional()}),R7=B({progress:be(),total:je(be()),message:je(k())}),x7=B({...Ht.shape,...R7.shape,progressToken:TR}),cS=Wt.extend({method:Y("notifications/progress"),params:x7}),U7=_t.extend({cursor:LR.optional()}),Va=et.extend({params:U7.optional()}),ec=tt.extend({nextCursor:LR.optional()}),M7=Ve(["working","input_required","completed","failed","cancelled"]),tc=B({taskId:k(),status:M7,ttl:De([be(),xa()]),createdAt:k(),lastUpdatedAt:k(),pollInterval:je(be()),statusMessage:je(k())}),nu=tt.extend({task:tc}),E7=Ht.merge(tc),sS=Wt.extend({method:Y("notifications/tasks/status"),params:E7}),hS=et.extend({method:Y("tasks/get"),params:_t.extend({taskId:k()})}),lS=tt.merge(tc),uS=et.extend({method:Y("tasks/result"),params:_t.extend({taskId:k()})}),j_e=tt.loose(),dS=Va.extend({method:Y("tasks/list")}),gS=ec.extend({tasks:J(tc)}),yS=et.extend({method:Y("tasks/cancel"),params:_t.extend({taskId:k()})}),K7=tt.merge(tc),NR=B({uri:k(),mimeType:je(k()),_meta:Oe(k(),Le()).optional()}),RR=NR.extend({text:k()}),bS=k().refine((e)=>{try{return atob(e),!0}catch{return!1}},{message:"Invalid Base64 string"}),xR=NR.extend({blob:bS}),nc=Ve(["user","assistant"]),Vi=B({audience:J(nc).optional(),priority:be().min(0).max(1).optional(),lastModified:so.datetime({offset:!0}).optional()}),UR=B({...Qi.shape,...Qa.shape,uri:k(),description:je(k()),mimeType:je(k()),size:je(be()),annotations:Vi.optional(),_meta:je(Ke({}))}),G7=B({...Qi.shape,...Qa.shape,uriTemplate:k(),description:je(k()),mimeType:je(k()),annotations:Vi.optional(),_meta:je(Ke({}))}),q7=Va.extend({method:Y("resources/list")}),MR=ec.extend({resources:J(UR)}),J7=Va.extend({method:Y("resources/templates/list")}),ER=ec.extend({resourceTemplates:J(G7)}),mS=_t.extend({uri:k()}),B7=mS,H7=et.extend({method:Y("resources/read"),params:B7}),KR=tt.extend({contents:J(De([RR,xR]))}),GR=Wt.extend({method:Y("notifications/resources/list_changed"),params:Ht.optional()}),W7=mS,F7=et.extend({method:Y("resources/subscribe"),params:W7}),Z7=mS,X7=et.extend({method:Y("resources/unsubscribe"),params:Z7}),Y7=Ht.extend({uri:k()}),Q7=Wt.extend({method:Y("notifications/resources/updated"),params:Y7}),V7=B({name:k(),description:je(k()),required:je($e())}),e2=B({...Qi.shape,...Qa.shape,description:je(k()),arguments:je(J(V7)),_meta:je(Ke({}))}),t2=Va.extend({method:Y("prompts/list")}),qR=ec.extend({prompts:J(e2)}),n2=_t.extend({name:k(),arguments:Oe(k(),k()).optional()}),o2=et.extend({method:Y("prompts/get"),params:n2}),pS=B({type:Y("text"),text:k(),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),wS=B({type:Y("image"),data:bS,mimeType:k(),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),fS=B({type:Y("audio"),data:bS,mimeType:k(),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),i2=B({type:Y("tool_use"),name:k(),id:k(),input:Oe(k(),Le()),_meta:Oe(k(),Le()).optional()}),r2=B({type:Y("resource"),resource:De([RR,xR]),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),a2=UR.extend({type:Y("resource_link")}),vS=De([pS,wS,fS,a2,r2]),c2=B({role:nc,content:vS}),JR=tt.extend({description:k().optional(),messages:J(c2)}),BR=Wt.extend({method:Y("notifications/prompts/list_changed"),params:Ht.optional()}),s2=B({title:k().optional(),readOnlyHint:$e().optional(),destructiveHint:$e().optional(),idempotentHint:$e().optional(),openWorldHint:$e().optional()}),h2=B({taskSupport:Ve(["required","optional","forbidden"]).optional()}),HR=B({...Qi.shape,...Qa.shape,description:k().optional(),inputSchema:B({type:Y("object"),properties:Oe(k(),Be).optional(),required:J(k()).optional()}).catchall(Le()),outputSchema:B({type:Y("object"),properties:Oe(k(),Be).optional(),required:J(k()).optional()}).catchall(Le()).optional(),annotations:s2.optional(),execution:h2.optional(),_meta:Oe(k(),Le()).optional()}),l2=Va.extend({method:Y("tools/list")}),WR=ec.extend({tools:J(HR)}),ou=tt.extend({content:J(vS).default([]),structuredContent:Oe(k(),Le()).optional(),isError:$e().optional()}),N_e=ou.or(tt.extend({toolResult:Le()})),u2=eu.extend({name:k(),arguments:Oe(k(),Le()).optional()}),d2=et.extend({method:Y("tools/call"),params:u2}),FR=Wt.extend({method:Y("notifications/tools/list_changed"),params:Ht.optional()}),g2=B({autoRefresh:$e().default(!0),debounceMs:be().int().nonnegative().default(300)}),ZR=Ve(["debug","info","notice","warning","error","critical","alert","emergency"]),y2=_t.extend({level:ZR}),b2=et.extend({method:Y("logging/setLevel"),params:y2}),m2=Ht.extend({level:ZR,logger:k().optional(),data:Le()}),p2=Wt.extend({method:Y("notifications/message"),params:m2}),w2=B({name:k().optional()}),f2=B({hints:J(w2).optional(),costPriority:be().min(0).max(1).optional(),speedPriority:be().min(0).max(1).optional(),intelligencePriority:be().min(0).max(1).optional()}),v2=B({mode:Ve(["auto","required","none"]).optional()}),k2=B({type:Y("tool_result"),toolUseId:k().describe("The unique identifier for the corresponding tool call."),content:J(vS).default([]),structuredContent:B({}).loose().optional(),isError:$e().optional(),_meta:Oe(k(),Le()).optional()}),S2=Ka("type",[pS,wS,fS]),Ql=Ka("type",[pS,wS,fS,i2,k2]),P2=B({role:nc,content:De([Ql,J(Ql)]),_meta:Oe(k(),Le()).optional()}),I2=eu.extend({messages:J(P2),modelPreferences:f2.optional(),systemPrompt:k().optional(),includeContext:Ve(["none","thisServer","allServers"]).optional(),temperature:be().optional(),maxTokens:be().int(),stopSequences:J(k()).optional(),metadata:Be.optional(),tools:J(HR).optional(),toolChoice:v2.optional()}),XR=et.extend({method:Y("sampling/createMessage"),params:I2}),YR=tt.extend({model:k(),stopReason:je(Ve(["endTurn","stopSequence","maxTokens"]).or(k())),role:nc,content:S2}),QR=tt.extend({model:k(),stopReason:je(Ve(["endTurn","stopSequence","maxTokens","toolUse"]).or(k())),role:nc,content:De([Ql,J(Ql)])}),$2=B({type:Y("boolean"),title:k().optional(),description:k().optional(),default:$e().optional()}),O2=B({type:Y("string"),title:k().optional(),description:k().optional(),minLength:be().optional(),maxLength:be().optional(),format:Ve(["email","uri","date","date-time"]).optional(),default:k().optional()}),A2=B({type:Ve(["number","integer"]),title:k().optional(),description:k().optional(),minimum:be().optional(),maximum:be().optional(),default:be().optional()}),T2=B({type:Y("string"),title:k().optional(),description:k().optional(),enum:J(k()),default:k().optional()}),L2=B({type:Y("string"),title:k().optional(),description:k().optional(),oneOf:J(B({const:k(),title:k()})),default:k().optional()}),D2=B({type:Y("string"),title:k().optional(),description:k().optional(),enum:J(k()),enumNames:J(k()).optional(),default:k().optional()}),C2=De([T2,L2]),z2=B({type:Y("array"),title:k().optional(),description:k().optional(),minItems:be().optional(),maxItems:be().optional(),items:B({type:Y("string"),enum:J(k())}),default:J(k()).optional()}),_2=B({type:Y("array"),title:k().optional(),description:k().optional(),minItems:be().optional(),maxItems:be().optional(),items:B({anyOf:J(B({const:k(),title:k()}))}),default:J(k()).optional()}),j2=De([z2,_2]),N2=De([D2,C2,j2]),R2=De([N2,$2,O2,A2]),x2=eu.extend({mode:Y("form").optional(),message:k(),requestedSchema:B({type:Y("object"),properties:Oe(k(),R2),required:J(k()).optional()})}),U2=eu.extend({mode:Y("url"),message:k(),elicitationId:k(),url:k().url()}),M2=De([x2,U2]),VR=et.extend({method:Y("elicitation/create"),params:M2}),E2=Ht.extend({elicitationId:k()}),K2=Wt.extend({method:Y("notifications/elicitation/complete"),params:E2}),ex=tt.extend({action:Ve(["accept","decline","cancel"]),content:Ja((e)=>e===null?void 0:e,Oe(k(),De([k(),be(),$e(),J(k())])).optional())}),G2=B({type:Y("ref/resource"),uri:k()}),q2=B({type:Y("ref/prompt"),name:k()}),J2=_t.extend({ref:De([q2,G2]),argument:B({name:k(),value:k()}),context:B({arguments:Oe(k(),k()).optional()}).optional()}),B2=et.extend({method:Y("completion/complete"),params:J2}),tx=tt.extend({completion:Ke({values:J(k()).max(100),total:je(be().int()),hasMore:je($e())})}),H2=B({uri:k().startsWith("file://"),name:k().optional(),_meta:Oe(k(),Le()).optional()}),W2=et.extend({method:Y("roots/list"),params:_t.optional()}),F2=tt.extend({roots:J(H2)}),Z2=Wt.extend({method:Y("notifications/roots/list_changed"),params:Ht.optional()}),R_e=De([aS,_7,B2,b2,o2,t2,q7,J7,H7,F7,X7,d2,l2,hS,uS,dS,yS]),x_e=De([rS,cS,N7,Z2,sS]),U_e=De([iS,YR,QR,ex,F2,lS,gS,nu]),M_e=De([aS,XR,VR,W2,hS,uS,dS,yS]),E_e=De([rS,cS,p2,Q7,GR,FR,BR,sS,K2]),K_e=De([iS,jR,tx,JR,qR,MR,ER,KR,ou,WR,lS,gS,nu])});var X2;var iu=d(()=>{X2=Symbol("Let zodToJsonSchema decide on which parser to use")});var kS=d(()=>{iu()});var Ft=()=>{};var SS=d(()=>{qe()});var PS=()=>{};var ru=d(()=>{qe()});var IS=d(()=>{qe()});var $S=()=>{};var OS=d(()=>{qe()});var AS=d(()=>{qe();Ft()});var TS=d(()=>{qe()});var vje;var au=d(()=>{vje=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789")});var cu=d(()=>{qe();au();ru();Ft()});var LS=d(()=>{qe();cu();Ft()});var DS=d(()=>{Ft()});var su=d(()=>{qe()});var CS=d(()=>{qe();su()});var zS=()=>{};var _S=d(()=>{qe()});var jS=d(()=>{qe();Ft()});var NS=d(()=>{qe()});var RS=d(()=>{qe()});var xS=d(()=>{qe()});var US=d(()=>{qe()});var MS=d(()=>{Ft()});var ES=d(()=>{Ft()});var KS=d(()=>{qe()});var GS=d(()=>{Ft();SS();PS();ru();IS();$S();OS();AS();TS();LS();DS();CS();zS();_S();jS();NS();RS();cu();xS();au();US();MS();su();ES();KS()});var qe=d(()=>{iu();GS();Ft()});var nx=()=>{};var qS=d(()=>{qe();kS();Ft()});var ox=d(()=>{qS();iu();kS();qe();nx();Ft();SS();PS();ru();IS();$S();OS();AS();TS();LS();DS();CS();zS();_S();jS();NS();RS();KS();cu();xS();au();US();MS();su();ES();GS();qS()});var rx=d(()=>{Yl();ox()});var cx=d(()=>{Yl();Eo();rx()});var rc=q((lx)=>{Object.defineProperty(lx,"__esModule",{value:!0});lx.regexpCode=lx.getEsmExportName=lx.getProperty=lx.safeStringify=lx.stringify=lx.strConcat=lx.addCodeArg=lx.str=lx._=lx.nil=lx._Code=lx.Name=lx.IDENTIFIER=lx._CodeOrName=void 0;class hu{}lx._CodeOrName=hu;lx.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class er extends hu{constructor(e){super();if(!lx.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}lx.Name=er;class rn extends hu{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,n)=>`${t}${n}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,n)=>{if(n instanceof er)t[n.str]=(t[n.str]||0)+1;return t},{})}}lx._Code=rn;lx.nil=new rn("");function sx(e,...t){let n=[e[0]],i=0;while(i<t.length)BS(n,t[i]),n.push(e[++i]);return new rn(n)}lx._=sx;var JS=new rn("+");function hx(e,...t){let n=[ic(e[0])],i=0;while(i<t.length)n.push(JS),BS(n,t[i]),n.push(JS,ic(e[++i]));return aee(n),new rn(n)}lx.str=hx;function BS(e,t){if(t instanceof rn)e.push(...t._items);else if(t instanceof er)e.push(t);else e.push(hee(t))}lx.addCodeArg=BS;function aee(e){let t=1;while(t<e.length-1){if(e[t]===JS){let n=cee(e[t-1],e[t+1]);if(n!==void 0){e.splice(t-1,3,n);continue}e[t++]="+"}t++}}function cee(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof er||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof er))return`"${e}${t.slice(1)}`;return}function see(e,t){return t.emptyStr()?e:e.emptyStr()?t:hx`${e}${t}`}lx.strConcat=see;function hee(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:ic(Array.isArray(e)?e.join(","):e)}function lee(e){return new rn(ic(e))}lx.stringify=lee;function ic(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}lx.safeStringify=ic;function uee(e){return typeof e=="string"&&lx.IDENTIFIER.test(e)?new rn(`.${e}`):sx`[${e}]`}lx.getProperty=uee;function dee(e){if(typeof e=="string"&&lx.IDENTIFIER.test(e))return new rn(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}lx.getEsmExportName=dee;function gee(e){return new rn(e.toString())}lx.regexpCode=gee});var ZS=q((yx)=>{Object.defineProperty(yx,"__esModule",{value:!0});yx.ValueScope=yx.ValueScopeName=yx.Scope=yx.varKinds=yx.UsedValueState=void 0;var Pt=rc();class dx extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var uu;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(uu||(yx.UsedValueState=uu={}));yx.varKinds={const:new Pt.Name("const"),let:new Pt.Name("let"),var:new Pt.Name("var")};class WS{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof Pt.Name?e:this.name(e)}name(e){return new Pt.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,n;if(((n=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||n===void 0?void 0:n.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}yx.Scope=WS;class FS extends Pt.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:n}){this.value=e,this.scopePath=Pt._`.${new Pt.Name(t)}[${n}]`}}yx.ValueScopeName=FS;var Oee=Pt._`\n`;class gx extends WS{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?Oee:Pt.nil}}get(){return this._scope}name(e){return new FS(e,this._newName(e))}value(e,t){var n;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let i=this.toName(e),{prefix:o}=i,r=(n=t.key)!==null&&n!==void 0?n:t.ref,c=this._values[o];if(c){let l=c.get(r);if(l)return l}else c=this._values[o]=new Map;c.set(r,i);let s=this._scope[o]||(this._scope[o]=[]),h=s.length;return s[h]=t.ref,i.setValue(t,{property:o,itemIndex:h}),i}getValue(e,t){let n=this._values[e];if(!n)return;return n.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(n)=>{if(n.scopePath===void 0)throw Error(`CodeGen: name "${n}" has no value`);return Pt._`${e}${n.scopePath}`})}scopeCode(e=this._values,t,n){return this._reduceValues(e,(i)=>{if(i.value===void 0)throw Error(`CodeGen: name "${i}" has no value`);return i.value.code},t,n)}_reduceValues(e,t,n={},i){let o=Pt.nil;for(let r in e){let c=e[r];if(!c)continue;let s=n[r]=n[r]||new Map;c.forEach((h)=>{if(s.has(h))return;s.set(h,uu.Started);let l=t(h);if(l){let u=this.opts.es5?yx.varKinds.var:yx.varKinds.const;o=Pt._`${o}${u} ${h} = ${l};${this.opts._n}`}else if(l=i===null||i===void 0?void 0:i(h))o=Pt._`${o}${l}${this.opts._n}`;else throw new dx(h);s.set(h,uu.Completed)})}return o}}yx.ValueScope=gx});var ye=q((It)=>{Object.defineProperty(It,"__esModule",{value:!0});It.or=It.and=It.not=It.CodeGen=It.operators=It.varKinds=It.ValueScopeName=It.ValueScope=It.Scope=It.Name=It.regexpCode=It.stringify=It.getProperty=It.nil=It.strConcat=It.str=It._=void 0;var pe=rc(),an=ZS(),ho=rc();Object.defineProperty(It,"_",{enumerable:!0,get:function(){return ho._}});Object.defineProperty(It,"str",{enumerable:!0,get:function(){return ho.str}});Object.defineProperty(It,"strConcat",{enumerable:!0,get:function(){return ho.strConcat}});Object.defineProperty(It,"nil",{enumerable:!0,get:function(){return ho.nil}});Object.defineProperty(It,"getProperty",{enumerable:!0,get:function(){return ho.getProperty}});Object.defineProperty(It,"stringify",{enumerable:!0,get:function(){return ho.stringify}});Object.defineProperty(It,"regexpCode",{enumerable:!0,get:function(){return ho.regexpCode}});Object.defineProperty(It,"Name",{enumerable:!0,get:function(){return ho.Name}});var pu=ZS();Object.defineProperty(It,"Scope",{enumerable:!0,get:function(){return pu.Scope}});Object.defineProperty(It,"ValueScope",{enumerable:!0,get:function(){return pu.ValueScope}});Object.defineProperty(It,"ValueScopeName",{enumerable:!0,get:function(){return pu.ValueScopeName}});Object.defineProperty(It,"varKinds",{enumerable:!0,get:function(){return pu.varKinds}});It.operators={GT:new pe._Code(">"),GTE:new pe._Code(">="),LT:new pe._Code("<"),LTE:new pe._Code("<="),EQ:new pe._Code("==="),NEQ:new pe._Code("!=="),NOT:new pe._Code("!"),OR:new pe._Code("||"),AND:new pe._Code("&&"),ADD:new pe._Code("+")};class lo{optimizeNodes(){return this}optimizeNames(e,t){return this}}class mx extends lo{constructor(e,t,n){super();this.varKind=e,this.name=t,this.rhs=n}render({es5:e,_n:t}){let n=e?an.varKinds.var:this.varKind,i=this.rhs===void 0?"":` = ${this.rhs}`;return`${n} ${this.name}${i};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=nr(this.rhs,e,t);return this}get names(){return this.rhs instanceof pe._CodeOrName?this.rhs.names:{}}}class QS extends lo{constructor(e,t,n){super();this.lhs=e,this.rhs=t,this.sideEffects=n}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof pe.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=nr(this.rhs,e,t),this}get names(){let e=this.lhs instanceof pe.Name?{}:{...this.lhs.names};return mu(e,this.rhs)}}class px extends QS{constructor(e,t,n,i){super(e,n,i);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class wx extends lo{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class fx extends lo{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class vx extends lo{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class kx extends lo{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=nr(this.code,e,t),this}get names(){return this.code instanceof pe._CodeOrName?this.code.names:{}}}class wu extends lo{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,n)=>t+n.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let n=e[t].optimizeNodes();if(Array.isArray(n))e.splice(t,1,...n);else if(n)e[t]=n;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:n}=this,i=n.length;while(i--){let o=n[i];if(o.optimizeNames(e,t))continue;Dee(e,o.names),n.splice(i,1)}return n.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>Ko(e,t.names),{})}}class uo extends wu{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Sx extends wu{}class ac extends uo{}ac.kind="else";class xn extends uo{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let n=t.optimizeNodes();t=this.else=Array.isArray(n)?new ac(n):n}if(t){if(e===!1)return t instanceof xn?t:t.nodes;if(this.nodes.length)return this;return new xn(Ax(e),t instanceof xn?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=nr(this.condition,e,t),this}get names(){let e=super.names;if(mu(e,this.condition),this.else)Ko(e,this.else.names);return e}}xn.kind="if";class tr extends uo{}tr.kind="for";class Px extends tr{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=nr(this.iteration,e,t),this}get names(){return Ko(super.names,this.iteration.names)}}class Ix extends tr{constructor(e,t,n,i){super();this.varKind=e,this.name=t,this.from=n,this.to=i}render(e){let t=e.es5?an.varKinds.var:this.varKind,{name:n,from:i,to:o}=this;return`for(${t} ${n}=${i}; ${n}<${o}; ${n}++)`+super.render(e)}get names(){let e=mu(super.names,this.from);return mu(e,this.to)}}class XS extends tr{constructor(e,t,n,i){super();this.loop=e,this.varKind=t,this.name=n,this.iterable=i}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=nr(this.iterable,e,t),this}get names(){return Ko(super.names,this.iterable.names)}}class du extends uo{constructor(e,t,n){super();this.name=e,this.args=t,this.async=n}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}du.kind="func";class gu extends wu{render(e){return"return "+super.render(e)}}gu.kind="return";class $x extends uo{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var n,i;return super.optimizeNames(e,t),(n=this.catch)===null||n===void 0||n.optimizeNames(e,t),(i=this.finally)===null||i===void 0||i.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)Ko(e,this.catch.names);if(this.finally)Ko(e,this.finally.names);return e}}class yu extends uo{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}yu.kind="catch";class bu extends uo{render(e){return"finally"+super.render(e)}}bu.kind="finally";class Ox{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
|
|
7255
|
+
-d '{"event":"hello.world","level":"info","message":"first webhook event"}'`}]}]}]}});var vN;var kN=d(()=>{fN();vN={id:"webhook_events",name:"Webhook Events",searchAliases:["webhook","webhooks","json events","http events","generic webhook","event stream"],capabilities:["connectionless"],auth:[],delivery:["push"],intake:[{id:"webhook-events",label:"Webhook Events",transform:"webhook-events"}],lifecycleSkipReason:"Manual webhook setup is not exercised by automated lifecycle tests yet.",subtitle:"Point any vendor's webhooks at Sazabi. Arbitrary JSON events land as searchable log records with zero vendor-specific configuration.",features:["Any JSON event stream","One keyed URL per endpoint","Full payload preserved as attributes","No schema or field mapping"],evidenceHints:["A vendor that emits plain JSON webhooks without a dedicated Sazabi source","An internal service, deploy bot, or cron that POSTs JSON events","Existing outbound webhook configuration with no other Sazabi destination"],setupSkill:H,dashboard:{slug:"webhook-events",iconKey:"webhook-events",intakeSourceId:"webhook-events"}}});var sl,SN,GCe,qCe,Ni,JCe,BCe,C8,z8,_8,HCe;var PN=d(()=>{w_();k_();I_();A_();D_();__();R_();M_();G_();B_();F_();Y_();ej();oj();aj();hj();dj();bj();wj();kj();Ij();Aj();Dj();_j();Rj();Mj();Gj();Bj();Fj();Yj();eN();oN();aN();hN();dN();bN();wN();kN();sl=[p_,v_,P_,O_,L_,z_,N_,U_,K_,J_,W_,X_,V_,nj,rj,sj,uj,yj,pj,vj,Pj,Oj,Lj,zj,Nj,Uj,Kj,Jj,Wj,Xj,nN,Vj,rN,sN,uN,yN,pN,vN],SN=sl,GCe=Object.fromEntries(SN.map((e)=>[e.id,e.sensitiveFields??[]])),qCe=Object.fromEntries(SN.flatMap((e)=>[...Object.values(e.dashboard?.actions?.submit??{}),...Object.values(e.dashboard?.actions?.list??{}),...Object.values(e.dashboard?.actions?.prefetch??{})].flatMap((t)=>{let n=t.sensitiveInputFields??[];if(n.length===0)return[];return[["procedure"in t?t.procedure:`${e.id}.${t.actionId}`,n]]}))),Ni=["vercel","cloudflare","railway","render","fly_io","netlify","supabase","digital_ocean","inngest","trigger_dev","temporal","mastra","neon","langchain","daytona","e2b","cloudwatch","convex","datadog","sentry","sentry_platform","openrouter","posthog","posthog_sdk","gcp","otel","otel_metrics","fluent_bit","vector","grafana_alloy","otel_collector","cloudflare_workers","elastic_cloud","porter","respan","plain","prometheus","webhook_events"],JCe=sl.map((e)=>({id:e.id,name:e.name,capabilities:e.capabilities})),BCe=Object.fromEntries(sl.map((e)=>[e.id,{name:e.name,setupSkill:e.setupSkill}])),C8={cloudflare:yv,cloudwatch:kv,convex:Iv,digital_ocean:Lv,fly_io:Nv,gcp:Uv,plain:Yv,posthog:tk,render:ck,sentry_platform:dk,vercel:fk},z8={cloudflare:bv,cloudwatch:Sv,convex:Ov,digital_ocean:Cv,fly_io:xv,gcp:Mv,plain:Vv,posthog:nk,render:hk,vercel:kk},_8={cloudflare:mv,cloudflare_workers:pv,cloudwatch:Pv,convex:$v,datadog:Av,daytona:Tv,digital_ocean:Dv,fluent_bit:jv,fly_io:Rv,grafana_alloy:Kv,e2b:zv,elastic_cloud:_v,gcp:Ev,inngest:Gv,langchain:qv,mastra:Jv,neon:Bv,netlify:Hv,openrouter:Wv,otel:Fv,otel_collector:Zv,otel_metrics:Xv,plain:Qv,posthog:ok,posthog_sdk:ik,porter:ek,prometheus:rk,railway:ak,render:sk,respan:lk,sentry:uk,sentry_platform:gk,supabase:yk,temporal:bk,trigger_dev:mk,vector:pk,vercel:vk,webhook_events:Sk},HCe=sl.map((e)=>({sourceId:e.id,name:e.name,capabilities:e.capabilities,setupAuthModes:e.auth,deliveryModes:e.delivery,hasDashboardMetadata:Boolean(e.dashboard),hasManagedFlow:Boolean(C8[e.id]),hasConnectionlessFlow:Boolean(_8[e.id]),hasStreamSelector:Boolean(z8[e.id]),lifecycleEligible:e.lifecycleEligible??!1,lifecycleSkipReason:e.lifecycleSkipReason}))});var IN=d(()=>{PN()});var Pk=d(()=>{b_();IN()});var $N,Ik,j8,hl,N8,ON,$k,Wa,Fa,AN,TN,LN,ll,DN,CN,Ri,zN,_N,xi,jN,NN,ul,RN,xN,dl,UN,MN,gl,EN,KN,yl,GN,qN,bl,JN,BN,ml,HN,WN,pl,FN,ZN,wl,R8;var Ok=d(()=>{Pk();me();Ce();$N=Ni,Ik=a.enum($N),j8=a.enum(["pending","provisioning","active","error"]),hl=a.enum(["managed","connectionless"]),N8=a.object({name:a.string().describe("Field name used as the JSON key in metadata."),type:a.string().describe('Zod type name, e.g. "string", "boolean", "enum".'),required:a.boolean().describe("Whether the field is required."),sensitive:a.boolean().describe("Whether the field contains a secret and will be encrypted."),description:a.string().nullable().describe("Human-readable description of the field.")}),ON=a.object({id:a.string().describe("Data source type identifier."),name:a.string().describe("Human-readable display name."),modes:a.array(hl).describe("Setup modes this source supports. `managed` sources take vendor credentials; `connectionless` sources mint a keyed intake endpoint."),metadataFields:a.array(N8).describe("Fields required in the metadata object when creating a managed instance. Empty for connectionless-only sources."),setupSkill:a.string().nullable().describe("Markdown setup skill for AI agents. Null when no skill is available.")}),$k=a.object({kind:a.enum(["url","hostPort"]).describe("Card shape. `url` = a complete keyed URL whose hostname authenticates; `hostPort` = a non-keyed listener host + port whose credential travels separately."),label:a.string().optional().describe("Card label. Present when a source exposes several endpoints (e.g. separate logs and traces destinations)."),url:a.string().optional().describe("The complete keyed intake URL. Present when kind is `url`."),host:a.string().optional().describe("The regional listener hostname (no scheme). Present when kind is `hostPort`."),port:a.number().int().optional().describe("The listener port. Present when kind is `hostPort`."),description:a.string().optional().describe("Vendor-specific guidance rendered under the value."),extraCredential:a.object({label:a.string(),value:a.string(),description:a.string().optional()}).optional().describe("The credential the sender must attach when the hostname alone does not authenticate. Present when kind is `hostPort`.")}),Wa=a.object({id:a.string().uuid(),instanceId:a.string().uuid().describe("Root instance ID. Every stream roots on exactly one data source instance."),displayName:a.string(),config:a.record(a.string(),a.unknown()),status:j8,errorMessage:a.string().nullable(),enabled:a.boolean().describe("Whether the stream is currently ingesting. Independent of provisioning status: a paused stream stays configured but stops accepting new data."),createdAt:a.string().datetime(),endpointCards:a.array($k).optional().describe("Server-computed endpoint card(s) for this stream's delivery key — where to point the sender. Present only for streams that carry their own intake key.")}),Fa=a.object({id:a.string().uuid(),dataSourceType:Ik,mode:hl,name:a.string().nullable().describe("Display name. For connectionless instances this falls back to the stream's name when no explicit name is set."),streamCount:a.number().int(),createdAt:a.string().datetime()}),AN=Fa.extend({streams:a.array(Wa).describe("The instance's live streams, newest first.")}),TN=a.object({}),LN=a.object({types:a.array(ON)}),ll=I({operationId:"dataSources.listTypes",description:"List all supported data source types with their setup modes and metadata requirements.",backend:"api",route:{method:"GET",path:"/data-sources/types",tags:["Data Sources"]},input:TN,output:LN,pagination:"none",async:"sync"}),DN=a.object({projectId:a.string().uuid().optional().describe("Project to list instances for. Auto-filled from SDK context when omitted."),dataSourceType:Ik.optional().describe("Filter instances by data source type.")}),CN=a.object({instances:a.array(Fa)}),Ri=I({operationId:"dataSources.listInstances",description:"List data source instances within one project.",backend:"api",route:{method:"GET",path:"/data-sources/instances",tags:["Data Sources"]},input:DN,output:CN,pagination:"none",async:"sync"}),zN=a.object({projectId:a.string().uuid().optional().describe("Project to create the instance in. Auto-filled from SDK context when omitted."),dataSourceType:Ik.describe("Data source type identifier."),mode:hl.optional().describe("Setup mode. Defaults to `managed` when metadata is provided, otherwise `connectionless`. Must be a mode the source supports (see `modes` on the type catalog)."),name:a.string().optional().describe("Optional human-readable name for this instance."),metadata:a.record(a.string(),a.unknown()).optional().describe("Vendor credentials and configuration for managed setup. Fields vary by data source type (see `metadataFields` on the type catalog). Required for managed mode; must be omitted for connectionless mode.")}),_N=a.object({instance:Fa.describe("The created instance."),streamId:a.string().uuid().optional().describe("ID of the stream created alongside the instance. Present for connectionless instances (which always mint their keyed stream) and for managed sources that auto-provision a default stream."),publicKey:a.string().optional().describe("Intake key minted for the instance. Store this securely — it is only shown once. Present for connectionless instances and for managed sources that ingest through a Sazabi endpoint."),endpointCards:a.array($k).optional().describe("Server-computed endpoint card(s) for the minted key — where to point the sender. Present for connectionless instances.")}),xi=I({operationId:"dataSources.createInstance",description:"Create a data source instance. Managed mode takes vendor credentials in `metadata`, validates them, and provisions delivery behind the instance. Connectionless mode mints the instance plus a keyed stream and returns the intake key and endpoint card(s) to point the sender at.",backend:"api",route:{method:"POST",path:"/data-sources/instances",successStatus:201,tags:["Data Sources"]},input:zN,output:_N,pagination:"none",async:"sync"}),jN=a.object({instanceId:a.string().uuid().describe("Instance ID to fetch.")}),NN=a.object({instance:AN}),ul=I({operationId:"dataSources.getInstance",description:"Get one data source instance by ID, including its streams and their endpoint card(s).",backend:"api",route:{method:"GET",path:"/data-sources/instances/{instanceId}",tags:["Data Sources"]},input:jN,output:NN,pagination:"none",async:"sync"}),RN=a.object({instanceId:a.string().uuid().describe("Instance ID to update."),name:a.string().min(1).optional().describe("New display name for the instance."),enabled:a.boolean().optional().describe("Pause (`false`) or resume (`true`) ingestion for all of the instance's streams. Reversible; never deletes anything.")}),xN=a.object({instance:Fa}),dl=I({operationId:"dataSources.updateInstance",description:"Update a data source instance: rename it and/or pause or resume ingestion across its streams.",backend:"api",route:{method:"PATCH",path:"/data-sources/instances/{instanceId}",tags:["Data Sources"]},input:RN,output:xN,pagination:"none",async:"sync"}),UN=a.object({instanceId:a.string().uuid().describe("Instance ID to delete.")}),MN=a.object({success:a.boolean(),teardownError:a.string().nullable().describe("Null when vendor-side cleanup succeeded or was not needed; error message when remote cleanup failed and must be finished manually.")}),gl=I({operationId:"dataSources.deleteInstance",description:"Delete a data source instance. Tombstones the instance and its streams, deactivates their intake keys (already-ingested data is preserved with its attribution), and runs vendor-side cleanup for managed instances when the source supports it.",backend:"api",route:{method:"DELETE",path:"/data-sources/instances/{instanceId}",successStatus:200,tags:["Data Sources"]},input:UN,output:MN,pagination:"none",async:"sync"}),EN=a.object({instanceId:a.string().uuid().describe("Instance ID to list streams for."),enabled:a.boolean().optional().describe("Optional filter on stream ingestion state. Omit to list all streams; pass true for only enabled streams or false for only paused streams.")}),KN=a.object({streams:a.array(Wa)}),yl=I({operationId:"dataSources.listStreams",description:"List the streams that belong to a data source instance.",backend:"api",route:{method:"GET",path:"/data-sources/instances/{instanceId}/streams",tags:["Data Sources"]},input:EN,output:KN,pagination:"none",async:"sync"}),GN=a.object({instanceId:a.string().uuid().describe("Instance ID to create the stream under."),displayName:a.string().min(1).describe("Resource name, e.g. service or app name."),config:a.record(a.string(),a.unknown()).optional().describe("Platform-specific stream configuration.")}),qN=a.object({streamId:a.string().uuid().describe("ID of the created stream.")}),bl=I({operationId:"dataSources.createStream",description:"Create a new stream under a managed data source instance. Triggers async provisioning; poll the stream to track it. Connectionless instances are single-stream — create another instance instead.",backend:"api",route:{method:"POST",path:"/data-sources/instances/{instanceId}/streams",successStatus:201,tags:["Data Sources"]},input:GN,output:qN,pagination:"none",async:"sync"}),JN=a.object({streamId:a.string().uuid().describe("Stream ID to fetch.")}),BN=a.object({stream:Wa}),ml=I({operationId:"dataSources.getStream",description:"Get one data source stream by ID. Use to poll provisioning status.",backend:"api",route:{method:"GET",path:"/data-sources/streams/{streamId}",tags:["Data Sources"]},input:JN,output:BN,pagination:"none",async:"sync"}),HN=a.object({streamId:a.string().uuid().describe("Stream ID to update."),displayName:a.string().min(1).optional().describe("New display name for the stream."),enabled:a.boolean().optional().describe("Pause (`false`) or resume (`true`) ingestion for this stream. Reversible; never deletes anything.")}),WN=a.object({stream:Wa}),pl=I({operationId:"dataSources.updateStream",description:"Update a data source stream: rename it and/or pause or resume its ingestion.",backend:"api",route:{method:"PATCH",path:"/data-sources/streams/{streamId}",tags:["Data Sources"]},input:HN,output:WN,pagination:"none",async:"sync"}),FN=a.object({streamId:a.string().uuid().describe("Stream ID to delete.")}),ZN=a.object({success:a.boolean()}),wl=I({operationId:"dataSources.deleteStream",description:"Delete a data source stream. Tombstones the stream and deactivates its intake key. Deleting a connectionless instance's only stream tombstones the instance too.",backend:"api",route:{method:"DELETE",path:"/data-sources/streams/{streamId}",successStatus:204,tags:["Data Sources"]},input:FN,output:ZN,pagination:"none",async:"sync"}),R8={listTypes:ll.contract,listInstances:Ri.contract,createInstance:xi.contract,getInstance:ul.contract,updateInstance:dl.contract,deleteInstance:gl.contract,listStreams:yl.contract,createStream:bl.contract,getStream:ml.contract,updateStream:pl.contract,deleteStream:wl.contract}});var x8,Ak,U8,M8,E8,K8,G8,XN,q8,J8,YN,B8,H8,QN,W8,F8,VN;var e1=d(()=>{me();Ce();x8=["slack","github","linear","pagerduty","victorops","rootly","incident_io","webhook","teams","bitbucket","jira"],Ak=a.enum(x8),U8=a.enum(["oauth","app_installation","api_key"]),M8=a.enum(["alert_routing","inbound_webhooks","messaging","code_search","health_check"]),E8=a.enum(["pending","connected","error","revoked"]),K8=a.enum(["healthy","unhealthy","unknown"]),G8=a.object({id:Ak.describe("Integration provider identifier."),name:a.string().describe("Human-readable display name."),description:a.string().describe("Short description of the provider."),authType:U8.describe("Auth flow used to connect this provider."),capabilities:a.array(M8).describe("Capabilities the provider exposes once connected."),connectionCount:a.number().int().describe("Number of active connections for this provider in the organization, including error-status connections that need attention.")}),XN=a.object({id:a.string().uuid(),provider:Ak,displayName:a.string().nullable(),status:E8,isActive:a.boolean().describe("Whether this connection counts as connected (status 'connected' or 'error'). An error-status connection is the organization's connection — broken, not absent."),needsAttention:a.boolean().describe("Whether the connection should surface a reconnect prompt (status 'error' or health status 'unhealthy')."),metadata:a.record(a.string(),a.unknown()).describe("Non-secret provider metadata (e.g. workspace/team names)."),healthStatus:K8,healthMessage:a.string().nullable(),healthCheckedAt:a.string().datetime().nullable(),healthConsecutiveFailures:a.number().int(),connectedBy:a.string().nullable(),createdAt:a.string().datetime(),updatedAt:a.string().datetime()}),q8=a.object({organizationId:a.string().min(1).optional().describe("Organization to list providers for. Auto-filled from CLI and SDK context when omitted.")}),J8=a.object({providers:a.array(G8)}),YN=I({operationId:"integrations.listProviders",description:"List supported integration providers and how many connections the organization has for each.",backend:"api",route:{method:"GET",path:"/integrations/providers",tags:["Integrations"]},input:q8,output:J8,pagination:"none",async:"sync"}),B8=a.object({organizationId:a.string().min(1).optional().describe("Organization to list connections for. Auto-filled from CLI and SDK context when omitted."),provider:Ak.optional().describe("Filter connections by provider.")}),H8=a.object({connections:a.array(XN)}),QN=I({operationId:"integrations.listConnections",description:"List integration connections and their connection state for the organization.",backend:"api",route:{method:"GET",path:"/integrations/connections",tags:["Integrations"]},input:B8,output:H8,pagination:"none",async:"sync"}),W8=a.object({organizationId:a.string().min(1).optional().describe("Organization the connection belongs to. Auto-filled from CLI and SDK context when omitted."),connectionId:a.string().uuid().describe("Connection ID to fetch.")}),F8=a.object({connection:XN}),VN=I({operationId:"integrations.getConnection",description:"Get one integration connection by ID (non-secret config only).",backend:"api",route:{method:"GET",path:"/integrations/connections/{connectionId}",tags:["Integrations"]},input:W8,output:F8,pagination:"none",async:"sync"})});var on,Z8,X8,t1,fl,vl,n1,Tk,o1,Lk,i1,r1,Y8,Q8,a1,c1,s1,h1,l1,u1,d1,g1,y1,b1,m1,p1,w1,f1,v1,Ui,kl,Sl,Pl,Il,$l,Ol,Al,Tl,Ll,Dl,V8;var Dk=d(()=>{me();Ce();on=a.object({id:a.string().uuid(),projectId:a.string().uuid(),name:a.string(),description:a.string().nullable(),status:a.enum(["open","resolved","ignored"]),severity:a.enum(["low","medium","high","critical"]),statusComponentId:a.string().uuid().nullable(),createdAt:a.string().datetime(),resolvedAt:a.string().datetime().nullable(),mutedAt:a.string().datetime().nullable(),muteHitCount:a.number().int().nonnegative(),lastActivityAt:a.string().datetime().nullable(),lastDeliveredAt:a.string().datetime().nullable(),locked:a.boolean(),redacted:a.boolean()}),Z8=a.object({channelId:a.string().nullable(),channelName:a.string().nullable(),threadTs:a.string().nullable(),permalink:a.string().nullable(),workspaceName:a.string().nullable()}),X8=on.extend({slackChannels:a.array(Z8)}),t1=on.extend({delivery:a.record(a.string(),a.unknown()).nullable().optional()}),fl=a.object({projectId:a.string().uuid().optional().describe("Project to create the issue in. Auto-filled from CLI and SDK context when omitted."),name:a.string().trim().min(1).optional().describe("Stable issue name for indexing and mute matching. When omitted, the name is derived from contentMdx."),contentMdx:a.string().trim().min(1,"contentMdx cannot be empty").describe("Safe Sazabi MDX document for the issue body (impact, root cause, remediation, evidence)."),severity:a.enum(["low","medium","high","critical"]).default("medium").describe("Issue severity used for prioritization and triage."),statusComponentId:a.string().uuid().optional().describe("Optional status component ID to link to the issue."),statusStartedAt:a.string().datetime({offset:!0}).optional().describe("Optional ISO timestamp for when the linked status-page incident began.")}),vl=fl.superRefine((e,t)=>{if(e.statusStartedAt&&!e.statusComponentId)t.addIssue({code:"custom",path:["statusStartedAt"],message:"statusStartedAt requires statusComponentId."})}),n1=a.object({issue:on,duplicateIssueId:a.string().uuid().optional().describe("Present when creation reused an existing open issue instead of creating a new one.")}),Tk=a.object({projectId:a.string().uuid().optional().describe("Project to list issues for. Auto-filled from CLI and SDK context when omitted."),limit:a.coerce.number().int().min(1).max(100).default(50).describe("Maximum number of issues to return per page."),cursor:a.string().uuid().optional().describe("Cursor from a previous response's nextCursor to fetch the next page."),status:a.enum(["open","resolved","ignored"]).optional().describe("Filter by issue status."),severity:a.enum(["low","medium","high","critical"]).optional().describe("Filter by severity."),statusComponentId:a.string().uuid().optional().describe("Filter by status component ID.")}),o1=a.object({issues:a.array(on),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),Lk=Tk.extend({name:a.string().trim().optional().describe("Case-insensitive partial match on issue name."),includeDeliveryMetadata:a.union([a.boolean(),a.stringbool()]).default(!1).describe("When true, include raw delivery metadata in each issue.")}),i1=a.object({issues:a.array(t1),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),r1=Lk.omit({limit:!0,cursor:!0,includeDeliveryMetadata:!0}),Y8=a.object({open:a.number().int().nonnegative(),resolved:a.number().int().nonnegative(),ignored:a.number().int().nonnegative()}),Q8=a.object({low:a.number().int().nonnegative(),medium:a.number().int().nonnegative(),high:a.number().int().nonnegative(),critical:a.number().int().nonnegative()}),a1=a.object({total:a.number().int().nonnegative(),byStatus:Y8,bySeverity:Q8,filters:a.object({name:a.string().nullable(),status:a.enum(["open","resolved","ignored"]).nullable(),severity:a.enum(["low","medium","high","critical"]).nullable(),statusComponentId:a.string().uuid().nullable()})}),c1=a.object({issueId:a.string().uuid().describe("Issue ID to retrieve.")}),s1=a.object({issue:X8}),h1=a.object({issueId:a.string().uuid().describe("Issue ID to resolve."),statusResolvedAt:a.string().datetime({offset:!0}).optional().describe("Optional ISO timestamp for when the linked status-page incident ended.")}),l1=a.object({issue:on}),u1=a.object({issueId:a.string().uuid().describe("Issue ID to ignore.")}),d1=a.object({issue:on}),g1=a.object({issueId:a.string().uuid().describe("Issue ID to reopen.")}),y1=a.object({issue:on}),b1=a.object({issueId:a.string().uuid().describe("Issue ID to reassign and reopen."),targetComponentId:a.string().uuid().describe("Active canonical component that will own the reopened issue.")}),m1=a.object({issue:on,sourceComponentId:a.string().uuid(),targetComponentId:a.string().uuid()}),p1=a.object({issueId:a.string().uuid().describe("Issue ID to mute.")}),w1=a.object({issue:on}),f1=a.object({issueId:a.string().uuid().describe("Issue ID to unmute.")}),v1=a.object({issue:on}),Ui=I({operationId:"issues.create",description:"Create an issue in a project, returning an existing open issue when root-cause deduplication finds a match.",backend:"api",route:{method:"POST",path:"/issues",tags:["Issues"],successStatus:201},input:vl,output:n1,pagination:"none",async:"sync"}),kl=I({operationId:"issues.list",description:"List issues in a project, optionally filtered by status and severity.",backend:"api",route:{method:"GET",path:"/issues",tags:["Issues"]},input:Tk,output:o1,pagination:"cursor",async:"sync"}),Sl=I({operationId:"issues.search",description:"Search issues in a project by name, status, and severity.",backend:"api",route:{method:"GET",path:"/issues/search",tags:["Issues"]},input:Lk,output:i1,pagination:"cursor",async:"sync"}),Pl=I({operationId:"issues.count",description:"Count issues in a project with status and severity breakdowns.",backend:"api",route:{method:"GET",path:"/issues/count",tags:["Issues"]},input:r1,output:a1,pagination:"none",async:"sync"}),Il=I({operationId:"issues.get",description:"Get a single issue by ID.",backend:"api",route:{method:"GET",path:"/issues/{issueId}",tags:["Issues"]},input:c1,output:s1,pagination:"none",async:"sync"}),$l=I({operationId:"issues.resolve",description:"Resolve an open issue.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/resolve",tags:["Issues"]},input:h1,output:l1,pagination:"none",async:"sync"}),Ol=I({operationId:"issues.ignore",description:"Ignore an open issue.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/ignore",tags:["Issues"]},input:u1,output:d1,pagination:"none",async:"sync"}),Al=I({operationId:"issues.reopen",description:"Reopen a resolved or ignored issue.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/reopen",tags:["Issues"]},input:g1,output:y1,pagination:"none",async:"sync"}),Tl=I({operationId:"issues.reassignAndReopen",description:"Atomically reassign a resolved or ignored issue to an active component and reopen it.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/reassign-and-reopen",tags:["Issues"]},input:b1,output:m1,pagination:"none",async:"sync"}),Ll=I({operationId:"issues.mute",description:"Mute an issue, suppressing future re-fires without changing status.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/mute",tags:["Issues"]},input:p1,output:w1,pagination:"none",async:"sync"}),Dl=I({operationId:"issues.unmute",description:"Unmute an issue, preserving its current status.",backend:"api",route:{method:"POST",path:"/issues/{issueId}/unmute",tags:["Issues"]},input:f1,output:v1,pagination:"none",async:"sync"}),V8={count:Pl.contract,create:Ui.contract,list:kl.contract,search:Sl.contract,get:Il.contract,resolve:$l.contract,ignore:Ol.contract,reopen:Al.contract,reassignAndReopen:Tl.contract,mute:Ll.contract,unmute:Dl.contract}});var Ck,k1,Cl,zl,S1,P1,I1,$1,_l,zk,O1,A1,T1,L1,D1,C1,z1,_1,j1,N1,R1,x1,Mi,Ei,Ki,Gi,qi,jl,Nl,Rl,xl,Ul,e5,t5;var _k=d(()=>{me();Ce();Ck=/^[a-zA-Z0-9\s\-_]+$/,k1=a.object({id:a.string().uuid(),name:a.string(),expiresAt:a.string().datetime().nullable(),lastUsedAt:a.string().datetime().nullable(),createdAt:a.string().datetime()}),Cl=k1.extend({projectId:a.string().uuid(),dataSourceConnectionId:a.string().uuid().nullable().describe("Linked data source connection ID when this key is scoped to one data source."),deactivatedAt:a.string().datetime().nullable().describe("Timestamp when this public key was deactivated.")}),zl=k1.extend({projectId:a.string().uuid().nullable()}),S1=a.object({projectId:a.string().uuid().optional().describe("Project to list keys for. Auto-filled from CLI and SDK context when omitted."),limit:a.coerce.number().int().min(1).max(100).default(50).describe("Maximum number of keys to return per page."),cursor:a.string().uuid().optional().describe("Cursor from a previous response's nextCursor to fetch the next page.")}),P1=a.object({publicKeys:a.array(Cl),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),I1=a.object({secretKeys:a.array(zl),nextCursor:a.string().uuid().nullable().describe("Pass as 'cursor' to fetch the next page. Null when there are no more results.")}),$1=a.object({projectId:a.string().uuid().optional().describe("Project containing the key. Auto-filled from CLI and SDK context when omitted."),keyId:a.string().uuid().describe("Key ID to fetch.")}),_l=a.object({publicKey:Cl}),zk=a.object({secretKey:zl}),O1=a.object({publicKey:Cl.extend({value:a.string()})}),A1=a.object({projectId:a.string().uuid().optional().describe("Project to ensure the log forwarding key for. Auto-filled from CLI and SDK context when omitted.")}),T1=a.object({secretKey:zl.extend({value:a.string()})}),L1=a.object({projectId:a.string().uuid().optional().describe("Project containing the key. Auto-filled from CLI and SDK context when omitted."),keyId:a.string().uuid().describe("Key ID to update."),name:a.string().min(1,"Name is required").max(100,"Name must be 100 characters or less").regex(Ck,"Name can only contain letters, numbers, spaces, hyphens, and underscores").optional().describe("New human-readable name for the key."),expiresAt:a.string().datetime().nullable().optional().describe("New expiration timestamp for the key, or null to clear it.")}),D1=a.object({params:a.object({keyId:a.string().uuid().describe("Public key ID to deactivate.")}),query:a.object({projectId:a.string().uuid().optional().describe("Project containing the key. Auto-filled from CLI and SDK context when omitted.")})}).transform(({params:e,query:t})=>({...t,...e})),C1=_l,z1=a.void(),_1=a.object({limit:a.coerce.number().int().min(1).max(100).default(50).describe("Maximum number of keys to return per page."),cursor:a.string().uuid().optional().describe("Cursor from a previous response's nextCursor to fetch the next page.")}),j1=a.object({keyId:a.string().uuid().describe("Key ID to fetch.")}),N1=a.object({projectId:a.string().uuid().optional().describe("Project to scope this key to. When set, the key can only access resources within this project. Omit for organization-wide access."),name:a.string().min(1,"Name is required").max(100,"Name must be 100 characters or less").regex(Ck,"Name can only contain letters, numbers, spaces, hyphens, and underscores").describe("Human-readable name for the key."),expiresAt:a.string().datetime().optional().describe("Optional expiration timestamp for the key.")}),R1=a.object({keyId:a.string().uuid().describe("Key ID to update."),name:a.string().min(1,"Name is required").max(100,"Name must be 100 characters or less").regex(Ck,"Name can only contain letters, numbers, spaces, hyphens, and underscores").optional().describe("New human-readable name for the key."),expiresAt:a.string().datetime().nullable().optional().describe("New expiration timestamp for the key, or null to clear it.")}),x1=a.object({params:a.object({keyId:a.string().uuid().describe("Key ID to delete.")})}).transform(({params:e})=>({...e})),Mi=I({operationId:"publicKeys.list",description:"List public keys within one project.",backend:"api",route:{method:"GET",path:"/public-keys",tags:["Public Keys"]},input:S1,output:P1,pagination:"cursor",async:"sync",examples:[{name:"list-public-keys",input:{projectId:"11111111-1111-4111-8111-111111111111",limit:25},output:{publicKeys:[{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"CLI forwarder",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}],nextCursor:null}}]}),Ei=I({operationId:"publicKeys.get",description:"Get one public key within one project.",backend:"api",route:{method:"GET",path:"/public-keys/{keyId}",tags:["Public Keys"]},input:$1,output:_l,pagination:"none",async:"sync",examples:[{name:"get-public-key",input:{projectId:"11111111-1111-4111-8111-111111111111",keyId:"22222222-2222-4222-8222-222222222222"},output:{publicKey:{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"CLI forwarder",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),Ki=I({operationId:"publicKeys.ensureLogForwarding",description:"Ensure a reusable project-scoped public key exists for CLI log forwarding.",backend:"api",route:{method:"POST",path:"/public-keys/log-forwarding/ensure",tags:["Public Keys"]},input:A1,output:O1,pagination:"none",async:"sync",examples:[{name:"ensure-log-forwarding-public-key",input:{projectId:"11111111-1111-4111-8111-111111111111"},output:{publicKey:{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"sazabi-cli-forward",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z",value:"sazabi_public_example"}}}]}),Gi=I({operationId:"publicKeys.update",description:"Update one public key within one project.",backend:"api",route:{method:"PATCH",path:"/public-keys/{keyId}",tags:["Public Keys"]},input:L1,output:_l,pagination:"none",async:"sync",examples:[{name:"rename-public-key",input:{projectId:"11111111-1111-4111-8111-111111111111",keyId:"22222222-2222-4222-8222-222222222222",name:"Updated CLI forwarder"},output:{publicKey:{id:"22222222-2222-4222-8222-222222222222",projectId:"11111111-1111-4111-8111-111111111111",name:"Updated CLI forwarder",dataSourceConnectionId:null,deactivatedAt:null,expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),qi=I({operationId:"publicKeys.deactivate",description:"Deactivate one public key within one project. Recently validated requests may continue to authenticate for a short period after deactivation.",backend:"api",route:{method:"POST",path:"/public-keys/{keyId}/deactivate",tags:["Public Keys"],inputStructure:"detailed"},input:D1,output:C1,pagination:"none",async:"sync"}),jl=I({operationId:"secretKeys.list",description:"List secret keys within the organization.",backend:"api",route:{method:"GET",path:"/secret-keys",tags:["Secret Keys"]},input:_1,output:I1,pagination:"cursor",async:"sync",examples:[{name:"list-secret-keys",input:{limit:25},output:{secretKeys:[{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}],nextCursor:null}}]}),Nl=I({operationId:"secretKeys.get",description:"Get one secret key within the organization.",backend:"api",route:{method:"GET",path:"/secret-keys/{keyId}",tags:["Secret Keys"]},input:j1,output:zk,pagination:"none",async:"sync",examples:[{name:"get-secret-key",input:{keyId:"33333333-3333-4333-8333-333333333333"},output:{secretKey:{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),Rl=I({operationId:"secretKeys.create",description:"Create one secret key within the organization.",backend:"api",route:{method:"POST",path:"/secret-keys",successStatus:201,tags:["Secret Keys"]},input:N1,output:T1,pagination:"none",async:"sync",examples:[{name:"create-secret-key",input:{name:"CI agent"},output:{secretKey:{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z",value:"sazabi_secret_example"}}}]}),xl=I({operationId:"secretKeys.update",description:"Update one secret key within the organization.",backend:"api",route:{method:"PATCH",path:"/secret-keys/{keyId}",tags:["Secret Keys"]},input:R1,output:zk,pagination:"none",async:"sync",examples:[{name:"rename-secret-key",input:{keyId:"33333333-3333-4333-8333-333333333333",name:"Updated CI agent"},output:{secretKey:{id:"33333333-3333-4333-8333-333333333333",projectId:null,name:"Updated CI agent",expiresAt:null,lastUsedAt:null,createdAt:"2026-01-01T00:00:00.000Z"}}}]}),Ul=I({operationId:"secretKeys.delete",description:"Delete one secret key within the organization.",backend:"api",route:{method:"DELETE",path:"/secret-keys/{keyId}",successStatus:204,tags:["Secret Keys"],inputStructure:"detailed"},input:x1,output:z1,pagination:"none",async:"sync"}),e5={list:Mi.contract,get:Ei.contract,ensureLogForwarding:Ki.contract,update:Gi.contract,deactivate:qi.contract},t5={list:jl.contract,get:Nl.contract,create:Rl.contract,update:xl.contract,delete:Ul.contract}});var jk,U1,Nk,Za,n5,o5,i5,r5,a5,c5,s5,h5,l5,u5,Rk,xk,Uk,Mk,Ek,o_e;var M1=d(()=>{me();Ce();jk=a.string().uuid().describe("Log match expression ID."),U1=a.string().min(1).max(200).describe("Human-readable expression name."),Nk=a.string().min(1).max(8192).describe("CEL expression evaluated against ingested log events."),Za=a.object({id:a.string().uuid(),projectId:a.string().uuid(),name:a.string(),expression:Nk,enabled:a.boolean(),compiledVersion:a.number().int(),linkedAutomationIds:a.array(a.string().uuid()).optional().describe("Automations bound to this expression. Included on list/get when available."),createdAt:a.string().datetime(),updatedAt:a.string().datetime()}),n5=a.object({projectId:a.string().uuid().optional().describe("Project to list expressions for. Auto-filled from CLI and SDK context when omitted.")}),o5=a.object({expressions:a.array(Za)}),i5=a.object({expressionId:jk,projectId:a.string().uuid().optional().describe("Project that owns the expression. Auto-filled from CLI and SDK context when omitted.")}),r5=a.object({expression:Za}),a5=a.object({projectId:a.string().uuid().optional().describe("Project to create the expression in. Auto-filled from CLI and SDK context when omitted."),name:U1,expression:Nk,enabled:a.boolean().optional().describe("Whether the expression starts enabled. Defaults to true.")}),c5=a.object({expression:Za}),s5=a.object({expressionId:jk,projectId:a.string().uuid().optional().describe("Project that owns the expression. Auto-filled from CLI and SDK context when omitted."),name:U1.optional(),expression:Nk.optional(),enabled:a.boolean().optional().describe("Whether the expression is enabled.")}),h5=a.object({expression:Za}),l5=a.object({expressionId:jk,projectId:a.string().uuid().optional().describe("Project that owns the expression. Auto-filled from CLI and SDK context when omitted.")}),u5=a.object({expression:Za}),Rk=I({operationId:"logMatchExpressions.list",description:"List CEL log-match expressions in a project.",backend:"api",route:{method:"GET",path:"/log-match-expressions",tags:["Log match expressions"]},input:n5,output:o5,pagination:"none",async:"sync"}),xk=I({operationId:"logMatchExpressions.get",description:"Get a single log-match expression by ID.",backend:"api",route:{method:"GET",path:"/log-match-expressions/{expressionId}",tags:["Log match expressions"]},input:i5,output:r5,pagination:"none",async:"sync"}),Uk=I({operationId:"logMatchExpressions.create",description:"Create a CEL log-match expression for a project.",backend:"api",route:{method:"POST",path:"/log-match-expressions",successStatus:201,tags:["Log match expressions"]},input:a5,output:c5,pagination:"none",async:"sync"}),Mk=I({operationId:"logMatchExpressions.update",description:"Update a log-match expression's name, CEL body, or enabled state.",backend:"api",route:{method:"PATCH",path:"/log-match-expressions/{expressionId}",tags:["Log match expressions"]},input:s5,output:h5,pagination:"none",async:"sync"}),Ek=I({operationId:"logMatchExpressions.disable",description:"Disable a log-match expression so it stops matching logs.",backend:"api",route:{method:"POST",path:"/log-match-expressions/{expressionId}/disable",tags:["Log match expressions"]},input:l5,output:u5,pagination:"none",async:"sync"}),o_e={list:Rk.contract,get:xk.contract,create:Uk.contract,update:Mk.contract,disable:Ek.contract}});var E1,K1,G1,q1,J1,B1,H1,Xa,W1,F1,Z1,Kk,X1,Y1,Q1,V1,e4,t4,n4,o4,i4,r4,d5,a4,c4,Ji,Bi,Hi,Wi,Fi,Ml,g5;var Gk=d(()=>{me();Ce();E1=a.enum(["eq","neq","in","contains","starts_with","gt","gte","lt","lte","between","exists"]).describe("Filter operator: 'eq' (equals), 'neq' (not equals), 'in' (in array), 'contains' (substring), 'starts_with' (prefix), 'gt' (greater than), 'gte' (greater than or equal), 'lt' (less than), 'lte' (less than or equal), 'between' (range), 'exists' (field exists)"),K1=a.enum(["any","all","phrase"]).describe("Search mode: 'any' (match any token), 'all' (match all tokens), 'phrase' (exact phrase match)"),G1=a.object({query:a.string().min(1,"Search query must be at least 1 character").max(500,"Search query must be at most 500 characters").describe("Search query text (1-500 characters)"),fields:a.array(a.string()).optional().describe("Fields to search in (defaults to backend allowlist)"),mode:K1.optional().default("all").describe("Token matching mode")}),q1=a.object({field:a.string().describe("Field name to filter on"),op:E1.describe("Filter operator"),value:a.union([a.string(),a.number(),a.boolean(),a.array(a.union([a.string(),a.number()])),a.object({from:a.string(),to:a.string()})]).describe("Filter value (type depends on operator)")}).superRefine((e,t)=>{if(e.op==="in"&&!Array.isArray(e.value))t.addIssue({code:a.ZodIssueCode.custom,message:"Value must be an array when op is 'in'",path:["value"]});if(e.op==="between"){let n=e.value;if(!(typeof n==="object"&&n!==null&&("from"in n)&&("to"in n)))t.addIssue({code:a.ZodIssueCode.custom,message:"Value must be an object with from/to when op is 'between'",path:["value"]})}if(e.op==="exists"&&typeof e.value!=="boolean")t.addIssue({code:a.ZodIssueCode.custom,message:"Value must be boolean when op is 'exists'",path:["value"]})}),J1=a.object({field:a.string().describe("Field name to sort by"),direction:a.enum(["asc","desc"]).default("desc").describe("Sort direction: 'asc' for ascending, 'desc' for descending")}),B1=a.object({limit:a.number().int().min(1,"Limit must be at least 1").max(1000,"Limit must be at most 1000").default(50).describe("Maximum number of rows to return"),cursor:a.string().optional().describe("Opaque cursor from previous response for pagination")}),H1=a.object({projectId:a.string().uuid().optional().describe("Project to query logs for. Auto-filled from CLI and SDK context when omitted."),search:G1.optional().describe("Full-text search configuration"),filters:a.array(q1).optional().describe("Structured filter clauses (ANDed together). When no `timestamp` filter is provided, queries default to a 24h look-back window; pass an explicit `timestamp` filter to query a different range."),select:a.array(a.string()).optional().describe("Fields to return (defaults to backend default set)"),sort:J1.optional().describe("Sort configuration (defaults to timestamp desc)"),pagination:B1.optional().describe("Pagination configuration")}),Xa=a.enum(["clickhouse","better-stack","datadog","gcp","axiom","cloudwatch","sentry","posthog","mezmo"]),W1=a.enum(["native","external"]),F1=a.object({projectId:a.string().uuid().optional().describe("Project to inspect. Auto-filled from CLI and SDK context when omitted.")}),Z1=a.object({backend:a.object({id:Xa,name:a.string(),kind:W1}).describe("Active log backend for the project"),features:a.array(a.string()).describe("Backend features registered on the server"),commands:a.array(a.enum(["schema","query","volume","patterns","nativeQuery"])).describe("CLI/API commands available for this backend"),queryableFields:a.array(a.string()).describe("Fields accepted by the normalized logs.query contract"),searchableFields:a.array(a.string()).describe("Fields accepted by logs.query full-text search"),observedServiceNames:a.array(a.string()).describe("Recently observed service names for this project"),observedAttributeKeys:a.array(a.string()).describe("Recently observed log attribute keys for this project"),schemaContext:a.record(a.string(),a.any()).optional().describe("Backend-specific schema guidance and examples")}),Kk=a.enum(["1m","5m","15m","1h"]),X1=a.enum(["service_name","severity_text","environment"]),Y1=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),startDate:a.string().datetime({offset:!0}),endDate:a.string().datetime({offset:!0}),interval:Kk.optional().describe("Aggregation bucket size for the volume series"),groupBy:X1.optional().describe("Optional field to split volume series by"),filters:a.object({service_name:a.string().optional(),severity_text:a.string().optional(),environment:a.string().optional()}).optional()}).refine((e)=>new Date(e.startDate)<new Date(e.endDate),{message:"startDate must be before endDate",path:["endDate"]}),Q1=a.object({total:a.number().nonnegative(),startDate:a.string().datetime({offset:!0}),endDate:a.string().datetime({offset:!0}),interval:Kk,series:a.array(a.object({group:a.string(),total:a.number().nonnegative(),points:a.array(a.object({bucket:a.string(),count:a.number().nonnegative()}))}))}),V1=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),query:a.string().min(1).max(500).optional().describe("Optional text to match against normalized log patterns"),severity:a.string().optional().describe("Optional severity_text value, for example ERROR"),startDate:a.string().datetime({offset:!0}).optional().describe("Optional earliest last-seen timestamp"),endDate:a.string().datetime({offset:!0}).optional().describe("Optional latest last-seen timestamp"),limit:a.number().int().min(1).max(100).default(25).describe("Maximum number of log patterns to return")}).refine((e)=>!e.startDate||!e.endDate||new Date(e.startDate)<new Date(e.endDate),{message:"startDate must be before endDate",path:["endDate"]}),e4=a.object({serviceName:a.string().nullable(),fingerprint:a.string(),pattern:a.string(),severity:a.string().nullable(),occurrences:a.number().nonnegative(),firstSeen:a.string().nullable(),lastSeen:a.string().nullable(),representativeId:a.string().nullable()}),t4=a.object({patterns:a.array(e4),meta:a.object({backendId:Xa,count:a.number().int().nonnegative(),took:a.number().nonnegative()})}),n4=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),query:a.string().min(1,"Query cannot be empty").max(1e4,"Query must be 10000 characters or less")}),o4=a.object({result:a.string().describe("Backend-formatted query result"),format:a.literal("text"),meta:a.object({backendId:Xa,took:a.number().nonnegative(),truncated:a.boolean()})}),i4=a.object({projectId:a.string().uuid().optional().describe("Project to query. Auto-filled from CLI and SDK context when omitted."),query:a.string().min(1,"Query must be at least 1 character long.").max(4000,"Query must be at most 4000 characters").describe("Natural-language logs question. Examples: 'api request failures in the last day', 'timeouts in intake', 'top ERROR patterns for public-api'.")}),r4=a.object({answer:a.string().describe("Evidence-backed natural-language answer to the logs question"),steps:a.number().int().nonnegative().describe("Number of nested model steps used"),toolCalls:a.number().int().nonnegative().describe("Number of nested tool calls used"),compacted:a.boolean().describe("Whether nested messages were compacted during the search"),meta:a.object({backendId:Xa,took:a.number().nonnegative(),modelProvider:a.string().optional(),modelId:a.string().optional()})}),d5=a.object({cursor:a.string().nullable().describe("Cursor for next page (null if no more results)"),hasMore:a.boolean().describe("Whether more results are available")}),a4=a.object({count:a.number().int().nonnegative().describe("Number of log rows returned in this response"),took:a.number().nonnegative().describe("Query execution time in milliseconds")}),c4=a.object({data:a.array(a.record(a.string(),a.any())).describe("Array of log rows with selected fields"),nextCursor:a.string().nullable().describe("Pass as 'cursor' in the next query to fetch the next page. Null when there are no more results."),meta:a4.describe("Query execution metadata")}),Ji=I({operationId:"logs.query",description:"Query logs within one project.",backend:"api",route:{method:"POST",path:"/logs/query",tags:["Logs"]},input:H1,output:c4,pagination:"cursor",async:"sync"}),Bi=I({operationId:"logs.schema",description:"Describe the active log backend, supported commands, query fields, and schema context.",backend:"api",route:{method:"POST",path:"/logs/schema",tags:["Logs"]},input:F1,output:Z1,pagination:"none",async:"sync"}),Hi=I({operationId:"logs.volume",description:"Query pre-aggregated log volume for one project.",backend:"api",route:{method:"POST",path:"/logs/volume",tags:["Logs"]},input:Y1,output:Q1,pagination:"none",async:"sync"}),Wi=I({operationId:"logs.patterns",description:"Query normalized log patterns for discovery workflows.",backend:"api",route:{method:"POST",path:"/logs/patterns",tags:["Logs"]},input:V1,output:t4,pagination:"none",async:"sync"}),Fi=I({operationId:"logs.nativeQuery",description:"Run a read-only query in the log store's native query language, with server-side guardrails.",backend:"api",route:{method:"POST",path:"/logs/native-query",tags:["Logs"]},input:n4,output:o4,pagination:"none",async:"sync"}),Ml=I({operationId:"logs.searchNatural",summary:"Natural Language Log Search",description:"Search project logs by asking a natural-language question. Experimental.",backend:"api",route:{method:"POST",path:"/logs/search-natural",tags:["Logs"]},input:i4,output:r4,pagination:"none",async:"sync"}),g5={query:Ji.contract,schema:Bi.contract,volume:Hi.contract,patterns:Wi.contract,nativeQuery:Fi.contract,searchNatural:Ml.contract}});var s4=d(()=>{al()});var qk=d(()=>{s4()});var l4=()=>{};var Jk,Bk,El,y5,b5,Zi,Kl,u4,d4,Hk,g4,y4,m5,b4,Wk,p5,w5,f5,v5,k5,S5,P5,I5,$5,O5,A5,T5,L5,Fk,m4,p4,D5,Zk;var Gl=d(()=>{me();Jk=["streamable-http","sse"],Bk=["none","headers","oauth","aws-sigv4"],El=["none","client_secret_basic","client_secret_post"],y5=["preset","custom"],b5=["configured","authorizing","connected","error"],Zi=["enabled","disabled","custom-only"],Kl=["enabled","write_blocked","disabled"],u4=a.enum(Jk),d4=a.enum(Bk),Hk=a.enum(El),g4=a.enum(y5),y4=a.enum(b5),m5=a.enum(Zi),b4=a.enum(Kl),Wk=a.object({id:a.string().min(1),name:a.string().min(1),value:a.string().min(1)}),p5=a.object({id:a.string().min(1),name:a.string().min(1),maskedValue:a.string().min(1)}),w5=a.object({authMode:a.literal("none")}),f5=a.object({tokenUrl:a.string().url(),clientId:a.string().min(1),clientSecret:a.string().min(1).optional(),tokenEndpointAuthMethod:Hk.optional(),refreshToken:a.string().min(1),headerName:a.string().min(1).default("Authorization"),headerValuePrefix:a.string().default("Bearer "),expiresAt:a.string().datetime().optional()}),v5=a.object({authMode:a.literal("headers"),headers:a.array(Wk),refreshCredentials:f5.optional()}),k5=a.object({authMode:a.literal("aws-sigv4"),accessKeyId:a.string().min(1),secretAccessKey:a.string().min(1),sessionToken:a.string().min(1).optional(),region:a.string().min(1),service:a.string().min(1).default("aws-mcp")}),S5=a.preprocess((e)=>{if(typeof e!=="string")return;let t=e.trim();return t.length>0?t:void 0},a.string().min(1).optional()).optional(),P5=a.object({accessToken:a.string().min(1),refreshToken:a.string().min(1).optional(),tokenType:a.string().min(1).optional(),scope:S5,expiresAt:a.string().datetime().optional()}).transform(({scope:e,...t})=>{return e===void 0?t:{...t,scope:e}}),I5=a.object({authMode:a.literal("oauth"),providerId:a.string().min(1),tokens:P5,headers:a.array(Wk).optional()}),$5=a.discriminatedUnion("authMode",[w5,v5,I5,k5]),O5=a.string().min(1).regex(/^enc:v1:/,"Encrypted auth config must use enc:v1 format."),A5=a.object({codeVerifier:a.string().min(1),clientId:a.string().min(1),clientSecret:a.string().min(1).optional(),tokenEndpointAuthMethod:Hk.optional(),tokenUrl:a.string().url().optional(),resourceUrl:a.string().url().optional(),projectId:a.string().uuid().optional(),returnTo:a.string().min(1).max(2000).optional(),messageId:a.string().min(1).max(240).optional(),scopes:a.array(a.string().min(1)).optional()}),T5=a.object({type:a.string().optional(),properties:a.record(a.string(),a.unknown()).optional(),required:a.array(a.string()).optional(),additionalProperties:a.boolean().optional()}).catchall(a.unknown()),L5=a.object({supportsOAuth:a.boolean().default(!1),supportsCustomHeaders:a.boolean().default(!0),supportsToolDiscovery:a.boolean().default(!0),readOnlyToolNames:a.array(a.string()).default([])}),Fk=a.object({name:a.string().min(1),title:a.string().min(1),description:a.string().min(1),inputSchema:T5,annotations:a.record(a.string(),a.unknown()).default({}),availability:b4,isReadOnly:a.boolean()}),m4=a.object({discoveredAt:a.string().datetime(),tools:a.array(Fk)}),p4=a.object({mode:a.enum(["user","system"]),managedBy:a.object({type:a.literal("integration"),id:a.string().min(1),displayName:a.string().min(1),iconKey:a.string().min(1)}).nullable(),capabilities:a.object({canRename:a.boolean(),canEditCredentials:a.boolean(),canSetReadOnly:a.boolean(),canConfigureTools:a.boolean(),canDisconnect:a.boolean()})}),D5=a.object({id:a.string().uuid(),organizationId:a.string().min(1),projectId:a.string().uuid(),providerId:a.string().min(1),source:g4,displayName:a.string().min(1),connectionKey:a.string().min(1),serverUrl:a.string().url(),transport:u4,authMode:d4,installStatus:y4,installedByUserId:a.string().nullable(),connectedAt:a.string().datetime().nullable(),toolSnapshot:m4.nullable(),enabledToolNames:a.array(a.string()),readOnly:a.boolean().default(!1),version:a.number().int().nonnegative(),createdAt:a.string().datetime(),updatedAt:a.string().datetime(),deletedAt:a.string().datetime().nullable()}),Zk=p4});var Yk=q((b_e,Bl)=>{var w4,f4,v4,k4,S4,P4,I4,$4,O4,A4,T4,L4,D4,ql,Xk,C4,z4,_4,Xi,j4,N4,R4,x4,U4,M4,E4,K4,G4,Jl,q4,J4,B4;(function(e){var t=typeof global==="object"?global:typeof self==="object"?self:typeof this==="object"?this:{};if(typeof define==="function"&&define.amd)define("tslib",["exports"],function(i){e(n(t,n(i)))});else if(typeof Bl==="object"&&typeof b_e==="object")e(n(t,n(b_e)));else e(n(t));function n(i,o){if(i!==t)if(typeof Object.create==="function")Object.defineProperty(i,"__esModule",{value:!0});else i.__esModule=!0;return function(r,c){return i[r]=o?o(r,c):c}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,c){r.__proto__=c}||function(r,c){for(var s in c)if(Object.prototype.hasOwnProperty.call(c,s))r[s]=c[s]};w4=function(r,c){if(typeof c!=="function"&&c!==null)throw TypeError("Class extends value "+String(c)+" is not a constructor or null");t(r,c);function s(){this.constructor=r}r.prototype=c===null?Object.create(c):(s.prototype=c.prototype,new s)},f4=Object.assign||function(r){for(var c,s=1,h=arguments.length;s<h;s++){c=arguments[s];for(var l in c)if(Object.prototype.hasOwnProperty.call(c,l))r[l]=c[l]}return r},v4=function(r,c){var s={};for(var h in r)if(Object.prototype.hasOwnProperty.call(r,h)&&c.indexOf(h)<0)s[h]=r[h];if(r!=null&&typeof Object.getOwnPropertySymbols==="function"){for(var l=0,h=Object.getOwnPropertySymbols(r);l<h.length;l++)if(c.indexOf(h[l])<0&&Object.prototype.propertyIsEnumerable.call(r,h[l]))s[h[l]]=r[h[l]]}return s},k4=function(r,c,s,h){var l=arguments.length,u=l<3?c:h===null?h=Object.getOwnPropertyDescriptor(c,s):h,g;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")u=Reflect.decorate(r,c,s,h);else for(var y=r.length-1;y>=0;y--)if(g=r[y])u=(l<3?g(u):l>3?g(c,s,u):g(c,s))||u;return l>3&&u&&Object.defineProperty(c,s,u),u},S4=function(r,c){return function(s,h){c(s,h,r)}},P4=function(r,c,s,h,l,u){function g(we){if(we!==void 0&&typeof we!=="function")throw TypeError("Function expected");return we}var y=h.kind,b=y==="getter"?"get":y==="setter"?"set":"value",w=!c&&r?h.static?r:r.prototype:null,v=c||(w?Object.getOwnPropertyDescriptor(w,h.name):{}),P,T=!1;for(var x=s.length-1;x>=0;x--){var j={};for(var Z in h)j[Z]=Z==="access"?{}:h[Z];for(var Z in h.access)j.access[Z]=h.access[Z];j.addInitializer=function(we){if(T)throw TypeError("Cannot add initializers after decoration has completed");u.push(g(we||null))};var U=(0,s[x])(y==="accessor"?{get:v.get,set:v.set}:v[b],j);if(y==="accessor"){if(U===void 0)continue;if(U===null||typeof U!=="object")throw TypeError("Object expected");if(P=g(U.get))v.get=P;if(P=g(U.set))v.set=P;if(P=g(U.init))l.unshift(P)}else if(P=g(U))if(y==="field")l.unshift(P);else v[b]=P}if(w)Object.defineProperty(w,h.name,v);T=!0},I4=function(r,c,s){var h=arguments.length>2;for(var l=0;l<c.length;l++)s=h?c[l].call(r,s):c[l].call(r);return h?s:void 0},$4=function(r){return typeof r==="symbol"?r:"".concat(r)},O4=function(r,c,s){if(typeof c==="symbol")c=c.description?"[".concat(c.description,"]"):"";return Object.defineProperty(r,"name",{configurable:!0,value:s?"".concat(s," ",c):c})},A4=function(r,c){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(r,c)},T4=function(r,c,s,h){function l(u){return u instanceof s?u:new s(function(g){g(u)})}return new(s||(s=Promise))(function(u,g){function y(v){try{w(h.next(v))}catch(P){g(P)}}function b(v){try{w(h.throw(v))}catch(P){g(P)}}function w(v){v.done?u(v.value):l(v.value).then(y,b)}w((h=h.apply(r,c||[])).next())})},L4=function(r,c){var s={label:0,sent:function(){if(u[0]&1)throw u[1];return u[1]},trys:[],ops:[]},h,l,u,g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=y(0),g.throw=y(1),g.return=y(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function y(w){return function(v){return b([w,v])}}function b(w){if(h)throw TypeError("Generator is already executing.");while(g&&(g=0,w[0]&&(s=0)),s)try{if(h=1,l&&(u=w[0]&2?l.return:w[0]?l.throw||((u=l.return)&&u.call(l),0):l.next)&&!(u=u.call(l,w[1])).done)return u;if(l=0,u)w=[w[0]&2,u.value];switch(w[0]){case 0:case 1:u=w;break;case 4:return s.label++,{value:w[1],done:!1};case 5:s.label++,l=w[1],w=[0];continue;case 7:w=s.ops.pop(),s.trys.pop();continue;default:if((u=s.trys,!(u=u.length>0&&u[u.length-1]))&&(w[0]===6||w[0]===2)){s=0;continue}if(w[0]===3&&(!u||w[1]>u[0]&&w[1]<u[3])){s.label=w[1];break}if(w[0]===6&&s.label<u[1]){s.label=u[1],u=w;break}if(u&&s.label<u[2]){s.label=u[2],s.ops.push(w);break}if(u[2])s.ops.pop();s.trys.pop();continue}w=c.call(r,s)}catch(v){w=[6,v],l=0}finally{h=u=0}if(w[0]&5)throw w[1];return{value:w[0]?w[1]:void 0,done:!0}}},D4=function(r,c){for(var s in r)if(s!=="default"&&!Object.prototype.hasOwnProperty.call(c,s))Jl(c,r,s)},Jl=Object.create?function(r,c,s,h){if(h===void 0)h=s;var l=Object.getOwnPropertyDescriptor(c,s);if(!l||("get"in l?!c.__esModule:l.writable||l.configurable))l={enumerable:!0,get:function(){return c[s]}};Object.defineProperty(r,h,l)}:function(r,c,s,h){if(h===void 0)h=s;r[h]=c[s]},ql=function(r){var c=typeof Symbol==="function"&&Symbol.iterator,s=c&&r[c],h=0;if(s)return s.call(r);if(r&&typeof r.length==="number")return{next:function(){if(r&&h>=r.length)r=void 0;return{value:r&&r[h++],done:!r}}};throw TypeError(c?"Object is not iterable.":"Symbol.iterator is not defined.")},Xk=function(r,c){var s=typeof Symbol==="function"&&r[Symbol.iterator];if(!s)return r;var h=s.call(r),l,u=[],g;try{while((c===void 0||c-- >0)&&!(l=h.next()).done)u.push(l.value)}catch(y){g={error:y}}finally{try{if(l&&!l.done&&(s=h.return))s.call(h)}finally{if(g)throw g.error}}return u},C4=function(){for(var r=[],c=0;c<arguments.length;c++)r=r.concat(Xk(arguments[c]));return r},z4=function(){for(var r=0,c=0,s=arguments.length;c<s;c++)r+=arguments[c].length;for(var h=Array(r),l=0,c=0;c<s;c++)for(var u=arguments[c],g=0,y=u.length;g<y;g++,l++)h[l]=u[g];return h},_4=function(r,c,s){if(s||arguments.length===2){for(var h=0,l=c.length,u;h<l;h++)if(u||!(h in c)){if(!u)u=Array.prototype.slice.call(c,0,h);u[h]=c[h]}}return r.concat(u||Array.prototype.slice.call(c))},Xi=function(r){return this instanceof Xi?(this.v=r,this):new Xi(r)},j4=function(r,c,s){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var h=s.apply(r,c||[]),l,u=[];return l=Object.create((typeof AsyncIterator==="function"?AsyncIterator:Object).prototype),y("next"),y("throw"),y("return",g),l[Symbol.asyncIterator]=function(){return this},l;function g(x){return function(j){return Promise.resolve(j).then(x,P)}}function y(x,j){if(h[x]){if(l[x]=function(Z){return new Promise(function(U,we){u.push([x,Z,U,we])>1||b(x,Z)})},j)l[x]=j(l[x])}}function b(x,j){try{w(h[x](j))}catch(Z){T(u[0][3],Z)}}function w(x){x.value instanceof Xi?Promise.resolve(x.value.v).then(v,P):T(u[0][2],x)}function v(x){b("next",x)}function P(x){b("throw",x)}function T(x,j){if(x(j),u.shift(),u.length)b(u[0][0],u[0][1])}},N4=function(r){var c,s;return c={},h("next"),h("throw",function(l){throw l}),h("return"),c[Symbol.iterator]=function(){return this},c;function h(l,u){c[l]=r[l]?function(g){return(s=!s)?{value:Xi(r[l](g)),done:!1}:u?u(g):g}:u}},R4=function(r){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var c=r[Symbol.asyncIterator],s;return c?c.call(r):(r=typeof ql==="function"?ql(r):r[Symbol.iterator](),s={},h("next"),h("throw"),h("return"),s[Symbol.asyncIterator]=function(){return this},s);function h(u){s[u]=r[u]&&function(g){return new Promise(function(y,b){g=r[u](g),l(y,b,g.done,g.value)})}}function l(u,g,y,b){Promise.resolve(b).then(function(w){u({value:w,done:y})},g)}},x4=function(r,c){if(Object.defineProperty)Object.defineProperty(r,"raw",{value:c});else r.raw=c;return r};var n=Object.create?function(r,c){Object.defineProperty(r,"default",{enumerable:!0,value:c})}:function(r,c){r.default=c},i=function(r){return i=Object.getOwnPropertyNames||function(c){var s=[];for(var h in c)if(Object.prototype.hasOwnProperty.call(c,h))s[s.length]=h;return s},i(r)};U4=function(r){if(r&&r.__esModule)return r;var c={};if(r!=null){for(var s=i(r),h=0;h<s.length;h++)if(s[h]!=="default")Jl(c,r,s[h])}return n(c,r),c},M4=function(r){return r&&r.__esModule?r:{default:r}},E4=function(r,c,s,h){if(s==="a"&&!h)throw TypeError("Private accessor was defined without a getter");if(typeof c==="function"?r!==c||!h:!c.has(r))throw TypeError("Cannot read private member from an object whose class did not declare it");return s==="m"?h:s==="a"?h.call(r):h?h.value:c.get(r)},K4=function(r,c,s,h,l){if(h==="m")throw TypeError("Private method is not writable");if(h==="a"&&!l)throw TypeError("Private accessor was defined without a setter");if(typeof c==="function"?r!==c||!l:!c.has(r))throw TypeError("Cannot write private member to an object whose class did not declare it");return h==="a"?l.call(r,s):l?l.value=s:c.set(r,s),s},G4=function(r,c){if(c===null||typeof c!=="object"&&typeof c!=="function")throw TypeError("Cannot use 'in' operator on non-object");return typeof r==="function"?c===r:r.has(c)},q4=function(r,c,s){if(c!==null&&c!==void 0){if(typeof c!=="object"&&typeof c!=="function")throw TypeError("Object expected.");var h,l;if(s){if(!Symbol.asyncDispose)throw TypeError("Symbol.asyncDispose is not defined.");h=c[Symbol.asyncDispose]}if(h===void 0){if(!Symbol.dispose)throw TypeError("Symbol.dispose is not defined.");if(h=c[Symbol.dispose],s)l=h}if(typeof h!=="function")throw TypeError("Object not disposable.");if(l)h=function(){try{l.call(this)}catch(u){return Promise.reject(u)}};r.stack.push({value:c,dispose:h,async:s})}else if(s)r.stack.push({async:!0});return c};var o=typeof SuppressedError==="function"?SuppressedError:function(r,c,s){var h=Error(s);return h.name="SuppressedError",h.error=r,h.suppressed=c,h};J4=function(r){function c(u){r.error=r.hasError?new o(u,r.error,"An error was suppressed during disposal."):u,r.hasError=!0}var s,h=0;function l(){while(s=r.stack.pop())try{if(!s.async&&h===1)return h=0,r.stack.push(s),Promise.resolve().then(l);if(s.dispose){var u=s.dispose.call(s.value);if(s.async)return h|=2,Promise.resolve(u).then(l,function(g){return c(g),l()})}else h|=1}catch(g){c(g)}if(h===1)return r.hasError?Promise.reject(r.error):Promise.resolve();if(r.hasError)throw r.error}return l()},B4=function(r,c){if(typeof r==="string"&&/^\.\.?\//.test(r))return r.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(s,h,l,u,g){return h?c?".jsx":".js":l&&(!u||!g)?s:l+u+"."+g.toLowerCase()+"js"});return r},e("__extends",w4),e("__assign",f4),e("__rest",v4),e("__decorate",k4),e("__param",S4),e("__esDecorate",P4),e("__runInitializers",I4),e("__propKey",$4),e("__setFunctionName",O4),e("__metadata",A4),e("__awaiter",T4),e("__generator",L4),e("__exportStar",D4),e("__createBinding",Jl),e("__values",ql),e("__read",Xk),e("__spread",C4),e("__spreadArrays",z4),e("__spreadArray",_4),e("__await",Xi),e("__asyncGenerator",j4),e("__asyncDelegator",N4),e("__asyncValues",R4),e("__makeTemplateObject",x4),e("__importStar",U4),e("__importDefault",M4),e("__classPrivateFieldGet",E4),e("__classPrivateFieldSet",K4),e("__classPrivateFieldIn",G4),e("__addDisposableResource",q4),e("__disposeResources",J4),e("__rewriteRelativeImportExtension",B4)})});var Qk=q((H4)=>{Object.defineProperty(H4,"__esModule",{value:!0});H4.MAX_HASHABLE_LENGTH=H4.INIT=H4.KEY=H4.DIGEST_LENGTH=H4.BLOCK_SIZE=void 0;H4.BLOCK_SIZE=64;H4.DIGEST_LENGTH=32;H4.KEY=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);H4.INIT=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];H4.MAX_HASHABLE_LENGTH=Math.pow(2,53)-1});var X4=q((F4)=>{Object.defineProperty(F4,"__esModule",{value:!0});F4.RawSha256=void 0;var Bt=Qk(),N5=function(){function e(){this.state=Int32Array.from(Bt.INIT),this.temp=new Int32Array(64),this.buffer=new Uint8Array(64),this.bufferLength=0,this.bytesHashed=0,this.finished=!1}return e.prototype.update=function(t){if(this.finished)throw Error("Attempted to update an already finished hash.");var n=0,i=t.byteLength;if(this.bytesHashed+=i,this.bytesHashed*8>Bt.MAX_HASHABLE_LENGTH)throw Error("Cannot hash more than 2^53 - 1 bits");while(i>0)if(this.buffer[this.bufferLength++]=t[n++],i--,this.bufferLength===Bt.BLOCK_SIZE)this.hashBuffer(),this.bufferLength=0},e.prototype.digest=function(){if(!this.finished){var t=this.bytesHashed*8,n=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),i=this.bufferLength;if(n.setUint8(this.bufferLength++,128),i%Bt.BLOCK_SIZE>=Bt.BLOCK_SIZE-8){for(var o=this.bufferLength;o<Bt.BLOCK_SIZE;o++)n.setUint8(o,0);this.hashBuffer(),this.bufferLength=0}for(var o=this.bufferLength;o<Bt.BLOCK_SIZE-8;o++)n.setUint8(o,0);n.setUint32(Bt.BLOCK_SIZE-8,Math.floor(t/4294967296),!0),n.setUint32(Bt.BLOCK_SIZE-4,t),this.hashBuffer(),this.finished=!0}var r=new Uint8Array(Bt.DIGEST_LENGTH);for(var o=0;o<8;o++)r[o*4]=this.state[o]>>>24&255,r[o*4+1]=this.state[o]>>>16&255,r[o*4+2]=this.state[o]>>>8&255,r[o*4+3]=this.state[o]>>>0&255;return r},e.prototype.hashBuffer=function(){var t=this,n=t.buffer,i=t.state,o=i[0],r=i[1],c=i[2],s=i[3],h=i[4],l=i[5],u=i[6],g=i[7];for(var y=0;y<Bt.BLOCK_SIZE;y++){if(y<16)this.temp[y]=(n[y*4]&255)<<24|(n[y*4+1]&255)<<16|(n[y*4+2]&255)<<8|n[y*4+3]&255;else{var b=this.temp[y-2],w=(b>>>17|b<<15)^(b>>>19|b<<13)^b>>>10;b=this.temp[y-15];var v=(b>>>7|b<<25)^(b>>>18|b<<14)^b>>>3;this.temp[y]=(w+this.temp[y-7]|0)+(v+this.temp[y-16]|0)}var P=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&l^~h&u)|0)+(g+(Bt.KEY[y]+this.temp[y]|0)|0)|0,T=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&r^o&c^r&c)|0;g=u,u=l,l=h,h=s+P|0,s=c,c=r,r=o,o=P+T|0}i[0]+=o,i[1]+=r,i[2]+=c,i[3]+=s,i[4]+=h,i[5]+=l,i[6]+=u,i[7]+=g},e}();F4.RawSha256=N5});var V4=q((w_e,Q4)=>{var{defineProperty:Hl,getOwnPropertyDescriptor:R5,getOwnPropertyNames:x5}=Object,U5=Object.prototype.hasOwnProperty,M5=(e,t)=>Hl(e,"name",{value:t,configurable:!0}),E5=(e,t)=>{for(var n in t)Hl(e,n,{get:t[n],enumerable:!0})},K5=(e,t,n,i)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let o of x5(t))if(!U5.call(e,o)&&o!==n)Hl(e,o,{get:()=>t[o],enumerable:!(i=R5(t,o))||i.enumerable})}return e},G5=(e)=>K5(Hl({},"__esModule",{value:!0}),e),Y4={};E5(Y4,{isArrayBuffer:()=>q5});Q4.exports=G5(Y4);var q5=M5((e)=>typeof ArrayBuffer==="function"&&e instanceof ArrayBuffer||Object.prototype.toString.call(e)==="[object ArrayBuffer]","isArrayBuffer")});var oR=q((f_e,nR)=>{var{defineProperty:Wl,getOwnPropertyDescriptor:J5,getOwnPropertyNames:B5}=Object,H5=Object.prototype.hasOwnProperty,eR=(e,t)=>Wl(e,"name",{value:t,configurable:!0}),W5=(e,t)=>{for(var n in t)Wl(e,n,{get:t[n],enumerable:!0})},F5=(e,t,n,i)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let o of B5(t))if(!H5.call(e,o)&&o!==n)Wl(e,o,{get:()=>t[o],enumerable:!(i=J5(t,o))||i.enumerable})}return e},Z5=(e)=>F5(Wl({},"__esModule",{value:!0}),e),tR={};W5(tR,{fromArrayBuffer:()=>Y5,fromString:()=>Q5});nR.exports=Z5(tR);var X5=V4(),Vk=pO("buffer"),Y5=eR((e,t=0,n=e.byteLength-t)=>{if(!(0,X5.isArrayBuffer)(e))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof e} (${e})`);return Vk.Buffer.from(e,t,n)},"fromArrayBuffer"),Q5=eR((e,t)=>{if(typeof e!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof e} (${e})`);return t?Vk.Buffer.from(e,t):Vk.Buffer.from(e)},"fromString")});var sR=q((v_e,cR)=>{var{defineProperty:Fl,getOwnPropertyDescriptor:V5,getOwnPropertyNames:e7}=Object,t7=Object.prototype.hasOwnProperty,eS=(e,t)=>Fl(e,"name",{value:t,configurable:!0}),n7=(e,t)=>{for(var n in t)Fl(e,n,{get:t[n],enumerable:!0})},o7=(e,t,n,i)=>{if(t&&typeof t==="object"||typeof t==="function"){for(let o of e7(t))if(!t7.call(e,o)&&o!==n)Fl(e,o,{get:()=>t[o],enumerable:!(i=V5(t,o))||i.enumerable})}return e},i7=(e)=>o7(Fl({},"__esModule",{value:!0}),e),iR={};n7(iR,{fromUtf8:()=>aR,toUint8Array:()=>r7,toUtf8:()=>a7});cR.exports=i7(iR);var rR=oR(),aR=eS((e)=>{let t=(0,rR.fromString)(e,"utf8");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength/Uint8Array.BYTES_PER_ELEMENT)},"fromUtf8"),r7=eS((e)=>{if(typeof e==="string")return aR(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(e)},"toUint8Array"),a7=eS((e)=>{if(typeof e==="string")return e;if(typeof e!=="object"||typeof e.byteOffset!=="number"||typeof e.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return(0,rR.fromArrayBuffer)(e.buffer,e.byteOffset,e.byteLength).toString("utf8")},"toUtf8")});var uR=q((hR)=>{Object.defineProperty(hR,"__esModule",{value:!0});hR.convertToBuffer=void 0;var c7=sR(),s7=typeof Buffer<"u"&&Buffer.from?function(e){return Buffer.from(e,"utf8")}:c7.fromUtf8;function h7(e){if(e instanceof Uint8Array)return e;if(typeof e==="string")return s7(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(e)}hR.convertToBuffer=h7});var yR=q((dR)=>{Object.defineProperty(dR,"__esModule",{value:!0});dR.isEmptyData=void 0;function l7(e){if(typeof e==="string")return e.length===0;return e.byteLength===0}dR.isEmptyData=l7});var pR=q((bR)=>{Object.defineProperty(bR,"__esModule",{value:!0});bR.numToUint8=void 0;function u7(e){return new Uint8Array([(e&4278190080)>>24,(e&16711680)>>16,(e&65280)>>8,e&255])}bR.numToUint8=u7});var vR=q((wR)=>{Object.defineProperty(wR,"__esModule",{value:!0});wR.uint32ArrayFrom=void 0;function d7(e){if(!Uint32Array.from){var t=new Uint32Array(e.length),n=0;while(n<e.length)t[n]=e[n],n+=1;return t}return Uint32Array.from(e)}wR.uint32ArrayFrom=d7});var kR=q((Yi)=>{Object.defineProperty(Yi,"__esModule",{value:!0});Yi.uint32ArrayFrom=Yi.numToUint8=Yi.isEmptyData=Yi.convertToBuffer=void 0;var g7=uR();Object.defineProperty(Yi,"convertToBuffer",{enumerable:!0,get:function(){return g7.convertToBuffer}});var y7=yR();Object.defineProperty(Yi,"isEmptyData",{enumerable:!0,get:function(){return y7.isEmptyData}});var b7=pR();Object.defineProperty(Yi,"numToUint8",{enumerable:!0,get:function(){return b7.numToUint8}});var m7=vR();Object.defineProperty(Yi,"uint32ArrayFrom",{enumerable:!0,get:function(){return m7.uint32ArrayFrom}})});var $R=q((PR)=>{Object.defineProperty(PR,"__esModule",{value:!0});PR.Sha256=void 0;var SR=Yk(),Xl=Qk(),Zl=X4(),tS=kR(),w7=function(){function e(t){this.secret=t,this.hash=new Zl.RawSha256,this.reset()}return e.prototype.update=function(t){if((0,tS.isEmptyData)(t)||this.error)return;try{this.hash.update((0,tS.convertToBuffer)(t))}catch(n){this.error=n}},e.prototype.digestSync=function(){if(this.error)throw this.error;if(this.outer){if(!this.outer.finished)this.outer.update(this.hash.digest());return this.outer.digest()}return this.hash.digest()},e.prototype.digest=function(){return SR.__awaiter(this,void 0,void 0,function(){return SR.__generator(this,function(t){return[2,this.digestSync()]})})},e.prototype.reset=function(){if(this.hash=new Zl.RawSha256,this.secret){this.outer=new Zl.RawSha256;var t=f7(this.secret),n=new Uint8Array(Xl.BLOCK_SIZE);n.set(t);for(var i=0;i<Xl.BLOCK_SIZE;i++)t[i]^=54,n[i]^=92;this.hash.update(t),this.outer.update(n);for(var i=0;i<t.byteLength;i++)t[i]=0}},e}();PR.Sha256=w7;function f7(e){var t=(0,tS.convertToBuffer)(e);if(t.byteLength>Xl.BLOCK_SIZE){var n=new Zl.RawSha256;n.update(t),t=n.digest()}var i=new Uint8Array(Xl.BLOCK_SIZE);return i.set(t),i}});var OR=q((nS)=>{Object.defineProperty(nS,"__esModule",{value:!0});var v7=Yk();v7.__exportStar($R(),nS)});var Yl=()=>{};var AR="io.modelcontextprotocol/related-task",Vl="2.0",Be,TR,LR,z_e,k7,S7,oS,_t,eu,et,Ht,Wt,tt,tu,P7,I7,DR,Ya,CR,zR,__e,iS,$7,rS,O7,Qa,Qi,_R,A7,T7,L7,D7,C7,z7,_7,j7,jR,N7,aS,R7,x7,cS,U7,Va,ec,M7,tc,nu,E7,sS,hS,lS,uS,j_e,dS,gS,yS,K7,NR,RR,bS,xR,nc,Vi,UR,G7,q7,MR,J7,ER,mS,B7,H7,KR,GR,W7,F7,Z7,X7,Y7,Q7,V7,e2,t2,qR,n2,o2,pS,wS,fS,i2,r2,a2,vS,c2,JR,BR,s2,h2,HR,l2,WR,ou,N_e,u2,d2,FR,g2,ZR,y2,b2,m2,p2,w2,f2,v2,k2,S2,Ql,P2,I2,XR,YR,QR,$2,O2,A2,T2,L2,D2,C2,z2,_2,j2,N2,R2,x2,U2,M2,VR,E2,K2,ex,G2,q2,J2,B2,tx,H2,W2,F2,Z2,R_e,x_e,U_e,M_e,E_e,K_e;var Eo=d(()=>{qk();Be=rl((e)=>e!==null&&(typeof e==="object"||typeof e==="function")),TR=De([k(),be().int()]),LR=k(),z_e=Ke({ttl:be().optional(),pollInterval:be().optional()}),k7=B({ttl:be().optional()}),S7=B({taskId:k()}),oS=Ke({progressToken:TR.optional(),[AR]:S7.optional()}),_t=B({_meta:oS.optional()}),eu=_t.extend({task:k7.optional()}),et=B({method:k(),params:_t.loose().optional()}),Ht=B({_meta:oS.optional()}),Wt=B({method:k(),params:Ht.loose().optional()}),tt=Ke({_meta:oS.optional()}),tu=De([k(),be().int()]),P7=B({jsonrpc:Y(Vl),id:tu,...et.shape}).strict(),I7=B({jsonrpc:Y(Vl),...Wt.shape}).strict(),DR=B({jsonrpc:Y(Vl),id:tu,result:tt}).strict();(function(e){e[e.ConnectionClosed=-32000]="ConnectionClosed",e[e.RequestTimeout=-32001]="RequestTimeout",e[e.ParseError=-32700]="ParseError",e[e.InvalidRequest=-32600]="InvalidRequest",e[e.MethodNotFound=-32601]="MethodNotFound",e[e.InvalidParams=-32602]="InvalidParams",e[e.InternalError=-32603]="InternalError",e[e.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Ya||(Ya={}));CR=B({jsonrpc:Y(Vl),id:tu.optional(),error:B({code:be().int(),message:k(),data:Le().optional()})}).strict(),zR=De([P7,I7,DR,CR]),__e=De([DR,CR]),iS=tt.strict(),$7=Ht.extend({requestId:tu.optional(),reason:k().optional()}),rS=Wt.extend({method:Y("notifications/cancelled"),params:$7}),O7=B({src:k(),mimeType:k().optional(),sizes:J(k()).optional(),theme:Ve(["light","dark"]).optional()}),Qa=B({icons:J(O7).optional()}),Qi=B({name:k(),title:k().optional()}),_R=Qi.extend({...Qi.shape,...Qa.shape,version:k(),websiteUrl:k().optional(),description:k().optional()}),A7=ji(B({applyDefaults:$e().optional()}),Oe(k(),Le())),T7=Ja((e)=>{if(e&&typeof e==="object"&&!Array.isArray(e)){if(Object.keys(e).length===0)return{form:{}}}return e},ji(B({form:A7.optional(),url:Be.optional()}),Oe(k(),Le()).optional())),L7=Ke({list:Be.optional(),cancel:Be.optional(),requests:Ke({sampling:Ke({createMessage:Be.optional()}).optional(),elicitation:Ke({create:Be.optional()}).optional()}).optional()}),D7=Ke({list:Be.optional(),cancel:Be.optional(),requests:Ke({tools:Ke({call:Be.optional()}).optional()}).optional()}),C7=B({experimental:Oe(k(),Be).optional(),sampling:B({context:Be.optional(),tools:Be.optional()}).optional(),elicitation:T7.optional(),roots:B({listChanged:$e().optional()}).optional(),tasks:L7.optional(),extensions:Oe(k(),Be).optional()}),z7=_t.extend({protocolVersion:k(),capabilities:C7,clientInfo:_R}),_7=et.extend({method:Y("initialize"),params:z7}),j7=B({experimental:Oe(k(),Be).optional(),logging:Be.optional(),completions:Be.optional(),prompts:B({listChanged:$e().optional()}).optional(),resources:B({subscribe:$e().optional(),listChanged:$e().optional()}).optional(),tools:B({listChanged:$e().optional()}).optional(),tasks:D7.optional(),extensions:Oe(k(),Be).optional()}),jR=tt.extend({protocolVersion:k(),capabilities:j7,serverInfo:_R,instructions:k().optional()}),N7=Wt.extend({method:Y("notifications/initialized"),params:Ht.optional()}),aS=et.extend({method:Y("ping"),params:_t.optional()}),R7=B({progress:be(),total:je(be()),message:je(k())}),x7=B({...Ht.shape,...R7.shape,progressToken:TR}),cS=Wt.extend({method:Y("notifications/progress"),params:x7}),U7=_t.extend({cursor:LR.optional()}),Va=et.extend({params:U7.optional()}),ec=tt.extend({nextCursor:LR.optional()}),M7=Ve(["working","input_required","completed","failed","cancelled"]),tc=B({taskId:k(),status:M7,ttl:De([be(),xa()]),createdAt:k(),lastUpdatedAt:k(),pollInterval:je(be()),statusMessage:je(k())}),nu=tt.extend({task:tc}),E7=Ht.merge(tc),sS=Wt.extend({method:Y("notifications/tasks/status"),params:E7}),hS=et.extend({method:Y("tasks/get"),params:_t.extend({taskId:k()})}),lS=tt.merge(tc),uS=et.extend({method:Y("tasks/result"),params:_t.extend({taskId:k()})}),j_e=tt.loose(),dS=Va.extend({method:Y("tasks/list")}),gS=ec.extend({tasks:J(tc)}),yS=et.extend({method:Y("tasks/cancel"),params:_t.extend({taskId:k()})}),K7=tt.merge(tc),NR=B({uri:k(),mimeType:je(k()),_meta:Oe(k(),Le()).optional()}),RR=NR.extend({text:k()}),bS=k().refine((e)=>{try{return atob(e),!0}catch{return!1}},{message:"Invalid Base64 string"}),xR=NR.extend({blob:bS}),nc=Ve(["user","assistant"]),Vi=B({audience:J(nc).optional(),priority:be().min(0).max(1).optional(),lastModified:so.datetime({offset:!0}).optional()}),UR=B({...Qi.shape,...Qa.shape,uri:k(),description:je(k()),mimeType:je(k()),size:je(be()),annotations:Vi.optional(),_meta:je(Ke({}))}),G7=B({...Qi.shape,...Qa.shape,uriTemplate:k(),description:je(k()),mimeType:je(k()),annotations:Vi.optional(),_meta:je(Ke({}))}),q7=Va.extend({method:Y("resources/list")}),MR=ec.extend({resources:J(UR)}),J7=Va.extend({method:Y("resources/templates/list")}),ER=ec.extend({resourceTemplates:J(G7)}),mS=_t.extend({uri:k()}),B7=mS,H7=et.extend({method:Y("resources/read"),params:B7}),KR=tt.extend({contents:J(De([RR,xR]))}),GR=Wt.extend({method:Y("notifications/resources/list_changed"),params:Ht.optional()}),W7=mS,F7=et.extend({method:Y("resources/subscribe"),params:W7}),Z7=mS,X7=et.extend({method:Y("resources/unsubscribe"),params:Z7}),Y7=Ht.extend({uri:k()}),Q7=Wt.extend({method:Y("notifications/resources/updated"),params:Y7}),V7=B({name:k(),description:je(k()),required:je($e())}),e2=B({...Qi.shape,...Qa.shape,description:je(k()),arguments:je(J(V7)),_meta:je(Ke({}))}),t2=Va.extend({method:Y("prompts/list")}),qR=ec.extend({prompts:J(e2)}),n2=_t.extend({name:k(),arguments:Oe(k(),k()).optional()}),o2=et.extend({method:Y("prompts/get"),params:n2}),pS=B({type:Y("text"),text:k(),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),wS=B({type:Y("image"),data:bS,mimeType:k(),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),fS=B({type:Y("audio"),data:bS,mimeType:k(),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),i2=B({type:Y("tool_use"),name:k(),id:k(),input:Oe(k(),Le()),_meta:Oe(k(),Le()).optional()}),r2=B({type:Y("resource"),resource:De([RR,xR]),annotations:Vi.optional(),_meta:Oe(k(),Le()).optional()}),a2=UR.extend({type:Y("resource_link")}),vS=De([pS,wS,fS,a2,r2]),c2=B({role:nc,content:vS}),JR=tt.extend({description:k().optional(),messages:J(c2)}),BR=Wt.extend({method:Y("notifications/prompts/list_changed"),params:Ht.optional()}),s2=B({title:k().optional(),readOnlyHint:$e().optional(),destructiveHint:$e().optional(),idempotentHint:$e().optional(),openWorldHint:$e().optional()}),h2=B({taskSupport:Ve(["required","optional","forbidden"]).optional()}),HR=B({...Qi.shape,...Qa.shape,description:k().optional(),inputSchema:B({type:Y("object"),properties:Oe(k(),Be).optional(),required:J(k()).optional()}).catchall(Le()),outputSchema:B({type:Y("object"),properties:Oe(k(),Be).optional(),required:J(k()).optional()}).catchall(Le()).optional(),annotations:s2.optional(),execution:h2.optional(),_meta:Oe(k(),Le()).optional()}),l2=Va.extend({method:Y("tools/list")}),WR=ec.extend({tools:J(HR)}),ou=tt.extend({content:J(vS).default([]),structuredContent:Oe(k(),Le()).optional(),isError:$e().optional()}),N_e=ou.or(tt.extend({toolResult:Le()})),u2=eu.extend({name:k(),arguments:Oe(k(),Le()).optional()}),d2=et.extend({method:Y("tools/call"),params:u2}),FR=Wt.extend({method:Y("notifications/tools/list_changed"),params:Ht.optional()}),g2=B({autoRefresh:$e().default(!0),debounceMs:be().int().nonnegative().default(300)}),ZR=Ve(["debug","info","notice","warning","error","critical","alert","emergency"]),y2=_t.extend({level:ZR}),b2=et.extend({method:Y("logging/setLevel"),params:y2}),m2=Ht.extend({level:ZR,logger:k().optional(),data:Le()}),p2=Wt.extend({method:Y("notifications/message"),params:m2}),w2=B({name:k().optional()}),f2=B({hints:J(w2).optional(),costPriority:be().min(0).max(1).optional(),speedPriority:be().min(0).max(1).optional(),intelligencePriority:be().min(0).max(1).optional()}),v2=B({mode:Ve(["auto","required","none"]).optional()}),k2=B({type:Y("tool_result"),toolUseId:k().describe("The unique identifier for the corresponding tool call."),content:J(vS).default([]),structuredContent:B({}).loose().optional(),isError:$e().optional(),_meta:Oe(k(),Le()).optional()}),S2=Ka("type",[pS,wS,fS]),Ql=Ka("type",[pS,wS,fS,i2,k2]),P2=B({role:nc,content:De([Ql,J(Ql)]),_meta:Oe(k(),Le()).optional()}),I2=eu.extend({messages:J(P2),modelPreferences:f2.optional(),systemPrompt:k().optional(),includeContext:Ve(["none","thisServer","allServers"]).optional(),temperature:be().optional(),maxTokens:be().int(),stopSequences:J(k()).optional(),metadata:Be.optional(),tools:J(HR).optional(),toolChoice:v2.optional()}),XR=et.extend({method:Y("sampling/createMessage"),params:I2}),YR=tt.extend({model:k(),stopReason:je(Ve(["endTurn","stopSequence","maxTokens"]).or(k())),role:nc,content:S2}),QR=tt.extend({model:k(),stopReason:je(Ve(["endTurn","stopSequence","maxTokens","toolUse"]).or(k())),role:nc,content:De([Ql,J(Ql)])}),$2=B({type:Y("boolean"),title:k().optional(),description:k().optional(),default:$e().optional()}),O2=B({type:Y("string"),title:k().optional(),description:k().optional(),minLength:be().optional(),maxLength:be().optional(),format:Ve(["email","uri","date","date-time"]).optional(),default:k().optional()}),A2=B({type:Ve(["number","integer"]),title:k().optional(),description:k().optional(),minimum:be().optional(),maximum:be().optional(),default:be().optional()}),T2=B({type:Y("string"),title:k().optional(),description:k().optional(),enum:J(k()),default:k().optional()}),L2=B({type:Y("string"),title:k().optional(),description:k().optional(),oneOf:J(B({const:k(),title:k()})),default:k().optional()}),D2=B({type:Y("string"),title:k().optional(),description:k().optional(),enum:J(k()),enumNames:J(k()).optional(),default:k().optional()}),C2=De([T2,L2]),z2=B({type:Y("array"),title:k().optional(),description:k().optional(),minItems:be().optional(),maxItems:be().optional(),items:B({type:Y("string"),enum:J(k())}),default:J(k()).optional()}),_2=B({type:Y("array"),title:k().optional(),description:k().optional(),minItems:be().optional(),maxItems:be().optional(),items:B({anyOf:J(B({const:k(),title:k()}))}),default:J(k()).optional()}),j2=De([z2,_2]),N2=De([D2,C2,j2]),R2=De([N2,$2,O2,A2]),x2=eu.extend({mode:Y("form").optional(),message:k(),requestedSchema:B({type:Y("object"),properties:Oe(k(),R2),required:J(k()).optional()})}),U2=eu.extend({mode:Y("url"),message:k(),elicitationId:k(),url:k().url()}),M2=De([x2,U2]),VR=et.extend({method:Y("elicitation/create"),params:M2}),E2=Ht.extend({elicitationId:k()}),K2=Wt.extend({method:Y("notifications/elicitation/complete"),params:E2}),ex=tt.extend({action:Ve(["accept","decline","cancel"]),content:Ja((e)=>e===null?void 0:e,Oe(k(),De([k(),be(),$e(),J(k())])).optional())}),G2=B({type:Y("ref/resource"),uri:k()}),q2=B({type:Y("ref/prompt"),name:k()}),J2=_t.extend({ref:De([q2,G2]),argument:B({name:k(),value:k()}),context:B({arguments:Oe(k(),k()).optional()}).optional()}),B2=et.extend({method:Y("completion/complete"),params:J2}),tx=tt.extend({completion:Ke({values:J(k()).max(100),total:je(be().int()),hasMore:je($e())})}),H2=B({uri:k().startsWith("file://"),name:k().optional(),_meta:Oe(k(),Le()).optional()}),W2=et.extend({method:Y("roots/list"),params:_t.optional()}),F2=tt.extend({roots:J(H2)}),Z2=Wt.extend({method:Y("notifications/roots/list_changed"),params:Ht.optional()}),R_e=De([aS,_7,B2,b2,o2,t2,q7,J7,H7,F7,X7,d2,l2,hS,uS,dS,yS]),x_e=De([rS,cS,N7,Z2,sS]),U_e=De([iS,YR,QR,ex,F2,lS,gS,nu]),M_e=De([aS,XR,VR,W2,hS,uS,dS,yS]),E_e=De([rS,cS,p2,Q7,GR,FR,BR,sS,K2]),K_e=De([iS,jR,tx,JR,qR,MR,ER,KR,ou,WR,lS,gS,nu])});var X2;var iu=d(()=>{X2=Symbol("Let zodToJsonSchema decide on which parser to use")});var kS=d(()=>{iu()});var Ft=()=>{};var SS=d(()=>{qe()});var PS=()=>{};var ru=d(()=>{qe()});var IS=d(()=>{qe()});var $S=()=>{};var OS=d(()=>{qe()});var AS=d(()=>{qe();Ft()});var TS=d(()=>{qe()});var vje;var au=d(()=>{vje=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789")});var cu=d(()=>{qe();au();ru();Ft()});var LS=d(()=>{qe();cu();Ft()});var DS=d(()=>{Ft()});var su=d(()=>{qe()});var CS=d(()=>{qe();su()});var zS=()=>{};var _S=d(()=>{qe()});var jS=d(()=>{qe();Ft()});var NS=d(()=>{qe()});var RS=d(()=>{qe()});var xS=d(()=>{qe()});var US=d(()=>{qe()});var MS=d(()=>{Ft()});var ES=d(()=>{Ft()});var KS=d(()=>{qe()});var GS=d(()=>{Ft();SS();PS();ru();IS();$S();OS();AS();TS();LS();DS();CS();zS();_S();jS();NS();RS();cu();xS();au();US();MS();su();ES();KS()});var qe=d(()=>{iu();GS();Ft()});var nx=()=>{};var qS=d(()=>{qe();kS();Ft()});var ox=d(()=>{qS();iu();kS();qe();nx();Ft();SS();PS();ru();IS();$S();OS();AS();TS();LS();DS();CS();zS();_S();jS();NS();RS();KS();cu();xS();au();US();MS();su();ES();GS();qS()});var rx=d(()=>{Yl();ox()});var cx=d(()=>{Yl();Eo();rx()});var rc=q((lx)=>{Object.defineProperty(lx,"__esModule",{value:!0});lx.regexpCode=lx.getEsmExportName=lx.getProperty=lx.safeStringify=lx.stringify=lx.strConcat=lx.addCodeArg=lx.str=lx._=lx.nil=lx._Code=lx.Name=lx.IDENTIFIER=lx._CodeOrName=void 0;class hu{}lx._CodeOrName=hu;lx.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class er extends hu{constructor(e){super();if(!lx.IDENTIFIER.test(e))throw Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}lx.Name=er;class rn extends hu{constructor(e){super();this._items=typeof e==="string"?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;let e=this._items[0];return e===""||e==='""'}get str(){var e;return(e=this._str)!==null&&e!==void 0?e:this._str=this._items.reduce((t,n)=>`${t}${n}`,"")}get names(){var e;return(e=this._names)!==null&&e!==void 0?e:this._names=this._items.reduce((t,n)=>{if(n instanceof er)t[n.str]=(t[n.str]||0)+1;return t},{})}}lx._Code=rn;lx.nil=new rn("");function sx(e,...t){let n=[e[0]],i=0;while(i<t.length)BS(n,t[i]),n.push(e[++i]);return new rn(n)}lx._=sx;var JS=new rn("+");function hx(e,...t){let n=[ic(e[0])],i=0;while(i<t.length)n.push(JS),BS(n,t[i]),n.push(JS,ic(e[++i]));return aee(n),new rn(n)}lx.str=hx;function BS(e,t){if(t instanceof rn)e.push(...t._items);else if(t instanceof er)e.push(t);else e.push(hee(t))}lx.addCodeArg=BS;function aee(e){let t=1;while(t<e.length-1){if(e[t]===JS){let n=cee(e[t-1],e[t+1]);if(n!==void 0){e.splice(t-1,3,n);continue}e[t++]="+"}t++}}function cee(e,t){if(t==='""')return e;if(e==='""')return t;if(typeof e=="string"){if(t instanceof er||e[e.length-1]!=='"')return;if(typeof t!="string")return`${e.slice(0,-1)}${t}"`;if(t[0]==='"')return e.slice(0,-1)+t.slice(1);return}if(typeof t=="string"&&t[0]==='"'&&!(e instanceof er))return`"${e}${t.slice(1)}`;return}function see(e,t){return t.emptyStr()?e:e.emptyStr()?t:hx`${e}${t}`}lx.strConcat=see;function hee(e){return typeof e=="number"||typeof e=="boolean"||e===null?e:ic(Array.isArray(e)?e.join(","):e)}function lee(e){return new rn(ic(e))}lx.stringify=lee;function ic(e){return JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}lx.safeStringify=ic;function uee(e){return typeof e=="string"&&lx.IDENTIFIER.test(e)?new rn(`.${e}`):sx`[${e}]`}lx.getProperty=uee;function dee(e){if(typeof e=="string"&&lx.IDENTIFIER.test(e))return new rn(`${e}`);throw Error(`CodeGen: invalid export name: ${e}, use explicit $id name mapping`)}lx.getEsmExportName=dee;function gee(e){return new rn(e.toString())}lx.regexpCode=gee});var ZS=q((yx)=>{Object.defineProperty(yx,"__esModule",{value:!0});yx.ValueScope=yx.ValueScopeName=yx.Scope=yx.varKinds=yx.UsedValueState=void 0;var Pt=rc();class dx extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`);this.value=e.value}}var uu;(function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"})(uu||(yx.UsedValueState=uu={}));yx.varKinds={const:new Pt.Name("const"),let:new Pt.Name("let"),var:new Pt.Name("var")};class WS{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof Pt.Name?e:this.name(e)}name(e){return new Pt.Name(this._newName(e))}_newName(e){let t=this._names[e]||this._nameGroup(e);return`${e}${t.index++}`}_nameGroup(e){var t,n;if(((n=(t=this._parent)===null||t===void 0?void 0:t._prefixes)===null||n===void 0?void 0:n.has(e))||this._prefixes&&!this._prefixes.has(e))throw Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}yx.Scope=WS;class FS extends Pt.Name{constructor(e,t){super(t);this.prefix=e}setValue(e,{property:t,itemIndex:n}){this.value=e,this.scopePath=Pt._`.${new Pt.Name(t)}[${n}]`}}yx.ValueScopeName=FS;var Oee=Pt._`\n`;class gx extends WS{constructor(e){super(e);this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?Oee:Pt.nil}}get(){return this._scope}name(e){return new FS(e,this._newName(e))}value(e,t){var n;if(t.ref===void 0)throw Error("CodeGen: ref must be passed in value");let i=this.toName(e),{prefix:o}=i,r=(n=t.key)!==null&&n!==void 0?n:t.ref,c=this._values[o];if(c){let l=c.get(r);if(l)return l}else c=this._values[o]=new Map;c.set(r,i);let s=this._scope[o]||(this._scope[o]=[]),h=s.length;return s[h]=t.ref,i.setValue(t,{property:o,itemIndex:h}),i}getValue(e,t){let n=this._values[e];if(!n)return;return n.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(n)=>{if(n.scopePath===void 0)throw Error(`CodeGen: name "${n}" has no value`);return Pt._`${e}${n.scopePath}`})}scopeCode(e=this._values,t,n){return this._reduceValues(e,(i)=>{if(i.value===void 0)throw Error(`CodeGen: name "${i}" has no value`);return i.value.code},t,n)}_reduceValues(e,t,n={},i){let o=Pt.nil;for(let r in e){let c=e[r];if(!c)continue;let s=n[r]=n[r]||new Map;c.forEach((h)=>{if(s.has(h))return;s.set(h,uu.Started);let l=t(h);if(l){let u=this.opts.es5?yx.varKinds.var:yx.varKinds.const;o=Pt._`${o}${u} ${h} = ${l};${this.opts._n}`}else if(l=i===null||i===void 0?void 0:i(h))o=Pt._`${o}${l}${this.opts._n}`;else throw new dx(h);s.set(h,uu.Completed)})}return o}}yx.ValueScope=gx});var ye=q((It)=>{Object.defineProperty(It,"__esModule",{value:!0});It.or=It.and=It.not=It.CodeGen=It.operators=It.varKinds=It.ValueScopeName=It.ValueScope=It.Scope=It.Name=It.regexpCode=It.stringify=It.getProperty=It.nil=It.strConcat=It.str=It._=void 0;var pe=rc(),an=ZS(),ho=rc();Object.defineProperty(It,"_",{enumerable:!0,get:function(){return ho._}});Object.defineProperty(It,"str",{enumerable:!0,get:function(){return ho.str}});Object.defineProperty(It,"strConcat",{enumerable:!0,get:function(){return ho.strConcat}});Object.defineProperty(It,"nil",{enumerable:!0,get:function(){return ho.nil}});Object.defineProperty(It,"getProperty",{enumerable:!0,get:function(){return ho.getProperty}});Object.defineProperty(It,"stringify",{enumerable:!0,get:function(){return ho.stringify}});Object.defineProperty(It,"regexpCode",{enumerable:!0,get:function(){return ho.regexpCode}});Object.defineProperty(It,"Name",{enumerable:!0,get:function(){return ho.Name}});var pu=ZS();Object.defineProperty(It,"Scope",{enumerable:!0,get:function(){return pu.Scope}});Object.defineProperty(It,"ValueScope",{enumerable:!0,get:function(){return pu.ValueScope}});Object.defineProperty(It,"ValueScopeName",{enumerable:!0,get:function(){return pu.ValueScopeName}});Object.defineProperty(It,"varKinds",{enumerable:!0,get:function(){return pu.varKinds}});It.operators={GT:new pe._Code(">"),GTE:new pe._Code(">="),LT:new pe._Code("<"),LTE:new pe._Code("<="),EQ:new pe._Code("==="),NEQ:new pe._Code("!=="),NOT:new pe._Code("!"),OR:new pe._Code("||"),AND:new pe._Code("&&"),ADD:new pe._Code("+")};class lo{optimizeNodes(){return this}optimizeNames(e,t){return this}}class mx extends lo{constructor(e,t,n){super();this.varKind=e,this.name=t,this.rhs=n}render({es5:e,_n:t}){let n=e?an.varKinds.var:this.varKind,i=this.rhs===void 0?"":` = ${this.rhs}`;return`${n} ${this.name}${i};`+t}optimizeNames(e,t){if(!e[this.name.str])return;if(this.rhs)this.rhs=nr(this.rhs,e,t);return this}get names(){return this.rhs instanceof pe._CodeOrName?this.rhs.names:{}}}class QS extends lo{constructor(e,t,n){super();this.lhs=e,this.rhs=t,this.sideEffects=n}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(this.lhs instanceof pe.Name&&!e[this.lhs.str]&&!this.sideEffects)return;return this.rhs=nr(this.rhs,e,t),this}get names(){let e=this.lhs instanceof pe.Name?{}:{...this.lhs.names};return mu(e,this.rhs)}}class px extends QS{constructor(e,t,n,i){super(e,n,i);this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class wx extends lo{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class fx extends lo{constructor(e){super();this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class vx extends lo{constructor(e){super();this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class kx extends lo{constructor(e){super();this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=nr(this.code,e,t),this}get names(){return this.code instanceof pe._CodeOrName?this.code.names:{}}}class wu extends lo{constructor(e=[]){super();this.nodes=e}render(e){return this.nodes.reduce((t,n)=>t+n.render(e),"")}optimizeNodes(){let{nodes:e}=this,t=e.length;while(t--){let n=e[t].optimizeNodes();if(Array.isArray(n))e.splice(t,1,...n);else if(n)e[t]=n;else e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){let{nodes:n}=this,i=n.length;while(i--){let o=n[i];if(o.optimizeNames(e,t))continue;Dee(e,o.names),n.splice(i,1)}return n.length>0?this:void 0}get names(){return this.nodes.reduce((e,t)=>Ko(e,t.names),{})}}class uo extends wu{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class Sx extends wu{}class ac extends uo{}ac.kind="else";class xn extends uo{constructor(e,t){super(t);this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);if(this.else)t+="else "+this.else.render(e);return t}optimizeNodes(){super.optimizeNodes();let e=this.condition;if(e===!0)return this.nodes;let t=this.else;if(t){let n=t.optimizeNodes();t=this.else=Array.isArray(n)?new ac(n):n}if(t){if(e===!1)return t instanceof xn?t:t.nodes;if(this.nodes.length)return this;return new xn(Ax(e),t instanceof xn?[t]:t.nodes)}if(e===!1||!this.nodes.length)return;return this}optimizeNames(e,t){var n;if(this.else=(n=this.else)===null||n===void 0?void 0:n.optimizeNames(e,t),!(super.optimizeNames(e,t)||this.else))return;return this.condition=nr(this.condition,e,t),this}get names(){let e=super.names;if(mu(e,this.condition),this.else)Ko(e,this.else.names);return e}}xn.kind="if";class tr extends uo{}tr.kind="for";class Px extends tr{constructor(e){super();this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iteration=nr(this.iteration,e,t),this}get names(){return Ko(super.names,this.iteration.names)}}class Ix extends tr{constructor(e,t,n,i){super();this.varKind=e,this.name=t,this.from=n,this.to=i}render(e){let t=e.es5?an.varKinds.var:this.varKind,{name:n,from:i,to:o}=this;return`for(${t} ${n}=${i}; ${n}<${o}; ${n}++)`+super.render(e)}get names(){let e=mu(super.names,this.from);return mu(e,this.to)}}class XS extends tr{constructor(e,t,n,i){super();this.loop=e,this.varKind=t,this.name=n,this.iterable=i}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(!super.optimizeNames(e,t))return;return this.iterable=nr(this.iterable,e,t),this}get names(){return Ko(super.names,this.iterable.names)}}class du extends uo{constructor(e,t,n){super();this.name=e,this.args=t,this.async=n}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}du.kind="func";class gu extends wu{render(e){return"return "+super.render(e)}}gu.kind="return";class $x extends uo{render(e){let t="try"+super.render(e);if(this.catch)t+=this.catch.render(e);if(this.finally)t+=this.finally.render(e);return t}optimizeNodes(){var e,t;return super.optimizeNodes(),(e=this.catch)===null||e===void 0||e.optimizeNodes(),(t=this.finally)===null||t===void 0||t.optimizeNodes(),this}optimizeNames(e,t){var n,i;return super.optimizeNames(e,t),(n=this.catch)===null||n===void 0||n.optimizeNames(e,t),(i=this.finally)===null||i===void 0||i.optimizeNames(e,t),this}get names(){let e=super.names;if(this.catch)Ko(e,this.catch.names);if(this.finally)Ko(e,this.finally.names);return e}}class yu extends uo{constructor(e){super();this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}yu.kind="catch";class bu extends uo{render(e){return"finally"+super.render(e)}}bu.kind="finally";class Ox{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?`
|
|
7256
7256
|
`:""},this._extScope=e,this._scope=new an.Scope({parent:e}),this._nodes=[new Sx]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){let n=this._extScope.value(e,t);return(this._values[n.prefix]||(this._values[n.prefix]=new Set)).add(n),n}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,n,i){let o=this._scope.toName(t);if(n!==void 0&&i)this._constants[o.str]=n;return this._leafNode(new mx(e,o,n)),o}const(e,t,n){return this._def(an.varKinds.const,e,t,n)}let(e,t,n){return this._def(an.varKinds.let,e,t,n)}var(e,t,n){return this._def(an.varKinds.var,e,t,n)}assign(e,t,n){return this._leafNode(new QS(e,t,n))}add(e,t){return this._leafNode(new px(e,It.operators.ADD,t))}code(e){if(typeof e=="function")e();else if(e!==pe.nil)this._leafNode(new kx(e));return this}object(...e){let t=["{"];for(let[n,i]of e){if(t.length>1)t.push(",");if(t.push(n),n!==i||this.opts.es5)t.push(":"),(0,pe.addCodeArg)(t,i)}return t.push("}"),new pe._Code(t)}if(e,t,n){if(this._blockNode(new xn(e)),t&&n)this.code(t).else().code(n).endIf();else if(t)this.code(t).endIf();else if(n)throw Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new xn(e))}else(){return this._elseNode(new ac)}endIf(){return this._endBlockNode(xn,ac)}_for(e,t){if(this._blockNode(e),t)this.code(t).endFor();return this}for(e,t){return this._for(new Px(e),t)}forRange(e,t,n,i,o=this.opts.es5?an.varKinds.var:an.varKinds.let){let r=this._scope.toName(e);return this._for(new Ix(o,r,t,n),()=>i(r))}forOf(e,t,n,i=an.varKinds.const){let o=this._scope.toName(e);if(this.opts.es5){let r=t instanceof pe.Name?t:this.var("_arr",t);return this.forRange("_i",0,pe._`${r}.length`,(c)=>{this.var(o,pe._`${r}[${c}]`),n(o)})}return this._for(new XS("of",i,o,t),()=>n(o))}forIn(e,t,n,i=this.opts.es5?an.varKinds.var:an.varKinds.const){if(this.opts.ownProperties)return this.forOf(e,pe._`Object.keys(${t})`,n);let o=this._scope.toName(e);return this._for(new XS("in",i,o,t),()=>n(o))}endFor(){return this._endBlockNode(tr)}label(e){return this._leafNode(new wx(e))}break(e){return this._leafNode(new fx(e))}return(e){let t=new gu;if(this._blockNode(t),this.code(e),t.nodes.length!==1)throw Error('CodeGen: "return" should have one node');return this._endBlockNode(gu)}try(e,t,n){if(!t&&!n)throw Error('CodeGen: "try" without "catch" and "finally"');let i=new $x;if(this._blockNode(i),this.code(e),t){let o=this.name("e");this._currNode=i.catch=new yu(o),t(o)}if(n)this._currNode=i.finally=new bu,this.code(n);return this._endBlockNode(yu,bu)}throw(e){return this._leafNode(new vx(e))}block(e,t){if(this._blockStarts.push(this._nodes.length),e)this.code(e).endBlock(t);return this}endBlock(e){let t=this._blockStarts.pop();if(t===void 0)throw Error("CodeGen: not in self-balancing block");let n=this._nodes.length-t;if(n<0||e!==void 0&&n!==e)throw Error(`CodeGen: wrong number of nodes: ${n} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=pe.nil,n,i){if(this._blockNode(new du(e,t,n)),i)this.code(i).endFunc();return this}endFunc(){return this._endBlockNode(du)}optimize(e=1){while(e-- >0)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){let n=this._currNode;if(n instanceof e||t&&n instanceof t)return this._nodes.pop(),this;throw Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){let t=this._currNode;if(!(t instanceof xn))throw Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){let e=this._nodes;return e[e.length-1]}set _currNode(e){let t=this._nodes;t[t.length-1]=e}}It.CodeGen=Ox;function Ko(e,t){for(let n in t)e[n]=(e[n]||0)+(t[n]||0);return e}function mu(e,t){return t instanceof pe._CodeOrName?Ko(e,t.names):e}function nr(e,t,n){if(e instanceof pe.Name)return i(e);if(!o(e))return e;return new pe._Code(e._items.reduce((r,c)=>{if(c instanceof pe.Name)c=i(c);if(c instanceof pe._Code)r.push(...c._items);else r.push(c);return r},[]));function i(r){let c=n[r.str];if(c===void 0||t[r.str]!==1)return r;return delete t[r.str],c}function o(r){return r instanceof pe._Code&&r._items.some((c)=>c instanceof pe.Name&&t[c.str]===1&&n[c.str]!==void 0)}}function Dee(e,t){for(let n in t)e[n]=(e[n]||0)-(t[n]||0)}function Ax(e){return typeof e=="boolean"||typeof e=="number"||e===null?!e:pe._`!${YS(e)}`}It.not=Ax;var Cee=Tx(It.operators.AND);function zee(...e){return e.reduce(Cee)}It.and=zee;var _ee=Tx(It.operators.OR);function jee(...e){return e.reduce(_ee)}It.or=jee;function Tx(e){return(t,n)=>t===pe.nil?n:n===pe.nil?t:pe._`${YS(t)} ${e} ${YS(n)}`}function YS(e){return e instanceof pe.Name?e:pe._`(${e})`}});var fe=q((xx)=>{Object.defineProperty(xx,"__esModule",{value:!0});xx.checkStrictMode=xx.getErrorPath=xx.Type=xx.useFunc=xx.setEvaluated=xx.evaluatedPropsToName=xx.mergeEvaluated=xx.eachItem=xx.unescapeJsonPointer=xx.escapeJsonPointer=xx.escapeFragment=xx.unescapeFragment=xx.schemaRefOrVal=xx.schemaHasRulesButRef=xx.schemaHasRules=xx.checkUnknownRules=xx.alwaysValidSchema=xx.toHash=void 0;var Ne=ye(),Uee=rc();function Mee(e){let t={};for(let n of e)t[n]=!0;return t}xx.toHash=Mee;function Eee(e,t){if(typeof t=="boolean")return t;if(Object.keys(t).length===0)return!0;return zx(e,t),!_x(t,e.self.RULES.all)}xx.alwaysValidSchema=Eee;function zx(e,t=e.schema){let{opts:n,self:i}=e;if(!n.strictSchema)return;if(typeof t==="boolean")return;let o=i.RULES.keywords;for(let r in t)if(!o[r])Rx(e,`unknown keyword: "${r}"`)}xx.checkUnknownRules=zx;function _x(e,t){if(typeof e=="boolean")return!e;for(let n in e)if(t[n])return!0;return!1}xx.schemaHasRules=_x;function Kee(e,t){if(typeof e=="boolean")return!e;for(let n in e)if(n!=="$ref"&&t.all[n])return!0;return!1}xx.schemaHasRulesButRef=Kee;function Gee({topSchemaRef:e,schemaPath:t},n,i,o){if(!o){if(typeof n=="number"||typeof n=="boolean")return n;if(typeof n=="string")return Ne._`${n}`}return Ne._`${e}${t}${(0,Ne.getProperty)(i)}`}xx.schemaRefOrVal=Gee;function qee(e){return jx(decodeURIComponent(e))}xx.unescapeFragment=qee;function Jee(e){return encodeURIComponent(eP(e))}xx.escapeFragment=Jee;function eP(e){if(typeof e=="number")return`${e}`;return e.replace(/~/g,"~0").replace(/\//g,"~1")}xx.escapeJsonPointer=eP;function jx(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}xx.unescapeJsonPointer=jx;function Bee(e,t){if(Array.isArray(e))for(let n of e)t(n);else t(e)}xx.eachItem=Bee;function Dx({mergeNames:e,mergeToName:t,mergeValues:n,resultToName:i}){return(o,r,c,s)=>{let h=c===void 0?r:c instanceof Ne.Name?(r instanceof Ne.Name?e(o,r,c):t(o,r,c),c):r instanceof Ne.Name?(t(o,c,r),r):n(r,c);return s===Ne.Name&&!(h instanceof Ne.Name)?i(o,h):h}}xx.mergeEvaluated={props:Dx({mergeNames:(e,t,n)=>e.if(Ne._`${n} !== true && ${t} !== undefined`,()=>{e.if(Ne._`${t} === true`,()=>e.assign(n,!0),()=>e.assign(n,Ne._`${n} || {}`).code(Ne._`Object.assign(${n}, ${t})`))}),mergeToName:(e,t,n)=>e.if(Ne._`${n} !== true`,()=>{if(t===!0)e.assign(n,!0);else e.assign(n,Ne._`${n} || {}`),tP(e,n,t)}),mergeValues:(e,t)=>e===!0?!0:{...e,...t},resultToName:Nx}),items:Dx({mergeNames:(e,t,n)=>e.if(Ne._`${n} !== true && ${t} !== undefined`,()=>e.assign(n,Ne._`${t} === true ? true : ${n} > ${t} ? ${n} : ${t}`)),mergeToName:(e,t,n)=>e.if(Ne._`${n} !== true`,()=>e.assign(n,t===!0?!0:Ne._`${n} > ${t} ? ${n} : ${t}`)),mergeValues:(e,t)=>e===!0?!0:Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})};function Nx(e,t){if(t===!0)return e.var("props",!0);let n=e.var("props",Ne._`{}`);if(t!==void 0)tP(e,n,t);return n}xx.evaluatedPropsToName=Nx;function tP(e,t,n){Object.keys(n).forEach((i)=>e.assign(Ne._`${t}${(0,Ne.getProperty)(i)}`,!0))}xx.setEvaluated=tP;var Cx={};function Hee(e,t){return e.scopeValue("func",{ref:t,code:Cx[t.code]||(Cx[t.code]=new Uee._Code(t.code))})}xx.useFunc=Hee;var VS;(function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"})(VS||(xx.Type=VS={}));function Wee(e,t,n){if(e instanceof Ne.Name){let i=t===VS.Num;return n?i?Ne._`"[" + ${e} + "]"`:Ne._`"['" + ${e} + "']"`:i?Ne._`"/" + ${e}`:Ne._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return n?(0,Ne.getProperty)(e).toString():"/"+eP(e)}xx.getErrorPath=Wee;function Rx(e,t,n=e.opts.strictSchema){if(!n)return;if(t=`strict mode: ${t}`,n===!0)throw Error(t);e.self.logger.warn(t)}xx.checkStrictMode=Rx});var Un=q((Mx)=>{Object.defineProperty(Mx,"__esModule",{value:!0});var ut=ye(),ute={data:new ut.Name("data"),valCxt:new ut.Name("valCxt"),instancePath:new ut.Name("instancePath"),parentData:new ut.Name("parentData"),parentDataProperty:new ut.Name("parentDataProperty"),rootData:new ut.Name("rootData"),dynamicAnchors:new ut.Name("dynamicAnchors"),vErrors:new ut.Name("vErrors"),errors:new ut.Name("errors"),this:new ut.Name("this"),self:new ut.Name("self"),scope:new ut.Name("scope"),json:new ut.Name("json"),jsonPos:new ut.Name("jsonPos"),jsonLen:new ut.Name("jsonLen"),jsonPart:new ut.Name("jsonPart")};Mx.default=ute});var cc=q((qx)=>{Object.defineProperty(qx,"__esModule",{value:!0});qx.extendErrors=qx.resetErrorsCount=qx.reportExtraError=qx.reportError=qx.keyword$DataError=qx.keywordError=void 0;var ve=ye(),vu=fe(),mt=Un();qx.keywordError={message:({keyword:e})=>ve.str`must pass "${e}" keyword validation`};qx.keyword$DataError={message:({keyword:e,schemaType:t})=>t?ve.str`"${e}" keyword must be ${t} ($data)`:ve.str`"${e}" keyword is invalid ($data)`};function gte(e,t=qx.keywordError,n,i){let{it:o}=e,{gen:r,compositeRule:c,allErrors:s}=o,h=Gx(e,t,n);if(i!==null&&i!==void 0?i:c||s)Ex(r,h);else Kx(o,ve._`[${h}]`)}qx.reportError=gte;function yte(e,t=qx.keywordError,n){let{it:i}=e,{gen:o,compositeRule:r,allErrors:c}=i,s=Gx(e,t,n);if(Ex(o,s),!(r||c))Kx(i,mt.default.vErrors)}qx.reportExtraError=yte;function bte(e,t){e.assign(mt.default.errors,t),e.if(ve._`${mt.default.vErrors} !== null`,()=>e.if(t,()=>e.assign(ve._`${mt.default.vErrors}.length`,t),()=>e.assign(mt.default.vErrors,null)))}qx.resetErrorsCount=bte;function mte({gen:e,keyword:t,schemaValue:n,data:i,errsCount:o,it:r}){if(o===void 0)throw Error("ajv implementation error");let c=e.name("err");e.forRange("i",o,mt.default.errors,(s)=>{if(e.const(c,ve._`${mt.default.vErrors}[${s}]`),e.if(ve._`${c}.instancePath === undefined`,()=>e.assign(ve._`${c}.instancePath`,(0,ve.strConcat)(mt.default.instancePath,r.errorPath))),e.assign(ve._`${c}.schemaPath`,ve.str`${r.errSchemaPath}/${t}`),r.opts.verbose)e.assign(ve._`${c}.schema`,n),e.assign(ve._`${c}.data`,i)})}qx.extendErrors=mte;function Ex(e,t){let n=e.const("err",t);e.if(ve._`${mt.default.vErrors} === null`,()=>e.assign(mt.default.vErrors,ve._`[${n}]`),ve._`${mt.default.vErrors}.push(${n})`),e.code(ve._`${mt.default.errors}++`)}function Kx(e,t){let{gen:n,validateName:i,schemaEnv:o}=e;if(o.$async)n.throw(ve._`new ${e.ValidationError}(${t})`);else n.assign(ve._`${i}.errors`,t),n.return(!1)}var Go={keyword:new ve.Name("keyword"),schemaPath:new ve.Name("schemaPath"),params:new ve.Name("params"),propertyName:new ve.Name("propertyName"),message:new ve.Name("message"),schema:new ve.Name("schema"),parentSchema:new ve.Name("parentSchema")};function Gx(e,t,n){let{createErrors:i}=e.it;if(i===!1)return ve._`{}`;return pte(e,t,n)}function pte(e,t,n={}){let{gen:i,it:o}=e,r=[wte(o,n),fte(e,n)];return vte(e,t,r),i.object(...r)}function wte({errorPath:e},{instancePath:t}){let n=t?ve.str`${e}${(0,vu.getErrorPath)(t,vu.Type.Str)}`:e;return[mt.default.instancePath,(0,ve.strConcat)(mt.default.instancePath,n)]}function fte({keyword:e,it:{errSchemaPath:t}},{schemaPath:n,parentSchema:i}){let o=i?t:ve.str`${t}/${e}`;if(n)o=ve.str`${o}${(0,vu.getErrorPath)(n,vu.Type.Str)}`;return[Go.schemaPath,o]}function vte(e,{params:t,message:n},i){let{keyword:o,data:r,schemaValue:c,it:s}=e,{opts:h,propertyName:l,topSchemaRef:u,schemaPath:g}=s;if(i.push([Go.keyword,o],[Go.params,typeof t=="function"?t(e):t||ve._`{}`]),h.messages)i.push([Go.message,typeof n=="function"?n(e):n]);if(h.verbose)i.push([Go.schema,c],[Go.parentSchema,ve._`${u}${g}`],[mt.default.data,r]);if(l)i.push([Go.propertyName,l])}});var Fx=q((Hx)=>{Object.defineProperty(Hx,"__esModule",{value:!0});Hx.boolOrEmptySchema=Hx.topBoolOrEmptySchema=void 0;var $te=cc(),Ote=ye(),Ate=Un(),Tte={message:"boolean schema is false"};function Lte(e){let{gen:t,schema:n,validateName:i}=e;if(n===!1)Bx(e,!1);else if(typeof n=="object"&&n.$async===!0)t.return(Ate.default.data);else t.assign(Ote._`${i}.errors`,null),t.return(!0)}Hx.topBoolOrEmptySchema=Lte;function Dte(e,t){let{gen:n,schema:i}=e;if(i===!1)n.var(t,!1),Bx(e);else n.var(t,!0)}Hx.boolOrEmptySchema=Dte;function Bx(e,t){let{gen:n,data:i}=e,o={gen:n,keyword:"false schema",data:i,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,$te.reportError)(o,Tte,void 0,t)}});var oP=q((Zx)=>{Object.defineProperty(Zx,"__esModule",{value:!0});Zx.getRules=Zx.isJSONType=void 0;var zte=["string","number","integer","boolean","null","object","array"],_te=new Set(zte);function jte(e){return typeof e=="string"&&_te.has(e)}Zx.isJSONType=jte;function Nte(){let e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}Zx.getRules=Nte});var iP=q((Vx)=>{Object.defineProperty(Vx,"__esModule",{value:!0});Vx.shouldUseRule=Vx.shouldUseGroup=Vx.schemaHasRulesForType=void 0;function xte({schema:e,self:t},n){let i=t.RULES.types[n];return i&&i!==!0&&Yx(e,i)}Vx.schemaHasRulesForType=xte;function Yx(e,t){return t.rules.some((n)=>Qx(e,n))}Vx.shouldUseGroup=Yx;function Qx(e,t){var n;return e[t.keyword]!==void 0||((n=t.definition.implements)===null||n===void 0?void 0:n.some((i)=>e[i]!==void 0))}Vx.shouldUseRule=Qx});var sc=q((iU)=>{Object.defineProperty(iU,"__esModule",{value:!0});iU.reportTypeError=iU.checkDataTypes=iU.checkDataType=iU.coerceAndCheckDataType=iU.getJSONTypes=iU.getSchemaTypes=iU.DataType=void 0;var Ete=oP(),Kte=iP(),Gte=cc(),de=ye(),tU=fe(),or;(function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"})(or||(iU.DataType=or={}));function qte(e){let t=nU(e.type);if(t.includes("null")){if(e.nullable===!1)throw Error("type: null contradicts nullable: false")}else{if(!t.length&&e.nullable!==void 0)throw Error('"nullable" cannot be used without "type"');if(e.nullable===!0)t.push("null")}return t}iU.getSchemaTypes=qte;function nU(e){let t=Array.isArray(e)?e:e?[e]:[];if(t.every(Ete.isJSONType))return t;throw Error("type must be JSONType or JSONType[]: "+t.join(","))}iU.getJSONTypes=nU;function Jte(e,t){let{gen:n,data:i,opts:o}=e,r=Bte(t,o.coerceTypes),c=t.length>0&&!(r.length===0&&t.length===1&&(0,Kte.schemaHasRulesForType)(e,t[0]));if(c){let s=aP(t,i,o.strictNumbers,or.Wrong);n.if(s,()=>{if(r.length)Hte(e,t,r);else cP(e)})}return c}iU.coerceAndCheckDataType=Jte;var oU=new Set(["string","number","integer","boolean","null"]);function Bte(e,t){return t?e.filter((n)=>oU.has(n)||t==="array"&&n==="array"):[]}function Hte(e,t,n){let{gen:i,data:o,opts:r}=e,c=i.let("dataType",de._`typeof ${o}`),s=i.let("coerced",de._`undefined`);if(r.coerceTypes==="array")i.if(de._`${c} == 'object' && Array.isArray(${o}) && ${o}.length == 1`,()=>i.assign(o,de._`${o}[0]`).assign(c,de._`typeof ${o}`).if(aP(t,o,r.strictNumbers),()=>i.assign(s,o)));i.if(de._`${s} !== undefined`);for(let l of n)if(oU.has(l)||l==="array"&&r.coerceTypes==="array")h(l);i.else(),cP(e),i.endIf(),i.if(de._`${s} !== undefined`,()=>{i.assign(o,s),Wte(e,s)});function h(l){switch(l){case"string":i.elseIf(de._`${c} == "number" || ${c} == "boolean"`).assign(s,de._`"" + ${o}`).elseIf(de._`${o} === null`).assign(s,de._`""`);return;case"number":i.elseIf(de._`${c} == "boolean" || ${o} === null
|
|
7257
7257
|
|| (${c} == "string" && ${o} && ${o} == +${o})`).assign(s,de._`+${o}`);return;case"integer":i.elseIf(de._`${c} === "boolean" || ${o} === null
|
|
7258
7258
|
|| (${c} === "string" && ${o} && ${o} == +${o} && !(${o} % 1))`).assign(s,de._`+${o}`);return;case"boolean":i.elseIf(de._`${o} === "false" || ${o} === 0 || ${o} === null`).assign(s,!1).elseIf(de._`${o} === "true" || ${o} === 1`).assign(s,!0);return;case"null":i.elseIf(de._`${o} === "" || ${o} === 0 || ${o} === false`),i.assign(s,null);return;case"array":i.elseIf(de._`${c} === "string" || ${c} === "number"
|