This is an automated email from the ASF dual-hosted git repository. vatsrahul1001 pushed a commit to annotated tag constraints-latest in repository https://gitbox.apache.org/repos/asf/airflow.git
commit bc3e2d6231837a5528b59968ee77c70e2b758e3b Merge: 5d1e2043793 a2b0ad54e75 Author: Rahul Vats <[email protected]> AuthorDate: Fri Jul 31 14:45:03 2026 +0530 Merge remote-tracking branch 'refs/remotes/origin/main' .agents/skills/airflow-translations/locales/el.md | 67 +- .agents/skills/airflow-translations/locales/tr.md | 239 +- .../prepare-providers-documentation/SKILL.md | 301 +- .dockerignore | 1 + .github/CODEOWNERS | 16 +- .github/ISSUE_TEMPLATE/1-airflow_bug_report.yml | 1 + .github/PULL_REQUEST_TEMPLATE.md | 2 +- .../actions/prepare_breeze_and_image/action.yml | 13 +- .github/boring-cyborg.yml | 8 +- .github/dependabot.yml | 173 +- .github/workflows/additional-ci-image-checks.yml | 2 +- .github/workflows/additional-prod-image-tests.yml | 29 +- .github/workflows/airflow-distributions-tests.yml | 2 +- .github/workflows/airflow-e2e-tests.yml | 104 +- .github/workflows/asf-allowlist-check.yml | 2 +- .github/workflows/backport-cli.yml | 2 +- .github/workflows/basic-tests.yml | 26 +- .github/workflows/ci-amd.yml | 36 +- .github/workflows/ci-arm.yml | 36 +- .github/workflows/ci-duration-monitor.yml | 4 +- .github/workflows/ci-image-build.yml | 197 +- .github/workflows/ci-image-checks.yml | 18 +- .github/workflows/ci-notification.yml | 8 +- .github/workflows/codeql-analysis.yml | 10 +- .github/workflows/e2e-flaky-tests-report.yml | 4 +- .github/workflows/finalize-tests.yml | 6 +- .github/workflows/generate-constraints.yml | 27 +- .github/workflows/helm-tests.yml | 4 +- .github/workflows/integration-system-tests.yml | 6 +- .github/workflows/java-sdk-release-verify.yml | 8 +- .github/workflows/k8s-tests.yml | 8 +- .github/workflows/kustomize-overlays-tests.yml | 2 +- .github/workflows/milestone-tag-assistant.yml | 2 +- .github/workflows/notify-uv-lock-conflicts.yml | 2 +- .github/workflows/openlineage-e2e-compat-tests.yml | 2 +- .github/workflows/prod-image-build.yml | 4 +- .github/workflows/publish-docs-to-s3.yml | 104 +- .github/workflows/push-image-cache.yml | 4 +- .github/workflows/recheck-old-bug-report.yml | 2 +- .github/workflows/registry-backfill.yml | 10 +- .github/workflows/registry-build.yml | 81 +- .github/workflows/registry-tests.yml | 4 +- .github/workflows/release_dockerhub_image.yml | 2 +- .../workflows/release_single_dockerhub_image.yml | 4 +- .github/workflows/run-unit-tests.yml | 2 +- .../scheduled-verify-release-calendar.yml | 4 +- .github/workflows/stale.yml | 4 +- .github/workflows/test-providers.yml | 4 +- .github/workflows/ui-e2e-tests.yml | 4 +- .../update-constraints-on-push-stable.yml | 12 +- .github/workflows/update-constraints-on-push.yml | 10 +- .github/workflows/upgrade-check.yml | 6 +- .pre-commit-config.yaml | 78 +- AGENTS.md | 4 +- COMMITTERS.rst | 2 +- Dockerfile | 35 +- Dockerfile.ci | 39 +- INTHEWILD.md | 1 + README.md | 2 +- RELEASE_NOTES.rst | 27 + airflow-core/.pre-commit-config.yaml | 4 +- .../lang-sdk}/0001-java-sdk-airflow-integration.md | 0 .../adr/lang-sdk}/0002-workload-execution.md | 0 .../adr/lang-sdk}/0003-pure-java-dags.md | 2 +- .../adr/lang-sdk}/0004-dag-parsing.md | 10 +- .../adr/lang-sdk}/0005-coordinator-packaging.md | 12 +- .../lang-sdk/0006-no-lang-sdk-source-display.md | 136 + airflow-core/adr/lang-sdk/README.md | 37 + .../advanced-logging-configuration.rst | 53 +- .../logging-monitoring/logging-tasks.rst | 2 +- .../logging-monitoring/metrics.rst | 71 +- .../logging-monitoring/traces.rst | 30 + .../modules_management.rst | 2 +- .../docs/administration-and-deployment/plugins.rst | 29 +- .../docs/authoring-and-scheduling/assets.rst | 63 +- .../language-sdks/index.rst | 12 + .../language-sdks/java.rst | 8 + .../language-sdks/typescript.rst | 294 ++ .../docs/authoring-and-scheduling/timetable.rst | 31 +- airflow-core/docs/best-practices.rst | 2 +- .../docs/core-concepts/auth-manager/index.rst | 41 +- airflow-core/docs/core-concepts/message-queues.rst | 5 + airflow-core/docs/core-concepts/multi-team.rst | 26 +- airflow-core/docs/core-concepts/overview.rst | 85 + .../core-concepts/task-and-asset-state-store.rst | 16 +- airflow-core/docs/extra-packages-ref.rst | 92 +- airflow-core/docs/faq.rst | 2 +- airflow-core/docs/howto/custom-operator.rst | 30 +- airflow-core/docs/howto/deadline-alerts.rst | 17 +- .../docs/howto/docker-compose/docker-compose.yaml | 4 +- airflow-core/docs/howto/set-config.rst | 1 + airflow-core/docs/howto/set-up-database.rst | 26 +- airflow-core/docs/howto/usage-cli.rst | 16 + .../diagram_java_sdk_execution_architecture.md5sum | 1 + .../diagram_java_sdk_execution_architecture.png | Bin 0 -> 176205 bytes .../img/diagram_java_sdk_execution_architecture.py | 287 ++ .../img/diagram_java_sdk_execution_sequence.md5sum | 1 + .../img/diagram_java_sdk_execution_sequence.png | Bin 0 -> 189307 bytes .../img/diagram_java_sdk_execution_sequence.py | 327 ++ ...diagram_native_language_sdk_architecture.md5sum | 1 + .../diagram_native_language_sdk_architecture.png | Bin 0 -> 146251 bytes .../diagram_native_language_sdk_architecture.py | 258 ++ .../diagram_task_sdk_execution_architecture.md5sum | 1 + .../diagram_task_sdk_execution_architecture.png | Bin 0 -> 184731 bytes .../img/diagram_task_sdk_execution_architecture.py | 291 ++ .../img/diagram_task_sdk_execution_sequence.md5sum | 1 + .../img/diagram_task_sdk_execution_sequence.png | Bin 0 -> 144211 bytes .../img/diagram_task_sdk_execution_sequence.py | 313 ++ airflow-core/docs/installation/prerequisites.rst | 4 + airflow-core/docs/migrations-ref.rst | 38 +- .../local-filesystem-secrets-backend.rst | 47 +- airflow-core/newsfragments/62501.bugfix.rst | 1 + airflow-core/newsfragments/67672.improvement.rst | 1 + airflow-core/newsfragments/67765.bugfix.rst | 1 + airflow-core/newsfragments/67927.feature.rst | 1 + airflow-core/newsfragments/68521.feature.rst | 1 + airflow-core/newsfragments/68760.significant.rst | 11 + airflow-core/newsfragments/69377.bugfix.rst | 1 + airflow-core/newsfragments/69469.improvement.rst | 1 + airflow-core/newsfragments/69790.feature.rst | 1 + airflow-core/newsfragments/69874.bugfix.rst | 1 + airflow-core/newsfragments/69877.bugfix.rst | 1 + airflow-core/newsfragments/70154.significant.rst | 1 + airflow-core/newsfragments/70240.bugfix.rst | 1 + airflow-core/pyproject.toml | 18 +- airflow-core/src/airflow/__init__.py | 5 +- airflow-core/src/airflow/__main__.py | 6 + airflow-core/src/airflow/api/common/mark_tasks.py | 44 +- airflow-core/src/airflow/api_fastapi/app.py | 17 +- .../api_fastapi/auth/managers/base_auth_manager.py | 33 +- .../api_fastapi/auth/managers/models/base_user.py | 9 + .../auth/managers/models/resource_details.py | 3 + .../auth/managers/simple/simple_auth_manager.py | 16 +- .../simple/ui/openapi-gen/queries/common.ts | 2 +- .../ui/openapi-gen/queries/ensureQueryData.ts | 2 +- .../simple/ui/openapi-gen/queries/index.ts | 2 +- .../ui/openapi-gen/queries/infiniteQueries.ts | 2 +- .../simple/ui/openapi-gen/queries/prefetch.ts | 2 +- .../simple/ui/openapi-gen/queries/queries.ts | 2 +- .../simple/ui/openapi-gen/queries/suspense.ts | 2 +- .../auth/managers/simple/ui/package.json | 40 +- .../auth/managers/simple/ui/pnpm-lock.yaml | 1145 +++--- .../src/airflow/api_fastapi/common/db/assets.py | 54 + .../src/airflow/api_fastapi/common/db/dag_runs.py | 2 +- .../src/airflow/api_fastapi/common/db/dags.py | 31 +- .../src/airflow/api_fastapi/common/exceptions.py | 48 +- .../src/airflow/api_fastapi/common/parameters.py | 240 +- .../src/airflow/api_fastapi/core_api/app.py | 7 - .../api_fastapi/core_api/datamodels/assets.py | 29 + .../api_fastapi/core_api/datamodels/backfills.py | 22 + .../api_fastapi/core_api/datamodels/dag_run.py | 1 + .../api_fastapi/core_api/datamodels/event_logs.py | 1 + .../api_fastapi/core_api/datamodels/plugins.py | 5 +- .../core_api/datamodels/task_instances.py | 1 + .../api_fastapi/core_api/datamodels/ui/common.py | 1 + .../api_fastapi/core_api/datamodels/ui/dags.py | 8 + .../api_fastapi/core_api/datamodels/ui/deadline.py | 31 +- .../core_api/datamodels/ui/structure.py | 4 +- .../api_fastapi/core_api/openapi/_private_ui.yaml | 809 +++- .../core_api/openapi/v2-rest-api-generated.yaml | 1838 ++++----- .../api_fastapi/core_api/routes/public/assets.py | 12 +- .../core_api/routes/public/backfills.py | 39 + .../core_api/routes/public/connections.py | 15 + .../core_api/routes/public/dag_parsing.py | 49 +- .../api_fastapi/core_api/routes/public/dag_run.py | 85 +- .../api_fastapi/core_api/routes/public/dags.py | 2 +- .../core_api/routes/public/event_logs.py | 21 +- .../core_api/routes/public/import_error.py | 65 +- .../api_fastapi/core_api/routes/public/job.py | 4 + .../api_fastapi/core_api/routes/public/plugins.py | 16 +- .../core_api/routes/public/task_instances.py | 113 +- .../api_fastapi/core_api/routes/ui/assets.py | 97 +- .../airflow/api_fastapi/core_api/routes/ui/dags.py | 61 +- .../api_fastapi/core_api/routes/ui/deadlines.py | 4 +- .../api_fastapi/core_api/routes/ui/dependencies.py | 2 +- .../airflow/api_fastapi/core_api/routes/ui/grid.py | 60 +- .../core_api/routes/ui/partitioned_dag_runs.py | 19 +- .../api_fastapi/core_api/routes/ui/structure.py | 97 +- .../src/airflow/api_fastapi/core_api/security.py | 53 +- .../core_api/services/public/dag_run.py | 25 +- .../core_api/services/public/event_logs.py | 40 + .../core_api/services/public/task_instances.py | 36 +- .../core_api/services/ui/dependencies.py | 486 ++- .../api_fastapi/core_api/services/ui/grid.py | 7 +- .../api_fastapi/core_api/services/ui/structure.py | 185 - .../api_fastapi/core_api/services/ui/task_group.py | 65 +- .../airflow/api_fastapi/execution_api/AGENTS.md | 4 +- .../src/airflow/api_fastapi/execution_api/app.py | 2 + .../execution_api/routes/asset_events.py | 27 +- .../api_fastapi/execution_api/routes/dag_runs.py | 8 + .../execution_api/routes/task_instances.py | 14 +- .../src/airflow/api_fastapi/logging/decorators.py | 2 +- airflow-core/src/airflow/assets/manager.py | 112 +- .../src/airflow/cli/commands/backfill_command.py | 2 + .../src/airflow/cli/commands/config_command.py | 5 +- .../src/airflow/cli/commands/dag_command.py | 3 + .../src/airflow/cli/commands/db_command.py | 6 + .../src/airflow/cli/commands/task_command.py | 7 +- airflow-core/src/airflow/cli/utils.py | 15 + .../config_templates/airflow_local_settings.py | 8 + .../src/airflow/config_templates/config.yml | 45 +- airflow-core/src/airflow/configuration.py | 12 +- .../src/airflow/dag_processing/bundles/manager.py | 15 +- airflow-core/src/airflow/dag_processing/manager.py | 27 +- .../src/airflow/executors/base_executor.py | 1 + .../airflow/executors/workloads/connection_test.py | 3 + .../src/airflow/executors/workloads/task.py | 6 +- .../src/airflow/executors/workloads/trigger.py | 1 + .../src/airflow/jobs/scheduler_job_runner.py | 470 ++- .../src/airflow/jobs/triggerer_job_runner.py | 49 +- airflow-core/src/airflow/logging_config.py | 50 +- ...03_2_7_0_add_include_deferred_column_to_pool.py | 2 +- .../0004_2_8_0_add_clear_number_to_dag_run.py | 2 +- ...011_2_9_0_add_dataset_expression_in_dagmodel.py | 2 +- ...2_9_0_adding_adding_max_failure_runs_column_.py | 2 +- ...014_2_9_0_add_display_name_for_dag_and_task_.py | 2 +- .../0015_2_9_0_update_trigger_kwargs_type.py | 2 +- ...nconsistency_between_ORM_and_migration_files.py | 2 +- .../0019_2_10_0_add_new_executor_field_to_db.py | 2 +- ...2_10_0_added_dagpriorityparsingrequest_table.py | 2 +- .../0043_3_0_0_remove_scheduler_lock_column.py | 2 +- .../versions/0047_3_0_0_add_dag_versioning.py | 2 +- ...task_instance_trigger_timeout_to_utcdatetime.py | 2 +- ..._3_0_0_remove_pickled_data_from_dagrun_table.py | 2 +- ...3_0_0_add_new_task_instance_field_scheduled_.py | 2 +- .../0059_3_0_0_remove_external_trigger_field.py | 2 +- ...4_3_1_0_add_last_parse_duration_to_dag_model.py | 2 +- ...3_2_0_replace_asset_trigger_table_with_asset.py | 2 +- ...0_replace_deadline_inline_callback_with_fkey.py | 6 +- ...0_3_2_0_add_timetable_type_to_dag_table_for_.py | 2 +- ...127_3_4_0_add_idx_asset_event_partition_key.py} | 29 +- airflow-core/src/airflow/models/asset.py | 13 +- airflow-core/src/airflow/models/dag.py | 4 +- airflow-core/src/airflow/models/dagrun.py | 164 +- airflow-core/src/airflow/models/serialized_dag.py | 27 +- airflow-core/src/airflow/models/taskinstance.py | 29 +- airflow-core/src/airflow/models/taskmap.py | 16 +- airflow-core/src/airflow/models/trigger.py | 11 +- airflow-core/src/airflow/plugins_manager.py | 39 +- airflow-core/src/airflow/provider.yaml.schema.json | 48 + .../src/airflow/secrets/local_filesystem.py | 1 + airflow-core/src/airflow/serialization/decoders.py | 23 +- .../airflow/serialization/definitions/taskgroup.py | 25 +- airflow-core/src/airflow/settings.py | 7 +- airflow-core/src/airflow/ti_deps/dep_context.py | 31 + .../src/airflow/ti_deps/deps/trigger_rule_dep.py | 70 +- .../src/airflow/ui/openapi-gen/queries/common.ts | 90 +- .../ui/openapi-gen/queries/ensureQueryData.ts | 407 +- .../src/airflow/ui/openapi-gen/queries/prefetch.ts | 407 +- .../src/airflow/ui/openapi-gen/queries/queries.ts | 413 +- .../src/airflow/ui/openapi-gen/queries/suspense.ts | 407 +- .../airflow/ui/openapi-gen/requests/schemas.gen.ts | 249 +- .../ui/openapi-gen/requests/services.gen.ts | 425 +- .../airflow/ui/openapi-gen/requests/types.gen.ts | 500 ++- airflow-core/src/airflow/ui/package.json | 48 +- airflow-core/src/airflow/ui/pnpm-lock.yaml | 1385 +++---- .../airflow/ui/public/i18n/locales/ar/admin.json | 1 + .../airflow/ui/public/i18n/locales/ar/assets.json | 20 +- .../airflow/ui/public/i18n/locales/ar/common.json | 76 +- .../ui/public/i18n/locales/ar/components.json | 2 + .../src/airflow/ui/public/i18n/locales/ar/dag.json | 25 +- .../airflow/ui/public/i18n/locales/ar/dags.json | 11 + .../ui/public/i18n/locales/ar/dashboard.json | 22 + .../airflow/ui/public/i18n/locales/ar/hitl.json | 14 + .../src/airflow/ui/public/i18n/locales/ca/dag.json | 5 - .../src/airflow/ui/public/i18n/locales/de/dag.json | 5 - .../airflow/ui/public/i18n/locales/el/admin.json | 32 +- .../airflow/ui/public/i18n/locales/el/assets.json | 26 +- .../airflow/ui/public/i18n/locales/el/browse.json | 44 +- .../airflow/ui/public/i18n/locales/el/common.json | 207 +- .../ui/public/i18n/locales/el/components.json | 46 +- .../src/airflow/ui/public/i18n/locales/el/dag.json | 118 +- .../airflow/ui/public/i18n/locales/el/dags.json | 23 +- .../ui/public/i18n/locales/el/dashboard.json | 23 +- .../airflow/ui/public/i18n/locales/el/hitl.json | 18 + .../airflow/ui/public/i18n/locales/en/assets.json | 5 +- .../airflow/ui/public/i18n/locales/en/common.json | 9 +- .../ui/public/i18n/locales/en/components.json | 15 +- .../src/airflow/ui/public/i18n/locales/en/dag.json | 12 +- .../airflow/ui/public/i18n/locales/en/dags.json | 10 +- .../airflow/ui/public/i18n/locales/es/admin.json | 27 +- .../airflow/ui/public/i18n/locales/es/assets.json | 27 +- .../airflow/ui/public/i18n/locales/es/browse.json | 45 +- .../airflow/ui/public/i18n/locales/es/common.json | 120 +- .../ui/public/i18n/locales/es/components.json | 37 +- .../src/airflow/ui/public/i18n/locales/es/dag.json | 118 +- .../airflow/ui/public/i18n/locales/es/dags.json | 10 + .../ui/public/i18n/locales/es/dashboard.json | 17 +- .../airflow/ui/public/i18n/locales/es/hitl.json | 17 +- .../airflow/ui/public/i18n/locales/fr/admin.json | 1 + .../airflow/ui/public/i18n/locales/fr/assets.json | 17 + .../airflow/ui/public/i18n/locales/fr/browse.json | 19 + .../airflow/ui/public/i18n/locales/fr/common.json | 95 +- .../ui/public/i18n/locales/fr/components.json | 5 + .../src/airflow/ui/public/i18n/locales/fr/dag.json | 31 +- .../airflow/ui/public/i18n/locales/fr/dags.json | 13 +- .../ui/public/i18n/locales/fr/dashboard.json | 21 + .../airflow/ui/public/i18n/locales/fr/hitl.json | 14 + .../airflow/ui/public/i18n/locales/he/admin.json | 1 + .../airflow/ui/public/i18n/locales/he/assets.json | 17 + .../airflow/ui/public/i18n/locales/he/common.json | 87 +- .../ui/public/i18n/locales/he/components.json | 2 + .../src/airflow/ui/public/i18n/locales/he/dag.json | 27 +- .../airflow/ui/public/i18n/locales/he/dags.json | 11 + .../ui/public/i18n/locales/he/dashboard.json | 19 + .../airflow/ui/public/i18n/locales/he/hitl.json | 14 + .../airflow/ui/public/i18n/locales/hi/admin.json | 1 + .../airflow/ui/public/i18n/locales/hi/assets.json | 1 - .../airflow/ui/public/i18n/locales/hi/common.json | 64 +- .../ui/public/i18n/locales/hi/components.json | 2 +- .../src/airflow/ui/public/i18n/locales/hi/dag.json | 5 - .../airflow/ui/public/i18n/locales/hi/dags.json | 7 + .../ui/public/i18n/locales/hi/dashboard.json | 6 + .../airflow/ui/public/i18n/locales/hi/hitl.json | 14 + .../src/airflow/ui/public/i18n/locales/hu/dag.json | 5 - .../airflow/ui/public/i18n/locales/ko/assets.json | 5 +- .../airflow/ui/public/i18n/locales/ko/common.json | 9 +- .../ui/public/i18n/locales/ko/components.json | 2 + .../src/airflow/ui/public/i18n/locales/ko/dag.json | 12 +- .../airflow/ui/public/i18n/locales/ko/dags.json | 12 +- .../airflow/ui/public/i18n/locales/nl/assets.json | 17 + .../airflow/ui/public/i18n/locales/nl/browse.json | 18 + .../airflow/ui/public/i18n/locales/nl/common.json | 64 +- .../ui/public/i18n/locales/nl/components.json | 24 +- .../src/airflow/ui/public/i18n/locales/nl/dag.json | 105 +- .../airflow/ui/public/i18n/locales/nl/dags.json | 25 +- .../ui/public/i18n/locales/nl/dashboard.json | 14 + .../airflow/ui/public/i18n/locales/nl/hitl.json | 14 + .../airflow/ui/public/i18n/locales/pl/admin.json | 1 + .../airflow/ui/public/i18n/locales/pl/assets.json | 23 +- .../airflow/ui/public/i18n/locales/pl/common.json | 76 +- .../ui/public/i18n/locales/pl/components.json | 2 + .../src/airflow/ui/public/i18n/locales/pl/dag.json | 31 +- .../airflow/ui/public/i18n/locales/pl/dags.json | 13 +- .../ui/public/i18n/locales/pl/dashboard.json | 22 +- .../airflow/ui/public/i18n/locales/pl/hitl.json | 14 + .../src/airflow/ui/public/i18n/locales/tr/dag.json | 5 - .../airflow/ui/public/i18n/locales/zh-CN/dag.json | 5 - .../ui/public/i18n/locales/zh-TW/common.json | 5 +- .../ui/public/i18n/locales/zh-TW/components.json | 2 + .../airflow/ui/public/i18n/locales/zh-TW/dag.json | 4 +- .../airflow/ui/public/i18n/locales/zh-TW/dags.json | 6 +- airflow-core/src/airflow/ui/rules/i18n.js | 2 +- .../ui/src/components/Assets/AssetEvent.test.tsx | 48 + .../ui/src/components/Assets/AssetEvent.tsx | 17 +- .../src/components/Banner/BackfillBanner.test.tsx | 92 + .../ui/src/components/Banner/BackfillBanner.tsx | 8 +- .../ui/src/components/Clear/Run/ClearRunDialog.tsx | 21 +- .../Clear/TaskInstance/runOnLatestVersion.test.ts | 17 +- .../Clear/TaskInstance/runOnLatestVersion.ts | 3 +- .../ui/src/components/ConfirmationModal.tsx | 8 +- .../airflow/ui/src/components/DurationChart.tsx | 278 +- .../src/airflow/ui/src/components/Graph/Edge.tsx | 7 +- .../ui/src/components/Graph/TaskLink.test.tsx | 49 + .../airflow/ui/src/components/Graph/TaskLink.tsx | 7 +- .../ui/src/components/Graph/TaskNode.test.tsx | 100 + .../airflow/ui/src/components/Graph/TaskNode.tsx | 40 +- .../ui/src/components/Graph/elkGraphUtils.test.ts | 56 + .../ui/src/components/Graph/elkGraphUtils.ts | 8 +- .../airflow/ui/src/components/Graph/nodeColors.ts | 85 + .../ui/src/components/Graph/reactflowUtils.test.ts | 118 + .../ui/src/components/Graph/reactflowUtils.ts | 107 + .../airflow/ui/src/components/JsonEditor.test.tsx | 86 + .../src/airflow/ui/src/components/JsonEditor.tsx | 23 +- .../TaskInstance/MarkTaskInstanceAsDialog.test.tsx | 90 + .../TaskInstance/MarkTaskInstanceAsDialog.tsx | 1 - .../src/components/SlowestTaskInstancesChart.tsx | 161 + .../src/airflow/ui/src/components/TaskName.tsx | 2 - .../TriggerDag/TriggerDAGAdvancedOptions.tsx | 38 +- .../components/TriggerDag/TriggerDAGForm.test.tsx | 90 +- .../src/components/TriggerDag/TriggerDAGForm.tsx | 14 +- .../ui/src/components/renderStructuredLog.test.tsx | 41 + .../ui/src/components/renderStructuredLog.tsx | 16 +- .../src/airflow/ui/src/constants/filterConfigs.tsx | 34 +- .../airflow/ui/src/constants/localStorage.test.ts | 51 + .../src/airflow/ui/src/constants/localStorage.ts | 19 +- .../src/airflow/ui/src/constants/searchParams.ts | 7 +- .../src/airflow/ui/src/constants/sortParams.ts | 8 +- .../ui/src/context/groups/GroupsProvider.tsx | 4 +- .../airflow/ui/src/hooks/useNearViewport.test.tsx | 217 ++ .../src/airflow/ui/src/hooks/useNearViewport.ts | 148 + .../ui/src/layouts/Details/DetailsLayout.tsx | 418 +- .../airflow/ui/src/layouts/Details/Gantt/Gantt.tsx | 20 +- .../layouts/Details/Gantt/GanttTimeline.test.tsx | 7 +- .../ui/src/layouts/Details/Gantt/GanttTimeline.tsx | 9 +- .../airflow/ui/src/layouts/Details/Graph/Graph.tsx | 34 +- .../airflow/ui/src/layouts/Details/Grid/Bar.tsx | 12 +- .../airflow/ui/src/layouts/Details/Grid/Grid.tsx | 47 +- .../airflow/ui/src/layouts/Details/Grid/GridTI.tsx | 14 +- .../layouts/Details/Grid/TaskInstancesColumn.tsx | 15 +- .../ui/src/layouts/Details/Grid/TaskNames.tsx | 19 +- .../Details/Grid/gridHover.css} | 21 +- .../layouts/Details/Grid/useGridCrosshairHover.ts | 95 + .../airflow/ui/src/layouts/Details/GridFilters.tsx | 8 +- .../ui/src/layouts/Details/PanelButtons.tsx | 78 +- .../src/airflow/ui/src/layouts/Nav/AdminButton.tsx | 23 +- .../airflow/ui/src/layouts/Nav/BrowseButton.tsx | 23 +- .../src/airflow/ui/src/layouts/Nav/Nav.tsx | 1 + .../airflow/ui/src/layouts/Nav/NavButton.test.tsx | 114 + .../src/airflow/ui/src/layouts/Nav/NavButton.tsx | 37 +- .../src/airflow/ui/src/layouts/Nav/PluginMenus.tsx | 7 +- .../airflow/ui/src/layouts/Nav/SecurityButton.tsx | 30 +- airflow-core/src/airflow/ui/src/main.tsx | 3 + .../src/airflow/ui/src/mocks/handlers/dags.ts | 33 +- .../src/airflow/ui/src/pages/Asset/AssetGraph.tsx | 15 +- .../src/airflow/ui/src/pages/Asset/AssetLayout.tsx | 4 + .../src/pages/Asset/CreateAssetEventModal.test.tsx | 222 ++ .../ui/src/pages/Asset/CreateAssetEventModal.tsx | 34 +- .../airflow/ui/src/pages/AssetsList/AssetsList.tsx | 84 +- .../pages/Dag/Backfills/BackfillDagRunsModal.tsx | 219 ++ .../ui/src/pages/Dag/Backfills/Backfills.test.tsx | 395 ++ .../ui/src/pages/Dag/Backfills/Backfills.tsx | 56 +- .../airflow/ui/src/pages/Dag/Calendar/Calendar.tsx | 32 +- .../ui/src/pages/Dag/Calendar/CalendarCell.tsx | 31 +- .../ui/src/pages/Dag/Calendar/CalendarLegend.tsx | 73 +- .../ui/src/pages/Dag/Calendar/CalendarTooltip.tsx | 72 +- .../src/pages/Dag/Calendar/DailyCalendarView.tsx | 14 +- .../src/pages/Dag/Calendar/HourlyCalendarView.tsx | 11 +- .../ui/src/pages/Dag/Calendar/LegendIcon.tsx | 64 + .../src/pages/Dag/Calendar/calendarUtils.test.ts | 67 +- .../ui/src/pages/Dag/Calendar/calendarUtils.ts | 54 +- .../src/airflow/ui/src/pages/Dag/Calendar/types.ts | 6 + .../ui/src/pages/Dag/DeadlineAlertsBadge.test.tsx | 89 + .../ui/src/pages/Dag/DeadlineAlertsBadge.tsx | 13 +- .../ui/src/pages/Dag/Overview/DeadlineRow.tsx | 20 +- .../ui/src/pages/Dag/Overview/Overview.test.tsx | 68 + .../airflow/ui/src/pages/Dag/Overview/Overview.tsx | 80 +- .../src/airflow/ui/src/pages/DagRuns/DagRuns.tsx | 24 +- .../ui/src/pages/DagRuns/DagRunsFilters.tsx | 6 + .../airflow/ui/src/pages/DagsList/DagCard.test.tsx | 131 +- .../src/airflow/ui/src/pages/DagsList/DagCard.tsx | 87 +- .../ui/src/pages/DagsList/DagCardActions.tsx | 39 + .../ui/src/pages/DagsList/DagRunStateCounts.tsx | 84 +- .../DagsList/DagsFilters/DagsFilterSelect.tsx | 83 + .../DagsList/DagsFilters/DagsFilters.test.tsx | 80 +- .../src/pages/DagsList/DagsFilters/DagsFilters.tsx | 94 +- .../src/pages/DagsList/DagsFilters/TagFilter.tsx | 60 +- .../src/pages/DagsList/DagsFilters/TeamFilter.tsx | 80 + .../DagsList/DagsFilters/TimetableTypeFilter.tsx | 58 + .../ui/src/pages/DagsList/DagsList.test.tsx | 39 +- .../src/airflow/ui/src/pages/DagsList/DagsList.tsx | 29 +- .../src/airflow/ui/src/pages/Events/Events.tsx | 5 +- .../ui/src/pages/GroupTaskInstance/Header.tsx | 4 +- airflow-core/src/airflow/ui/src/pages/Iframe.tsx | 17 +- .../src/airflow/ui/src/pages/ReactPlugin.test.tsx | 144 + .../src/airflow/ui/src/pages/ReactPlugin.tsx | 70 +- .../airflow/ui/src/pages/Run/DeadlineStatus.tsx | 23 +- .../ui/src/pages/Run/DeadlineStatusModal.tsx | 16 +- .../src/airflow/ui/src/pages/Run/Header.test.tsx | 94 + .../src/airflow/ui/src/pages/Run/Header.tsx | 2 +- .../ui/src/pages/Task/Overview/Overview.test.tsx | 63 + .../ui/src/pages/Task/Overview/Overview.tsx | 42 +- .../ui/src/pages/TaskInstances/TaskInstances.tsx | 23 +- .../pages/TaskInstances/TaskInstancesFilter.tsx | 7 + .../ui/src/queries/useDagTimetableTypesInfinite.ts | 68 + .../src/airflow/ui/src/queries/useDags.tsx | 12 +- .../src/airflow/ui/src/queries/useGridRuns.ts | 25 +- .../src/airflow/ui/src/queries/useGridStructure.ts | 25 +- .../ui/src/queries/useGridTISummaries.test.tsx | 93 + .../airflow/ui/src/queries/useGridTISummaries.ts | 19 +- .../src/airflow/ui/src/queries/useTrigger.ts | 4 +- airflow-core/src/airflow/ui/src/router.tsx | 2 + airflow-core/src/airflow/ui/src/theme.ts | 6 + .../src/airflow/ui/src/utils/datetimeUtils.test.ts | 67 +- .../src/airflow/ui/src/utils/datetimeUtils.ts | 60 +- .../src/airflow/ui/src/utils/deadlines.test.ts | 52 + airflow-core/src/airflow/ui/src/utils/deadlines.ts | 44 + airflow-core/src/airflow/ui/src/utils/index.ts | 1 + airflow-core/src/airflow/ui/src/utils/logs.test.ts | 21 +- airflow-core/src/airflow/ui/src/utils/logs.ts | 5 + .../src/airflow/ui/src/utils/median.test.ts | 51 + .../hover/HoverProvider.tsx => utils/median.ts} | 18 +- .../Context.ts => utils/partitionKey.test.ts} | 19 +- .../hover/index.ts => utils/partitionKey.ts} | 6 +- .../src/airflow/ui/src/utils/useFiltersHandler.ts | 3 + .../src/airflow/ui/tests/e2e/pages/BackfillPage.ts | 13 +- airflow-core/src/airflow/utils/db.py | 21 +- airflow-core/src/airflow/utils/db_cleanup.py | 134 +- airflow-core/src/airflow/utils/db_manager.py | 8 + airflow-core/src/airflow/utils/sqlalchemy.py | 52 + airflow-core/tests/integration/otel/test_otel.py | 200 +- .../tests/unit/always/test_project_structure.py | 4 +- .../tests/unit/api/common/test_mark_tasks.py | 9 +- .../api_fastapi/auth/managers/models/__init__.py | 2 - .../auth/managers/models/test_base_user.py | 18 +- .../auth/managers/test_base_auth_manager.py | 50 +- .../unit/api_fastapi/common/test_exceptions.py | 60 +- .../unit/api_fastapi/common/test_parameters.py | 53 + .../core_api/datamodels/test_plugins.py} | 18 +- .../core_api/routes/public/test_assets.py | 157 + .../core_api/routes/public/test_backfills.py | 168 + .../core_api/routes/public/test_connections.py | 65 + .../core_api/routes/public/test_dag_parsing.py | 11 +- .../core_api/routes/public/test_dag_run.py | 302 +- .../core_api/routes/public/test_dags.py | 2 +- .../core_api/routes/public/test_event_logs.py | 36 +- .../core_api/routes/public/test_hitl.py | 1 + .../core_api/routes/public/test_import_error.py | 327 +- .../api_fastapi/core_api/routes/public/test_job.py | 17 + .../core_api/routes/public/test_plugins.py | 88 +- .../core_api/routes/public/test_task_instances.py | 159 + .../api_fastapi/core_api/routes/ui/test_assets.py | 286 +- .../api_fastapi/core_api/routes/ui/test_dags.py | 159 +- .../core_api/routes/ui/test_deadlines.py | 83 +- .../core_api/routes/ui/test_dependencies.py | 364 +- .../api_fastapi/core_api/routes/ui/test_grid.py | 33 + .../routes/ui/test_partitioned_dag_runs.py | 161 +- .../core_api/routes/ui/test_structure.py | 509 +-- .../core_api/services/public/test_event_logs.py | 75 + .../unit/api_fastapi/core_api/test_security.py | 8 + .../unit/api_fastapi/execution_api/test_app.py | 18 +- .../versions/head/test_asset_events.py | 351 ++ .../execution_api/versions/head/test_dag_runs.py | 26 + .../versions/head/test_task_instances.py | 60 +- .../execution_api/versions/head/test_xcoms.py | 2 +- .../unit/api_fastapi/logging/test_decorators.py | 31 + airflow-core/tests/unit/assets/test_manager.py | 49 + .../tests/unit/cli/commands/test_asset_command.py | 2 + .../unit/cli/commands/test_cheat_sheet_command.py | 18 +- .../unit/cli/commands/test_command_deprecations.py | 12 + .../tests/unit/cli/commands/test_config_command.py | 33 + .../tests/unit/cli/commands/test_db_command.py | 17 + .../unit/cli/commands/test_plugins_command.py | 1 + .../cli/commands/test_rotate_fernet_key_command.py | 2 +- airflow-core/tests/unit/cli/test_utils.py | 51 +- airflow-core/tests/unit/core/test_configuration.py | 68 +- .../tests/unit/core/test_sqlalchemy_config.py | 24 + .../bundles/test_dag_bundle_manager.py | 56 + .../tests/unit/dag_processing/test_manager.py | 84 +- .../tests/unit/dag_processing/test_processor.py | 94 +- .../tests/unit/executors/test_base_executor.py | 30 + .../tests/unit/executors/test_workloads.py | 55 +- airflow-core/tests/unit/jobs/test_scheduler_job.py | 813 +++- airflow-core/tests/unit/jobs/test_triggerer_job.py | 240 +- .../tests/unit/listeners/class_listener.py | 14 + .../tests/unit/logging/test_logging_config.py | 63 + airflow-core/tests/unit/models/test_dag.py | 27 + airflow-core/tests/unit/models/test_dagrun.py | 270 +- .../tests/unit/models/test_mappedoperator.py | 79 + .../tests/unit/models/test_serialized_dag.py | 198 +- .../tests/unit/models/test_taskinstance.py | 274 +- .../tests/unit/plugins/test_plugins_manager.py | 77 +- .../unit/ti_deps/deps/test_trigger_rule_dep.py | 242 ++ airflow-core/tests/unit/utils/test_db_cleanup.py | 428 +- airflow-core/tests/unit/utils/test_db_manager.py | 8 + airflow-core/tests/unit/utils/test_log_handlers.py | 7 +- airflow-core/tests/unit/utils/test_sqlalchemy.py | 63 + airflow-core/tests/unit/utils/test_task_group.py | 142 +- airflow-ctl-tests/pyproject.toml | 2 +- .../airflowctl_tests/test_airflowctl_commands.py | 12 +- airflow-ctl/docs/conf.py | 5 +- airflow-ctl/docs/howto/index.rst | 14 + airflow-ctl/docs/images/command_hashes.txt | 6 +- airflow-ctl/docs/images/output_dags.svg | 138 +- airflow-ctl/docs/images/output_main.svg | 142 +- airflow-ctl/docs/images/output_taskinstances.svg | 109 + airflow-ctl/docs/images/output_tasks.svg | 109 + airflow-ctl/docs/spelling_wordlist.txt | 1 + airflow-ctl/pyproject.toml | 6 +- airflow-ctl/src/airflowctl/api/client.py | 14 + .../airflowctl/api/datamodels/auth_generated.py | 2 +- .../src/airflowctl/api/datamodels/generated.py | 416 +- airflow-ctl/src/airflowctl/api/operations.py | 610 ++- airflow-ctl/src/airflowctl/ctl/cli_config.py | 215 +- .../src/airflowctl/ctl/commands/dag_command.py | 248 +- .../src/airflowctl/ctl/commands/task_command.py | 151 + airflow-ctl/src/airflowctl/ctl/help_texts.yaml | 9 + .../tests/airflow_ctl/api/test_operations.py | 394 +- .../ctl/commands/test_connections_command.py | 4 +- .../airflow_ctl/ctl/commands/test_dag_command.py | 436 ++- .../airflow_ctl/ctl/commands/test_task_command.py | 633 +++ .../ctl/commands/test_variable_command.py | 5 +- .../tests/airflow_ctl/ctl/test_cli_config.py | 97 +- airflow-e2e-tests/docker/openlineage-compat-db.yml | 48 + airflow-e2e-tests/docker/ts.yml | 42 + airflow-e2e-tests/pyproject.toml | 2 +- .../tests/airflow_e2e_tests/conftest.py | 285 +- .../tests/airflow_e2e_tests/constants.py | 22 +- .../airflow_e2e_tests/ts_sdk_tests/__init__.py | 2 - .../ts_sdk_tests/test_ts_sdk_dag.py | 134 + chart/README.md | 2 +- chart/docs/production-guide.rst | 123 +- chart/newsfragments/65666.significant.rst | 3 - chart/newsfragments/65852.significant.rst | 1 + chart/newsfragments/66671.significant.rst | 3 + chart/newsfragments/67681.significant.rst | 3 - chart/newsfragments/69481.significant.rst | 2 +- chart/pyproject.toml | 2 +- chart/templates/_helpers.yaml | 62 +- chart/templates/flower/flower-httproute.yaml | 70 + chart/templates/flower/flower-ingress.yaml | 3 + .../templates/triggerer/triggerer-deployment.yaml | 3 + chart/templates/workers/worker-deployment.yaml | 3 + .../helm_tests/airflow_aux/test_airflow_common.py | 95 + .../airflow_aux/test_basic_helm_chart.py | 44 +- .../airflow_aux/test_pod_template_file.py | 33 + .../helm_tests/other/test_httproute_flower.py | 413 ++ chart/tests/helm_tests/other/test_keda.py | 44 + chart/values.schema.json | 228 +- chart/values.yaml | 76 +- clients/python/pyproject.toml | 2 +- contributing-docs/03_contributors_quick_start.rst | 20 +- .../03a_contributors_quick_start_beginners.rst | 4 +- contributing-docs/05_pull_requests.rst | 30 + contributing-docs/08_static_code_checks.rst | 3 +- contributing-docs/14_metadata_database_updates.rst | 6 +- contributing-docs/27_cli_implementation_guide.rst | 2 +- contributing-docs/30_new_language_sdk.rst | 29 + contributing-docs/mprocs/MPROCS_QUICK_REFERENCE.md | 8 + contributing-docs/testing/airflow_ctl_tests.rst | 2 +- contributing-docs/testing/integration_tests.rst | 2 +- .../testing/task_sdk_integration_tests.rst | 6 +- contributing-docs/testing/unit_tests.rst | 4 +- dev/README.md | 12 +- dev/README_RELEASE_AIRFLOW.md | 5 +- dev/README_RELEASE_PROVIDERS.md | 88 +- dev/assign_cherry_picked_prs_with_milestone.py | 1 - dev/breeze/doc/03_developer_tasks.rst | 17 +- dev/breeze/doc/ci/02_images.md | 4 +- dev/breeze/doc/ci/04_selective_checks.md | 44 +- dev/breeze/doc/images/output_build-docs.svg | 60 +- dev/breeze/doc/images/output_build-docs.txt | 2 +- dev/breeze/doc/images/output_ci-image_build.svg | 104 +- dev/breeze/doc/images/output_ci-image_build.txt | 2 +- dev/breeze/doc/images/output_ci-image_load.svg | 22 +- dev/breeze/doc/images/output_ci-image_load.txt | 2 +- .../doc/images/output_ci_selective-check.svg | 46 +- .../doc/images/output_ci_selective-check.txt | 2 +- ...tput_release-management_add-back-references.svg | 16 +- ...tput_release-management_add-back-references.txt | 2 +- .../output_release-management_publish-docs.svg | 16 +- .../output_release-management_publish-docs.txt | 2 +- ...output_sbom_generate-providers-requirements.svg | 18 +- ...output_sbom_generate-providers-requirements.txt | 2 +- .../images/output_testing_airflow-e2e-tests.svg | 2 +- .../images/output_testing_airflow-e2e-tests.txt | 2 +- .../images/output_workflow-run_publish-docs.svg | 16 +- .../images/output_workflow-run_publish-docs.txt | 2 +- dev/breeze/pyproject.toml | 4 +- .../src/airflow_breeze/commands/ci_commands.py | 14 + .../airflow_breeze/commands/ci_commands_config.py | 1 + .../airflow_breeze/commands/ci_image_commands.py | 16 + .../commands/ci_image_commands_config.py | 2 + .../commands/common_image_options.py | 11 + .../airflow_breeze/commands/developer_commands.py | 8 +- .../commands/developer_commands_config.py | 1 + .../airflow_breeze/commands/kubernetes_commands.py | 158 +- .../commands/release_management_commands.py | 32 +- .../airflow_breeze/commands/testing_commands.py | 8 + .../src/airflow_breeze/commands/ui_commands.py | 2 +- dev/breeze/src/airflow_breeze/global_constants.py | 15 +- .../airflow_breeze/params/common_build_params.py | 10 + .../src/airflow_breeze/params/shell_params.py | 19 + .../utils/constraints_version_check.py | 211 +- .../airflow_breeze/utils/docker_command_utils.py | 88 +- dev/breeze/src/airflow_breeze/utils/github.py | 6 +- .../src/airflow_breeze/utils/selective_checks.py | 164 +- dev/breeze/tests/conftest.py | 8 - dev/breeze/tests/test_build_ci_params.py | 57 + dev/breeze/tests/test_constraints_version_check.py | 169 + dev/breeze/tests/test_developer_commands.py | 68 + dev/breeze/tests/test_docker_command_utils.py | 164 + .../tests/test_kubernetes_lang_sdk_commands.py | 244 +- .../tests/test_release_management_commands.py | 86 + dev/breeze/tests/test_selective_checks.py | 556 ++- dev/breeze/tests/test_shell_params.py | 36 + dev/breeze/tests/test_ui_commands.py | 17 + dev/breeze/uv.lock | 564 +-- dev/mypy/pyproject.toml | 2 +- dev/pyproject.toml | 2 +- dev/react-plugin-tools/README.md | 8 + dev/react-plugin-tools/bootstrap.py | 23 +- .../react_plugin_template/ai-agent-rules/README.md | 43 + .../ai-agent-rules/airflow-plugin.md} | 48 +- .../ai-agent-rules/react-typescript.md} | 49 +- .../ai-agent-rules/testing.md} | 42 +- dev/registry/extract_parameters.py | 26 +- dev/registry/pyproject.toml | 2 +- dev/registry/registry_tools/types.py | 16 + dev/registry/tests/test_extract_parameters.py | 24 + dev/skill-evals/eval.py | 6 +- dev/skill-evals/last-eval-hash.txt | 2 +- dev/update_github_branch_config.py | 117 + devel-common/pyproject.toml | 4 +- devel-common/src/tests_common/pytest_plugin.py | 181 +- .../tests_common/test_utils/integration_setup.py | 201 + .../tests/unit/tests_common/test_pytest_plugin.py | 463 +++ docker-stack-docs/changelog.rst | 7 + docker-stack-docs/pyproject.toml | 2 +- docker-tests/pyproject.toml | 2 +- docs/spelling_wordlist.txt | 13 + generated/PYPI_README.md | 2 +- generated/known_airflow_exceptions.txt | 2 +- generated/provider_metadata.json | 452 ++- go-sdk/README.md | 3 + .../adr/0003-coordinator-protocol-msgpack-ipc.md | 14 +- go-sdk/cmd/airflow-go-pack/pack.go | 1 + go-sdk/cmd/airflow-go-pack/validate.go | 75 + go-sdk/cmd/airflow-go-pack/validate_test.go | 142 + go-sdk/go.mod | 10 +- go-sdk/go.sum | 36 +- java-sdk/README.md | 4 +- .../org/apache/airflow/sdk/BuilderProcessor.kt | 25 +- .../kotlin/org/apache/airflow/sdk/BuilderTest.kt | 83 +- .../main/kotlin/org/apache/airflow/sdk/Client.kt | 16 + .../main/kotlin/org/apache/airflow/sdk/Context.kt | 76 +- .../main/kotlin/org/apache/airflow/sdk/Server.kt | 29 +- .../org/apache/airflow/sdk/execution/Comm.kt | 170 +- .../org/apache/airflow/sdk/execution/Frame.kt | 18 +- .../org/apache/airflow/sdk/execution/Logger.kt | 5 + .../kotlin/org/apache/airflow/sdk/ClientTest.kt | 12 + .../kotlin/org/apache/airflow/sdk/ContextTest.kt | 128 + .../kotlin/org/apache/airflow/sdk/ServerTest.kt | 142 + .../org/apache/airflow/sdk/execution/CommTest.kt | 210 +- kubernetes-tests/lang_sdk/README.md | 11 + kubernetes-tests/lang_sdk/go_example/go.mod | 6 +- kubernetes-tests/lang_sdk/go_example/go.sum | 36 +- kubernetes-tests/pyproject.toml | 2 +- .../test_kubernetes_pod_operator.py | 1 + providers-summary-docs/pyproject.toml | 2 +- providers/.last_release_date.txt | 2 +- providers/.pre-commit-config.yaml | 17 +- providers/airbyte/README.rst | 6 +- providers/airbyte/docs/changelog.rst | 13 +- providers/airbyte/docs/index.rst | 6 +- providers/airbyte/provider.yaml | 3 +- providers/airbyte/pyproject.toml | 6 +- .../src/airflow/providers/airbyte/__init__.py | 2 +- providers/akeyless/README.rst | 6 +- providers/akeyless/docs/changelog.rst | 18 + providers/akeyless/docs/index.rst | 6 +- providers/akeyless/provider.yaml | 3 +- providers/akeyless/pyproject.toml | 6 +- .../src/airflow/providers/akeyless/__init__.py | 2 +- .../alibaba/cloud/sensors/test_analyticdb_spark.py | 2 +- providers/amazon/README.rst | 6 +- providers/amazon/docs/changelog.rst | 50 + providers/amazon/docs/executors/batch-executor.rst | 2 +- providers/amazon/docs/executors/ecs-executor.rst | 2 +- .../amazon/docs/executors/lambda-executor.rst | 2 +- providers/amazon/docs/index.rst | 6 +- providers/amazon/docs/operators/dms.rst | 32 + providers/amazon/docs/operators/dynamodb.rst | 1 + providers/amazon/docs/operators/ecr.rst | 90 + providers/amazon/docs/operators/emr/emr.rst | 17 + providers/amazon/docs/operators/glue.rst | 75 +- .../docs/operators/redshift/redshift_data.rst | 13 +- providers/amazon/provider.yaml | 17 +- providers/amazon/pyproject.toml | 8 +- .../src/airflow/providers/amazon/__init__.py | 2 +- .../amazon/aws/auth_manager/aws_auth_manager.py | 3 + .../amazon/aws/auth_manager/routes/login.py | 2 +- .../providers/amazon/aws/hooks/redshift_data.py | 2 +- .../providers/amazon/aws/hooks/redshift_sql.py | 37 +- .../src/airflow/providers/amazon/aws/hooks/s3.py | 2 +- .../amazon/aws/log/cloudwatch_task_handler.py | 36 + .../providers/amazon/aws/log/s3_task_handler.py | 26 + .../providers/amazon/aws/operators/appflow.py | 63 +- .../providers/amazon/aws/operators/athena.py | 17 +- .../providers/amazon/aws/operators/bedrock.py | 16 +- .../providers/amazon/aws/operators/datasync.py | 28 +- .../airflow/providers/amazon/aws/operators/dms.py | 137 +- .../airflow/providers/amazon/aws/operators/ecr.py | 231 ++ .../airflow/providers/amazon/aws/operators/ecs.py | 23 +- .../airflow/providers/amazon/aws/operators/emr.py | 41 + .../airflow/providers/amazon/aws/operators/glue.py | 4 +- .../providers/amazon/aws/operators/glue_crawler.py | 255 +- .../amazon/aws/operators/redshift_cluster.py | 122 +- .../airflow/providers/amazon/aws/operators/s3.py | 8 +- .../amazon/aws/operators/step_function.py | 6 +- .../providers/amazon/aws/sensors/dynamodb.py | 41 +- .../airflow/providers/amazon/aws/transfers/base.py | 15 +- .../providers/amazon/aws/transfers/mongo_to_s3.py | 8 +- .../amazon/aws/transfers/s3_to_redshift.py | 37 +- .../airflow/providers/amazon/aws/triggers/dms.py | 129 +- .../providers/amazon/aws/triggers/dynamodb.py | 168 + .../airflow/providers/amazon/aws/triggers/ecs.py | 11 +- .../amazon/aws/triggers/redshift_cluster.py | 54 + .../airflow/providers/amazon/aws/waiters/dms.json | 122 + .../providers/amazon/aws/waiters/redshift.json | 55 + .../airflow/providers/amazon/get_provider_info.py | 16 + .../aws/example_bedrock_retrieve_and_generate.py | 19 + .../amazon/tests/system/amazon/aws/example_dms.py | 193 +- .../amazon/tests/system/amazon/aws/example_ecr.py | 99 + .../amazon/tests/system/amazon/aws/example_glue.py | 65 +- .../tests/system/amazon/aws/example_s3_to_sql.py | 1 + .../tests/system/amazon/aws/example_sql_to_s3.py | 1 + .../amazon/aws/auth_manager/routes/test_login.py | 11 +- .../aws/executors/batch/test_batch_executor.py | 2 + .../amazon/aws/executors/ecs/test_ecs_executor.py | 2 + .../tests/unit/amazon/aws/hooks/test_base_aws.py | 6 + .../amazon/tests/unit/amazon/aws/hooks/test_dms.py | 1 - .../unit/amazon/aws/hooks/test_redshift_sql.py | 43 +- .../amazon/tests/unit/amazon/aws/hooks/test_s3.py | 32 +- .../amazon/aws/log/test_cloudwatch_task_handler.py | 102 + .../unit/amazon/aws/log/test_s3_task_handler.py | 83 +- .../unit/amazon/aws/operators/test_appflow.py | 39 + .../tests/unit/amazon/aws/operators/test_athena.py | 35 + .../unit/amazon/aws/operators/test_bedrock.py | 40 + .../unit/amazon/aws/operators/test_datasync.py | 37 +- .../tests/unit/amazon/aws/operators/test_dms.py | 255 +- .../tests/unit/amazon/aws/operators/test_ecr.py | 208 + .../tests/unit/amazon/aws/operators/test_ecs.py | 74 + .../amazon/aws/operators/test_emr_add_steps.py | 137 + .../tests/unit/amazon/aws/operators/test_glue.py | 27 + .../unit/amazon/aws/operators/test_glue_crawler.py | 198 +- .../amazon/aws/operators/test_redshift_cluster.py | 153 +- .../tests/unit/amazon/aws/operators/test_s3.py | 2 +- .../amazon/aws/operators/test_step_function.py | 2 +- .../tests/unit/amazon/aws/sensors/test_dynamodb.py | 60 +- .../tests/unit/amazon/aws/transfers/test_base.py | 17 + .../unit/amazon/aws/transfers/test_mongo_to_s3.py | 26 +- .../amazon/aws/transfers/test_s3_to_redshift.py | 23 +- .../tests/unit/amazon/aws/triggers/test_dms.py | 153 + .../unit/amazon/aws/triggers/test_dynamodb.py | 175 + .../tests/unit/amazon/aws/triggers/test_ecs.py | 68 +- .../amazon/aws/triggers/test_redshift_cluster.py | 36 +- .../tests/unit/amazon/aws/waiters/test_dms.py | 101 + providers/anthropic/README.rst | 6 +- providers/anthropic/docs/changelog.rst | 20 + providers/anthropic/docs/connections.rst | 10 +- providers/anthropic/docs/index.rst | 6 +- providers/anthropic/docs/operators/anthropic.rst | 2 +- providers/anthropic/provider.yaml | 3 +- providers/anthropic/pyproject.toml | 6 +- .../src/airflow/providers/anthropic/__init__.py | 2 +- .../airflow/providers/anthropic/operators/agent.py | 8 +- .../tests/unit/anthropic/operators/test_agent.py | 44 +- .../airflow/providers/apache/beam/hooks/beam.py | 2 +- .../apache/druid/docs/.latest-doc-only-change.txt | 2 +- .../flink/operators/test_flink_kubernetes.py | 2 +- .../apache/flink/sensors/test_flink_kubernetes.py | 3 +- providers/apache/hive/README.rst | 6 +- providers/apache/hive/docs/changelog.rst | 28 + providers/apache/hive/docs/index.rst | 6 +- providers/apache/hive/provider.yaml | 17 +- providers/apache/hive/pyproject.toml | 6 +- .../src/airflow/providers/apache/hive/__init__.py | 2 +- .../providers/apache/hive/get_provider_info.py | 5 + .../apache/hive/sensors/hive_partition.py | 4 +- .../apache/hive/sensors/metastore_partition.py | 53 +- .../apache/hive/sensors/named_hive_partition.py | 5 +- .../hive/tests/unit/apache/hive/hooks/test_hive.py | 3 +- .../tests/unit/apache/hive/operators/test_hive.py | 3 +- .../hive/sensors/test_metastore_partition.py | 51 +- .../hive/sensors/test_named_hive_partition.py | 32 + .../apache/hive/transfers/test_hive_to_mysql.py | 3 +- .../apache/hive/transfers/test_mysql_to_hive.py | 2 +- .../apache/impala/docs/.latest-doc-only-change.txt | 2 +- providers/apache/kafka/README.rst | 7 +- providers/apache/kafka/docs/changelog.rst | 21 + providers/apache/kafka/docs/configurations-ref.rst | 120 + providers/apache/kafka/docs/index.rst | 7 +- .../apache/kafka/docs/message-queues/index.rst | 44 + providers/apache/kafka/docs/sensors.rst | 9 + providers/apache/kafka/provider.yaml | 129 +- providers/apache/kafka/pyproject.toml | 9 +- .../src/airflow/providers/apache/kafka/__init__.py | 2 +- .../providers/apache/kafka/get_provider_info.py | 104 + .../airflow/providers/apache/kafka/hooks/base.py | 16 + .../providers/apache/kafka/hooks/consume.py | 7 +- .../providers/apache/kafka/operators/produce.py | 4 +- .../providers/apache/kafka/plugins/__init__.py} | 2 - .../apache/kafka/plugins/event_producer.py | 473 +++ .../integration/apache/kafka/plugins/__init__.py} | 2 - .../apache/kafka/plugins/dags/__init__.py} | 2 - .../apache/kafka/plugins/dags/demo_dag.py | 31 +- .../apache/kafka/plugins/test_event_producer.py | 167 + .../tests/unit/apache/kafka/hooks/test_base.py | 29 + .../tests/unit/apache/kafka/hooks/test_consume.py | 28 +- .../tests/unit/apache/kafka/hooks/test_produce.py | 16 + .../unit/apache/kafka/operators/test_produce.py | 18 + .../tests/unit/apache/kafka/plugins/__init__.py} | 2 - .../apache/kafka/plugins/test_event_producer.py | 538 +++ .../tests/unit/apache/livy/operators/test_livy.py | 3 +- .../tests/unit/apache/livy/sensors/test_livy.py | 2 +- providers/apache/spark/README.rst | 6 +- providers/apache/spark/docs/changelog.rst | 28 +- providers/apache/spark/docs/index.rst | 6 +- providers/apache/spark/docs/operators.rst | 6 +- providers/apache/spark/provider.yaml | 3 +- providers/apache/spark/pyproject.toml | 6 +- .../src/airflow/providers/apache/spark/__init__.py | 2 +- .../providers/apache/spark/hooks/spark_submit.py | 55 +- .../apache/spark/operators/spark_submit.py | 330 +- .../unit/apache/spark/decorators/test_pyspark.py | 2 +- .../unit/apache/spark/hooks/test_spark_submit.py | 152 +- .../unit/apache/spark/operators/test_spark_jdbc.py | 2 +- .../apache/spark/operators/test_spark_pyspark.py | 2 +- .../unit/apache/spark/operators/test_spark_sql.py | 2 +- .../apache/spark/operators/test_spark_submit.py | 2 +- .../apache/tinkerpop/operators/test_gremlin.py | 2 +- .../tests/unit/arangodb/sensors/test_arangodb.py | 2 +- providers/atlassian/jira/README.rst | 6 +- providers/atlassian/jira/docs/changelog.rst | 13 + providers/atlassian/jira/docs/index.rst | 6 +- providers/atlassian/jira/provider.yaml | 15 +- providers/atlassian/jira/pyproject.toml | 6 +- .../airflow/providers/atlassian/jira/__init__.py | 2 +- .../providers/atlassian/jira/get_provider_info.py | 7 + .../airflow/providers/atlassian/jira/hooks/jira.py | 1 - .../unit/atlassian/jira/operators/test_jira.py | 2 +- .../tests/unit/atlassian/jira/sensors/test_jira.py | 2 +- providers/celery/README.rst | 6 +- providers/celery/docs/changelog.rst | 30 + providers/celery/docs/index.rst | 6 +- providers/celery/provider.yaml | 5 +- providers/celery/pyproject.toml | 6 +- .../src/airflow/providers/celery/__init__.py | 2 +- .../airflow/providers/celery/cli/celery_command.py | 21 +- .../celery/executors/celery_kubernetes_executor.py | 7 + .../providers/celery/executors/default_celery.py | 21 +- .../airflow/providers/celery/get_provider_info.py | 2 +- .../src/airflow/providers/celery/version_compat.py | 9 +- .../tests/unit/celery/cli/test_celery_command.py | 59 + .../unit/celery/executors/test_celery_executor.py | 26 + .../executors/test_celery_kubernetes_executor.py | 21 + providers/clickhousedb/README.rst | 6 +- providers/clickhousedb/docs/changelog.rst | 14 + providers/clickhousedb/docs/index.rst | 6 +- providers/clickhousedb/provider.yaml | 3 +- providers/clickhousedb/pyproject.toml | 6 +- .../src/airflow/providers/clickhousedb/__init__.py | 2 +- .../unit/clickhousedb/hooks/test_clickhouse.py | 9 +- providers/cncf/kubernetes/README.rst | 6 +- providers/cncf/kubernetes/docs/changelog.rst | 49 +- .../kubernetes/docs/connections/kubernetes.rst | 11 + providers/cncf/kubernetes/docs/index.rst | 6 +- providers/cncf/kubernetes/docs/operators.rst | 52 + providers/cncf/kubernetes/provider.yaml | 77 +- providers/cncf/kubernetes/pyproject.toml | 6 +- .../airflow/providers/cncf/kubernetes/__init__.py | 2 +- .../providers/cncf/kubernetes/cli/definition.py | 12 +- .../cncf/kubernetes/cli/kubernetes_command.py | 45 +- .../kubernetes/executors/kubernetes_executor.py | 456 ++- .../executors/kubernetes_executor_utils.py | 111 +- .../executors/local_kubernetes_executor.py | 7 + .../providers/cncf/kubernetes/get_provider_info.py | 39 + .../providers/cncf/kubernetes/hooks/kubernetes.py | 73 +- .../providers/cncf/kubernetes/kube_client.py | 102 + .../providers/cncf/kubernetes/kube_config.py | 7 + .../cncf/kubernetes/kubernetes_helper_functions.py | 11 +- .../providers/cncf/kubernetes/operators/kueue.py | 5 +- .../providers/cncf/kubernetes/operators/pod.py | 146 +- .../cncf/kubernetes/operators/resource.py | 4 + .../cncf/kubernetes/utils/xcom_sidecar.py | 3 + .../cncf/kubernetes/cli/test_kubernetes_command.py | 180 + .../decorators/test_kubernetes_commons.py | 19 + .../executors/test_kubernetes_executor.py | 877 ++++- .../executors/test_local_kubernetes_executor.py | 21 + .../unit/cncf/kubernetes/hooks/test_kubernetes.py | 34 + .../kubernetes/log_handlers/test_log_handlers.py | 12 +- .../unit/cncf/kubernetes/operators/test_job.py | 3 +- .../unit/cncf/kubernetes/operators/test_kueue.py | 15 + .../unit/cncf/kubernetes/operators/test_pod.py | 347 +- .../cncf/kubernetes/operators/test_resource.py | 9 +- .../kubernetes/operators/test_spark_kubernetes.py | 3 +- .../kubernetes/sensors/test_spark_kubernetes.py | 3 +- .../unit/cncf/kubernetes/test_kube_client.py} | 31 +- .../cncf/kubernetes/utils/test_xcom_sidecar.py | 71 + providers/cohere/docs/.latest-doc-only-change.txt | 2 +- .../providers/cohere/operators/embedding.py | 7 +- .../tests/unit/cohere/operators/test_embedding.py | 26 + providers/common/ai/README.rst | 26 +- providers/common/ai/docs/changelog.rst | 56 + providers/common/ai/docs/connections/mcp.rst | 8 +- .../common/ai/docs/connections/pydantic_ai.rst | 11 +- providers/common/ai/docs/hitl_review.rst | 6 +- providers/common/ai/docs/hooks/index.rst | 4 + providers/common/ai/docs/hooks/langchain.rst | 2 +- providers/common/ai/docs/index.rst | 41 +- providers/common/ai/docs/operators/agent.rst | 51 +- .../common/ai/docs/operators/document_loader.rst | 9 +- providers/common/ai/docs/operators/index.rst | 2 +- .../ai/docs/operators/llamaindex_retrieval.rst | 2 +- providers/common/ai/docs/operators/llm.rst | 12 +- providers/common/ai/docs/operators/llm_branch.rst | 4 +- .../common/ai/docs/operators/llm_file_analysis.rst | 15 +- providers/common/ai/docs/operators/llm_sql.rst | 11 + providers/common/ai/docs/quickstart.rst | 92 + providers/common/ai/docs/retry_policies.rst | 28 +- providers/common/ai/docs/self_hosted_models.rst | 378 ++ providers/common/ai/docs/toolsets.rst | 91 +- providers/common/ai/provider.yaml | 23 +- providers/common/ai/pyproject.toml | 18 +- .../ai/src/airflow/providers/common/ai/__init__.py | 2 +- .../providers/common/ai/decorators/llm_branch.py | 2 +- .../airflow/providers/common/ai/durable/storage.py | 16 +- .../common/ai/example_dags/example_agent.py | 46 + .../ai/example_dags/example_agent_capabilities.py | 34 + .../common/ai/example_dags/example_quickstart.py} | 26 +- .../providers/common/ai/get_provider_info.py | 4 +- .../providers/common/ai/hooks/pydantic_ai.py | 6 +- .../airflow/providers/common/ai/mixins/approval.py | 8 +- .../airflow/providers/common/ai/operators/agent.py | 102 +- .../common/ai/operators/document_loader.py | 55 +- .../providers/common/ai/operators/llm_branch.py | 2 + .../common/ai/operators/llm_schema_compare.py | 2 + .../providers/common/ai/operators/llm_sql.py | 28 +- .../providers/common/ai/plugins/hitl_review.py | 43 +- .../airflow/providers/common/ai/policies/retry.py | 30 +- .../providers/common/ai/toolsets/datafusion.py | 7 +- .../airflow/providers/common/ai/toolsets/hook.py | 30 +- .../common/ai/toolsets/langchain_bridge.py | 42 +- .../airflow/providers/common/ai/toolsets/skills.py | 20 +- .../airflow/providers/common/ai/toolsets/sql.py | 50 +- .../providers/common/ai/utils/file_analysis.py | 5 +- .../providers/common/ai/utils/output_type.py | 20 +- .../providers/common/ai/utils/sql_validation.py | 72 +- .../providers/common/ai/utils/tool_definition.py | 74 +- .../tests/unit/common/ai/durable/test_storage.py | 29 +- .../tests/unit/common/ai/hooks/test_pydantic_ai.py | 34 +- .../tests/unit/common/ai/mixins/test_approval.py | 13 +- .../tests/unit/common/ai/operators/test_agent.py | 153 +- .../common/ai/operators/test_document_loader.py | 50 +- .../ai/tests/unit/common/ai/operators/test_llm.py | 19 + .../unit/common/ai/operators/test_llm_branch.py | 9 + .../common/ai/operators/test_llm_schema_compare.py | 5 + .../tests/unit/common/ai/operators/test_llm_sql.py | 125 +- .../unit/common/ai/plugins/test_hitl_review.py | 77 +- .../ai/tests/unit/common/ai/policies/test_retry.py | 44 + .../unit/common/ai/toolsets/test_datafusion.py | 19 + .../ai/tests/unit/common/ai/toolsets/test_hook.py | 59 +- .../common/ai/toolsets/test_langchain_bridge.py | 46 + .../tests/unit/common/ai/toolsets/test_skills.py | 50 + .../ai/tests/unit/common/ai/toolsets/test_sql.py | 115 + .../unit/common/ai/utils/test_file_analysis.py | 24 + .../tests/unit/common/ai/utils/test_output_type.py | 15 +- .../unit/common/ai/utils/test_sql_validation.py | 118 +- .../unit/common/ai/utils/test_tool_definition.py | 134 +- providers/common/compat/README.rst | 6 +- providers/common/compat/docs/changelog.rst | 12 + providers/common/compat/docs/index.rst | 6 +- providers/common/compat/provider.yaml | 3 +- providers/common/compat/pyproject.toml | 6 +- .../airflow/providers/common/compat/__init__.py | 2 +- .../providers/common/compat/connection/__init__.py | 17 +- .../common/compat/security/access_view.py | 24 +- .../common/compat/connection/test_connection.py | 26 +- .../common/compat/security/test_access_view.py | 60 + providers/common/dataquality/.gitignore | 1 + providers/common/dataquality/LICENSE | 201 + providers/common/dataquality/NOTICE | 5 + .../dataquality/README.rst} | 36 +- .../dataquality}/docs/changelog.rst | 21 +- .../dataquality/docs/commits.rst} | 27 +- .../common/dataquality/docs/conf.py | 15 +- .../{ssh => common/dataquality}/docs/index.rst | 47 +- .../docs/installing-providers-from-sources.rst} | 22 +- .../dataquality/docs/security.rst} | 22 +- .../common/{compat => dataquality}/provider.yaml | 49 +- .../dataquality}/pyproject.toml | 20 +- .../dataquality/src/airflow/__init__.py} | 3 +- .../dataquality/src/airflow/providers/__init__.py} | 3 +- .../src/airflow/providers/common/__init__.py} | 3 +- .../providers/common/dataquality}/__init__.py | 2 +- .../common/dataquality/get_provider_info.py | 21 +- .../dataquality/tests/conftest.py} | 3 +- .../dataquality/tests/system/__init__.py} | 3 +- .../dataquality/tests/system/common/__init__.py} | 3 +- .../tests/system/common/dataquality/__init__.py} | 2 - .../dataquality/tests/unit/__init__.py} | 3 +- .../dataquality/tests/unit/common/__init__.py} | 3 +- .../tests/unit/common/dataquality/__init__.py} | 2 - .../tests/unit/common/dataquality/test_example.py | 15 +- .../common/io/docs/.latest-doc-only-change.txt | 2 +- .../messaging/docs/.latest-doc-only-change.txt | 2 +- providers/common/sql/README.rst | 6 +- providers/common/sql/docs/changelog.rst | 13 +- providers/common/sql/docs/index.rst | 6 +- providers/common/sql/docs/operators.rst | 29 + providers/common/sql/provider.yaml | 3 +- providers/common/sql/pyproject.toml | 6 +- .../src/airflow/providers/common/sql/__init__.py | 2 +- .../src/airflow/providers/common/sql/hooks/sql.py | 37 +- .../airflow/providers/common/sql/operators/sql.py | 76 + .../system/common/sql/example_generic_transfer.py | 2 +- .../system/common/sql/example_sql_bulk_load.py | 101 + .../common/sql/example_sql_column_table_check.py | 2 +- .../sql/tests/unit/common/sql/hooks/test_sql.py | 92 + .../common/sql/operators/test_generic_transfer.py | 2 +- .../tests/unit/common/sql/operators/test_sql.py | 84 + providers/databricks/README.rst | 12 +- providers/databricks/docs/changelog.rst | 23 + .../databricks/docs/connections/databricks.rst | 13 + providers/databricks/docs/index.rst | 12 +- .../databricks/docs/operators/repos_create.rst | 2 +- .../databricks/docs/operators/repos_delete.rst | 2 +- .../databricks/docs/operators/repos_update.rst | 2 +- providers/databricks/docs/operators/run_now.rst | 13 +- providers/databricks/docs/operators/submit_run.rst | 13 +- providers/databricks/provider.yaml | 3 +- providers/databricks/pyproject.toml | 12 +- .../src/airflow/providers/databricks/__init__.py | 2 +- .../providers/databricks/hooks/databricks.py | 5 +- .../providers/databricks/hooks/databricks_base.py | 85 +- .../providers/databricks/hooks/databricks_sql.py | 44 +- .../providers/databricks/operators/databricks.py | 33 +- .../databricks/operators/databricks_repos.py | 18 +- .../databricks/operators/databricks_sql.py | 13 +- .../providers/databricks/sensors/databricks.py | 9 +- .../providers/databricks/triggers/databricks.py | 8 +- .../unit/databricks/hooks/test_databricks_base.py | 198 +- .../unit/databricks/hooks/test_databricks_sql.py | 38 +- .../databricks/operators/test_databricks_copy.py | 43 +- .../unit/databricks/sensors/test_databricks.py | 12 + .../dbt/cloud/docs/.latest-doc-only-change.txt | 2 +- .../src/airflow/providers/dbt/cloud/hooks/dbt.py | 45 +- .../airflow/providers/dbt/cloud/operators/dbt.py | 6 +- .../cloud/tests/unit/dbt/cloud/hooks/test_dbt.py | 101 + .../tests/unit/dbt/cloud/operators/test_dbt.py | 21 + .../tests/unit/dbt/cloud/utils/test_openlineage.py | 3 +- .../tests/unit/dingding/operators/test_dingding.py | 2 +- .../unit/discord/operators/test_discord_webhook.py | 2 +- providers/docker/README.rst | 6 +- providers/docker/docs/changelog.rst | 12 + providers/docker/docs/index.rst | 6 +- providers/docker/provider.yaml | 3 +- providers/docker/pyproject.toml | 6 +- .../src/airflow/providers/docker/__init__.py | 2 +- .../airflow/providers/docker/operators/docker.py | 12 +- .../providers/docker/operators/docker_swarm.py | 12 +- .../tests/unit/docker/operators/test_docker.py | 38 +- .../unit/docker/operators/test_docker_swarm.py | 19 + providers/edge3/.pre-commit-config.yaml | 1 + providers/edge3/README.rst | 6 +- providers/edge3/docs/changelog.rst | 28 + providers/edge3/docs/deployment.rst | 5 +- providers/edge3/docs/edge_executor.rst | 27 + providers/edge3/docs/index.rst | 6 +- providers/edge3/provider.yaml | 3 +- providers/edge3/pyproject.toml | 8 +- .../edge3/src/airflow/providers/edge3/__init__.py | 2 +- .../src/airflow/providers/edge3/cli/definition.py | 7 + .../airflow/providers/edge3/cli/edge_command.py | 23 +- .../airflow/providers/edge3/models/edge_worker.py | 63 +- .../providers/edge3/plugins/www/package.json | 69 +- .../providers/edge3/plugins/www/pnpm-lock.yaml | 3477 +++++++++-------- .../edge3/worker_api/v2-edge-generated.yaml | 5 + .../edge3/tests/unit/edge3/cli/test_definition.py | 11 +- .../tests/unit/edge3/cli/test_edge_command.py | 77 +- .../edge3/tests/unit/edge3/cli/test_worker.py | 48 + .../tests/unit/edge3/models/test_edge_worker.py | 143 + .../unit/edge3/worker_api/routes/test_worker.py | 17 +- providers/elasticsearch/README.rst | 6 +- providers/elasticsearch/docs/changelog.rst | 12 + providers/elasticsearch/docs/index.rst | 6 +- providers/elasticsearch/provider.yaml | 3 +- providers/elasticsearch/pyproject.toml | 6 +- .../airflow/providers/elasticsearch/__init__.py | 2 +- .../providers/elasticsearch/log/es_task_handler.py | 28 +- .../unit/elasticsearch/log/test_es_task_handler.py | 53 +- providers/fab/.pre-commit-config.yaml | 1 + providers/fab/README.rst | 6 +- providers/fab/docs/changelog.rst | 30 + providers/fab/docs/index.rst | 6 +- providers/fab/docs/upgrading.rst | 6 +- providers/fab/provider.yaml | 3 +- providers/fab/pyproject.toml | 10 +- .../providers/3rd-party-licenses/LICENSES-ui.txt | 2 +- .../fab/src/airflow/providers/fab/__init__.py | 2 +- .../providers/fab/auth_manager/fab_auth_manager.py | 12 +- .../providers/fab/auth_manager/middleware.py | 11 + .../providers/fab/auth_manager/models/__init__.py | 3 + .../fab/auth_manager/security_manager/override.py | 2 + .../fab/src/airflow/providers/fab/www/package.json | 10 +- .../src/airflow/providers/fab/www/pnpm-lock.yaml | 394 +- .../providers/fab/www/security/permissions.py | 1 + .../fab/auth_manager/models/test_user_model.py | 7 + .../tests/unit/fab/auth_manager/test_middleware.py | 13 + providers/ftp/tests/unit/ftp/operators/test_ftp.py | 5 +- providers/google/README.rst | 6 +- providers/google/docs/changelog.rst | 35 + providers/google/docs/index.rst | 6 +- providers/google/docs/operators/cloud/bigquery.rst | 13 +- providers/google/provider.yaml | 15 +- providers/google/pyproject.toml | 6 +- .../src/airflow/providers/google/__init__.py | 2 +- .../providers/google/cloud/hooks/cloud_batch.py | 4 +- .../providers/google/cloud/hooks/dataform.py | 2 + .../airflow/providers/google/cloud/links/base.py | 3 +- .../google/cloud/links/cloud_functions.py | 4 +- .../google/cloud/links/cloud_storage_transfer.py | 4 +- .../providers/google/cloud/links/compute.py | 4 +- .../google/cloud/links/data_loss_prevention.py | 4 +- .../providers/google/cloud/links/datafusion.py | 8 +- .../providers/google/cloud/log/gcs_task_handler.py | 27 + .../providers/google/cloud/openlineage/mixins.py | 116 +- .../providers/google/cloud/operators/bigquery.py | 2 +- .../google/cloud/operators/cloud_composer.py | 4 +- .../providers/google/cloud/operators/compute.py | 209 +- .../google/cloud/operators/dataproc_metastore.py | 3 +- .../providers/google/cloud/operators/gcs.py | 16 +- .../providers/google/cloud/operators/gen_ai.py | 39 +- .../google/cloud/transfers/bigquery_to_postgres.py | 13 +- .../google/cloud/transfers/gcs_to_bigquery.py | 2 + .../airflow/providers/google/cloud/triggers/gcs.py | 2 +- .../providers/google/common/hooks/base_google.py | 7 +- .../providers/google/common/links/storage.py | 3 +- .../airflow/providers/google/get_provider_info.py | 8 + .../google/cloud/dataflow/resources/wordcount.go | 180 +- .../google/cloud/dataform/example_dataform.py | 56 +- .../unit/google/cloud/hooks/test_cloud_batch.py | 2 +- .../tests/unit/google/cloud/hooks/test_dataform.py | 23 +- .../unit/google/cloud/log/test_gcs_task_handler.py | 83 + .../cloud/log/test_stackdriver_task_handler.py | 2 +- .../unit/google/cloud/openlineage/test_mixins.py | 390 +- .../unit/google/cloud/operators/test_bigquery.py | 10 + .../test_cloud_storage_transfer_service.py | 3 +- .../unit/google/cloud/operators/test_compute.py | 902 +++-- .../tests/unit/google/cloud/operators/test_gcs.py | 4 +- .../unit/google/cloud/operators/test_gen_ai.py | 210 +- .../cloud/transfers/test_bigquery_to_postgres.py | 51 +- .../google/cloud/transfers/test_gcs_to_bigquery.py | 31 + .../operators/test_bid_manager.py | 2 +- .../operators/test_campaign_manager.py | 2 +- .../operators/test_display_video.py | 2 +- providers/hashicorp/README.rst | 6 +- providers/hashicorp/docs/changelog.rst | 18 + providers/hashicorp/docs/index.rst | 6 +- .../docs/secrets-backends/hashicorp-vault.rst | 18 + providers/hashicorp/provider.yaml | 3 +- providers/hashicorp/pyproject.toml | 6 +- .../src/airflow/providers/hashicorp/__init__.py | 2 +- .../airflow/providers/hashicorp/secrets/vault.py | 149 +- .../tests/unit/hashicorp/secrets/test_vault.py | 283 +- providers/http/README.rst | 8 +- providers/http/docs/changelog.rst | 18 + providers/http/docs/index.rst | 8 +- providers/http/docs/triggers.rst | 44 +- providers/http/provider.yaml | 3 +- providers/http/pyproject.toml | 8 +- .../http/src/airflow/providers/http/__init__.py | 2 +- .../http/src/airflow/providers/http/hooks/http.py | 3 +- .../informatica/docs/.latest-doc-only-change.txt | 1 + providers/jdbc/docs/.latest-doc-only-change.txt | 2 +- providers/keycloak/README.rst | 6 +- providers/keycloak/docs/changelog.rst | 16 + providers/keycloak/docs/index.rst | 6 +- providers/keycloak/provider.yaml | 3 +- providers/keycloak/pyproject.toml | 8 +- .../src/airflow/providers/keycloak/__init__.py | 2 +- .../providers/keycloak/auth_manager/constants.py | 8 + .../keycloak/auth_manager/keycloak_auth_manager.py | 29 +- .../keycloak/auth_manager/routes/login.py | 62 +- .../providers/keycloak/auth_manager/user.py | 13 +- .../keycloak/auth_manager/datamodels/__init__.py} | 2 - .../keycloak/auth_manager/datamodels/test_token.py | 120 + .../keycloak/auth_manager/routes/test_login.py | 52 + .../auth_manager/test_keycloak_auth_manager.py | 32 +- providers/microsoft/azure/README.rst | 8 +- providers/microsoft/azure/docs/changelog.rst | 35 + providers/microsoft/azure/docs/index.rst | 8 +- providers/microsoft/azure/docs/logging/index.rst | 2 +- providers/microsoft/azure/provider.yaml | 8 +- providers/microsoft/azure/pyproject.toml | 8 +- .../airflow/providers/microsoft/azure/__init__.py | 2 +- .../providers/microsoft/azure/fs/msgraph.py | 6 + .../providers/microsoft/azure/get_provider_info.py | 4 + .../providers/microsoft/azure/hooks/batch.py | 3 +- .../microsoft/azure/hooks/data_factory.py | 46 +- .../providers/microsoft/azure/hooks/msgraph.py | 19 +- .../microsoft/azure/log/wasb_task_handler.py | 33 +- .../microsoft/azure/operators/data_factory.py | 2 +- .../providers/microsoft/azure/operators/synapse.py | 4 +- .../providers/microsoft/azure/sensors/compute.py | 8 +- .../tests/unit/microsoft/azure/fs/test_msgraph.py | 18 + .../microsoft/azure/hooks/test_data_factory.py | 73 +- .../unit/microsoft/azure/hooks/test_msgraph.py | 23 + .../microsoft/azure/log/test_wasb_task_handler.py | 79 +- .../microsoft/azure/operators/test_data_factory.py | 29 +- .../unit/microsoft/azure/operators/test_synapse.py | 49 +- .../unit/microsoft/azure/sensors/test_compute.py | 28 +- .../unit/microsoft/azure/sensors/test_wasb.py | 3 +- .../mssql/docs/.latest-doc-only-change.txt | 2 +- .../tests/integration/mongo/sensors/test_mongo.py | 2 +- .../mongo/tests/unit/mongo/sensors/test_mongo.py | 2 +- providers/mysql/docs/.latest-doc-only-change.txt | 2 +- .../src/airflow/providers/neo4j/operators/neo4j.py | 31 +- .../neo4j/tests/unit/neo4j/operators/test_neo4j.py | 18 +- providers/openai/README.rst | 10 +- providers/openai/docs/changelog.rst | 36 + providers/openai/docs/index.rst | 10 +- providers/openai/docs/operators/openai.rst | 20 +- providers/openai/provider.yaml | 5 +- providers/openai/pyproject.toml | 14 +- .../src/airflow/providers/openai/__init__.py | 2 +- .../airflow/providers/openai/get_provider_info.py | 2 +- providers/openlineage/README.rst | 6 +- providers/openlineage/docs/changelog.rst | 25 + providers/openlineage/docs/index.rst | 6 +- providers/openlineage/docs/spark.rst | 47 + providers/openlineage/docs/troubleshooting.rst | 44 + providers/openlineage/provider.yaml | 23 +- providers/openlineage/pyproject.toml | 6 +- .../src/airflow/providers/openlineage/__init__.py | 2 +- .../src/airflow/providers/openlineage/conf.py | 6 + .../providers/openlineage/get_provider_info.py | 7 + .../providers/openlineage/plugins/listener.py | 123 +- .../airflow/providers/openlineage/utils/utils.py | 73 +- .../unit/openlineage/plugins/test_execution.py | 2 +- .../unit/openlineage/plugins/test_listener.py | 259 +- .../tests/unit/openlineage/test_conf.py | 17 + .../tests/unit/openlineage/utils/test_utils.py | 59 + providers/opensearch/README.rst | 6 +- providers/opensearch/docs/changelog.rst | 12 + providers/opensearch/docs/index.rst | 6 +- providers/opensearch/provider.yaml | 3 +- providers/opensearch/pyproject.toml | 6 +- .../src/airflow/providers/opensearch/__init__.py | 2 +- .../providers/opensearch/log/os_task_handler.py | 28 +- .../unit/opensearch/log/test_os_task_handler.py | 52 +- .../tests/unit/opsgenie/operators/test_opsgenie.py | 2 +- .../providers/papermill/operators/papermill.py | 8 +- .../unit/papermill/operators/test_papermill.py | 15 +- providers/pgvector/README.rst | 6 +- providers/pgvector/docs/changelog.rst | 18 + providers/pgvector/docs/index.rst | 6 +- providers/pgvector/provider.yaml | 3 +- providers/pgvector/pyproject.toml | 7 +- .../src/airflow/providers/pgvector/__init__.py | 2 +- .../providers/pgvector/operators/pgvector.py | 21 +- .../tests/unit/pgvector/operators/test_pgvector.py | 57 +- providers/postgres/README.rst | 5 +- providers/postgres/docs/changelog.rst | 36 + providers/postgres/docs/index.rst | 5 +- providers/postgres/provider.yaml | 2 +- providers/postgres/pyproject.toml | 24 +- .../airflow/providers/postgres/hooks/postgres.py | 42 +- .../tests/unit/postgres/hooks/test_postgres.py | 21 + .../unit/postgres/test_provider_dependencies.py | 46 + providers/presto/docs/.latest-doc-only-change.txt | 2 +- .../qdrant/operators/test_qdrant_ingest.py | 2 +- providers/redis/docs/.latest-doc-only-change.txt | 2 +- .../redis/operators/test_redis_publish.py | 2 +- .../integration/redis/sensors/test_redis_key.py | 2 +- .../redis/sensors/test_redis_pub_sub.py | 2 +- .../unit/redis/operators/test_redis_publish.py | 2 +- .../tests/unit/redis/sensors/test_redis_key.py | 2 +- .../tests/unit/redis/sensors/test_redis_pub_sub.py | 2 +- providers/samba/docs/.latest-doc-only-change.txt | 2 +- providers/sftp/README.rst | 10 +- providers/sftp/docs/changelog.rst | 15 +- providers/sftp/docs/index.rst | 10 +- providers/sftp/provider.yaml | 3 +- providers/sftp/pyproject.toml | 10 +- .../sftp/src/airflow/providers/sftp/__init__.py | 2 +- .../unit/sftp/decorators/sensors/test_sftp.py | 2 +- .../sftp/tests/unit/sftp/operators/test_sftp.py | 6 +- providers/snowflake/docs/changelog.rst | 13 +- providers/snowflake/docs/operators/snowflake.rst | 50 + .../docs/operators/snowflake_cortex_agent.rst | 66 + providers/snowflake/provider.yaml | 10 +- .../providers/snowflake/get_provider_info.py | 6 + .../airflow/providers/snowflake/hooks/snowflake.py | 2 +- .../snowflake/hooks/snowflake_cortex_agent.py | 5 +- .../providers/snowflake/hooks/snowflake_sql_api.py | 2 +- .../providers/snowflake/operators/snowflake.py | 132 +- .../snowflake/operators/snowflake_cortex_agent.py | 140 + .../snowflake/operators/snowpark_containers.py | 10 +- .../providers/snowflake/utils/openlineage.py | 2 +- .../snowflake/example_snowflake_cortex_agent.py} | 64 +- .../unit/snowflake/decorators/test_snowpark.py | 3 +- .../tests/unit/snowflake/hooks/test_snowflake.py | 3 +- .../snowflake/hooks/test_snowflake_cortex_agent.py | 3 + .../unit/snowflake/hooks/test_snowflake_sql_api.py | 4 +- .../unit/snowflake/operators/test_snowflake.py | 342 +- .../operators/test_snowflake_cortex_agent.py | 105 + .../unit/snowflake/operators/test_snowpark.py | 2 +- .../operators/test_snowpark_containers.py | 3 +- .../tests/unit/snowflake/utils/test_openlineage.py | 3 +- providers/sqlite/docs/.latest-doc-only-change.txt | 2 +- providers/ssh/README.rst | 8 +- providers/ssh/docs/changelog.rst | 14 +- providers/ssh/docs/index.rst | 8 +- providers/ssh/provider.yaml | 3 +- providers/ssh/pyproject.toml | 8 +- .../ssh/src/airflow/providers/ssh/__init__.py | 2 +- .../ssh/src/airflow/providers/ssh/hooks/ssh.py | 5 +- .../ssh/src/airflow/providers/ssh/operators/ssh.py | 7 +- .../providers/ssh/operators/ssh_remote_job.py | 6 +- .../src/airflow/providers/ssh/utils/remote_job.py | 8 +- providers/ssh/tests/unit/ssh/operators/test_ssh.py | 32 + .../unit/ssh/operators/test_ssh_remote_job.py | 60 + .../ssh/tests/unit/ssh/utils/test_remote_job.py | 48 +- .../airflow/providers/standard/decorators/bash.py | 1 - .../airflow/providers/standard/operators/bash.py | 5 +- .../airflow/providers/standard/operators/hitl.py | 33 +- .../providers/standard/operators/trigger_dagrun.py | 2 +- .../providers/standard/sensors/date_time.py | 28 +- .../standard/decorators/test_python_virtualenv.py | 2 +- .../tests/unit/standard/operators/test_bash.py | 25 +- .../standard/operators/test_branch_operator.py | 2 +- .../tests/unit/standard/operators/test_hitl.py | 18 +- .../operators/test_latest_only_operator.py | 2 +- .../unit/standard/operators/test_trigger_dagrun.py | 9 + .../tests/unit/standard/operators/test_weekday.py | 3 +- .../tests/unit/standard/sensors/test_date_time.py | 85 +- .../unit/standard/triggers/test_external_task.py | 2 +- .../tests/unit/standard/triggers/test_temporal.py | 6 +- providers/teradata/README.rst | 6 +- providers/teradata/docs/changelog.rst | 19 + providers/teradata/docs/index.rst | 6 +- providers/teradata/provider.yaml | 3 +- providers/teradata/pyproject.toml | 6 +- .../src/airflow/providers/teradata/__init__.py | 2 +- .../teradata/transfers/teradata_to_teradata.py | 4 +- .../providers/teradata/utils/encryption_utils.py | 9 +- .../airflow/providers/teradata/utils/tpt_util.py | 16 +- .../transfers/test_teradata_to_teradata.py | 19 + .../unit/teradata/utils/test_encryption_utils.py | 14 +- .../tests/unit/teradata/utils/test_tpt_util.py | 28 + providers/trino/docs/.latest-doc-only-change.txt | 2 +- providers/vertica/docs/.latest-doc-only-change.txt | 2 +- providers/weaviate/README.rst | 8 +- providers/weaviate/docs/changelog.rst | 23 + providers/weaviate/docs/index.rst | 8 +- providers/weaviate/provider.yaml | 3 +- providers/weaviate/pyproject.toml | 8 +- .../src/airflow/providers/weaviate/__init__.py | 2 +- .../providers/weaviate/operators/weaviate.py | 7 +- .../system/weaviate/example_weaviate_cohere.py | 3 +- .../example_weaviate_dynamic_mapping_dag.py | 9 +- .../system/weaviate/example_weaviate_openai.py | 3 +- .../system/weaviate/example_weaviate_operator.py | 9 +- .../system/weaviate/example_weaviate_using_hook.py | 7 +- .../weaviate/example_weaviate_vectorizer_dag.py | 4 +- .../example_weaviate_without_vectorizer_dag.py | 3 +- .../tests/unit/weaviate/operators/test_weaviate.py | 15 + .../tests/integration/ydb/operators/test_ydb.py | 2 +- pyproject.toml | 34 +- registry/package.json | 2 +- registry/pnpm-lock.yaml | 10 +- registry/src/_data/types.json | 10 + registry/src/css/main.css | 2 + registry/src/css/tokens.css | 2 + reproducible_build.yaml | 4 +- scripts/ci/analyze_ci_job_durations.py | 276 +- scripts/ci/docker-compose/backend-postgres.yml | 4 +- scripts/ci/docker-compose/integration-kafka.yml | 4 + scripts/ci/docker-compose/local.yml | 3 + scripts/ci/docker-compose/remove-sources.yml | 1 + scripts/ci/docker-compose/tests-sources.yml | 1 + scripts/ci/prek/breeze_command_walker.py | 66 + scripts/ci/prek/check_ci_workflows_in_sync.py | 7 +- scripts/ci/prek/check_documented_commands.py | 333 ++ scripts/ci/prek/check_extra_packages_ref.py | 2 +- scripts/ci/prek/check_go_example_mod_tidy.py | 126 + scripts/ci/prek/check_imports_in_providers.py | 2 +- .../prek/check_metrics_synced_with_the_registry.py | 299 +- scripts/ci/prek/check_migration_patterns.py | 52 +- scripts/ci/prek/check_provider_conn_fields.py | 56 +- scripts/ci/prek/check_provider_yaml_files.py | 53 +- scripts/ci/prek/common_prek_utils.py | 43 +- scripts/ci/prek/extract_permissions.py | 1 + scripts/ci/prek/migration_reference.py | 4 +- scripts/ci/prek/mypy_folder.py | 3 +- scripts/ci/prek/ruff_format.py | 2 +- ...un_mypy_full_dist_local_venv_or_breeze_in_ci.py | 3 +- scripts/ci/prek/update_airflow_pyproject_toml.py | 4 +- scripts/ci/prek/update_tested_versions.py | 209 + scripts/ci/prek/validate_operators_init.py | 380 +- .../ci/prek/validate_operators_init_exemptions.txt | 29 + .../ci/testing/run_integration_tests_with_retry.sh | 5 + scripts/docker/install_os_dependencies.sh | 35 + .../in_container/run_capture_airflowctl_help.py | 2 + scripts/in_container/run_generate_constraints.py | 144 +- scripts/in_container/run_migration_reference.py | 19 +- .../in_container/run_provider_yaml_files_check.py | 85 +- scripts/pyproject.toml | 2 +- .../test_check_conn_fields_match_form_widgets.py | 31 +- .../ci/prek/test_check_documented_commands.py | 212 + .../ci/prek/test_check_go_example_mod_tidy.py | 99 + .../test_check_metrics_synced_with_the_registry.py | 319 ++ .../tests/ci/prek/test_check_migration_patterns.py | 67 +- .../ci/prek/test_check_provider_yaml_files.py | 84 + scripts/tests/ci/prek/test_common_prek_utils.py | 56 + .../tests/ci/prek/test_generate_agent_skills.py | 2 +- .../tests/ci/prek/test_update_tested_versions.py | 123 + .../tests/ci/prek/test_validate_operators_init.py | 310 ++ scripts/tests/ci/test_analyze_ci_job_durations.py | 233 +- .../tests/in_container/__init__.py | 3 +- .../in_container/test_run_generate_constraints.py | 111 + scripts/tests/test_react_plugin_bootstrap.py | 83 + scripts/tools/setup_breeze | 2 +- shared/configuration/pyproject.toml | 2 +- .../src/airflow_shared/configuration/parser.py | 2 +- shared/dagnode/pyproject.toml | 4 +- shared/dagnode/src/airflow_shared/dagnode/node.py | 38 + shared/listeners/pyproject.toml | 4 +- shared/logging/pyproject.toml | 4 +- .../logging/src/airflow_shared/logging/remote.py | 20 +- .../src/airflow_shared/logging/structlog.py | 29 +- shared/logging/tests/logging/test_structlog.py | 13 + shared/module_loading/pyproject.toml | 2 +- shared/observability/pyproject.toml | 4 +- .../observability/metrics/datadog_logger.py | 44 +- .../observability/metrics/metrics_template.yaml | 53 +- .../airflow_shared/observability/metrics/stats.py | 19 +- .../observability/metrics/statsd_logger.py | 12 +- .../observability/metrics/validators.py | 1 - .../observability/traces/__init__.py | 37 +- .../observability/metrics/test_otel_logger.py | 4 +- .../tests/observability/metrics/test_stats.py | 91 +- .../tests/observability/test_traces.py | 78 +- shared/plugins_manager/pyproject.toml | 2 +- .../plugins_manager/plugins_manager.py | 14 +- .../tests/plugins_manager/test_plugins_manager.py | 16 + shared/providers_discovery/pyproject.toml | 4 +- shared/secrets_backend/pyproject.toml | 2 +- .../src/airflow_shared/secrets_backend/base.py | 7 + .../tests/secrets_backend/test_base.py | 15 + shared/secrets_masker/pyproject.toml | 2 +- shared/serialization/pyproject.toml | 2 +- shared/state/pyproject.toml | 2 +- shared/template_rendering/pyproject.toml | 2 +- shared/timezones/pyproject.toml | 2 +- task-sdk-integration-tests/docker-compose.yaml | 2 +- task-sdk-integration-tests/pyproject.toml | 2 +- task-sdk/docs/api.rst | 4 + task-sdk/docs/resumable-job-mixin.rst | 8 + task-sdk/pyproject.toml | 6 +- task-sdk/src/airflow/sdk/api/client.py | 6 + .../src/airflow/sdk/api/datamodels/_generated.py | 106 +- .../airflow/sdk/coordinators/node/coordinator.py | 45 +- .../airflow/sdk/definitions/asset/decorators.py | 7 +- task-sdk/src/airflow/sdk/definitions/dag.py | 11 +- .../sdk/definitions/decorators/__init__.pyi | 6 + task-sdk/src/airflow/sdk/definitions/taskgroup.py | 39 +- task-sdk/src/airflow/sdk/execution_time/comms.py | 4 + .../execution_time/connection_test_supervisor.py | 13 +- task-sdk/src/airflow/sdk/execution_time/context.py | 46 +- .../airflow/sdk/execution_time/email_backend.py | 92 + .../airflow/sdk/execution_time/schema/schema.json | 542 +-- .../src/airflow/sdk/execution_time/supervisor.py | 4 + .../src/airflow/sdk/execution_time/task_runner.py | 67 +- task-sdk/src/airflow/sdk/log.py | 7 +- task-sdk/tests/conftest.py | 2 + task-sdk/tests/task_sdk/api/test_client.py | 103 + task-sdk/tests/task_sdk/bases/test_hook.py | 2 + .../task_sdk/coordinators/node/test_coordinator.py | 96 +- .../task_sdk/definitions/test_asset_decorators.py | 38 + .../tests/task_sdk/definitions/test_callback.py | 2 +- .../tests/task_sdk/definitions/test_connection.py | 11 +- .../tests/task_sdk/definitions/test_taskgroup.py | 3 +- .../execution_time/test_callback_supervisor.py | 22 +- .../tests/task_sdk/execution_time/test_comms.py | 1 + .../test_connection_test_supervisor.py | 112 + .../tests/task_sdk/execution_time/test_context.py | 143 +- .../task_sdk/execution_time/test_context_cache.py | 17 +- .../task_sdk/execution_time/test_email_backend.py | 86 + .../tests/task_sdk/execution_time/test_secrets.py | 3 + .../task_sdk/execution_time/test_supervisor.py | 188 +- .../task_sdk/execution_time/test_task_runner.py | 174 +- ts-sdk/.pre-commit-config.yaml | 65 + ts-sdk/README.md | 48 +- ts-sdk/example/.gitignore | 1 + ts-sdk/example/README.md | 19 +- ts-sdk/example/package.json | 2 +- ts-sdk/package.json | 12 + ts-sdk/pnpm-lock.yaml | 289 +- .../ci/prek/{ts_sdk_lint.py => compile_ts_sdk.py} | 6 +- ts-sdk/scripts/ci/prek/ts_sdk_lint.py | 0 .../hover/Context.ts => ts-sdk/src/cli/main.ts | 16 +- ts-sdk/src/cli/pack.ts | 225 ++ ts-sdk/src/coordinator/log-channel.ts | 95 +- ts-sdk/src/coordinator/manifest.ts | 44 + ts-sdk/src/coordinator/runtime.ts | 16 +- ts-sdk/src/generated/supervisor.ts | 206 +- .../tests/cli/fixtures/empty-entry.ts | 7 +- .../tests/cli/fixtures/entry.ts | 15 +- .../tests/cli/fixtures/noisy-entry.ts | 14 +- ts-sdk/tests/cli/pack.test.ts | 190 + ts-sdk/tests/coordinator/log-channel.test.ts | 188 +- ts-sdk/tests/coordinator/runtime-manifest.test.ts | 61 + uv.lock | 4103 ++++++++++---------- 1576 files changed, 66418 insertions(+), 18119 deletions(-)
