gitextract_gaok0hlb/ ├── .cursor/ │ └── rules/ │ ├── keep-ui-react-typescript.mdc │ └── keep-ui-tests.mdc ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── documentation.md │ │ ├── feature_request.md │ │ ├── new_provider_request.md │ │ └── use_case.md │ └── workflows/ │ ├── auto-release.yml │ ├── auto-resolve-keep.yml │ ├── but-to-project.yml │ ├── developer-onboarding-notification.yml │ ├── lint-pr.yml │ ├── release-workflow-schema.yml │ ├── release.yml │ ├── run-e2e-tests.yml │ ├── sync-keep-workflows.yml │ ├── test-docs.yml │ ├── test-pr-e2e.yml │ ├── test-pr-integrations.yml │ ├── test-pr-ut-ui.yml │ ├── test-pr-ut.yml │ └── test-workflow-examples.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .python-version ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── docker/ │ ├── Dockerfile.api │ ├── Dockerfile.cli │ ├── Dockerfile.dev.api │ ├── Dockerfile.dev.ui │ └── Dockerfile.ui ├── docker-compose-with-arq.yml ├── docker-compose-with-auth.yml ├── docker-compose-with-otel.yaml ├── docker-compose.common.yml ├── docker-compose.dev.yml ├── docker-compose.yml ├── docs/ │ ├── README.md │ ├── alertevaluation/ │ │ ├── examples/ │ │ │ ├── victoriametricsmulti.mdx │ │ │ └── victoriametricssingle.mdx │ │ └── overview.mdx │ ├── alerts/ │ │ ├── actionmenu.mdx │ │ ├── overview.mdx │ │ ├── presets.mdx │ │ ├── sidebar.mdx │ │ ├── sound.mdx │ │ └── table.mdx │ ├── applications/ │ │ └── github.mdx │ ├── authentication/ │ │ └── okta.md │ ├── cli/ │ │ ├── commands/ │ │ │ ├── alert-enrich.mdx │ │ │ ├── alert-get.mdx │ │ │ ├── alert-list.mdx │ │ │ ├── cli-alert.mdx │ │ │ ├── cli-api.mdx │ │ │ ├── cli-config-new.mdx │ │ │ ├── cli-config-show.mdx │ │ │ ├── cli-config.mdx │ │ │ ├── cli-provider.mdx │ │ │ ├── cli-run.mdx │ │ │ ├── cli-version.mdx │ │ │ ├── cli-whoami.mdx │ │ │ ├── cli-workflow.mdx │ │ │ ├── cli.mdx │ │ │ ├── extraction-create.mdx │ │ │ ├── extraction-delete.mdx │ │ │ ├── extractions-list.mdx │ │ │ ├── mappings-create.mdx │ │ │ ├── mappings-delete.mdx │ │ │ ├── mappings-list.mdx │ │ │ ├── provider-connect.mdx │ │ │ ├── provider-delete.mdx │ │ │ ├── provider-list.mdx │ │ │ ├── runs-list.mdx │ │ │ ├── runs-logs.mdx │ │ │ ├── workflow-apply.mdx │ │ │ ├── workflow-list.mdx │ │ │ ├── workflow-run.mdx │ │ │ └── workflow-runs.mdx │ │ ├── github-actions.mdx │ │ ├── installation.mdx │ │ └── overview.mdx │ ├── deployment/ │ │ ├── authentication/ │ │ │ ├── auth0-auth.mdx │ │ │ ├── azuread-auth.mdx │ │ │ ├── db-auth.mdx │ │ │ ├── keycloak-auth.mdx │ │ │ ├── no-auth.mdx │ │ │ ├── oauth2-proxy-gitlab.mdx │ │ │ ├── oauth2proxy-auth.mdx │ │ │ ├── okta-auth.mdx │ │ │ ├── onelogin-auth.mdx │ │ │ └── overview.mdx │ │ ├── configuration.mdx │ │ ├── docker.mdx │ │ ├── ecs.mdx │ │ ├── kubernetes/ │ │ │ ├── architecture.mdx │ │ │ ├── installation.mdx │ │ │ ├── openshift.mdx │ │ │ └── overview.mdx │ │ ├── local-llm/ │ │ │ └── keep-with-litellm.mdx │ │ ├── monitoring.mdx │ │ ├── provision/ │ │ │ ├── dashboard.mdx │ │ │ ├── overview.mdx │ │ │ ├── provider.mdx │ │ │ └── workflow.mdx │ │ ├── secret-store.mdx │ │ └── stress-testing.mdx │ ├── development/ │ │ ├── external-url.mdx │ │ └── getting-started.mdx │ ├── images/ │ │ └── datadog_raw_alerts.txt │ ├── incidents/ │ │ ├── facets.mdx │ │ └── overview.mdx │ ├── mint.json │ ├── openapi.json │ ├── overview/ │ │ ├── ai-correlation.mdx │ │ ├── ai-in-workflows.mdx │ │ ├── ai-incident-assistant.mdx │ │ ├── ai-semi-automatic-correlation.mdx │ │ ├── ai-workflow-assistant.mdx │ │ ├── alertseverityandstatus.mdx │ │ ├── cel.mdx │ │ ├── comparisons.mdx │ │ ├── correlation-rules.mdx │ │ ├── correlation-topology.mdx │ │ ├── deduplication.mdx │ │ ├── enrichment/ │ │ │ ├── extraction.mdx │ │ │ └── mapping.mdx │ │ ├── faq.mdx │ │ ├── fingerprints.mdx │ │ ├── glossary.mdx │ │ ├── howdoeskeepgetmyalerts.mdx │ │ ├── introduction.mdx │ │ ├── maintenance-windows.mdx │ │ ├── playground.mdx │ │ ├── servicetopology.mdx │ │ ├── support.mdx │ │ ├── usecases.mdx │ │ └── workflow-automation.mdx │ ├── providers/ │ │ ├── adding-a-new-provider.mdx │ │ ├── documentation/ │ │ │ ├── airflow-provider.mdx │ │ │ ├── aks-provider.mdx │ │ │ ├── amazonsqs-provider.mdx │ │ │ ├── anthropic-provider.mdx │ │ │ ├── appdynamics-provider.mdx │ │ │ ├── argocd-provider.mdx │ │ │ ├── asana-provider.mdx │ │ │ ├── auth0-provider.mdx │ │ │ ├── axiom-provider.mdx │ │ │ ├── azuremonitoring-provider.mdx │ │ │ ├── bash-provider.mdx │ │ │ ├── bigquery-provider.mdx │ │ │ ├── centreon-provider.mdx │ │ │ ├── checkly-provider.mdx │ │ │ ├── checkmk-provider.mdx │ │ │ ├── cilium-provider.mdx │ │ │ ├── clickhouse-provider.mdx │ │ │ ├── cloudwatch-provider.mdx │ │ │ ├── console-provider.mdx │ │ │ ├── coralogix-provider.mdx │ │ │ ├── dash0-provider.mdx │ │ │ ├── databend-provider.mdx │ │ │ ├── datadog-provider.mdx │ │ │ ├── deepseek-provider.mdx │ │ │ ├── discord-provider.mdx │ │ │ ├── dynatrace-provider.mdx │ │ │ ├── eks-provider.mdx │ │ │ ├── elastic-provider.mdx │ │ │ ├── flashduty-provider.mdx │ │ │ ├── fluxcd-provider.mdx │ │ │ ├── gcpmonitoring-provider.mdx │ │ │ ├── gemini-provider.mdx │ │ │ ├── github-provider.mdx │ │ │ ├── github_workflows_provider.mdx │ │ │ ├── gitlab-provider.mdx │ │ │ ├── gitlabpipelines-provider.mdx │ │ │ ├── gke-provider.mdx │ │ │ ├── google_chat-provider.mdx │ │ │ ├── grafana-provider.mdx │ │ │ ├── grafana_incident-provider.mdx │ │ │ ├── grafana_loki-provider.mdx │ │ │ ├── grafana_oncall-provider.mdx │ │ │ ├── graylog-provider.mdx │ │ │ ├── grok-provider.mdx │ │ │ ├── http-provider.mdx │ │ │ ├── icinga2-provider.mdx │ │ │ ├── ilert-provider.mdx │ │ │ ├── incidentio-provider.mdx │ │ │ ├── incidentmanager-provider.mdx │ │ │ ├── jira-on-prem-provider.mdx │ │ │ ├── jira-provider.mdx │ │ │ ├── kafka-provider.mdx │ │ │ ├── keep-provider.mdx │ │ │ ├── kibana-provider.mdx │ │ │ ├── kubernetes-provider.mdx │ │ │ ├── libre_nms-provider.mdx │ │ │ ├── linear_provider.mdx │ │ │ ├── linearb-provider.mdx │ │ │ ├── litellm-provider.mdx │ │ │ ├── llamacpp-provider.mdx │ │ │ ├── mailgun-provider.mdx │ │ │ ├── mattermost-provider.mdx │ │ │ ├── mock-provider.mdx │ │ │ ├── monday-provider.mdx │ │ │ ├── mongodb-provider.mdx │ │ │ ├── mysql-provider.mdx │ │ │ ├── netbox-provider.mdx │ │ │ ├── netdata-provider.mdx │ │ │ ├── new-relic-provider.mdx │ │ │ ├── ntfy-provider.mdx │ │ │ ├── ollama-provider.mdx │ │ │ ├── openai-provider.mdx │ │ │ ├── openobserve-provider.mdx │ │ │ ├── opensearchserverless-provider.mdx │ │ │ ├── openshift-provider.mdx │ │ │ ├── opsgenie-provider.mdx │ │ │ ├── pagerduty-provider.mdx │ │ │ ├── pagertree-provider.mdx │ │ │ ├── parseable-provider.mdx │ │ │ ├── pingdom-provider.mdx │ │ │ ├── planner-provider.mdx │ │ │ ├── postgresql-provider.mdx │ │ │ ├── posthog-provider.mdx │ │ │ ├── prometheus-provider.mdx │ │ │ ├── pushover-provider.mdx │ │ │ ├── python-provider.mdx │ │ │ ├── quickchart-provider.mdx │ │ │ ├── redmine-provider.mdx │ │ │ ├── resend-provider.mdx │ │ │ ├── rollbar-provider.mdx │ │ │ ├── s3-provider.mdx │ │ │ ├── sendgrid-provider.mdx │ │ │ ├── sentry-provider.mdx │ │ │ ├── service-now-provider.mdx │ │ │ ├── signalfx-provider.mdx │ │ │ ├── signl4-provider.mdx │ │ │ ├── site24x7-provider.mdx │ │ │ ├── slack-provider.mdx │ │ │ ├── smtp-provider.mdx │ │ │ ├── snowflake-provider.mdx │ │ │ ├── splunk-provider.mdx │ │ │ ├── squadcast-provider.mdx │ │ │ ├── ssh-provider.mdx │ │ │ ├── statuscake-provider.mdx │ │ │ ├── sumologic-provider.mdx │ │ │ ├── teams-provider.mdx │ │ │ ├── telegram-provider.mdx │ │ │ ├── template.mdx │ │ │ ├── thousandeyes-provider.mdx │ │ │ ├── trello-provider.mdx │ │ │ ├── twilio-provider.mdx │ │ │ ├── uptimekuma-provider.mdx │ │ │ ├── victorialogs-provider.mdx │ │ │ ├── victoriametrics-provider.mdx │ │ │ ├── vllm-provider.mdx │ │ │ ├── wazuh-provider.mdx │ │ │ ├── webhook-provider.mdx │ │ │ ├── websocket-provider.mdx │ │ │ ├── youtrack-provider.mdx │ │ │ ├── zabbix-provider.mdx │ │ │ ├── zenduty-provider.mdx │ │ │ ├── zoom-provider.mdx │ │ │ └── zoom_chat-provider.mdx │ │ ├── linked-providers.mdx │ │ ├── overview.md │ │ ├── overview.mdx │ │ └── provider-methods.mdx │ ├── snippets/ │ │ └── providers/ │ │ ├── airflow-snippet-autogenerated.mdx │ │ ├── aks-snippet-autogenerated.mdx │ │ ├── amazonsqs-snippet-autogenerated.mdx │ │ ├── anthropic-snippet-autogenerated.mdx │ │ ├── appdynamics-snippet-autogenerated.mdx │ │ ├── argocd-snippet-autogenerated.mdx │ │ ├── asana-snippet-autogenerated.mdx │ │ ├── auth0-snippet-autogenerated.mdx │ │ ├── axiom-snippet-autogenerated.mdx │ │ ├── azuremonitoring-snippet-autogenerated.mdx │ │ ├── base-snippet-autogenerated.mdx │ │ ├── bash-snippet-autogenerated.mdx │ │ ├── bigquery-snippet-autogenerated.mdx │ │ ├── centreon-snippet-autogenerated.mdx │ │ ├── checkly-snippet-autogenerated.mdx │ │ ├── checkmk-snippet-autogenerated.mdx │ │ ├── cilium-snippet-autogenerated.mdx │ │ ├── clickhouse-snippet-autogenerated.mdx │ │ ├── cloudwatch-snippet-autogenerated.mdx │ │ ├── console-snippet-autogenerated.mdx │ │ ├── coralogix-snippet-autogenerated.mdx │ │ ├── dash0-snippet-autogenerated.mdx │ │ ├── databend-snippet-autogenerated.mdx │ │ ├── datadog-snippet-autogenerated.mdx │ │ ├── deepseek-snippet-autogenerated.mdx │ │ ├── discord-snippet-autogenerated.mdx │ │ ├── dynatrace-snippet-autogenerated.mdx │ │ ├── eks-snippet-autogenerated.mdx │ │ ├── elastic-snippet-autogenerated.mdx │ │ ├── flashduty-snippet-autogenerated.mdx │ │ ├── fluxcd-snippet-autogenerated.mdx │ │ ├── gcpmonitoring-snippet-autogenerated.mdx │ │ ├── gemini-snippet-autogenerated.mdx │ │ ├── github-snippet-autogenerated.mdx │ │ ├── github_workflows-snippet-autogenerated.mdx │ │ ├── gitlab-snippet-autogenerated.mdx │ │ ├── gitlabpipelines-snippet-autogenerated.mdx │ │ ├── gke-snippet-autogenerated.mdx │ │ ├── google_chat-snippet-autogenerated.mdx │ │ ├── grafana-snippet-autogenerated.mdx │ │ ├── grafana_incident-snippet-autogenerated.mdx │ │ ├── grafana_loki-snippet-autogenerated.mdx │ │ ├── grafana_oncall-snippet-autogenerated.mdx │ │ ├── graylog-snippet-autogenerated.mdx │ │ ├── grok-snippet-autogenerated.mdx │ │ ├── http-snippet-autogenerated.mdx │ │ ├── icinga2-snippet-autogenerated.mdx │ │ ├── ilert-snippet-autogenerated.mdx │ │ ├── incidentio-snippet-autogenerated.mdx │ │ ├── incidentmanager-snippet-autogenerated.mdx │ │ ├── jira-snippet-autogenerated.mdx │ │ ├── jiraonprem-snippet-autogenerated.mdx │ │ ├── kafka-snippet-autogenerated.mdx │ │ ├── keep-snippet-autogenerated.mdx │ │ ├── kibana-snippet-autogenerated.mdx │ │ ├── kubernetes-snippet-autogenerated.mdx │ │ ├── libre_nms-snippet-autogenerated.mdx │ │ ├── linear-snippet-autogenerated.mdx │ │ ├── linearb-snippet-autogenerated.mdx │ │ ├── litellm-snippet-autogenerated.mdx │ │ ├── llamacpp-snippet-autogenerated.mdx │ │ ├── mailgun-snippet-autogenerated.mdx │ │ ├── mattermost-snippet-autogenerated.mdx │ │ ├── mock-snippet-autogenerated.mdx │ │ ├── monday-snippet-autogenerated.mdx │ │ ├── mongodb-snippet-autogenerated.mdx │ │ ├── mysql-snippet-autogenerated.mdx │ │ ├── netbox-snippet-autogenerated.mdx │ │ ├── netdata-snippet-autogenerated.mdx │ │ ├── netxms-snippet-autogenerated.mdx │ │ ├── newrelic-snippet-autogenerated.mdx │ │ ├── ntfy-snippet-autogenerated.mdx │ │ ├── ollama-snippet-autogenerated.mdx │ │ ├── openai-snippet-autogenerated.mdx │ │ ├── openobserve-snippet-autogenerated.mdx │ │ ├── opensearchserverless-snippet-autogenerated.mdx │ │ ├── openshift-snippet-autogenerated.mdx │ │ ├── opsgenie-snippet-autogenerated.mdx │ │ ├── pagerduty-snippet-autogenerated.mdx │ │ ├── pagertree-snippet-autogenerated.mdx │ │ ├── parseable-snippet-autogenerated.mdx │ │ ├── pingdom-snippet-autogenerated.mdx │ │ ├── planner-snippet-autogenerated.mdx │ │ ├── postgres-snippet-autogenerated.mdx │ │ ├── posthog-snippet-autogenerated.mdx │ │ ├── prometheus-snippet-autogenerated.mdx │ │ ├── pushover-snippet-autogenerated.mdx │ │ ├── python-snippet-autogenerated.mdx │ │ ├── quickchart-snippet-autogenerated.mdx │ │ ├── redmine-snippet-autogenerated.mdx │ │ ├── resend-snippet-autogenerated.mdx │ │ ├── rollbar-snippet-autogenerated.mdx │ │ ├── s3-snippet-autogenerated.mdx │ │ ├── salesforce-snippet-autogenerated.mdx │ │ ├── sendgrid-snippet-autogenerated.mdx │ │ ├── sentry-snippet-autogenerated.mdx │ │ ├── servicenow-snippet-autogenerated.mdx │ │ ├── signalfx-snippet-autogenerated.mdx │ │ ├── signl4-snippet-autogenerated.mdx │ │ ├── site24x7-snippet-autogenerated.mdx │ │ ├── slack-snippet-autogenerated.mdx │ │ ├── smtp-snippet-autogenerated.mdx │ │ ├── snowflake-snippet-autogenerated.mdx │ │ ├── splunk-snippet-autogenerated.mdx │ │ ├── squadcast-snippet-autogenerated.mdx │ │ ├── ssh-snippet-autogenerated.mdx │ │ ├── statuscake-snippet-autogenerated.mdx │ │ ├── sumologic-snippet-autogenerated.mdx │ │ ├── teams-snippet-autogenerated.mdx │ │ ├── telegram-snippet-autogenerated.mdx │ │ ├── test_fluxcd-snippet-autogenerated.mdx │ │ ├── thousandeyes-snippet-autogenerated.mdx │ │ ├── trello-snippet-autogenerated.mdx │ │ ├── twilio-snippet-autogenerated.mdx │ │ ├── uptimekuma-snippet-autogenerated.mdx │ │ ├── vectordev-snippet-autogenerated.mdx │ │ ├── victorialogs-snippet-autogenerated.mdx │ │ ├── victoriametrics-snippet-autogenerated.mdx │ │ ├── vllm-snippet-autogenerated.mdx │ │ ├── wazuh-snippet-autogenerated.mdx │ │ ├── webhook-snippet-autogenerated.mdx │ │ ├── websocket-snippet-autogenerated.mdx │ │ ├── youtrack-snippet-autogenerated.mdx │ │ ├── zabbix-snippet-autogenerated.mdx │ │ ├── zendesk-snippet-autogenerated.mdx │ │ ├── zenduty-snippet-autogenerated.mdx │ │ ├── zoom-snippet-autogenerated.mdx │ │ └── zoom_chat-snippet-autogenerated.mdx │ └── workflows/ │ ├── examples/ │ │ ├── autosupress.mdx │ │ ├── buisnesshours.mdx │ │ ├── create-servicenow-tickets.mdx │ │ ├── highsev.mdx │ │ └── update-servicenow-tickets.mdx │ ├── overview.mdx │ └── syntax/ │ ├── conditions.mdx │ ├── context.mdx │ ├── enrichment.mdx │ ├── foreach.mdx │ ├── functions.mdx │ ├── permissions.mdx │ ├── providers.mdx │ ├── steps-and-actions.mdx │ └── triggers.mdx ├── ee/ │ ├── LICENSE │ └── identitymanager/ │ ├── __init__.py │ └── identity_managers/ │ ├── __init__.py │ ├── auth0/ │ │ ├── __init__.py │ │ ├── auth0_authverifier.py │ │ ├── auth0_identitymanager.py │ │ └── auth0_utils.py │ ├── azuread/ │ │ ├── __init__.py │ │ ├── azuread_authverifier.py │ │ └── azuread_identitymanager.py │ └── keycloak/ │ ├── __init__.py │ ├── keycloak_authverifier.py │ └── keycloak_identitymanager.py ├── elk/ │ ├── README.md │ ├── docker-compose-elk.yml │ ├── filebeat.yml │ └── logstash.conf ├── examples/ │ ├── providers/ │ │ ├── airflow-prod.yaml │ │ └── telegram-bot.yaml │ └── workflows/ │ ├── aks_basic.yml │ ├── autosupress.yml │ ├── bash_example.yml │ ├── bigquery.yml │ ├── blogpost.yml │ ├── businesshours.yml │ ├── change.yml │ ├── clickhouse_multiquery.yml │ ├── complex-conditions-cel.yml │ ├── conditionally_run_if_ai_says_so.yaml │ ├── console_example.yml │ ├── consts_and_dict.yml │ ├── consts_and_vars.yml │ ├── create-issue-youtrack.yaml │ ├── create-new-incident-grafana-incident.yaml │ ├── create-task-in-asana.yaml │ ├── create_alert_from_vm_metric.yml │ ├── create_alert_in_keep.yml │ ├── create_alerts_from_elastic.yml │ ├── create_alerts_from_mysql.yml │ ├── create_jira_ticket_upon_alerts.yml │ ├── create_multi_alert_from_vm_metric.yml │ ├── create_service_now_ticket_upon_alerts.yml │ ├── datadog-log-monitor.yml │ ├── db_disk_space_monitor.yml │ ├── discord_basic.yml │ ├── disk_grown_defects_rule.yml │ ├── eks_advanced.yml │ ├── eks_basic.yml │ ├── elastic_basic.yml │ ├── elastic_enrich_example.yml │ ├── enrich_using_structured_output_from_deepseek.yaml │ ├── enrich_using_structured_output_from_openai.yaml │ ├── enrich_using_structured_output_from_vllm_qwen.yaml │ ├── failed-to-login-workflow.yml │ ├── flashduty_example.yml │ ├── fluxcd_example.yml │ ├── gcp_logging_open_ai.yaml │ ├── gke.yml │ ├── http_enrich.yml │ ├── ifelse.yml │ ├── ilert-incident-upon-alert.yaml │ ├── incident-enrich.yaml │ ├── incident-tier-escalation.yml │ ├── incident_example.yml │ ├── inputs_example.yml │ ├── jira-create-ticket-on-alert.yml │ ├── jira-transition-on-resolved.yml │ ├── jira_on_prem.yml │ ├── monday_create_pulse.yml │ ├── multi-condition-cel.yml │ ├── mustache-paths-example.yml │ ├── new-auth0-users-monitor.yml │ ├── new_github_stars.yml │ ├── notify-new-trello-card.yml │ ├── ntfy_basic.yml │ ├── opensearchserverless_basic.yml │ ├── openshift_basic.yml │ ├── openshift_monitoring_and_remediation.yml │ ├── openshift_pod_restart.yml │ ├── opsgenie-close-alert.yml │ ├── opsgenie-create-alert-cel.yml │ ├── opsgenie-create-alert.yml │ ├── opsgenie_open_alerts.yml │ ├── pagerduty.yml │ ├── pattern-matching-cel.yml │ ├── permissions_example.yml │ ├── planner_basic.yml │ ├── posthog_example.yml │ ├── query-databend.yml │ ├── query_clickhouse.yml │ ├── query_grafana_loki.yaml │ ├── query_mongodb.yaml │ ├── query_victorialogs.yaml │ ├── query_victoriametrics.yml │ ├── raw_sql_query_datetime.yml │ ├── resolve_old_alerts.yml │ ├── retrieve_cloudwatch_logs.yaml │ ├── run-github-workflow.yaml │ ├── send-message-telegram-with-htmlmd.yaml │ ├── send_slack_message_on_failure.yaml │ ├── send_smtp_email.yml │ ├── send_smtp_html_email.yml │ ├── sendgrid_basic.yml │ ├── service-error-rate-monitor-datadog.yml │ ├── severity_changed.yml │ ├── signl4-alerting-workflow.yaml │ ├── simple_http_request_ntfy.yml │ ├── slack-message-reaction.yml │ ├── slack-workflow-trigger.yml │ ├── slack_basic.yml │ ├── slack_basic_cel.yml │ ├── slack_basic_interval.yml │ ├── slack_message_update.yml │ ├── squadcast_example.yml │ ├── teams-adaptive-card-notifier.yaml │ ├── teams-adaptive-cards-with-mentions.yaml │ ├── telegram_advanced.yml │ ├── telegram_basic.yml │ ├── test_jira_create_with_custom_fields.yml │ ├── test_jira_custom_fields_fix.yml │ ├── update-incident-grafana-incident.yaml │ ├── update-task-in-asana.yaml │ ├── update_jira_ticket.yml │ ├── update_service_now_tickets_status.yml │ ├── update_workflows_from_http.yml │ ├── update_workflows_from_s3.yml │ ├── webhook_example.yml │ ├── webhook_example_foreach.yml │ ├── workflow_only_first_time_example.yml │ ├── workflow_start_example.yml │ ├── zoom_chat_example.yml │ └── zoom_example.yml ├── keep/ │ ├── actions/ │ │ ├── __init__.py │ │ ├── actions_exception.py │ │ └── actions_factory.py │ ├── alembic.ini │ ├── api/ │ │ ├── __init__.py │ │ ├── alert_deduplicator/ │ │ │ ├── __init__.py │ │ │ ├── alert_deduplicator.py │ │ │ └── deduplication_rules_provisioning.py │ │ ├── api.py │ │ ├── arq_pool.py │ │ ├── arq_worker.py │ │ ├── arq_worker_debug_patch.py │ │ ├── arq_worker_gunicorn.py │ │ ├── bl/ │ │ │ ├── ai_suggestion_bl.py │ │ │ ├── dismissal_expiry_bl.py │ │ │ ├── enrichments_bl.py │ │ │ ├── incident_reports.py │ │ │ ├── incidents_bl.py │ │ │ └── maintenance_windows_bl.py │ │ ├── config.py │ │ ├── consts.py │ │ ├── core/ │ │ │ ├── alerts.py │ │ │ ├── cel_to_sql/ │ │ │ │ ├── ast_nodes.py │ │ │ │ ├── cel_ast_converter.py │ │ │ │ ├── properties_mapper.py │ │ │ │ ├── properties_metadata.py │ │ │ │ └── sql_providers/ │ │ │ │ ├── base.py │ │ │ │ ├── get_cel_to_sql_provider_for_dialect.py │ │ │ │ ├── mysql.py │ │ │ │ ├── postgresql.py │ │ │ │ └── sqlite.py │ │ │ ├── config.py │ │ │ ├── db.py │ │ │ ├── db_on_start.py │ │ │ ├── db_utils.py │ │ │ ├── demo_mode.py │ │ │ ├── dependencies.py │ │ │ ├── elastic.py │ │ │ ├── facets.py │ │ │ ├── facets_query_builder/ │ │ │ │ ├── base_facets_query_builder.py │ │ │ │ ├── get_facets_query_builder.py │ │ │ │ ├── mysql.py │ │ │ │ ├── postgresql.py │ │ │ │ ├── sqlite.py │ │ │ │ └── utils.py │ │ │ ├── incidents.py │ │ │ ├── limiter.py │ │ │ ├── metrics.py │ │ │ ├── report_uptime.py │ │ │ ├── tenant_configuration.py │ │ │ ├── tracer.py │ │ │ └── workflows.py │ │ ├── custom_worker.py │ │ ├── logging.py │ │ ├── middlewares.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── action.py │ │ │ ├── action_type.py │ │ │ ├── ai_external.py │ │ │ ├── alert.py │ │ │ ├── alert_audit.py │ │ │ ├── db/ │ │ │ │ ├── action.py │ │ │ │ ├── ai_external.py │ │ │ │ ├── ai_suggestion.py │ │ │ │ ├── alert.py │ │ │ │ ├── dashboard.py │ │ │ │ ├── enrichment_event.py │ │ │ │ ├── extraction.py │ │ │ │ ├── facet.py │ │ │ │ ├── helpers.py │ │ │ │ ├── incident.py │ │ │ │ ├── maintenance_window.py │ │ │ │ ├── mapping.py │ │ │ │ ├── migrations/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── env.py │ │ │ │ │ ├── script.py.mako │ │ │ │ │ └── versions/ │ │ │ │ │ ├── 2024-07-11-17-10_54c1252b2c8a.py │ │ │ │ │ ├── 2024-07-15-15-10_c37ec8f6db3e.py │ │ │ │ │ ├── 2024-07-16-12-16_37019ca3eb2e.py │ │ │ │ │ ├── 2024-07-17-16-46_dcbd2873dcfd.py │ │ │ │ │ ├── 2024-07-24-13-39_9ba0aeecd4d0.py │ │ │ │ │ ├── 2024-07-25-17-13_67f1efb93c99.py │ │ │ │ │ ├── 2024-07-28-16-24_8e5942040de6.py │ │ │ │ │ ├── 2024-07-29-12-51_c91b348b94f2.py │ │ │ │ │ ├── 2024-07-29-18-10_92f4f93f2140.py │ │ │ │ │ ├── 2024-08-05-13-09_4147d9e706c0.py │ │ │ │ │ ├── 2024-08-11-17-38_9453855f3ba0.py │ │ │ │ │ ├── 2024-08-13-19-22_0832e0d9889a.py │ │ │ │ │ ├── 2024-08-14-18-30_87594ea6d308.py │ │ │ │ │ ├── 2024-08-25-16-40_4ef2c767664c.py │ │ │ │ │ ├── 2024-08-25-16-48_1c650a429672.py │ │ │ │ │ ├── 2024-08-30-09-34_7ed12220a0d3.py │ │ │ │ │ ├── 2024-09-01-14-04_94886bc59c11.py │ │ │ │ │ ├── 2024-09-02-12-07_70671c95028e.py │ │ │ │ │ ├── 2024-09-03-10-08_49e7c02579db.py │ │ │ │ │ ├── 2024-09-03-16-24_1a5eb7069f9a.py │ │ │ │ │ ├── 2024-09-04-13-09_e6653be70b62.py │ │ │ │ │ ├── 2024-09-08-17-51_1aacee84447e.py │ │ │ │ │ ├── 2024-09-13-10-48_938b1aa62d5c.py │ │ │ │ │ ├── 2024-09-17-23-30_c5443d9deb0f.py │ │ │ │ │ ├── 2024-09-18-02-05_772790c2e50a.py │ │ │ │ │ ├── 2024-09-18-14-08_5d7ae55efc6a.py │ │ │ │ │ ├── 2024-09-19-15-26_493f217af6b6.py │ │ │ │ │ ├── 2024-09-22-14-16_01ebe17218c0.py │ │ │ │ │ ├── 2024-10-05-18-37_017d759805d9.py │ │ │ │ │ ├── 2024-10-08-10-47_bf756df80e9d.py │ │ │ │ │ ├── 2024-10-14-08-34_83c1020be97d.py │ │ │ │ │ ├── 2024-10-22-10-38_8438f041ee0e.py │ │ │ │ │ ├── 2024-10-23-15-21_89b4d3905d26.py │ │ │ │ │ ├── 2024-10-26-17-03_3f056d747d9e.py │ │ │ │ │ ├── 2024-10-29-18-37_991b30bcf0b9.py │ │ │ │ │ ├── 2024-10-31-18-01_273b29f368b7.py │ │ │ │ │ ├── 2024-11-03-10-49_ef0b5b0df41c.py │ │ │ │ │ ├── 2024-11-08-20-58_895fe80117aa.py │ │ │ │ │ ├── 2024-11-10-13-06_620b6c048091.py │ │ │ │ │ ├── 2024-11-20-15-50_192157fd5788.py │ │ │ │ │ ├── 2024-12-01-16-40_3ad5308e7200.py │ │ │ │ │ ├── 2024-12-02-13-36_bdae8684d0b4.py │ │ │ │ │ ├── 2024-12-02-20-42_c6e5594c99f8.py │ │ │ │ │ ├── 2024-12-08-16-24_55cc64020f6d.py │ │ │ │ │ ├── 2024-12-10-19-11_7297ae99cd21.py │ │ │ │ │ ├── 2024-12-17-12-48_3d20d954e058.py │ │ │ │ │ ├── 2024-12-23-17-22_0c5e002094a9.py │ │ │ │ │ ├── 2024-12-23-18-49_4f8c4b185d5b.py │ │ │ │ │ ├── 2025-01-01-09-59_dcb7f88a04da.py │ │ │ │ │ ├── 2025-01-01-15-14_1c117f1accff.py │ │ │ │ │ ├── 2025-01-08-19-20_8a4ec08f2d6b.py │ │ │ │ │ ├── 2025-01-14-18-41_416155f25854.py │ │ │ │ │ ├── 2025-01-16-14-00_e3f33e571c3c.py │ │ │ │ │ ├── 2025-01-19-10-44_d359baaf0836.py │ │ │ │ │ ├── 2025-01-26-15-25_8176d7153747.py │ │ │ │ │ ├── 2025-02-05-15-46_e343054ae740.py │ │ │ │ │ ├── 2025-02-10-12-05_908d95386e29.py │ │ │ │ │ ├── 2025-02-11-12-59_21d314490e6a.py │ │ │ │ │ ├── 2025-02-13-09-54_cfe08cc46950.py │ │ │ │ │ ├── 2025-02-13-17-27_90e2d22edc6a.py │ │ │ │ │ ├── 2025-02-18-18-09_876a424d8f06.py │ │ │ │ │ ├── 2025-02-19-15-32_35ebba262eb0.py │ │ │ │ │ ├── 2025-02-20-23-15_ea25d9402518.py │ │ │ │ │ ├── 2025-02-25-14-20_a82154690f35.py │ │ │ │ │ ├── 2025-03-05-15-55_0b80bda47ee2.py │ │ │ │ │ ├── 2025-03-11-16-54_16309df224d1.py │ │ │ │ │ ├── 2025-03-12-13-22_ab333148350e.py │ │ │ │ │ ├── 2025-03-12-14-36_9f11356d8ed9.py │ │ │ │ │ ├── 2025-03-12-14-46_ca74b4a04371.py │ │ │ │ │ ├── 2025-03-13-14-08_c0e70149c9ec.py │ │ │ │ │ ├── 2025-03-14-15-52_f3ecc7411f38.py │ │ │ │ │ ├── 2025-03-16-11-08_aff0128aa8f1.py │ │ │ │ │ ├── 2025-03-18-14-54_971abbbf0a2c.py │ │ │ │ │ ├── 2025-03-20-09-37_c0880e315ebe.py │ │ │ │ │ ├── 2025-03-24-14-26_2a6132b443ab.py │ │ │ │ │ ├── 2025-03-30-10-53_e663a98b1142.py │ │ │ │ │ ├── 2025-04-03-12-09_bdf252fbc1be.py │ │ │ │ │ ├── 2025-04-04-21-48_0dafe96ea97f.py │ │ │ │ │ ├── 2025-04-06-12-18_78777e6b12d3.py │ │ │ │ │ ├── 2025-04-08-10-43_59991b568c7d.py │ │ │ │ │ ├── 2025-04-15-15-30_885ff6b12fed.py │ │ │ │ │ ├── 2025-04-21-10-18_819927b7ccfa.py │ │ │ │ │ ├── 2025-05-04-15-02_eddcb77eb6f3.py │ │ │ │ │ ├── 2025-05-06-13-09_7b687c555318.py │ │ │ │ │ ├── 2025-05-12-17-49_c2f78c69e9cf.py │ │ │ │ │ ├── 2025-05-15-00-34_fcef2c58b21c.py │ │ │ │ │ ├── 2025-05-15-14-18_bedb5f07417b.py │ │ │ │ │ ├── 2025-05-16-14-33_aa167915c4d6.py │ │ │ │ │ ├── 2025-05-19-18-48_90e3eababbf0.py │ │ │ │ │ ├── 2025-05-19-20-54_combined_commentmention.py │ │ │ │ │ ├── 2025-06-04-10-43_7c14f776ef6b.py │ │ │ │ │ └── 2025-06-18-17-17_9dd1be4539e0.py │ │ │ │ ├── preset.py │ │ │ │ ├── provider.py │ │ │ │ ├── provider_image.py │ │ │ │ ├── rule.py │ │ │ │ ├── secret.py │ │ │ │ ├── statistics.py │ │ │ │ ├── system.py │ │ │ │ ├── tenant.py │ │ │ │ ├── topology.py │ │ │ │ ├── user.py │ │ │ │ └── workflow.py │ │ │ ├── facet.py │ │ │ ├── incident.py │ │ │ ├── provider.py │ │ │ ├── query.py │ │ │ ├── search_alert.py │ │ │ ├── severity_base.py │ │ │ ├── smtp.py │ │ │ ├── time_stamp.py │ │ │ ├── user.py │ │ │ ├── webhook.py │ │ │ └── workflow.py │ │ ├── observability.py │ │ ├── redis_settings.py │ │ ├── routes/ │ │ │ ├── __init__.py │ │ │ ├── actions.py │ │ │ ├── ai.py │ │ │ ├── alerts.py │ │ │ ├── auth/ │ │ │ │ ├── __init__.py │ │ │ │ ├── groups.py │ │ │ │ ├── permissions.py │ │ │ │ ├── roles.py │ │ │ │ └── users.py │ │ │ ├── cel.py │ │ │ ├── dashboard.py │ │ │ ├── deduplications.py │ │ │ ├── extraction.py │ │ │ ├── facets.py │ │ │ ├── healthcheck.py │ │ │ ├── incidents.py │ │ │ ├── maintenance.py │ │ │ ├── mapping.py │ │ │ ├── metrics.py │ │ │ ├── preset.py │ │ │ ├── provider_images.py │ │ │ ├── providers.py │ │ │ ├── pusher.py │ │ │ ├── rules.py │ │ │ ├── settings.py │ │ │ ├── status.py │ │ │ ├── tags.py │ │ │ ├── topology.py │ │ │ ├── whoami.py │ │ │ └── workflows.py │ │ ├── tasks/ │ │ │ ├── __init__.py │ │ │ ├── notification_cache.py │ │ │ ├── process_event_task.py │ │ │ ├── process_incident_task.py │ │ │ ├── process_topology_task.py │ │ │ └── process_watcher_task.py │ │ └── utils/ │ │ ├── alert_utils.py │ │ ├── cel_utils.py │ │ ├── email_utils.py │ │ ├── enrichment_helpers.py │ │ ├── import_ee.py │ │ ├── pagination.py │ │ ├── pluralize.py │ │ ├── tenant_utils.py │ │ └── time_stamp_helpers.py │ ├── cli/ │ │ ├── cli.py │ │ └── click_extensions.py │ ├── conditions/ │ │ ├── __init__.py │ │ ├── assert_condition.py │ │ ├── base_condition.py │ │ ├── condition_factory.py │ │ ├── stddev_condition.py │ │ └── threshold_condition.py │ ├── contextmanager/ │ │ ├── __init__.py │ │ └── contextmanager.py │ ├── entrypoint.sh │ ├── event_subscriber/ │ │ ├── __init__.py │ │ └── event_subscriber.py │ ├── exceptions/ │ │ ├── __init__.py │ │ ├── action_error.py │ │ ├── provider_config_exception.py │ │ ├── provider_connection_failed.py │ │ └── provider_exception.py │ ├── functions/ │ │ ├── __init__.py │ │ └── cyaml.py │ ├── identitymanager/ │ │ ├── authenticatedentity.py │ │ ├── authverifierbase.py │ │ ├── identity_managers/ │ │ │ ├── __init__.py │ │ │ ├── db/ │ │ │ │ ├── __init__.py │ │ │ │ ├── db_authverifier.py │ │ │ │ └── db_identitymanager.py │ │ │ ├── noauth/ │ │ │ │ ├── __init__.py │ │ │ │ ├── noauth_authverifier.py │ │ │ │ └── noauth_identitymanager.py │ │ │ ├── oauth2proxy/ │ │ │ │ ├── __init__.py │ │ │ │ ├── oauth2proxy_authverifier.py │ │ │ │ └── oauth2proxy_identitymanager.py │ │ │ ├── okta/ │ │ │ │ ├── __init__.py │ │ │ │ ├── okta_authverifier.py │ │ │ │ └── okta_identitymanager.py │ │ │ └── onelogin/ │ │ │ ├── __init__.py │ │ │ ├── onelogin_authverifier.py │ │ │ └── onelogin_identitymanager.py │ │ ├── identitymanager.py │ │ ├── identitymanagerfactory.py │ │ └── rbac.py │ ├── iohandler/ │ │ └── iohandler.py │ ├── parser/ │ │ └── parser.py │ ├── providers/ │ │ ├── __init__.py │ │ ├── airflow_provider/ │ │ │ ├── __init__.py │ │ │ └── airflow_provider.py │ │ ├── aks_provider/ │ │ │ └── aks_provider.py │ │ ├── amazonsqs_provider/ │ │ │ ├── __init__.py │ │ │ └── amazonsqs_provider.py │ │ ├── anthropic_provider/ │ │ │ ├── __init__.py │ │ │ └── anthropic_provider.py │ │ ├── appdynamics_provider/ │ │ │ ├── __init__.py │ │ │ ├── appdynamics_provider.py │ │ │ └── httpactiontemplate.json │ │ ├── argocd_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── applicationset.yaml │ │ │ └── argocd_provider.py │ │ ├── asana_provider/ │ │ │ ├── __init__.py │ │ │ └── asana_provider.py │ │ ├── auth0_provider/ │ │ │ ├── __init__.py │ │ │ └── auth0_provider.py │ │ ├── axiom_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── axiom_provider.py │ │ ├── azuremonitoring_provider/ │ │ │ ├── __init__.py │ │ │ └── azuremonitoring_provider.py │ │ ├── base/ │ │ │ ├── __init__.py │ │ │ ├── base_provider.py │ │ │ └── provider_exceptions.py │ │ ├── bash_provider/ │ │ │ ├── __init__.py │ │ │ └── bash_provider.py │ │ ├── bigquery_provider/ │ │ │ ├── __init__.py │ │ │ └── bigquery_provider.py │ │ ├── centreon_provider/ │ │ │ ├── __init__.py │ │ │ └── centreon_provider.py │ │ ├── checkly_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── checkly_provider.py │ │ ├── checkmk_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ ├── checkmk_provider.py │ │ │ └── webhook-keep.py │ │ ├── cilium_provider/ │ │ │ ├── __init__.py │ │ │ ├── cilium_provider.py │ │ │ ├── generate_protobuf.py │ │ │ ├── grpc/ │ │ │ │ ├── __init__.py │ │ │ │ ├── flow/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── flow.proto │ │ │ │ │ ├── flow_pb2.py │ │ │ │ │ └── flow_pb2_grpc.py │ │ │ │ ├── google/ │ │ │ │ │ └── protobuf/ │ │ │ │ │ ├── duration.proto │ │ │ │ │ ├── timestamp.proto │ │ │ │ │ └── wrappers.proto │ │ │ │ ├── observer.proto │ │ │ │ ├── observer_pb2.py │ │ │ │ ├── observer_pb2_grpc.py │ │ │ │ └── relay/ │ │ │ │ ├── __init__.py │ │ │ │ ├── relay.proto │ │ │ │ ├── relay_pb2.py │ │ │ │ └── relay_pb2_grpc.py │ │ │ └── runtime_version.py │ │ ├── clickhouse_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── clickhouse-secure/ │ │ │ │ ├── certs/ │ │ │ │ │ ├── server.crt │ │ │ │ │ └── server.key │ │ │ │ ├── config.xml │ │ │ │ ├── docker-compose.yml │ │ │ │ └── users.xml │ │ │ └── clickhouse_provider.py │ │ ├── cloudwatch_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── cloudwatch_provider.py │ │ ├── console_provider/ │ │ │ ├── __init__.py │ │ │ └── console_provider.py │ │ ├── coralogix_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── coralogix_provider.py │ │ ├── dash0_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── dash0_provider.py │ │ ├── databend_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ └── databend_provider.py │ │ ├── datadog_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ ├── datadog_alert_format_description.py │ │ │ ├── datadog_provider.py │ │ │ └── topology_mock.py │ │ ├── deepseek_provider/ │ │ │ ├── __init__.py │ │ │ └── deepseek_provider.py │ │ ├── discord_provider/ │ │ │ ├── __init__.py │ │ │ └── discord_provider.py │ │ ├── dynatrace_provider/ │ │ │ ├── __init__.py │ │ │ └── dynatrace_provider.py │ │ ├── eks_provider/ │ │ │ └── eks_provider.py │ │ ├── elastic_provider/ │ │ │ ├── __init__.py │ │ │ └── elastic_provider.py │ │ ├── flashduty_provider/ │ │ │ ├── __init__.py │ │ │ └── flashduty_provider.py │ │ ├── fluxcd_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── example.yaml │ │ │ ├── fluxcd_provider.py │ │ │ ├── requirements.txt │ │ │ ├── setup.py │ │ │ └── test_fluxcd_provider.py │ │ ├── gcpmonitoring_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── gcpmonitoring_provider.py │ │ ├── gemini_provider/ │ │ │ ├── __init__.py │ │ │ └── gemini_provider.py │ │ ├── github_provider/ │ │ │ ├── __init__.py │ │ │ └── github_provider.py │ │ ├── github_workflows_provider/ │ │ │ ├── __init__.py │ │ │ └── github_workflows_provider.py │ │ ├── gitlab_provider/ │ │ │ ├── __init__.py │ │ │ └── gitlab_provider.py │ │ ├── gitlabpipelines_provider/ │ │ │ ├── __init__.py │ │ │ └── gitlabpipelines_provider.py │ │ ├── gke_provider/ │ │ │ ├── __init__.py │ │ │ └── gke_provider.py │ │ ├── google_chat_provider/ │ │ │ ├── __init__.py │ │ │ └── google_chat_provider.py │ │ ├── grafana_incident_provider/ │ │ │ ├── __init__.py │ │ │ └── grafana_incident_provider.py │ │ ├── grafana_loki_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── docker-compose.auth.yml │ │ │ └── grafana_loki_provider.py │ │ ├── grafana_oncall_provider/ │ │ │ ├── __init__.py │ │ │ └── grafana_oncall_provider.py │ │ ├── grafana_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ ├── docker-compose.yml │ │ │ ├── grafana/ │ │ │ │ ├── grafana.ini │ │ │ │ └── provisioning/ │ │ │ │ ├── access_control/ │ │ │ │ │ └── custom_roles.yml │ │ │ │ ├── alerting/ │ │ │ │ │ ├── alerts.yml │ │ │ │ │ ├── contact_points.yml │ │ │ │ │ └── notification_policies.yml │ │ │ │ ├── dashboards/ │ │ │ │ │ ├── dashboards.yml │ │ │ │ │ └── system.json │ │ │ │ ├── datasources/ │ │ │ │ │ └── datasource.yml │ │ │ │ ├── notifiers/ │ │ │ │ │ └── email.yml │ │ │ │ └── service_accounts/ │ │ │ │ ├── service_accounts.yml │ │ │ │ └── tokens.yml │ │ │ ├── grafana_alert_format_description.py │ │ │ ├── grafana_provider.py │ │ │ └── prometheus/ │ │ │ └── prometheus.yml │ │ ├── graylog_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ ├── docker-compose-v4.yml │ │ │ ├── docker-compose.yml │ │ │ └── graylog_provider.py │ │ ├── grok_provider/ │ │ │ ├── __init__.py │ │ │ └── grok_provider.py │ │ ├── http_provider/ │ │ │ ├── __init__.py │ │ │ └── http_provider.py │ │ ├── icinga2_provider/ │ │ │ └── icinga2_provider.py │ │ ├── ilert_provider/ │ │ │ ├── __init__.py │ │ │ └── ilert_provider.py │ │ ├── incidentio_provider/ │ │ │ ├── __init__.py │ │ │ └── incidentio_provider.py │ │ ├── incidentmanager_provider/ │ │ │ ├── __init__.py │ │ │ └── incidentmanager_provider.py │ │ ├── jira_provider/ │ │ │ ├── __init__.py │ │ │ └── jira_provider.py │ │ ├── jiraonprem_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ └── jiraonprem_provider.py │ │ ├── kafka_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── docker-compose-no-auth.yml │ │ │ ├── docker-compose.yml │ │ │ ├── kafka_provider.py │ │ │ └── kafka_server_jaas.conf │ │ ├── keep_provider/ │ │ │ ├── __init__.py │ │ │ └── keep_provider.py │ │ ├── kibana_provider/ │ │ │ ├── __init__.py │ │ │ └── kibana_provider.py │ │ ├── kubernetes_provider/ │ │ │ ├── __init__.py │ │ │ └── kubernetes_provider.py │ │ ├── libre_nms_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── libre_nms_provider.py │ │ ├── linear_provider/ │ │ │ ├── __init__.py │ │ │ └── linear_provider.py │ │ ├── linearb_provider/ │ │ │ ├── __init__.py │ │ │ └── linearb_provider.py │ │ ├── litellm_provider/ │ │ │ ├── __init__.py │ │ │ └── litellm_provider.py │ │ ├── llamacpp_provider/ │ │ │ ├── __init__.py │ │ │ └── llamacpp_provider.py │ │ ├── mailgun_provider/ │ │ │ ├── __init__.py │ │ │ └── mailgun_provider.py │ │ ├── mattermost_provider/ │ │ │ ├── __init__.py │ │ │ └── mattermost_provider.py │ │ ├── microsoft-planner-provider/ │ │ │ ├── __init__.py │ │ │ └── microsoft-planner-provider.py │ │ ├── mock_provider/ │ │ │ ├── __init__.py │ │ │ └── mock_provider.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── provider_config.py │ │ │ └── provider_method.py │ │ ├── monday_provider/ │ │ │ ├── __init__.py │ │ │ └── monday_provider.py │ │ ├── mongodb_provider/ │ │ │ ├── __init__.py │ │ │ └── mongodb_provider.py │ │ ├── mysql_provider/ │ │ │ ├── __init__.py │ │ │ └── mysql_provider.py │ │ ├── netbox_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── netbox_provider.py │ │ ├── netdata_provider/ │ │ │ ├── __init__.py │ │ │ └── netdata_provider.py │ │ ├── netxms_provider/ │ │ │ ├── __init__.py │ │ │ └── netxms_provider.py │ │ ├── newrelic_provider/ │ │ │ ├── __init__.py │ │ │ └── newrelic_provider.py │ │ ├── ntfy_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── docker-compose.yml │ │ │ ├── ntfy_provider.py │ │ │ └── server.yml │ │ ├── ollama_provider/ │ │ │ ├── __init__.py │ │ │ └── ollama_provider.py │ │ ├── openai_provider/ │ │ │ ├── __init__.py │ │ │ └── openai_provider.py │ │ ├── openobserve_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerttemplate.json │ │ │ └── openobserve_provider.py │ │ ├── opensearchserverless_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ └── opensearchserverless_provider.py │ │ ├── openshift_provider/ │ │ │ ├── __init__.py │ │ │ └── openshift_provider.py │ │ ├── opsgenie_provider/ │ │ │ ├── __init__.py │ │ │ └── opsgenie_provider.py │ │ ├── pagerduty_provider/ │ │ │ ├── __init__.py │ │ │ └── pagerduty_provider.py │ │ ├── pagertree_provider/ │ │ │ ├── __init__.py │ │ │ └── pagertree_provider.py │ │ ├── parseable_provider/ │ │ │ ├── __init__.py │ │ │ └── parseable_provider.py │ │ ├── pingdom_provider/ │ │ │ ├── __init__.py │ │ │ └── pingdom_provider.py │ │ ├── planner_provider/ │ │ │ ├── __init__.py │ │ │ └── planner_provider.py │ │ ├── postgres_provider/ │ │ │ ├── __init__.py │ │ │ └── postgres_provider.py │ │ ├── posthog_provider/ │ │ │ ├── __init__.py │ │ │ └── posthog_provider.py │ │ ├── prometheus_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── prometheus_provider.py │ │ ├── providers_factory.py │ │ ├── providers_service.py │ │ ├── pushover_provider/ │ │ │ ├── __init__.py │ │ │ └── pushover_provider.py │ │ ├── python_provider/ │ │ │ ├── __init__.py │ │ │ └── python_provider.py │ │ ├── quickchart_provider/ │ │ │ ├── __init__.py │ │ │ └── quickchart_provider.py │ │ ├── redmine_provider/ │ │ │ ├── __init__.py │ │ │ └── redmine_provider.py │ │ ├── resend_provider/ │ │ │ ├── __init__.py │ │ │ └── resend_provider.py │ │ ├── rollbar_provider/ │ │ │ └── rollbar_provider.py │ │ ├── s3_provider/ │ │ │ ├── __init__.py │ │ │ └── s3_provider.py │ │ ├── salesforce_provider/ │ │ │ ├── __init__.py │ │ │ └── salesforce_provider.py │ │ ├── sendgrid_provider/ │ │ │ ├── __init__.py │ │ │ └── sendgrid_provider.py │ │ ├── sentry_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── sentry_provider.py │ │ ├── servicenow_provider/ │ │ │ ├── .gitignore │ │ │ ├── __init__.py │ │ │ └── servicenow_provider.py │ │ ├── signalfx_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── signalfx_provider.py │ │ ├── signl4_provider/ │ │ │ ├── __init__.py │ │ │ └── signl4_provider.py │ │ ├── site24x7_provider/ │ │ │ ├── __init__.py │ │ │ └── site24x7_provider.py │ │ ├── slack_provider/ │ │ │ ├── __init__.py │ │ │ └── slack_provider.py │ │ ├── smtp_provider/ │ │ │ ├── __init__.py │ │ │ └── smtp_provider.py │ │ ├── snowflake_provider/ │ │ │ ├── __init__.py │ │ │ └── snowflake_provider.py │ │ ├── splunk_provider/ │ │ │ ├── __init__.py │ │ │ └── splunk_provider.py │ │ ├── squadcast_provider/ │ │ │ ├── __init__.py │ │ │ └── squadcast_provider.py │ │ ├── ssh_provider/ │ │ │ ├── __init__.py │ │ │ └── ssh_provider.py │ │ ├── statuscake_provider/ │ │ │ ├── __init__.py │ │ │ └── statuscake_provider.py │ │ ├── sumologic_provider/ │ │ │ ├── __init__.py │ │ │ ├── connection_template.json │ │ │ └── sumologic_provider.py │ │ ├── teams_provider/ │ │ │ ├── __init__.py │ │ │ └── teams_provider.py │ │ ├── telegram_provider/ │ │ │ ├── __init__.py │ │ │ └── telegram_provider.py │ │ ├── thousandeyes_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ └── thousandeyes_provider.py │ │ ├── trello_provider/ │ │ │ ├── __init__.py │ │ │ └── trello_provider.py │ │ ├── twilio_provider/ │ │ │ └── twilio_provider.py │ │ ├── uptimekuma_provider/ │ │ │ ├── __init__.py │ │ │ └── uptimekuma_provider.py │ │ ├── vectordev_provider/ │ │ │ ├── __init__.py │ │ │ └── vectordev_provider.py │ │ ├── victorialogs_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ └── victorialogs_provider.py │ │ ├── victoriametrics_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ └── victoriametrics_provider.py │ │ ├── vllm_provider/ │ │ │ ├── __init__.py │ │ │ └── vllm_provider.py │ │ ├── wazuh_provider/ │ │ │ ├── __init__.py │ │ │ ├── alerts_mock.py │ │ │ ├── custom-keep │ │ │ ├── custom-keep.py │ │ │ └── wazuh_provider.py │ │ ├── webhook_provider/ │ │ │ ├── __init__.py │ │ │ └── webhook_provider.py │ │ ├── websocket_provider/ │ │ │ ├── __init__.py │ │ │ └── websocket_provider.py │ │ ├── youtrack_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ └── youtrack_provider.py │ │ ├── zabbix_provider/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── zabbix_provider.py │ │ │ └── zabbix_provider_script.js │ │ ├── zendesk_provider/ │ │ │ ├── __init__.py │ │ │ └── zendesk_provider.py │ │ ├── zenduty_provider/ │ │ │ ├── __init__.py │ │ │ └── zenduty_provider.py │ │ ├── zoom_chat_provider/ │ │ │ ├── __init__.py │ │ │ └── zoom_chat_provider.py │ │ └── zoom_provider/ │ │ ├── __init__.py │ │ └── zoom_provider.py │ ├── rulesengine/ │ │ ├── __init__.py │ │ └── rulesengine.py │ ├── searchengine/ │ │ └── searchengine.py │ ├── secretmanager/ │ │ ├── __init__.py │ │ ├── awssecretmanager.py │ │ ├── dbsecretmanager.py │ │ ├── filesecretmanager.py │ │ ├── gcpsecretmanager.py │ │ ├── kubernetessecretmanager.py │ │ ├── secretmanager.py │ │ ├── secretmanagerfactory.py │ │ └── vaultsecretmanager.py │ ├── server_jobs_bg.py │ ├── step/ │ │ ├── __init__.py │ │ ├── step.py │ │ └── step_provider_parameter.py │ ├── throttles/ │ │ ├── base_throttle.py │ │ ├── one_until_resolved_throttle.py │ │ └── throttle_factory.py │ ├── topologies/ │ │ ├── topologies_service.py │ │ └── topology_processor.py │ ├── validation/ │ │ ├── __init__.py │ │ └── fields.py │ └── workflowmanager/ │ ├── __init__.py │ ├── workflow.py │ ├── workflowmanager.py │ ├── workflowscheduler.py │ └── workflowstore.py ├── keep-ui/ │ ├── .dockerignore │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── .prettierrc │ ├── README.md │ ├── __mocks__/ │ │ ├── @monaco-editor/ │ │ │ └── react.js │ │ └── monaco-editor.js │ ├── app/ │ │ ├── (health)/ │ │ │ ├── health/ │ │ │ │ ├── check.tsx │ │ │ │ ├── modal.tsx │ │ │ │ └── page.tsx │ │ │ └── layout.tsx │ │ ├── (keep)/ │ │ │ ├── [...not-found]/ │ │ │ │ └── page.tsx │ │ │ ├── ai/ │ │ │ │ ├── ai-plugins.tsx │ │ │ │ ├── model.ts │ │ │ │ └── page.tsx │ │ │ ├── alerts/ │ │ │ │ └── [id]/ │ │ │ │ ├── page.tsx │ │ │ │ └── ui/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── alerts-fingerprint.test.tsx │ │ │ │ ├── alert-table-alert-facets.tsx │ │ │ │ ├── alert-table-facet-dynamic.tsx │ │ │ │ ├── alert-table-facet-types.tsx │ │ │ │ ├── alert-table-facet-utils.tsx │ │ │ │ ├── alert-table-facet-value.tsx │ │ │ │ ├── alert-table-facet.tsx │ │ │ │ ├── alert-table-tab-panel-server-side.tsx │ │ │ │ └── alerts.tsx │ │ │ ├── dashboard/ │ │ │ │ ├── GridItem.tsx │ │ │ │ ├── GridItemContainer.tsx │ │ │ │ ├── GridLayout.tsx │ │ │ │ ├── MenuButton.tsx │ │ │ │ ├── WidgetModal.tsx │ │ │ │ ├── [id]/ │ │ │ │ │ ├── dashboard.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── alert-quality-table.tsx │ │ │ │ ├── styles.css │ │ │ │ ├── types.tsx │ │ │ │ └── widget-types/ │ │ │ │ ├── generic-metrics/ │ │ │ │ │ ├── generic-metrics-grid-item.tsx │ │ │ │ │ └── generic-metrics-widget-form.tsx │ │ │ │ ├── metric/ │ │ │ │ │ ├── metric-grid-item.tsx │ │ │ │ │ └── metric-widget-form.tsx │ │ │ │ └── preset/ │ │ │ │ ├── columns-selection.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── preset-grid-item.tsx │ │ │ │ ├── preset-widget-form.tsx │ │ │ │ ├── widget-alert-count-panel.tsx │ │ │ │ └── widget-alerts-table.tsx │ │ │ ├── deduplication/ │ │ │ │ ├── DeduplicationPlaceholder.tsx │ │ │ │ ├── DeduplicationSidebar.tsx │ │ │ │ ├── DeduplicationTable.tsx │ │ │ │ ├── client.tsx │ │ │ │ ├── models.tsx │ │ │ │ └── page.tsx │ │ │ ├── error.ts │ │ │ ├── extraction/ │ │ │ │ ├── [rule_id]/ │ │ │ │ │ └── executions/ │ │ │ │ │ ├── [execution_id]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── create-or-update-extraction-rule.tsx │ │ │ │ ├── extraction.tsx │ │ │ │ ├── extractions-table.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── model.ts │ │ │ │ ├── page.tsx │ │ │ │ └── run-extraction-modal.tsx │ │ │ ├── incidents/ │ │ │ │ ├── [id]/ │ │ │ │ │ ├── activity/ │ │ │ │ │ │ ├── incident-activity.css │ │ │ │ │ │ ├── incident-activity.tsx │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ └── extractTaggedUsers.ts │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ └── ui/ │ │ │ │ │ │ ├── IncidentActivityComment.tsx │ │ │ │ │ │ ├── IncidentActivityItem.tsx │ │ │ │ │ │ ├── IncidentCommentInput.dynamic.tsx │ │ │ │ │ │ ├── IncidentCommentInput.scss │ │ │ │ │ │ └── IncidentCommentInput.tsx │ │ │ │ │ ├── alerts/ │ │ │ │ │ │ ├── ALERT_SIDEBAR_INTEGRATION.md │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ ├── incident-alerts-sidebar.test.tsx │ │ │ │ │ │ │ └── incident-alerts.test.tsx │ │ │ │ │ │ ├── incident-alert-action-tray.tsx │ │ │ │ │ │ ├── incident-alert-actions.tsx │ │ │ │ │ │ ├── incident-alert-table-body-skeleton.tsx │ │ │ │ │ │ ├── incident-alerts.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── incident-chat.css │ │ │ │ │ │ ├── incident-chat.tsx │ │ │ │ │ │ └── page.client.tsx │ │ │ │ │ ├── create-ticket-modal.tsx │ │ │ │ │ ├── enrichments/ │ │ │ │ │ │ ├── EnrichmentEditableField.tsx │ │ │ │ │ │ └── EnrichmentEditableForm.tsx │ │ │ │ │ ├── getIncidentWithErrorHandling.tsx │ │ │ │ │ ├── incident-header-skeleton.tsx │ │ │ │ │ ├── incident-header.tsx │ │ │ │ │ ├── incident-layout-client.tsx │ │ │ │ │ ├── incident-overview.tsx │ │ │ │ │ ├── incident-tabs-navigation.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ ├── link-ticket-modal.tsx │ │ │ │ │ ├── not-found.tsx │ │ │ │ │ ├── route.tsx │ │ │ │ │ ├── ticketing-incident-options.tsx │ │ │ │ │ ├── timeline/ │ │ │ │ │ │ ├── incident-timeline.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── topology/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── workflows/ │ │ │ │ │ ├── incident-workflow-empty.tsx │ │ │ │ │ ├── incident-workflow-sidebar.tsx │ │ │ │ │ ├── incident-workflow-table.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── incident-overview-skeleton.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── predicted-incidents-table.tsx │ │ │ ├── layout.tsx │ │ │ ├── loading.tsx │ │ │ ├── maintenance/ │ │ │ │ ├── create-or-update-maintenance-rule.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── maintenance-rules-table.tsx │ │ │ │ ├── maintenance.tsx │ │ │ │ ├── model.ts │ │ │ │ └── page.tsx │ │ │ ├── mapping/ │ │ │ │ ├── [rule_id]/ │ │ │ │ │ └── executions/ │ │ │ │ │ ├── [execution_id]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── create-or-edit-mapping.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── mapping.tsx │ │ │ │ ├── models.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── rules-table.tsx │ │ │ │ └── run-mapping-modal.tsx │ │ │ ├── not-found.tsx │ │ │ ├── notifications-hub/ │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ ├── providers/ │ │ │ │ ├── components/ │ │ │ │ │ ├── providers-categories/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── providers-categories.tsx │ │ │ │ │ ├── providers-filter-by-label/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── providers-filter-by-label.tsx │ │ │ │ │ └── providers-search/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── providers-search.tsx │ │ │ │ ├── filter-context/ │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── filter-context.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── use-filter-context.ts │ │ │ │ ├── form-fields.tsx │ │ │ │ ├── form-validation.ts │ │ │ │ ├── layout.tsx │ │ │ │ ├── oauth2/ │ │ │ │ │ └── [providerType]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── page.client.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── provider-form-scopes.css │ │ │ │ ├── provider-form-scopes.tsx │ │ │ │ ├── provider-form.css │ │ │ │ ├── provider-form.tsx │ │ │ │ ├── provider-logs.tsx │ │ │ │ ├── provider-semi-automated.tsx │ │ │ │ ├── provider-tile.css │ │ │ │ ├── provider-tile.tsx │ │ │ │ ├── providers-tiles.tsx │ │ │ │ └── providers.css │ │ │ ├── rules/ │ │ │ │ ├── CorrelationPlaceholder.tsx │ │ │ │ ├── CorrelationSidebar/ │ │ │ │ │ ├── AlertsFoundBadge.tsx │ │ │ │ │ ├── CorrelationForm.tsx │ │ │ │ │ ├── CorrelationGroups.tsx │ │ │ │ │ ├── CorrelationSidebarBody.tsx │ │ │ │ │ ├── CorrelationSidebarHeader.tsx │ │ │ │ │ ├── CorrelationSubmission.tsx │ │ │ │ │ ├── DeleteRule.tsx │ │ │ │ │ ├── RuleFields.tsx │ │ │ │ │ ├── RuleGroup.tsx │ │ │ │ │ ├── convert-cel-ast-to-query-builder-ast/ │ │ │ │ │ │ ├── convert-cel-ast-to-query-builder-ast.function.test.ts │ │ │ │ │ │ └── convert-cel-ast-to-query-builder-ast.function.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── timeframe-constants.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── useMatchingAlerts.ts │ │ │ │ ├── CorrelationTable.tsx │ │ │ │ ├── GroupedByCel.tsx │ │ │ │ ├── client.tsx │ │ │ │ ├── flatten-cel-ast.ts │ │ │ │ ├── page.tsx │ │ │ │ └── ui/ │ │ │ │ └── PlaceholderSankey.tsx │ │ │ ├── settings/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── api-key-settings.tsx │ │ │ │ │ ├── api-key-tab.tsx │ │ │ │ │ ├── api-key-table.tsx │ │ │ │ │ ├── groups-sidebar.tsx │ │ │ │ │ ├── groups-tab.tsx │ │ │ │ │ ├── groups-table.tsx │ │ │ │ │ ├── multiselect.css │ │ │ │ │ ├── permissions-sidebar.tsx │ │ │ │ │ ├── permissions-tab.tsx │ │ │ │ │ ├── permissions-table.tsx │ │ │ │ │ ├── roles-sidebar.tsx │ │ │ │ │ ├── roles-tab.tsx │ │ │ │ │ ├── roles-table.tsx │ │ │ │ │ ├── sso-settings.tsx │ │ │ │ │ ├── sso-tab.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── users-settings.tsx │ │ │ │ │ ├── users-sidebar.tsx │ │ │ │ │ ├── users-tab.tsx │ │ │ │ │ └── users-table.tsx │ │ │ │ ├── create-api-key-modal.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── models.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── provider-images/ │ │ │ │ │ ├── page.tsx │ │ │ │ │ ├── provider-image-list.tsx │ │ │ │ │ ├── provider-image-uploader.tsx │ │ │ │ │ └── provider-images-settings.tsx │ │ │ │ ├── settings.client.tsx │ │ │ │ ├── smtp-settings.tsx │ │ │ │ └── webhook-settings.tsx │ │ │ ├── topology/ │ │ │ │ ├── TopologySearchContext.tsx │ │ │ │ ├── api/ │ │ │ │ │ └── index.ts │ │ │ │ ├── layout.tsx │ │ │ │ ├── lib/ │ │ │ │ │ └── badge-colors.ts │ │ │ │ ├── model/ │ │ │ │ │ ├── TopologyPollingContext.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ ├── useTopology.ts │ │ │ │ │ └── useTopologyApplications.ts │ │ │ │ ├── page.tsx │ │ │ │ ├── topology-client.tsx │ │ │ │ └── ui/ │ │ │ │ ├── TopologySearchAutocomplete.tsx │ │ │ │ ├── applications/ │ │ │ │ │ ├── application-card.tsx │ │ │ │ │ ├── application-modal.tsx │ │ │ │ │ ├── applications-list.tsx │ │ │ │ │ └── create-or-update-application-form.tsx │ │ │ │ └── map/ │ │ │ │ ├── AddEditNodeSidePanel.tsx │ │ │ │ ├── application-node.tsx │ │ │ │ ├── getLayoutedElements.ts │ │ │ │ ├── getNodesAndEdgesFromTopologyData.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── manage-selection.tsx │ │ │ │ ├── service-node.tsx │ │ │ │ ├── styles.tsx │ │ │ │ ├── topology-map.tsx │ │ │ │ └── topology.css │ │ │ └── workflows/ │ │ │ ├── [workflow_id]/ │ │ │ │ ├── layout.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── runs/ │ │ │ │ │ └── [workflow_execution_id]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── table-filters.tsx │ │ │ │ ├── versions/ │ │ │ │ │ └── [revision]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── workflow-breadcrumbs.tsx │ │ │ │ ├── workflow-detail-header.tsx │ │ │ │ ├── workflow-detail-page.tsx │ │ │ │ ├── workflow-executions-table.tsx │ │ │ │ ├── workflow-overview-skeleton.tsx │ │ │ │ ├── workflow-overview.tsx │ │ │ │ ├── workflow-providers.tsx │ │ │ │ ├── workflow-secrets.tsx │ │ │ │ ├── workflow-sync-status.tsx │ │ │ │ └── workflow-versions.tsx │ │ │ ├── __tests__/ │ │ │ │ └── existing-workflows-state.test.tsx │ │ │ ├── builder/ │ │ │ │ ├── [workflowId]/ │ │ │ │ │ └── page.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ │ ├── create-workflow-modal.tsx │ │ │ ├── existing-workflows-state.tsx │ │ │ ├── no-workflows-state.tsx │ │ │ ├── noworkflows.tsx │ │ │ ├── page.tsx │ │ │ ├── preview/ │ │ │ │ ├── [workflowId]/ │ │ │ │ │ └── page.tsx │ │ │ │ └── page.tsx │ │ │ ├── upload-workflows-modal.tsx │ │ │ ├── workflow-graph.tsx │ │ │ ├── workflow-menu.tsx │ │ │ ├── workflow-templates/ │ │ │ │ ├── index.ts │ │ │ │ ├── workflow-template-card.tsx │ │ │ │ └── workflow-templates.tsx │ │ │ ├── workflow-tile.css │ │ │ ├── workflow-tile.tsx │ │ │ ├── workflow-utils.ts │ │ │ ├── workflows-steps.tsx │ │ │ └── workflows.page.tsx │ │ ├── (signin)/ │ │ │ ├── error/ │ │ │ │ ├── authEnvUtils.tsx │ │ │ │ ├── error-client.tsx │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── mobile/ │ │ │ │ ├── GithubButton.tsx │ │ │ │ └── page.tsx │ │ │ └── signin/ │ │ │ ├── SignInForm.tsx │ │ │ └── page.tsx │ │ ├── actions/ │ │ │ └── authactions.ts │ │ ├── api/ │ │ │ ├── auth/ │ │ │ │ └── [...nextauth]/ │ │ │ │ └── route.ts │ │ │ ├── aws-marketplace/ │ │ │ │ └── route.ts │ │ │ ├── copilotkit/ │ │ │ │ └── route.ts │ │ │ └── healthcheck/ │ │ │ └── route.ts │ │ ├── auth-provider.tsx │ │ ├── config-provider.tsx │ │ ├── global-error.tsx │ │ ├── globals.css │ │ ├── not-authorized.tsx │ │ ├── posthog-provider.tsx │ │ └── raw/ │ │ └── workflows/ │ │ └── [workflow_filename]/ │ │ └── route.ts │ ├── auth.config.ts │ ├── auth.ts │ ├── components/ │ │ ├── LinkWithIcon.tsx │ │ ├── LogViewer.tsx │ │ ├── SidePanel.tsx │ │ ├── banners/ │ │ │ ├── BannerBase.tsx │ │ │ ├── health-page-banner.tsx │ │ │ └── read-only-banner.tsx │ │ ├── filters/ │ │ │ └── GenericFilters.tsx │ │ ├── icons/ │ │ │ └── index.tsx │ │ ├── navbar/ │ │ │ ├── AILink.tsx │ │ │ ├── AlertsLinks.tsx │ │ │ ├── DashboardLink.tsx │ │ │ ├── DashboardLinks.tsx │ │ │ ├── IncidentLinks.tsx │ │ │ ├── Menu.tsx │ │ │ ├── MinimizeMenuButton.tsx │ │ │ ├── Navbar.css │ │ │ ├── Navbar.tsx │ │ │ ├── NoiseReductionLinks.tsx │ │ │ ├── Search.tsx │ │ │ ├── SetSentryUser.tsx │ │ │ ├── UserAvatar.tsx │ │ │ └── UserInfo.tsx │ │ ├── popover/ │ │ │ └── GenericPopover.tsx │ │ ├── table/ │ │ │ ├── ExecutionsTable.tsx │ │ │ ├── GenericTable.tsx │ │ │ └── Pagination.tsx │ │ └── ui/ │ │ ├── AutocompleteInput.tsx │ │ ├── Button.tsx │ │ ├── Calendar.scss │ │ ├── Calendar.tsx │ │ ├── CreatableMultiSelect.tsx │ │ ├── DateRangePicker.tsx │ │ ├── DateRangePickerV2.tsx │ │ ├── DynamicProviderIcon.tsx │ │ ├── EmptyStateImage.tsx │ │ ├── EmptyStateTable.tsx │ │ ├── ImagePreviewTooltip.tsx │ │ ├── Link.tsx │ │ ├── Modal.tsx │ │ ├── ResizableColumns.tsx │ │ ├── RootCauseAnalysis.tsx │ │ ├── ShortNumber.tsx │ │ ├── TextInput.tsx │ │ ├── Textarea.tsx │ │ ├── index.ts │ │ └── useTimeframeState.ts │ ├── docs/ │ │ └── incident-alerts/ │ │ ├── ALERT_SIDEBAR_INTEGRATION.md │ │ └── CI_CD_FIXES.md │ ├── entities/ │ │ ├── alerts/ │ │ │ ├── lib/ │ │ │ │ └── getTabsFromPreset.ts │ │ │ ├── model/ │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── useAlertRowStyle.ts │ │ │ │ ├── useAlertTableTheme.ts │ │ │ │ ├── useAlerts.ts │ │ │ │ ├── useAvailableAlertFields.ts │ │ │ │ └── useSeverityMapping.ts │ │ │ └── ui/ │ │ │ ├── AlertImage/ │ │ │ │ └── AlertImage.tsx │ │ │ ├── AlertName/ │ │ │ │ └── AlertName.tsx │ │ │ ├── alert-severity.tsx │ │ │ └── index.ts │ │ ├── incidents/ │ │ │ ├── api/ │ │ │ │ ├── incidents.ts │ │ │ │ └── index.ts │ │ │ ├── lib/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── ticketing-utils.test.ts │ │ │ │ ├── ticketing-utils.ts │ │ │ │ └── utils.ts │ │ │ ├── model/ │ │ │ │ ├── index.ts │ │ │ │ ├── models.ts │ │ │ │ └── useIncidentActions.tsx │ │ │ └── ui/ │ │ │ ├── IncidentIconName/ │ │ │ │ ├── IncidentIconName.tsx │ │ │ │ └── index.ts │ │ │ ├── IncidentSeverityBadge.tsx │ │ │ ├── index.ts │ │ │ └── statuses.tsx │ │ ├── presets/ │ │ │ └── model/ │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── usePresetActions.ts │ │ │ ├── usePresetColumnConfig.ts │ │ │ ├── usePresetColumnState.ts │ │ │ ├── usePresetPolling.ts │ │ │ ├── usePresets.ts │ │ │ └── useSilencedPresets.ts │ │ ├── provider-images/ │ │ │ └── model/ │ │ │ └── useProviderImages.ts │ │ ├── providers/ │ │ │ └── model/ │ │ │ └── __mocks__/ │ │ │ └── provider-mocks.ts │ │ ├── users/ │ │ │ ├── model/ │ │ │ │ ├── useUser.ts │ │ │ │ └── useUsers.ts │ │ │ └── ui/ │ │ │ ├── UserStatefulAvatar.tsx │ │ │ └── index.ts │ │ ├── workflow-executions/ │ │ │ └── model/ │ │ │ ├── __tests__/ │ │ │ │ └── useWorkflowExecutionsV2.test.tsx │ │ │ ├── index.ts │ │ │ ├── useWorkflowExecutionDetail.ts │ │ │ ├── useWorkflowExecutions.ts │ │ │ ├── useWorkflowExecutionsRevalidation.ts │ │ │ ├── useWorkflowExecutionsV2.ts │ │ │ └── workflowExecutionsKeys.ts │ │ └── workflows/ │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── __tests__/ │ │ │ │ ├── extractWorkflowYamlDependencies.test.ts │ │ │ │ ├── getCurrentPath.test.ts │ │ │ │ ├── mustache.test.ts │ │ │ │ ├── parseWorkflowYamlToJSON.test.ts │ │ │ │ ├── parser.test.ts │ │ │ │ ├── validate-mustache-ui-builder.test.ts │ │ │ │ ├── validate-mustache-yaml.test.ts │ │ │ │ ├── validation.test.ts │ │ │ │ └── yaml-utils.test.ts │ │ │ ├── extractWorkflowYamlDependencies.ts │ │ │ ├── generateWorkflowYamlJsonSchema.ts │ │ │ ├── getHumanReadableInterval.ts │ │ │ ├── getLayoutedWorkflowElements.ts │ │ │ ├── getTriggerDescription.ts │ │ │ ├── mustache.ts │ │ │ ├── parser.ts │ │ │ ├── ui-utils.tsx │ │ │ ├── use-query-workflow-template.ts │ │ │ ├── useWorkflowJsonSchema.ts │ │ │ ├── useWorkflowZodSchema.ts │ │ │ ├── validate-definition.ts │ │ │ ├── validate-mustache-ui-builder.ts │ │ │ ├── validate-mustache-yaml.ts │ │ │ └── yaml-utils.ts │ │ ├── model/ │ │ │ ├── __mocks__/ │ │ │ │ └── mock-workflow.ts │ │ │ ├── __tests__/ │ │ │ │ ├── types.test.ts │ │ │ │ ├── useWorkflowActions.test.ts │ │ │ │ ├── useWorkflowRevalidation.test.tsx │ │ │ │ ├── useWorkflowsV2.test.ts │ │ │ │ ├── workflow-store.test.tsx │ │ │ │ └── yaml.schema.test.ts │ │ │ ├── index.ts │ │ │ ├── schema.ts │ │ │ ├── types.ts │ │ │ ├── useWorkflowActions.ts │ │ │ ├── useWorkflowDetail.ts │ │ │ ├── useWorkflowRevalidation.ts │ │ │ ├── useWorkflowRevisions.ts │ │ │ ├── useWorkflows.ts │ │ │ ├── useWorkflowsV2.ts │ │ │ ├── workflow-store.ts │ │ │ ├── workflow-yaml-editor-store.ts │ │ │ ├── workflowKeys.ts │ │ │ ├── yaml.schema.ts │ │ │ └── yaml.types.ts │ │ └── ui/ │ │ ├── NodeTriggerIcon.tsx │ │ ├── TriggerIcon.tsx │ │ ├── WorkflowAlertIncidentDependenciesForm.tsx │ │ ├── WorkflowInputFields.tsx │ │ ├── WorkflowPermissionsBadge.tsx │ │ └── WorkflowTriggerBadge.tsx │ ├── entrypoint.sh │ ├── errors.ts │ ├── eslint.config.mjs │ ├── features/ │ │ ├── alerts/ │ │ │ ├── alert-assign-ticket/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── alert-assign-ticket-modal.tsx │ │ │ ├── alert-associate-to-incident/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── alert-associate-incident-modal.tsx │ │ │ ├── alert-call-provider-method/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── alert-method-modal.tsx │ │ │ │ └── alert-method-results-table.tsx │ │ │ ├── alert-change-status/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── alert-change-status-modal.tsx │ │ │ ├── alert-create-incident-ai/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── alert-create-incident-ai-card.tsx │ │ │ │ └── alert-create-incident-ai-modal.tsx │ │ │ ├── alert-detail-sidebar/ │ │ │ │ ├── index.ts │ │ │ │ ├── lib/ │ │ │ │ │ └── alertSidebarFields.tsx │ │ │ │ └── ui/ │ │ │ │ ├── alert-sidebar-incidents.tsx │ │ │ │ ├── alert-sidebar.tsx │ │ │ │ └── alert-timeline.tsx │ │ │ ├── alert-error-event-process/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── alert-error-event-modal.tsx │ │ │ ├── alert-history/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── alert-history-charts.tsx │ │ │ │ └── alert-history-modal.tsx │ │ │ ├── alert-menu/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── alert-menu.tsx │ │ │ ├── alert-note/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── alert-note-modal.tsx │ │ │ ├── change-alert-table-theme/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── AlertTableThemeSelection.tsx │ │ │ │ └── __tests__/ │ │ │ │ └── change-alert-table-theme.test.tsx │ │ │ ├── dismiss-alert/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── alert-dismiss-modal.css │ │ │ │ └── alert-dismiss-modal.tsx │ │ │ ├── enrich-alert/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── EnrichAlertSidePanel.tsx │ │ │ ├── severity-mapping/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── SeverityMappingFacet.tsx │ │ │ │ └── SeverityMappingSelection.tsx │ │ │ ├── simulate-alert/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── alert-push-alert-to-server-modal.tsx │ │ │ └── view-raw-alert/ │ │ │ ├── index.ts │ │ │ └── ui/ │ │ │ ├── ViewAlertModal.css │ │ │ └── ViewAlertModal.tsx │ │ ├── cel-input/ │ │ │ ├── __tests__/ │ │ │ │ └── use-cel-state.test.ts │ │ │ ├── cel-input.tsx │ │ │ └── use-cel-state.ts │ │ ├── filter/ │ │ │ ├── add-facet-modal-with-suggestions.tsx │ │ │ ├── add-facet-modal.tsx │ │ │ ├── api.ts │ │ │ ├── facet-panel-server-side.tsx │ │ │ ├── facet-value.tsx │ │ │ ├── facet.tsx │ │ │ ├── facets-panel.tsx │ │ │ ├── hooks.tsx │ │ │ ├── index.ts │ │ │ ├── models.tsx │ │ │ ├── pagination.tsx │ │ │ ├── search-input.tsx │ │ │ └── store/ │ │ │ ├── __tests__/ │ │ │ │ ├── facets-store.test.ts │ │ │ │ ├── use-initial-state-handler.test.ts │ │ │ │ ├── use-queries-handler.test.ts │ │ │ │ └── utils.test.ts │ │ │ ├── create-facets-store.ts │ │ │ ├── index.ts │ │ │ ├── use-facets-config.tsx │ │ │ ├── use-facets-loading-state-handler.ts │ │ │ ├── use-initial-state-handler.ts │ │ │ ├── use-queries-handler.ts │ │ │ ├── use-query-params/ │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── split-facet-values.test.ts │ │ │ │ │ └── use-query-params.test.ts │ │ │ │ ├── split-facet-values.ts │ │ │ │ └── use-query-params.ts │ │ │ ├── use-store.tsx │ │ │ └── utils.ts │ │ ├── incidents/ │ │ │ ├── change-incident-severity/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── incident-change-severity-select.tsx │ │ │ │ └── incident-severity-select.tsx │ │ │ ├── change-incident-status/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── incident-change-status-select.tsx │ │ │ ├── create-or-update-incident/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── create-or-update-incident-form.tsx │ │ │ │ └── react-quill-override.css │ │ │ ├── incident-list/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── incident-dropdown-menu.tsx │ │ │ │ ├── incident-list-error.tsx │ │ │ │ ├── incident-list-placeholder.tsx │ │ │ │ ├── incident-list.tsx │ │ │ │ ├── incident-table-component.tsx │ │ │ │ ├── incident-table-filters-context.tsx │ │ │ │ ├── incidents-not-found.tsx │ │ │ │ ├── incidents-report/ │ │ │ │ │ ├── generate-report-modal.tsx │ │ │ │ │ ├── incident-severity-metric.tsx │ │ │ │ │ ├── incidents-report.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ ├── pie-chart.tsx │ │ │ │ │ └── use-report-data.ts │ │ │ │ ├── incidents-table.tsx │ │ │ │ └── useIncidentsTableData.tsx │ │ │ ├── merge-incidents/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ └── merge-incidents-modal.tsx │ │ │ ├── same-incidents-in-the-past/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── change-same-incident-in-the-past-form.tsx │ │ │ │ ├── following-incidents.tsx │ │ │ │ ├── index.ts │ │ │ │ └── same-incident-field.tsx │ │ │ └── split-incident-alerts/ │ │ │ ├── index.ts │ │ │ └── ui/ │ │ │ └── split-incident-alerts-modal.tsx │ │ ├── keyboard-shortcuts/ │ │ │ ├── index.ts │ │ │ └── useIsShiftKeyHeld.ts │ │ ├── presets/ │ │ │ ├── create-or-update-preset/ │ │ │ │ ├── index.ts │ │ │ │ └── ui/ │ │ │ │ ├── alerts-count-badge.tsx │ │ │ │ ├── create-or-update-preset-form.tsx │ │ │ │ └── preset-controls.tsx │ │ │ ├── custom-preset-links/ │ │ │ │ ├── index.ts │ │ │ │ ├── model/ │ │ │ │ │ └── usePresetAlertsCount.ts │ │ │ │ └── ui/ │ │ │ │ ├── CustomPresetAlertLink.css │ │ │ │ ├── CustomPresetAlertLinks.tsx │ │ │ │ └── PresetsNoise.tsx │ │ │ └── presets-manager/ │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ └── eval-with-context.ts │ │ │ └── ui/ │ │ │ ├── __tests__/ │ │ │ │ ├── alert-preset-manager.test.tsx │ │ │ │ └── preset-navigation.test.ts │ │ │ ├── alert-preset-manager.tsx │ │ │ └── alerts-rules-builder.tsx │ │ ├── workflow-execution-results/ │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ └── logs-utils.ts │ │ │ └── ui/ │ │ │ ├── WorkflowExecutionError.tsx │ │ │ ├── WorkflowExecutionLogs.tsx │ │ │ └── WorkflowExecutionResults.tsx │ │ └── workflows/ │ │ ├── ai-assistant/ │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── constants.ts │ │ │ │ └── utils.ts │ │ │ └── ui/ │ │ │ ├── AddStepUI.tsx │ │ │ ├── AddTriggerOrStepSkeleton.tsx │ │ │ ├── AddTriggerUI.tsx │ │ │ ├── StepPreview.tsx │ │ │ ├── SuggestionStatus.tsx │ │ │ ├── WorkflowBuilderChat.tsx │ │ │ ├── WorkflowBuilderChatSafe.tsx │ │ │ └── chat.css │ │ ├── builder/ │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ └── utils.tsx │ │ │ └── ui/ │ │ │ ├── Editor/ │ │ │ │ ├── EditorField.tsx │ │ │ │ ├── ReactFlowEditor.tsx │ │ │ │ ├── StepEditor.tsx │ │ │ │ ├── StepTest.tsx │ │ │ │ ├── TriggerEditor.tsx │ │ │ │ └── WorkflowEditor.tsx │ │ │ ├── NodeMenu.tsx │ │ │ ├── ReactFlowBuilder.tsx │ │ │ ├── WorkflowEdge.tsx │ │ │ ├── WorkflowNode.tsx │ │ │ ├── WorkflowToolbox.tsx │ │ │ ├── __tests__/ │ │ │ │ └── ReactFlowBuilder.test.tsx │ │ │ └── workflow-status.tsx │ │ ├── edit-metadata/ │ │ │ ├── index.ts │ │ │ └── ui/ │ │ │ ├── edit-workflow-metadata-form.tsx │ │ │ └── workflow-metadata-modal.tsx │ │ ├── edit-workflow-metadata/ │ │ │ ├── index.ts │ │ │ └── ui/ │ │ │ └── edit-workflow-metadata-form.tsx │ │ ├── enable-disable/ │ │ │ ├── index.ts │ │ │ ├── model/ │ │ │ │ ├── index.ts │ │ │ │ └── useWorkflowToggle.ts │ │ │ └── ui/ │ │ │ └── WorkflowEnabledSwitch.tsx │ │ ├── manual-run-workflow/ │ │ │ ├── index.ts │ │ │ ├── model/ │ │ │ │ ├── WorkflowModalContext.tsx │ │ │ │ ├── types.ts │ │ │ │ └── useWorkflowRun.ts │ │ │ └── ui/ │ │ │ ├── WorkflowInputsForm.tsx │ │ │ ├── WorkflowUnsavedChangesForm.tsx │ │ │ ├── manual-run-workflow-modal.tsx │ │ │ └── workflow-run-with-alert-modal.tsx │ │ └── test-run/ │ │ ├── index.ts │ │ ├── model/ │ │ │ └── useWorkflowTestRun.ts │ │ └── ui/ │ │ └── workflow-test-run-button.tsx │ ├── instrumentation.ts │ ├── jest.config.ts │ ├── jest.setup.ts │ ├── middleware.ts │ ├── next-env.d.ts │ ├── next.config.js │ ├── next_build.sh │ ├── next_start.sh │ ├── package.json │ ├── postcss.config.js │ ├── proxyFetch.node.ts │ ├── proxyFetch.ts │ ├── scripts/ │ │ ├── build-monaco-workers-turbopack.js │ │ ├── generate-workflow-yaml-json-schema.ts │ │ └── validate-workflow-examples.ts │ ├── sentry.client.config.ts │ ├── sentry.edge.config.ts │ ├── sentry.server.config.ts │ ├── shared/ │ │ ├── api/ │ │ │ ├── ApiClient.ts │ │ │ ├── KeepApiError.ts │ │ │ ├── __tests__/ │ │ │ │ └── ApiClient.test.ts │ │ │ ├── enrichment-events.ts │ │ │ ├── index.ts │ │ │ ├── providers.ts │ │ │ ├── server/ │ │ │ │ ├── createServerApiClient.ts │ │ │ │ └── index.ts │ │ │ ├── workflow-executions.ts │ │ │ └── workflows.ts │ │ ├── constants.ts │ │ ├── lib/ │ │ │ ├── __tests__/ │ │ │ │ ├── getIconForStatusString.test.tsx │ │ │ │ ├── logs-utils.test.ts │ │ │ │ ├── oauth2proxy-auth.test.ts │ │ │ │ ├── object-utils.test.ts │ │ │ │ ├── provider-utils.test.ts │ │ │ │ ├── regex-utils.test.ts │ │ │ │ ├── severity-utils.test.ts │ │ │ │ └── status-utils.test.ts │ │ │ ├── capture.ts │ │ │ ├── downloadFileFromString.ts │ │ │ ├── encodings.ts │ │ │ ├── getApiUrlFromConfig.ts │ │ │ ├── hooks/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── useSignOut.test.ts │ │ │ │ ├── useApi.tsx │ │ │ │ ├── useHealth.ts │ │ │ │ ├── useHydratedSession.tsx │ │ │ │ ├── useMounted.tsx │ │ │ │ ├── useSetSentryUser.ts │ │ │ │ └── useSignOut.ts │ │ │ ├── logs-utils.ts │ │ │ ├── oauth2proxy-auth.ts │ │ │ ├── object-utils.ts │ │ │ ├── provider-utils.ts │ │ │ ├── regex-utils.ts │ │ │ ├── server/ │ │ │ │ └── getConfig.ts │ │ │ ├── state-utils.ts │ │ │ ├── status-utils.ts │ │ │ └── tremor-utils.ts │ │ ├── tests/ │ │ │ └── next-auth-mock.tsx │ │ └── ui/ │ │ ├── DateTimeField.tsx │ │ ├── DebugJSON/ │ │ │ ├── DebugJSON.tsx │ │ │ └── index.ts │ │ ├── Drawer/ │ │ │ ├── Drawer.tsx │ │ │ ├── TremorDrawer.tsx │ │ │ └── index.ts │ │ ├── DropdownMenu/ │ │ │ ├── DropdownMenu.css │ │ │ ├── DropdownMenu.tsx │ │ │ └── index.ts │ │ ├── EmptyState/ │ │ │ ├── EmptyStateCard.tsx │ │ │ └── index.ts │ │ ├── ErrorComponent/ │ │ │ ├── ErrorComponent.tsx │ │ │ └── index.ts │ │ ├── FieldHeader.tsx │ │ ├── FormattedContent/ │ │ │ └── FormattedContent.tsx │ │ ├── Input/ │ │ │ └── index.tsx │ │ ├── JsonCard/ │ │ │ ├── JsonCard.tsx │ │ │ └── index.ts │ │ ├── KeepLoader/ │ │ │ └── KeepLoader.tsx │ │ ├── KeepLogoError/ │ │ │ ├── KeepLogoError.tsx │ │ │ ├── index.ts │ │ │ └── logo-error.css │ │ ├── MarkdownHTML/ │ │ │ ├── MarkdownHTML.tsx │ │ │ └── index.ts │ │ ├── MonacoCELEditor/ │ │ │ ├── MonacoCel.tsx │ │ │ ├── MonacoCel.turbopack.tsx │ │ │ ├── cel-support.ts │ │ │ ├── editor.scss │ │ │ ├── handle-completions.ts │ │ │ ├── index.ts │ │ │ ├── monaco-cel-editor.tsx │ │ │ └── validation-hook.ts │ │ ├── MonacoEditor/ │ │ │ ├── MonacoEditorCDN.tsx │ │ │ ├── MonacoEditorNPM.tsx │ │ │ ├── index.ts │ │ │ └── index.turbopack.ts │ │ ├── MonacoYAMLEditor/ │ │ │ ├── MonacoYAMLEditor.types.ts │ │ │ ├── editor.client.tsx │ │ │ ├── editor.client.turbopack.tsx │ │ │ ├── index.ts │ │ │ └── index.turbopack.ts │ │ ├── PageSubtitle.tsx │ │ ├── PageTitle.tsx │ │ ├── PostHogPageView.tsx │ │ ├── ResizableColumns/ │ │ │ ├── index.ts │ │ │ └── ui/ │ │ │ └── ResizableColumns.tsx │ │ ├── Select/ │ │ │ ├── Select.tsx │ │ │ └── index.ts │ │ ├── SeverityBorderIcon/ │ │ │ ├── SeverityBorderIcon.tsx │ │ │ └── index.ts │ │ ├── SeverityLabel/ │ │ │ ├── SeverityLabel.tsx │ │ │ └── index.ts │ │ ├── TabLinkNavigation/ │ │ │ ├── TabLinkNavigation.tsx │ │ │ ├── TabNavigationLink.tsx │ │ │ └── index.tsx │ │ ├── TableIndeterminateCheckbox/ │ │ │ ├── TableIndeterminateCheckbox.tsx │ │ │ └── index.ts │ │ ├── TablePagination/ │ │ │ ├── TablePagination.tsx │ │ │ └── index.ts │ │ ├── TableSeverityCell/ │ │ │ ├── TableSeverityCell.tsx │ │ │ └── index.ts │ │ ├── Tooltip/ │ │ │ ├── Tooltip.tsx │ │ │ └── index.ts │ │ ├── TraceViewer/ │ │ │ ├── Trace.ts │ │ │ ├── TraceViewer.tsx │ │ │ └── index.ts │ │ ├── VerticalRoundedList/ │ │ │ ├── VerticalRoundedList.tsx │ │ │ ├── index.ts │ │ │ └── vertical-rounded-list.css │ │ ├── WorkflowYAMLEditor/ │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── useYamlValidation.ts │ │ │ │ └── utils.ts │ │ │ ├── model/ │ │ │ │ └── types.ts │ │ │ └── ui/ │ │ │ ├── WorkflowYAMLEditor.tsx │ │ │ ├── WorkflowYAMLEditorStandalone.tsx │ │ │ ├── WorkflowYAMLEditorToolbar.tsx │ │ │ ├── WorkflowYAMLValidationErrors.tsx │ │ │ └── WorkflowYamlEditorHeader.tsx │ │ ├── WorkflowYAMLEditorWithLogs/ │ │ │ ├── WorkflowYAMLEditorWithLogs.css │ │ │ ├── WorkflowYAMLEditorWithLogs.tsx │ │ │ └── index.tsx │ │ ├── index.ts │ │ ├── theme/ │ │ │ ├── ThemeControl.tsx │ │ │ ├── ThemeScript.tsx │ │ │ ├── WatchUpdateTheme.ts │ │ │ └── index.ts │ │ └── utils/ │ │ ├── favicon.ts │ │ ├── getIconForStatusString.tsx │ │ ├── severity-utils.ts │ │ ├── showErrorToast.tsx │ │ ├── showSuccessToast.tsx │ │ └── table-utils.ts │ ├── styles/ │ │ └── linear.scss │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.scripts.json │ ├── types/ │ │ ├── auth.d.ts │ │ ├── internal-config.ts │ │ └── react-table.d.ts │ ├── utils/ │ │ ├── apiUrl.ts │ │ ├── authenticationType.ts │ │ ├── cel-ast.ts │ │ ├── fatigue.ts │ │ ├── helpers.ts │ │ ├── hooks/ │ │ │ ├── useAI.ts │ │ │ ├── useAlertPolling.ts │ │ │ ├── useAlertQuality.ts │ │ │ ├── useConfig.ts │ │ │ ├── useDashboardMetricWidgets.ts │ │ │ ├── useDashboardPresets.ts │ │ │ ├── useDashboards.ts │ │ │ ├── useDebouncedValue.ts │ │ │ ├── useDeduplicationRules.ts │ │ │ ├── useEnrichmentEvents.ts │ │ │ ├── useExpandedRows.ts │ │ │ ├── useExtractionRules.ts │ │ │ ├── useGroupExpansion.ts │ │ │ ├── useGroups.ts │ │ │ ├── useIncidents.ts │ │ │ ├── useLocalStorage.ts │ │ │ ├── useMaintenanceRules.ts │ │ │ ├── useMappingRules.ts │ │ │ ├── usePermissions.ts │ │ │ ├── useProviderLogs.ts │ │ │ ├── useProviders.ts │ │ │ ├── usePusher.ts │ │ │ ├── useRoles.ts │ │ │ ├── useRules.ts │ │ │ ├── useScopes.ts │ │ │ ├── useSearchAlerts.ts │ │ │ ├── useTags.ts │ │ │ ├── useTenantConfiguration.ts │ │ │ └── useWorkflowSecrets.ts │ │ ├── reactFlow.ts │ │ └── type-utils.ts │ └── widgets/ │ ├── alerts-table/ │ │ ├── lib/ │ │ │ ├── alert-table-list-format.tsx │ │ │ ├── alert-table-time-format.tsx │ │ │ └── alert-table-utils.tsx │ │ └── ui/ │ │ ├── ActionTraySelection.tsx │ │ ├── ColumnSelection.tsx │ │ ├── RowStyleSelection.tsx │ │ ├── SettingsSelection.tsx │ │ ├── TitleAndFilters.tsx │ │ ├── __tests__/ │ │ │ ├── alert-assignee.test.tsx │ │ │ ├── alert-grouped-row.test.tsx │ │ │ └── useAlertsTableData.test.ts │ │ ├── alert-actions.tsx │ │ ├── alert-assignee.tsx │ │ ├── alert-extra-payload.tsx │ │ ├── alert-grouped-row.tsx │ │ ├── alert-pagination.tsx │ │ ├── alert-table-column-rename.tsx │ │ ├── alert-table-headers.tsx │ │ ├── alert-table-server-side.tsx │ │ ├── alert-table.tsx │ │ ├── alerts-table-body.tsx │ │ └── useAlertsTableData.ts │ └── workflow-builder/ │ ├── __tests__/ │ │ ├── workflow-builder-widget.test.tsx │ │ └── workflow-builder.test.tsx │ ├── empty-builder-state.tsx │ ├── index.ts │ ├── workflow-builder-card.tsx │ ├── workflow-builder-widget-safe.tsx │ ├── workflow-builder-widget.tsx │ └── workflow-builder.tsx ├── keycloak/ │ ├── Dockerfile.keycloak │ ├── KEYCLOAK_LDAP.md │ ├── docker-compose.yaml │ ├── event_listeners/ │ │ └── last-login-event-listener-0.0.1-SNAPSHOT.jar │ ├── generate_ldap.py │ ├── javascript_providers/ │ │ ├── keep-abac-policy/ │ │ │ ├── META-INF/ │ │ │ │ └── keycloak-scripts.json │ │ │ └── keep-abac-policy.js │ │ └── keep-abac-policy.jar │ ├── jsons/ │ │ ├── group-claim.json │ │ ├── group-mapper.json │ │ └── tenant-ids-js-mapper.json │ ├── keep-realm.json │ ├── keycloak_entrypoint.sh │ ├── ldap.ldif │ ├── ldap_generated.ldif │ ├── ldif/ │ │ ├── ldap_orgs.ldif │ │ └── ldap_orgs_new.ldif │ ├── readme.md │ └── themes/ │ └── keep.jar ├── oauth2proxy/ │ ├── docker-compose-oauth2proxy.yml │ └── nginx.conf ├── otel-shared/ │ ├── alertmanager.yml │ ├── grafana-datasources.yaml │ ├── otel-collector-config.yaml │ ├── prometheus.yaml │ ├── tempo.yaml │ └── vector.toml ├── prometheus/ │ └── prometheus.yml ├── proxy/ │ ├── README.md │ ├── docker-compose-proxy.yml │ ├── nginx.conf │ └── squid.conf ├── pyproject.toml ├── render.yaml ├── scripts/ │ ├── docs_generate_api_docs_from_openapi.sh │ ├── docs_get_providers_list.py │ ├── docs_openapi_converter.py │ ├── docs_render_provider_snippets.py │ ├── docs_validate_navigation.sh │ ├── docs_validate_openapi_is_actual.sh │ ├── migrate_to_elastic.py │ ├── save_providers_list.py │ ├── shoot_alerts_from_dump.py │ ├── simulate_alerts.py │ ├── simulate_alerts.sh │ ├── simulate_rules.py │ └── workflow_yaml_generate_json_schema.sh ├── start.sh ├── templates/ │ └── CHANGELOG.md └── tests/ ├── Dockerfile.keycloak.test ├── __init__.py ├── cel_to_sql/ │ ├── cel-to-sql-test-cases.json │ ├── order-by-exp-test-cases.json │ ├── test_cel_to_ast.py │ ├── test_cel_to_sql.py │ └── test_order_by_exp.py ├── conftest.py ├── deduplication/ │ ├── test_deduplications.py │ └── test_deduplications_provisioning.py ├── docker-compose-elastic.yml ├── docker-compose-keycloak.yml ├── docker-compose-mysql.yml ├── e2e_tests/ │ ├── docker-compose-e2e-mysql.yml │ ├── docker-compose-e2e-postgres.yml │ ├── docker-compose-e2e-redis-sentinel-noauth.yml │ ├── docker-compose-e2e-redis.yml │ ├── docker-compose-e2e-sqlite.yml │ ├── docker-entrypoint-initdb.d/ │ │ └── update-postgresql-conf.sh │ ├── grafana.ini │ ├── incidents_alerts_tests/ │ │ ├── incidents_alerts_setup.py │ │ ├── test_filtering_sort_search_on_alerts.py │ │ ├── test_filtering_sort_search_on_incidents.py │ │ ├── test_mentions_in_incident_comments.py │ │ └── test_xss_protection.py │ ├── postgres-custom.conf │ ├── test_end_to_end.py │ ├── test_end_to_end_db_auth.py │ ├── test_end_to_end_theme.py │ ├── test_grafana_provider.py │ ├── test_pushing_prometheus_alerts.py │ ├── test_pushing_prometheus_config.yaml │ ├── test_pushing_prometheus_rules.yaml │ ├── test_redis_sentinel_e2e_full.py │ ├── test_topology.py │ ├── utils.py │ ├── workflow-alert-log.yaml │ ├── workflow-incident-log.yaml │ ├── workflow-inputs-alert.yaml │ ├── workflow-inputs.yaml │ ├── workflow-interval.yaml │ ├── workflow-invalid-sample.yaml │ ├── workflow-quotes-sample.yaml │ ├── workflow-sample-npm.yaml │ ├── workflow-sample.yaml │ └── workflow-valid-sample.yaml ├── fixtures/ │ ├── __init__.py │ ├── client.py │ └── workflow_manager.py ├── keycloak-test-realm-export.json ├── providers/ │ └── jira_provider/ │ └── test_jira_priority_fix.py ├── provision/ │ ├── workflows_1/ │ │ ├── provision_example_1.yml │ │ ├── provision_example_2.yml │ │ └── provision_example_3.yml │ ├── workflows_2/ │ │ ├── provision_example_1.yml │ │ └── provision_example_2.yml │ ├── workflows_3/ │ │ └── workflows_with_no_name.yml │ └── workflows_4/ │ └── console_example.yml ├── test.json ├── test_actions.py ├── test_alert_dto.py ├── test_alert_evaluation.py ├── test_alert_tenrary.py ├── test_alert_utils.py ├── test_auth.py ├── test_auth_new.py ├── test_auto_resolve_workflow.py ├── test_batch_enrich_cel.py ├── test_conditions.py ├── test_contextmanager.py ├── test_counting.py ├── test_counting_integration.py ├── test_cyaml.py ├── test_dismissal_expiry_bug.py ├── test_enrichments.py ├── test_extraction_rules.py ├── test_functions.py ├── test_incidents.py ├── test_iohandler.py ├── test_jira_provider.py ├── test_keep_provider_time_delta.py ├── test_maintenance_windows_bl.py ├── test_metrics.py ├── test_pagerduty_provider.py ├── test_parser.py ├── test_provider_factory.py ├── test_provider_reprovisioning.py ├── test_provider_validation_fields.py ├── test_providers_api.py ├── test_providers_yaml_provisioning.py ├── test_provisioning.py ├── test_rules_api.py ├── test_rules_engine.py ├── test_search_alerts.py ├── test_search_alerts_configuration.py ├── test_secretmanager.py ├── test_servicenow_provider.py ├── test_settings_api.py ├── test_smtp_provider.py ├── test_steps.py ├── test_teams_provider.py ├── test_topology.py ├── test_workflow_api.py ├── test_workflow_cel_filter.py ├── test_workflow_execution.py ├── test_workflow_filters.py ├── test_workflow_severity_comparisons.py ├── test_workflowmanager.py ├── test_workflows.py ├── test_workflows_update.py ├── test_workflowstore.py └── workflows/ ├── db_disk_space_for_testing.yml ├── providers_for_testing.yaml ├── reusable_actions_for_testing.yml ├── reusable_alert_for_testing.yml └── reusable_alert_with_actions_for_testing.yml