This is an automated email from the ASF dual-hosted git repository. vatsrahul1001 pushed a commit to branch v3-4-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 77fa2ed62551ecdde9e73355f79684b719115f03 Merge: 9cb69142c39 194e0ea4c98 Author: Rahul Vats <[email protected]> AuthorDate: Mon Oct 12 19:51:14 2026 +0530 Merge main into v3-4-test .agents/skills/airflow-translations/SKILL.md | 4 + .agents/skills/airflow-translations/locales/ar.md | 10 +- .agents/skills/airflow-translations/locales/ca.md | 2 +- .agents/skills/airflow-translations/locales/de.md | 2 +- .agents/skills/airflow-translations/locales/el.md | 2 +- .agents/skills/airflow-translations/locales/es.md | 2 +- .agents/skills/airflow-translations/locales/fr.md | 2 +- .agents/skills/airflow-translations/locales/he.md | 4 +- .agents/skills/airflow-translations/locales/hu.md | 4 +- .agents/skills/airflow-translations/locales/ja.md | 2 +- .agents/skills/airflow-translations/locales/ko.md | 26 +- .agents/skills/airflow-translations/locales/nl.md | 2 +- .agents/skills/airflow-translations/locales/pl.md | 6 +- .agents/skills/airflow-translations/locales/pt.md | 2 +- .agents/skills/airflow-translations/locales/tr.md | 2 +- .../skills/airflow-translations/locales/zh-CN.md | 12 +- .../skills/airflow-translations/locales/zh-TW.md | 8 +- .apache-magpie-overrides/pmc-roster.md | 2 +- .github/workflows/ci-amd.yml | 36 + .github/workflows/ci-arm.yml | 36 + .github/workflows/k8s-tests.yml | 36 +- .github/workflows/release-constraints.yml | 21 +- .pre-commit-config.yaml | 43 +- .rat-excludes | 1 + Dockerfile | 3 + Dockerfile.ci | 3 + .../0015-per-dag-source-in-bundle-artifact.md | 2 + .../administration-and-deployment/dag-bundles.rst | 24 + .../dag-importers.rst | 169 ++ .../dag-serialization.rst | 2 +- .../dagfile-processing.rst | 10 +- .../docs/administration-and-deployment/index.rst | 1 + .../docs/administration-and-deployment/plugins.rst | 105 +- .../task-and-asset-state-store.rst | 4 +- .../administration-and-deployment/web-stack.rst | 13 +- .../authoring-and-scheduling/asset-scheduling.rst | 64 + .../docs/authoring-and-scheduling/deferring.rst | 2 +- .../dynamic-task-mapping.rst | 18 +- .../docs/authoring-and-scheduling/index.rst | 2 + .../language-sdks/index.rst | 81 +- .../language-sdks/java.rst | 4 + .../language-sdks/typescript.rst | 933 +++++------ .../loops-and-mapped-tasks.rst | 61 + .../docs/authoring-and-scheduling/loops.rst | 392 +++++ airflow-core/docs/best-practices.rst | 52 +- airflow-core/docs/core-concepts/dags.rst | 76 +- .../core-concepts/task-and-asset-state-store.rst | 2 +- .../docs/core-concepts/task-state-store.rst | 4 +- airflow-core/docs/core-concepts/tasks.rst | 2 +- airflow-core/docs/migrations-ref.rst | 11 +- airflow-core/docs/public-airflow-interface.rst | 16 + airflow-core/docs/start.rst | 9 +- airflow-core/newsfragments/68517.significant.rst | 14 + airflow-core/newsfragments/73746.significant.rst | 22 + airflow-core/newsfragments/74278.feature.rst | 2 +- airflow-core/newsfragments/74499.bugfix.rst | 1 + airflow-core/newsfragments/task-loops.feature.rst | 1 + airflow-core/src/airflow/api_fastapi/app.py | 3 +- .../auth/managers/simple/ui/package.json | 6 +- .../auth/managers/simple/ui/pnpm-lock.yaml | 242 +-- .../airflow/api_fastapi/common/parameters/misc.py | 3 +- .../airflow/api_fastapi/common/parameters/sort.py | 6 +- .../api_fastapi/common/parameters/task_instance.py | 7 +- .../src/airflow/api_fastapi/common/region.py | 54 + .../core_api/datamodels/asset_state_store.py | 8 +- .../api_fastapi/core_api/datamodels/assets.py | 2 + .../api_fastapi/core_api/datamodels/event_logs.py | 2 + .../core_api/datamodels/task_instance_history.py | 10 +- .../core_api/datamodels/task_instances.py | 42 +- .../api_fastapi/core_api/datamodels/ui/common.py | 4 + .../datamodels/ui/{gantt.py => execution.py} | 44 +- .../api_fastapi/core_api/datamodels/ui/gantt.py | 10 +- .../api_fastapi/core_api/datamodels/ui/grid.py | 58 + .../core_api/datamodels/ui/structure.py | 4 + .../api_fastapi/core_api/datamodels/xcom.py | 10 +- .../api_fastapi/core_api/openapi/_private_ui.yaml | 661 ++++++++ .../core_api/openapi/v2-rest-api-generated.yaml | 1151 ++++++++++++- .../core_api/routes/public/asset_state_store.py | 16 + .../api_fastapi/core_api/routes/public/assets.py | 6 + .../api_fastapi/core_api/routes/public/dag_run.py | 7 +- .../core_api/routes/public/event_logs.py | 33 +- .../core_api/routes/public/extra_links.py | 39 +- .../api_fastapi/core_api/routes/public/hitl.py | 98 +- .../api_fastapi/core_api/routes/public/log.py | 27 +- .../core_api/routes/public/task_instances.py | 537 +++++-- .../core_api/routes/public/task_state_store.py | 105 +- .../api_fastapi/core_api/routes/public/xcom.py | 119 +- .../api_fastapi/core_api/routes/ui/__init__.py | 2 + .../airflow/api_fastapi/core_api/routes/ui/dags.py | 12 +- .../api_fastapi/core_api/routes/ui/execution.py | 112 ++ .../api_fastapi/core_api/routes/ui/gantt.py | 28 +- .../airflow/api_fastapi/core_api/routes/ui/grid.py | 123 +- .../core_api/routes/ui/partitioned_dag_runs.py | 11 +- .../core_api/services/public/dag_run.py | 119 +- .../core_api/services/public/event_logs.py | 10 +- .../core_api/services/public/task_coordinates.py | 249 +++ .../core_api/services/public/task_instances.py | 398 ++++- .../api_fastapi/core_api/services/ui/execution.py | 74 + .../api_fastapi/core_api/services/ui/grid.py | 278 +++- .../api_fastapi/core_api/services/ui/task_group.py | 15 + .../src/airflow/api_fastapi/execution_api/app.py | 153 +- .../execution_api/datamodels/taskinstance.py | 42 +- .../api_fastapi/execution_api/in_process.py | 148 ++ .../execution_api/routes/asset_state_store.py | 40 +- .../execution_api/routes/task_instances.py | 510 ++++-- .../execution_api/routes/task_reschedules.py | 11 +- .../execution_api/routes/task_state_store.py | 8 +- .../api_fastapi/execution_api/routes/xcoms.py | 359 ++++- .../api_fastapi/execution_api/versions/__init__.py | 10 + .../execution_api/versions/v2026_10_30.py | 35 + .../versions/v2026_10_30_xcom_params.py | 28 +- .../src/airflow/api_fastapi/logging/decorators.py | 39 + airflow-core/src/airflow/assets/manager.py | 33 +- .../src/airflow/cli/commands/dag_command.py | 9 +- .../src/airflow/cli/commands/standalone_command.py | 31 + .../airflow/cli/commands/state_store_command.py | 6 +- .../src/airflow/cli/commands/task_command.py | 103 +- .../src/airflow/config_templates/config.yml | 24 +- .../src/airflow/dag_processing/collection.py | 19 +- airflow-core/src/airflow/dag_processing/dagbag.py | 31 +- airflow-core/src/airflow/dag_processing/manager.py | 14 +- .../src/airflow/dag_processing/processor.py | 11 +- .../src/airflow/example_dags/example_task_loops.py | 114 ++ .../src/airflow/executors/base_executor.py | 19 +- .../src/airflow/executors/workloads/task.py | 23 +- .../src/airflow/jobs/scheduler_job_runner.py | 297 +++- .../src/airflow/jobs/triggerer_job_runner.py | 48 +- airflow-core/src/airflow/migrations/utils.py | 72 + ..._3_4_0_fold_task_map_into_xcom_mapped_length.py | 2 - .../0142_3_4_0_unify_task_attempt_ownership.py | 26 +- .../0143_3_4_0_add_dynamic_region_storage.py | 211 +++ .../versions/0144_3_4_0_rename_stored_map_index.py | 76 + .../0145_3_4_0_add_task_identity_to_events.py | 49 + .../0146_3_4_0_add_asset_state_writer_identity.py | 55 + airflow-core/src/airflow/models/__init__.py | 1 + airflow-core/src/airflow/models/asset.py | 21 +- .../src/airflow/models/asset_state_store.py | 9 +- airflow-core/src/airflow/models/dagrun.py | 627 ++++++-- airflow-core/src/airflow/models/dagwarning.py | 1 + airflow-core/src/airflow/models/dynamic_region.py | 885 ++++++++++ airflow-core/src/airflow/models/expandinput.py | 31 +- airflow-core/src/airflow/models/log.py | 71 +- .../src/airflow/models/renderedtifields.py | 2 +- airflow-core/src/airflow/models/serialized_dag.py | 4 +- .../src/airflow/models/task_coordinates.py | 838 ++++++++++ .../src/airflow/models/task_state_store.py | 20 +- airflow-core/src/airflow/models/taskinstance.py | 799 ++++++++- airflow-core/src/airflow/models/trigger.py | 17 +- airflow-core/src/airflow/models/xcom.py | 73 +- airflow-core/src/airflow/plugins_manager.py | 93 +- .../src/airflow/serialization/dag_version_diff.py | 2 + airflow-core/src/airflow/serialization/decoders.py | 44 +- .../airflow/serialization/definitions/assets.py | 13 + .../serialization/definitions/baseoperator.py | 6 +- .../src/airflow/serialization/definitions/dag.py | 180 +-- .../serialization/definitions/mappedoperator.py | 55 +- .../serialization/definitions/operatorlink.py | 8 +- .../airflow/serialization/definitions/taskgroup.py | 52 +- .../airflow/serialization/definitions/xcom_arg.py | 111 +- airflow-core/src/airflow/serialization/encoders.py | 7 +- airflow-core/src/airflow/serialization/schema.json | 12 + .../airflow/serialization/serialized_objects.py | 22 +- airflow-core/src/airflow/state/metastore.py | 94 +- airflow-core/src/airflow/ti_deps/dep_context.py | 71 +- .../airflow/ti_deps/deps/mapped_task_expanded.py | 2 +- .../ti_deps/deps/mapped_task_upstream_dep.py | 37 +- .../ti_deps/deps/not_previously_skipped_dep.py | 8 +- .../airflow/ti_deps/deps/ready_to_reschedule.py | 9 +- .../src/airflow/ti_deps/deps/trigger_rule_dep.py | 98 +- airflow-core/src/airflow/timetables/assets.py | 35 +- airflow-core/src/airflow/timetables/base.py | 16 + airflow-core/src/airflow/timetables/simple.py | 91 +- .../src/airflow/ui/openapi-gen/queries/common.ts | 175 +- .../ui/openapi-gen/queries/ensureQueryData.ts | 263 ++- .../src/airflow/ui/openapi-gen/queries/prefetch.ts | 263 ++- .../src/airflow/ui/openapi-gen/queries/queries.ts | 369 ++++- .../src/airflow/ui/openapi-gen/queries/suspense.ts | 263 ++- .../airflow/ui/openapi-gen/requests/schemas.gen.ts | 1207 ++++++++++++-- .../ui/openapi-gen/requests/services.gen.ts | 370 ++++- .../airflow/ui/openapi-gen/requests/types.gen.ts | 529 +++++- .../airflow/ui/public/i18n/locales/ar/admin.json | 12 +- .../airflow/ui/public/i18n/locales/ar/common.json | 14 +- .../ui/public/i18n/locales/ar/components.json | 56 +- .../src/airflow/ui/public/i18n/locales/ar/dag.json | 30 +- .../airflow/ui/public/i18n/locales/ar/dags.json | 4 +- .../ui/public/i18n/locales/ar/dashboard.json | 18 +- .../airflow/ui/public/i18n/locales/ar/hitl.json | 12 +- .../airflow/ui/public/i18n/locales/ca/admin.json | 4 +- .../airflow/ui/public/i18n/locales/ca/assets.json | 3 +- .../airflow/ui/public/i18n/locales/ca/browse.json | 30 + .../airflow/ui/public/i18n/locales/ca/common.json | 54 +- .../ui/public/i18n/locales/ca/components.json | 55 +- .../src/airflow/ui/public/i18n/locales/ca/dag.json | 88 +- .../airflow/ui/public/i18n/locales/ca/dags.json | 33 +- .../ui/public/i18n/locales/ca/dashboard.json | 27 +- .../airflow/ui/public/i18n/locales/ca/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/de/admin.json | 4 +- .../airflow/ui/public/i18n/locales/de/browse.json | 4 +- .../airflow/ui/public/i18n/locales/de/common.json | 16 +- .../ui/public/i18n/locales/de/components.json | 40 +- .../src/airflow/ui/public/i18n/locales/de/dag.json | 24 +- .../airflow/ui/public/i18n/locales/de/dags.json | 4 +- .../ui/public/i18n/locales/de/dashboard.json | 12 +- .../airflow/ui/public/i18n/locales/de/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/el/admin.json | 19 +- .../airflow/ui/public/i18n/locales/el/assets.json | 16 +- .../airflow/ui/public/i18n/locales/el/browse.json | 32 + .../airflow/ui/public/i18n/locales/el/common.json | 143 +- .../ui/public/i18n/locales/el/components.json | 70 +- .../src/airflow/ui/public/i18n/locales/el/dag.json | 101 +- .../airflow/ui/public/i18n/locales/el/dags.json | 49 +- .../ui/public/i18n/locales/el/dashboard.json | 27 +- .../airflow/ui/public/i18n/locales/el/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/en/admin.json | 4 +- .../airflow/ui/public/i18n/locales/en/browse.json | 2 +- .../airflow/ui/public/i18n/locales/en/common.json | 20 +- .../ui/public/i18n/locales/en/components.json | 30 +- .../src/airflow/ui/public/i18n/locales/en/dag.json | 71 +- .../airflow/ui/public/i18n/locales/en/dags.json | 9 +- .../ui/public/i18n/locales/en/dashboard.json | 14 +- .../airflow/ui/public/i18n/locales/en/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/es/admin.json | 4 +- .../airflow/ui/public/i18n/locales/es/common.json | 16 +- .../ui/public/i18n/locales/es/components.json | 28 +- .../src/airflow/ui/public/i18n/locales/es/dag.json | 20 +- .../airflow/ui/public/i18n/locales/es/dags.json | 4 +- .../ui/public/i18n/locales/es/dashboard.json | 10 +- .../airflow/ui/public/i18n/locales/es/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/fr/admin.json | 8 +- .../airflow/ui/public/i18n/locales/fr/browse.json | 6 +- .../airflow/ui/public/i18n/locales/fr/common.json | 20 +- .../ui/public/i18n/locales/fr/components.json | 60 +- .../src/airflow/ui/public/i18n/locales/fr/dag.json | 34 +- .../airflow/ui/public/i18n/locales/fr/dags.json | 4 +- .../ui/public/i18n/locales/fr/dashboard.json | 20 +- .../airflow/ui/public/i18n/locales/fr/hitl.json | 10 +- .../airflow/ui/public/i18n/locales/he/admin.json | 4 +- .../airflow/ui/public/i18n/locales/he/common.json | 14 +- .../ui/public/i18n/locales/he/components.json | 22 +- .../src/airflow/ui/public/i18n/locales/he/dag.json | 22 +- .../airflow/ui/public/i18n/locales/he/dags.json | 4 +- .../ui/public/i18n/locales/he/dashboard.json | 10 +- .../airflow/ui/public/i18n/locales/he/hitl.json | 10 +- .../airflow/ui/public/i18n/locales/hi/admin.json | 4 +- .../airflow/ui/public/i18n/locales/hi/common.json | 12 +- .../ui/public/i18n/locales/hi/components.json | 26 +- .../src/airflow/ui/public/i18n/locales/hi/dag.json | 20 +- .../airflow/ui/public/i18n/locales/hi/dags.json | 4 +- .../ui/public/i18n/locales/hi/dashboard.json | 10 +- .../airflow/ui/public/i18n/locales/hi/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/hu/admin.json | 4 +- .../airflow/ui/public/i18n/locales/hu/common.json | 12 +- .../ui/public/i18n/locales/hu/components.json | 28 +- .../src/airflow/ui/public/i18n/locales/hu/dag.json | 20 +- .../airflow/ui/public/i18n/locales/hu/dags.json | 4 +- .../ui/public/i18n/locales/hu/dashboard.json | 6 +- .../airflow/ui/public/i18n/locales/hu/hitl.json | 4 +- .../airflow/ui/public/i18n/locales/it/admin.json | 8 +- .../airflow/ui/public/i18n/locales/it/common.json | 4 +- .../ui/public/i18n/locales/it/components.json | 44 +- .../src/airflow/ui/public/i18n/locales/it/dag.json | 6 +- .../airflow/ui/public/i18n/locales/it/dags.json | 4 +- .../ui/public/i18n/locales/it/dashboard.json | 6 +- .../airflow/ui/public/i18n/locales/it/hitl.json | 6 +- .../airflow/ui/public/i18n/locales/ja/admin.json | 4 +- .../airflow/ui/public/i18n/locales/ja/common.json | 4 +- .../ui/public/i18n/locales/ja/components.json | 24 +- .../src/airflow/ui/public/i18n/locales/ja/dag.json | 4 +- .../airflow/ui/public/i18n/locales/ja/dags.json | 4 +- .../ui/public/i18n/locales/ja/dashboard.json | 4 +- .../airflow/ui/public/i18n/locales/ja/hitl.json | 4 +- .../airflow/ui/public/i18n/locales/ko/admin.json | 5 +- .../airflow/ui/public/i18n/locales/ko/assets.json | 1 + .../airflow/ui/public/i18n/locales/ko/browse.json | 2 +- .../airflow/ui/public/i18n/locales/ko/common.json | 58 +- .../ui/public/i18n/locales/ko/components.json | 44 +- .../src/airflow/ui/public/i18n/locales/ko/dag.json | 135 +- .../airflow/ui/public/i18n/locales/ko/dags.json | 35 +- .../ui/public/i18n/locales/ko/dashboard.json | 14 +- .../airflow/ui/public/i18n/locales/ko/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/nl/admin.json | 4 +- .../airflow/ui/public/i18n/locales/nl/common.json | 12 +- .../ui/public/i18n/locales/nl/components.json | 26 +- .../src/airflow/ui/public/i18n/locales/nl/dag.json | 20 +- .../airflow/ui/public/i18n/locales/nl/dags.json | 4 +- .../ui/public/i18n/locales/nl/dashboard.json | 6 +- .../airflow/ui/public/i18n/locales/nl/hitl.json | 8 +- .../airflow/ui/public/i18n/locales/pl/admin.json | 13 +- .../airflow/ui/public/i18n/locales/pl/assets.json | 1 + .../airflow/ui/public/i18n/locales/pl/browse.json | 6 +- .../airflow/ui/public/i18n/locales/pl/common.json | 68 +- .../ui/public/i18n/locales/pl/components.json | 91 +- .../src/airflow/ui/public/i18n/locales/pl/dag.json | 108 +- .../airflow/ui/public/i18n/locales/pl/dags.json | 25 +- .../ui/public/i18n/locales/pl/dashboard.json | 35 +- .../airflow/ui/public/i18n/locales/pl/hitl.json | 12 +- .../airflow/ui/public/i18n/locales/pt/admin.json | 8 +- .../airflow/ui/public/i18n/locales/pt/common.json | 10 +- .../ui/public/i18n/locales/pt/components.json | 44 +- .../src/airflow/ui/public/i18n/locales/pt/dag.json | 6 +- .../airflow/ui/public/i18n/locales/pt/dags.json | 4 +- .../ui/public/i18n/locales/pt/dashboard.json | 6 +- .../airflow/ui/public/i18n/locales/pt/hitl.json | 6 +- .../airflow/ui/public/i18n/locales/ru/admin.json | 12 +- .../airflow/ui/public/i18n/locales/ru/common.json | 16 +- .../ui/public/i18n/locales/ru/components.json | 58 +- .../src/airflow/ui/public/i18n/locales/ru/dag.json | 36 +- .../airflow/ui/public/i18n/locales/ru/dags.json | 4 +- .../ui/public/i18n/locales/ru/dashboard.json | 18 +- .../airflow/ui/public/i18n/locales/ru/hitl.json | 12 +- .../airflow/ui/public/i18n/locales/th/admin.json | 4 +- .../airflow/ui/public/i18n/locales/th/common.json | 4 +- .../ui/public/i18n/locales/th/components.json | 16 +- .../src/airflow/ui/public/i18n/locales/th/dag.json | 4 +- .../airflow/ui/public/i18n/locales/th/dags.json | 4 +- .../ui/public/i18n/locales/th/dashboard.json | 4 +- .../airflow/ui/public/i18n/locales/th/hitl.json | 4 +- .../airflow/ui/public/i18n/locales/tr/admin.json | 4 +- .../airflow/ui/public/i18n/locales/tr/common.json | 12 +- .../ui/public/i18n/locales/tr/components.json | 26 +- .../src/airflow/ui/public/i18n/locales/tr/dag.json | 20 +- .../airflow/ui/public/i18n/locales/tr/dags.json | 4 +- .../ui/public/i18n/locales/tr/dashboard.json | 6 +- .../airflow/ui/public/i18n/locales/tr/hitl.json | 4 +- .../ui/public/i18n/locales/zh-CN/admin.json | 4 +- .../ui/public/i18n/locales/zh-CN/common.json | 12 +- .../ui/public/i18n/locales/zh-CN/components.json | 26 +- .../airflow/ui/public/i18n/locales/zh-CN/dag.json | 14 +- .../airflow/ui/public/i18n/locales/zh-CN/dags.json | 4 +- .../ui/public/i18n/locales/zh-CN/dashboard.json | 6 +- .../airflow/ui/public/i18n/locales/zh-CN/hitl.json | 8 +- .../ui/public/i18n/locales/zh-TW/admin.json | 4 +- .../ui/public/i18n/locales/zh-TW/browse.json | 2 +- .../ui/public/i18n/locales/zh-TW/common.json | 23 +- .../ui/public/i18n/locales/zh-TW/components.json | 30 +- .../airflow/ui/public/i18n/locales/zh-TW/dag.json | 22 +- .../airflow/ui/public/i18n/locales/zh-TW/dags.json | 11 +- .../ui/public/i18n/locales/zh-TW/dashboard.json | 12 +- .../airflow/ui/public/i18n/locales/zh-TW/hitl.json | 8 +- .../components/ActionAccordion/ActionAccordion.tsx | 6 +- .../ui/src/components/ActionAccordion/columns.tsx | 16 +- .../ui/src/components/AssetProgressCell.test.tsx | 70 + .../ui/src/components/AssetProgressCell.tsx | 15 +- .../ui/src/components/Breadcrumb/CrumbSwitcher.tsx | 85 + .../airflow/ui/src/components/Breadcrumb/index.ts | 1 + .../TaskInstance/ClearGroupTaskInstanceDialog.tsx | 1 - .../ClearTaskInstanceConfirmationDialog.tsx | 33 +- .../TaskInstance/ClearTaskInstanceDialog.test.tsx | 357 ++++- .../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 383 +++-- .../DagActions/RunBackfillForm.dateRange.test.tsx | 118 ++ .../ui/src/components/DataTable/DataTable.test.tsx | 15 +- .../ui/src/components/DurationChart.test.tsx | 36 +- .../airflow/ui/src/components/DurationChart.tsx | 10 +- .../ui/src/components/Graph/TaskLink.test.tsx | 6 +- .../airflow/ui/src/components/Graph/TaskLink.tsx | 11 +- .../airflow/ui/src/components/Graph/TaskNode.tsx | 4 + .../ui/src/components/Graph/elkGraphUtils.ts | 6 + .../ui/src/components/Graph/reactflowUtils.ts | 2 + .../TaskInstance/MarkTaskInstanceAsDialog.test.tsx | 61 +- .../TaskInstance/MarkTaskInstanceAsDialog.tsx | 14 +- .../src/airflow/ui/src/components/SearchSelect.tsx | 117 ++ .../ui/src/components/TaskInstanceTooltip.test.tsx | 1 + .../ui/src/components/TaskInstanceTooltip.tsx | 31 +- .../src/airflow/ui/src/components/TaskName.tsx | 17 +- .../ui/src/components/TaskTrySelect.test.tsx | 18 +- .../airflow/ui/src/components/TaskTrySelect.tsx | 31 +- .../src/airflow/ui/src/constants/localStorage.ts | 2 - .../src/airflow/ui/src/constants/searchParams.ts | 8 + .../ui/src/hooks/useHITLReviewTabs.test.tsx | 58 + .../src/airflow/ui/src/hooks/useHITLReviewTabs.ts | 26 +- .../src/airflow/ui/src/hooks/useLoopRuleStats.tsx | 61 + .../ui/src/hooks/usePluginAppliesToContext.test.ts | 62 +- .../ui/src/hooks/usePluginAppliesToContext.ts | 53 +- .../airflow/ui/src/hooks/useRequiredActionTabs.ts | 55 +- .../ui/src/hooks/useSelectedVersion.test.tsx | 73 + .../src/airflow/ui/src/hooks/useSelectedVersion.ts | 3 + .../useTaskInstanceCoordinates.ts} | 21 +- .../ui/src/hooks/useTaskInstanceView.test.ts | 97 ++ .../airflow/ui/src/hooks/useTaskInstanceView.ts | 68 + airflow-core/src/airflow/ui/src/i18n/config.ts | 10 + .../src/airflow/ui/src/i18n/locales.test.ts | 101 ++ .../ui/src/layouts/Details/DagBreadcrumb.test.tsx | 89 ++ .../ui/src/layouts/Details/DagBreadcrumb.tsx | 50 +- .../src/layouts/Details/DagRunSwitcherButton.tsx | 89 ++ .../ui/src/layouts/Details/DagSwitcherButton.tsx | 75 +- .../airflow/ui/src/layouts/Details/Gantt/Gantt.tsx | 1 - .../layouts/Details/Gantt/GanttTimeline.test.tsx | 120 +- .../ui/src/layouts/Details/Gantt/GanttTimeline.tsx | 20 +- .../ui/src/layouts/Details/Gantt/utils.test.ts | 122 +- .../airflow/ui/src/layouts/Details/Gantt/utils.ts | 50 +- .../airflow/ui/src/layouts/Details/Grid/Bar.tsx | 3 +- .../ui/src/layouts/Details/Grid/GridButton.tsx | 4 +- .../ui/src/layouts/Details/Grid/GridTI.test.tsx | 13 + .../airflow/ui/src/layouts/Details/Grid/GridTI.tsx | 10 +- .../layouts/Details/Grid/TaskInstancesColumn.tsx | 1 + .../ui/src/layouts/Details/Grid/TaskNames.tsx | 5 +- .../ui/src/layouts/Details/SearchDagRuns.test.tsx | 215 +++ .../ui/src/layouts/Details/SearchDagRuns.tsx | 129 ++ .../Details}/SearchDags.test.tsx | 2 +- .../SearchDags => layouts/Details}/SearchDags.tsx | 67 +- .../ui/src/layouts/Details/searchOptions.test.ts | 50 + .../ui/src/layouts/Details/searchOptions.ts | 66 + .../Asset/AssetStateStore/AssetStateStore.test.tsx | 123 ++ .../Asset/AssetStateStore/AssetStateStore.tsx | 14 +- .../Dag/Calendar/Calendar.failedView.test.tsx | 140 ++ .../ui/src/pages/Dag/Calendar/Calendar.test.tsx | 153 ++ .../airflow/ui/src/pages/Dag/Calendar/Calendar.tsx | 53 +- .../airflow/ui/src/pages/Dag/Code/Code.test.tsx | 72 + .../ui/src/pages/Dag/RequiredActionsRoute.test.tsx | 54 + .../airflow/ui/src/pages/Dag/Tasks/Tasks.test.tsx | 114 ++ .../ui/src/pages/Dag/Versions/VersionDiff.test.tsx | 4 +- .../ui/src/pages/DagsList/DagsList.test.tsx | 29 + .../src/pages/DagsList/PartitionScheduleModal.tsx | 1 + .../airflow/ui/src/pages/Events/Events.test.tsx | 61 + .../src/airflow/ui/src/pages/Events/Events.tsx | 8 +- .../pages/GroupTaskInstance/GroupTaskInstance.tsx | 1 + .../GroupTaskInstance/GroupTaskInstances.test.tsx | 93 ++ .../pages/GroupTaskInstance/GroupTaskInstances.tsx | 47 + .../ui/src/pages/GroupTaskInstance/Header.tsx | 19 + .../LoopIterations/IterationSelect.test.tsx | 107 ++ .../LoopIterations/IterationSelect.tsx | 155 ++ .../GroupTaskInstance/LoopIterations}/index.ts | 3 +- .../LoopIterations/loopUtils.test.ts | 110 ++ .../GroupTaskInstance/LoopIterations/loopUtils.ts | 58 + .../ui/src/pages/GroupTaskInstance/index.ts | 2 +- .../GroupTaskInstance/useLoopOutcomeStats.tsx | 74 + .../pages/HITLTaskInstances/HITLResponseForm.tsx | 2 + .../src/airflow/ui/src/pages/ReactPlugin.test.tsx | 28 +- .../src/airflow/ui/src/pages/ReactPlugin.tsx | 4 + .../airflow/ui/src/pages/Run/Execution.test.tsx | 512 ++++++ .../src/airflow/ui/src/pages/Run/Execution.tsx | 325 ++++ airflow-core/src/airflow/ui/src/pages/Run/Run.tsx | 1 + .../airflow/ui/src/pages/Task/GroupTaskHeader.tsx | 7 +- .../pages/Task/Overview/LoopHistoryChart.test.tsx | 129 ++ .../src/pages/Task/Overview/LoopHistoryChart.tsx | 137 ++ .../ui/src/pages/Task/Overview/Overview.test.tsx | 43 +- .../ui/src/pages/Task/Overview/Overview.tsx | 9 +- .../ui/src/pages/TaskInstance/AssetEvents.test.tsx | 61 + .../ui/src/pages/TaskInstance/AssetEvents.tsx | 8 +- .../ui/src/pages/TaskInstance/BlockingDeps.tsx | 2 + .../ui/src/pages/TaskInstance/Details.test.tsx | 19 +- .../airflow/ui/src/pages/TaskInstance/Details.tsx | 64 +- .../ui/src/pages/TaskInstance/ExtraLinks.test.tsx | 20 +- .../ui/src/pages/TaskInstance/ExtraLinks.tsx | 3 + .../ui/src/pages/TaskInstance/HITLResponse.tsx | 4 + .../ui/src/pages/TaskInstance/Header.test.tsx | 32 +- .../airflow/ui/src/pages/TaskInstance/Header.tsx | 24 +- .../pages/TaskInstance/Logs/ExternalLogLink.tsx | 6 +- .../ui/src/pages/TaskInstance/Logs/Logs.test.tsx | 62 +- .../ui/src/pages/TaskInstance/Logs/Logs.tsx | 28 +- .../pages/TaskInstance/Logs/LogsTryNumber.test.tsx | 25 + .../src/pages/TaskInstance/Logs/TaskLogHeader.tsx | 6 +- .../src/pages/TaskInstance/RenderedTemplates.tsx | 3 + .../src/pages/TaskInstance/TaskInstance.test.tsx | 253 ++- .../ui/src/pages/TaskInstance/TaskInstance.tsx | 116 +- .../TaskInstances/BulkClearTaskInstancesButton.tsx | 126 +- .../BulkDeleteTaskInstancesButton.tsx | 3 + .../BulkMarkTaskInstancesAsButton.tsx | 13 +- .../DeleteTaskInstanceButton.test.tsx | 58 + .../TaskInstances/DeleteTaskInstanceButton.tsx | 3 + .../src/pages/TaskInstances/TaskInstances.test.tsx | 88 +- .../ui/src/pages/TaskInstances/TaskInstances.tsx | 50 +- .../ClearAllTaskStateStoreButton.tsx | 4 +- .../TaskStateStore/DeleteTaskStateStoreButton.tsx | 4 +- .../pages/TaskStateStore/TaskStateStore.test.tsx | 114 ++ .../ui/src/pages/TaskStateStore/TaskStateStore.tsx | 4 + .../TaskStateStore/TaskStateStoreModal.test.tsx | 81 + .../pages/TaskStateStore/TaskStateStoreModal.tsx | 5 +- .../airflow/ui/src/pages/XCom/AddXComButton.tsx | 4 + .../airflow/ui/src/pages/XCom/DeleteXComButton.tsx | 2 + .../airflow/ui/src/pages/XCom/EditXComButton.tsx | 2 + .../src/airflow/ui/src/pages/XCom/XCom.test.tsx | 80 + .../src/airflow/ui/src/pages/XCom/XCom.tsx | 24 +- .../airflow/ui/src/pages/XCom/XComEntry.test.tsx | 72 +- .../src/airflow/ui/src/pages/XCom/XComEntry.tsx | 34 +- .../airflow/ui/src/pages/XCom/XComModal.test.tsx | 82 + .../src/airflow/ui/src/pages/XCom/XComModal.tsx | 21 +- .../airflow/ui/src/queries/gridViewQueryKeys.ts | 4 + .../airflow/ui/src/queries/useBulkClearDryRun.ts | 114 -- .../ui/src/queries/useBulkClearTaskInstances.ts | 133 -- .../ui/src/queries/useBulkMarkAsDryRun.test.tsx | 76 + .../airflow/ui/src/queries/useBulkMarkAsDryRun.ts | 4 +- .../ui/src/queries/useClearTaskInstances.test.tsx | 82 + .../ui/src/queries/useClearTaskInstances.ts | 38 +- .../queries/useClearTaskInstancesDryRun.test.tsx | 88 + .../ui/src/queries/useClearTaskInstancesDryRun.ts | 57 +- .../{utils/option.ts => queries/useIsLoopGroup.ts} | 20 +- .../src/airflow/ui/src/queries/useLogs.test.ts | 44 +- .../src/airflow/ui/src/queries/useLogs.tsx | 22 +- .../index.ts => queries/useLoopHistory.ts} | 7 +- .../airflow/ui/src/queries/useLoopSummary.test.tsx | 93 ++ .../src/airflow/ui/src/queries/useLoopSummary.ts | 77 + .../ui/src/queries/usePatchTaskInstance.test.tsx | 60 + .../airflow/ui/src/queries/usePatchTaskInstance.ts | 6 +- .../ui/src/queries/usePatchTaskInstanceDryRun.ts | 2 + .../ui/src/queries/useTaskInstanceNote.test.tsx | 54 + .../airflow/ui/src/queries/useTaskInstanceNote.ts | 2 +- .../airflow/ui/src/queries/useUpdateHITLDetail.ts | 6 + airflow-core/src/airflow/ui/src/router.tsx | 6 +- .../airflow/ui/src/utils/executionParams.test.ts | 18 +- .../ui/src/utils/{option.ts => executionParams.ts} | 28 +- .../src/airflow/ui/src/utils/links.test.ts | 15 + airflow-core/src/airflow/ui/src/utils/links.ts | 18 +- .../index.ts => utils/loopTaskInstance.ts} | 4 +- airflow-core/src/airflow/ui/src/utils/option.ts | 4 + .../airflow/ui/src/utils/pluginAppliesTo.test.ts | 7 +- .../src/airflow/ui/tests/e2e/fixtures/pom.ts | 5 - .../src/airflow/ui/tests/e2e/pages/BackfillPage.ts | 30 - .../airflow/ui/tests/e2e/pages/DagCalendarTab.ts | 47 +- .../src/airflow/ui/tests/e2e/pages/DagCodePage.ts | 20 - .../airflow/ui/tests/e2e/pages/DagDetailPage.ts | 49 - .../src/airflow/ui/tests/e2e/pages/DagRunPage.ts | 8 +- .../src/airflow/ui/tests/e2e/pages/DagRunsPage.ts | 32 - .../airflow/ui/tests/e2e/pages/DagRunsTabPage.ts | 33 - .../src/airflow/ui/tests/e2e/pages/DagsPage.ts | 115 -- .../src/airflow/ui/tests/e2e/pages/XComsPage.ts | 14 - .../src/airflow/ui/tests/e2e/specs/asset.spec.ts | 17 +- .../airflow/ui/tests/e2e/specs/backfill.spec.ts | 64 - .../airflow/ui/tests/e2e/specs/dag-bundles.spec.ts | 37 +- .../ui/tests/e2e/specs/dag-calendar-tab.spec.ts | 75 +- .../ui/tests/e2e/specs/dag-code-tab.spec.ts | 8 - .../airflow/ui/tests/e2e/specs/dag-detail.spec.ts | 43 - .../src/airflow/ui/tests/e2e/specs/dag-run.spec.ts | 13 +- .../ui/tests/e2e/specs/dag-runs-tab.spec.ts | 30 +- .../airflow/ui/tests/e2e/specs/dag-runs.spec.ts | 10 - .../airflow/ui/tests/e2e/specs/dag-tasks.spec.ts | 102 -- .../airflow/ui/tests/e2e/specs/dags-list.spec.ts | 67 +- .../src/airflow/ui/tests/e2e/specs/plugins.spec.ts | 35 +- .../airflow/ui/tests/e2e/specs/providers.spec.ts | 19 +- .../ui/tests/e2e/specs/task-instances.spec.ts | 5 - .../airflow/ui/tests/e2e/specs/task-logs.spec.ts | 66 +- .../src/airflow/ui/tests/e2e/specs/xcoms.spec.ts | 20 +- airflow-core/src/airflow/utils/db.py | 5 +- airflow-core/src/airflow/utils/db_cleanup.py | 8 +- .../src/airflow/utils/log/file_task_handler.py | 42 +- .../src/airflow/utils/log/task_log_address.py | 268 ++++ airflow-core/src/airflow/utils/sqlalchemy.py | 57 +- .../tests/unit/always/test_project_structure.py | 4 +- .../unit/api_fastapi/common/test_parameters.py | 12 + .../routes/public/test_asset_state_store.py | 55 + .../core_api/routes/public/test_assets.py | 61 + .../core_api/routes/public/test_dag_run.py | 212 ++- .../core_api/routes/public/test_dag_warning.py | 6 +- .../core_api/routes/public/test_event_logs.py | 205 ++- .../core_api/routes/public/test_execution.py | 177 ++ .../core_api/routes/public/test_extra_links.py | 111 +- .../core_api/routes/public/test_hitl.py | 140 ++ .../api_fastapi/core_api/routes/public/test_log.py | 129 +- .../core_api/routes/public/test_task_instances.py | 1546 +++++++++++++++++- .../routes/public/test_task_state_store.py | 143 +- .../core_api/routes/public/test_xcom.py | 164 +- .../api_fastapi/core_api/routes/test_routes.py | 22 + .../core_api/routes/ui/test_execution.py | 82 + .../api_fastapi/core_api/routes/ui/test_gantt.py | 47 + .../api_fastapi/core_api/routes/ui/test_grid.py | 461 +++++- .../routes/ui/test_partitioned_dag_runs.py | 48 +- .../core_api/routes/ui/test_structure.py | 50 + .../core_api/services/ui/test_execution.py | 72 + .../unit/api_fastapi/execution_api/test_app.py | 47 +- .../api_fastapi/execution_api/test_in_process.py | 60 + .../versions/head/test_asset_state_store.py | 52 + .../versions/head/test_task_instances.py | 1691 ++++++++++++++++++-- .../versions/head/test_task_state_store.py | 27 +- .../execution_api/versions/head/test_xcoms.py | 682 +++++++- .../versions/v2026_10_30/test_task_instances.py | 61 +- .../unit/api_fastapi/logging/test_decorators.py | 67 + airflow-core/tests/unit/api_fastapi/test_app.py | 2 +- airflow-core/tests/unit/assets/test_manager.py | 43 +- .../tests/unit/callbacks/test_callback_requests.py | 13 +- .../tests/unit/cli/commands/test_dag_command.py | 40 +- .../unit/cli/commands/test_partition_command.py | 53 +- .../unit/cli/commands/test_standalone_command.py | 51 + .../unit/cli/commands/test_state_store_command.py | 10 +- .../tests/unit/cli/commands/test_task_command.py | 283 +++- .../lang_sdk_fixtures/go_native.json | 4 +- .../tests/unit/dag_processing/test_collection.py | 88 +- .../tests/unit/dag_processing/test_dagbag.py | 86 +- .../tests/unit/dag_processing/test_processor.py | 37 +- .../tests/unit/executors/test_base_executor.py | 11 + .../tests/unit/executors/test_local_executor.py | 32 + .../tests/unit/executors/test_workloads.py | 159 +- airflow-core/tests/unit/jobs/test_scheduler_job.py | 782 ++++++++- airflow-core/tests/unit/jobs/test_triggerer_job.py | 44 +- .../test_0143_add_dynamic_region_storage.py | 231 +++ .../test_0144_rename_stored_map_index.py | 324 ++++ airflow-core/tests/unit/models/conftest.py | 113 ++ airflow-core/tests/unit/models/test_asset.py | 87 +- airflow-core/tests/unit/models/test_cleartasks.py | 868 +++++++++- airflow-core/tests/unit/models/test_dag.py | 63 +- airflow-core/tests/unit/models/test_dagrun.py | 922 ++++++++++- .../tests/unit/models/test_dynamic_region.py | 885 ++++++++++ airflow-core/tests/unit/models/test_log.py | 92 +- .../tests/unit/models/test_mappedoperator.py | 414 ++++- .../tests/unit/models/test_task_coordinates.py | 635 ++++++++ airflow-core/tests/unit/models/test_task_data.py | 22 +- .../tests/unit/models/test_task_state_store.py | 18 +- .../tests/unit/models/test_taskinstance.py | 558 ++++++- airflow-core/tests/unit/models/test_xcom_arg.py | 242 +++ .../tests/unit/plugins/test_plugins_manager.py | 158 +- .../unit/serialization/definitions/test_assets.py | 19 + .../unit/serialization/test_dag_serialization.py | 104 +- .../unit/serialization/test_dag_version_diff.py | 31 + .../tests/unit/serialization/test_decoders.py | 84 + airflow-core/tests/unit/state/test_metastore.py | 136 ++ .../ti_deps/deps/test_mapped_task_upstream_dep.py | 33 +- .../ti_deps/deps/test_ready_to_reschedule_dep.py | 28 + .../unit/ti_deps/deps/test_trigger_rule_dep.py | 295 +++- .../tests/unit/timetables/test_assets_timetable.py | 144 +- .../unit/timetables/test_partitioned_timetable.py | 54 +- .../tests/unit/utils/log/test_task_log_address.py | 362 +++++ airflow-core/tests/unit/utils/test_db.py | 20 + airflow-core/tests/unit/utils/test_db_cleanup.py | 49 +- airflow-core/tests/unit/utils/test_log_handlers.py | 1 + airflow-core/tests/unit/utils/test_sqlalchemy.py | 62 +- airflow-core/tests/unit/utils/test_task_group.py | 134 ++ .../src/airflowctl/api/datamodels/generated.py | 75 + airflow-ctl/src/airflowctl/ctl/cli_config.py | 30 +- .../tests/airflow_ctl/api/test_operations.py | 2 + .../airflow_ctl/ctl/commands/test_task_command.py | 3 + .../tests/airflow_ctl/ctl/test_cli_config.py | 60 +- airflow-e2e-tests/docker/go.yml | 7 + airflow-e2e-tests/docker/java.yml | 10 +- airflow-e2e-tests/docker/ts.yml | 12 + airflow-e2e-tests/java-native-bundle/.gitignore | 2 + .../java-native-bundle/build.gradle | 38 +- .../java-native-bundle/gradle.properties | 17 +- .../java-native-bundle/settings.gradle | 22 +- .../apache/airflow/e2e/NativeBundleBuilder.java | 150 ++ .../airflow/e2e/nativedag/AnnotationDag.java | 106 ++ .../apache/airflow/e2e/nativedag/TargetDag.java | 33 +- .../tests/airflow_e2e_tests/conftest.py | 102 +- .../tests/airflow_e2e_tests/constants.py | 8 + .../airflow_e2e_tests/e2e_test_utils/clients.py | 76 +- .../go_sdk_tests/test_go_sdk_native_dag.py | 220 +++ .../java_sdk_tests/test_java_sdk_native_dag.py | 215 +++ .../ts_sdk_tests/test_ts_sdk_dag.py | 65 +- .../ts_sdk_tests/test_ts_sdk_hitl.py | 200 +++ .../ts_sdk_tests/test_ts_sdk_native_dag.py | 253 +++ .../03a_contributors_quick_start_beginners.rst | 31 +- dev/README_RELEASE_AIRFLOW.md | 24 + dev/breeze/doc/05_test_commands.rst | 10 +- dev/breeze/doc/09_release_management_tasks.rst | 14 + dev/breeze/doc/ci/04_selective_checks.md | 28 +- dev/breeze/doc/images/output_k8s.svg | 26 +- dev/breeze/doc/images/output_k8s.txt | 2 +- .../doc/images/output_k8s_run-complete-tests.svg | 6 +- .../doc/images/output_k8s_run-complete-tests.txt | 2 +- .../doc/images/output_k8s_setup-lang-sdk-test.svg | 28 +- .../doc/images/output_k8s_setup-lang-sdk-test.txt | 2 +- .../doc/images/output_release-management.svg | 120 +- .../doc/images/output_release-management.txt | 2 +- ...utput_release-management_start-beta-process.svg | 138 ++ ...utput_release-management_start-beta-process.txt | 1 + .../output_setup_check-all-params-in-groups.svg | 48 +- .../output_setup_check-all-params-in-groups.txt | 2 +- .../output_setup_regenerate-command-images.svg | 56 +- .../output_setup_regenerate-command-images.txt | 2 +- .../airflow_breeze/commands/kubernetes_commands.py | 531 +++--- .../commands/kubernetes_commands_config.py | 3 +- .../commands/release_candidate_command.py | 140 +- .../commands/release_management_commands_config.py | 11 + .../src/airflow_breeze/commands/ui_commands.py | 8 +- .../airflow_breeze/utils/release_constraints.py | 10 +- .../src/airflow_breeze/utils/selective_checks.py | 34 +- .../src/airflow_breeze/utils/verification_plan.py | 1 + .../tests/test_kubernetes_lang_sdk_commands.py | 196 ++- dev/breeze/tests/test_release_candidate_command.py | 88 +- dev/breeze/tests/test_release_constraints.py | 1 + dev/breeze/tests/test_selective_checks.py | 93 +- dev/breeze/tests/test_ui_commands.py | 9 + dev/breeze/uv.lock | 48 +- .../react_plugin_template/package.json | 14 +- .../react_plugin_template/pnpm-lock.yaml | 406 ++--- dev/sign.sh | 9 + .../src/sphinx_exts/providers_extensions.py | 34 +- .../provider_connection_services.rst.jinja2 | 28 + devel-common/src/tests_common/pytest_plugin.py | 15 + .../src/tests_common/test_utils/asserts.py | 20 + .../tests_common/test_utils/attempt_ownership.py | 10 +- .../src/tests_common/test_utils/taskinstance.py | 8 +- .../unit/sphinx_exts/test_providers_extensions.py | 57 + docs/spelling_wordlist.txt | 10 + go-sdk/README.md | 4 +- go-sdk/airflow/bundle.go | 13 +- go-sdk/airflow/bundle_test.go | 59 +- go-sdk/airflow/conformance_test.go | 7 + go-sdk/airflow/serialize.go | 36 +- go-sdk/airflow/serialize_test.go | 56 +- go-sdk/airflow/spec.gen.go | 3 +- go-sdk/airflow/trigger_dag_run.go | 82 +- go-sdk/airflow/trigger_dag_run_test.go | 26 +- go-sdk/capabilities.yaml | 15 +- go-sdk/example/native/main.go | 177 ++ go-sdk/example/native/report.go | 35 + go-sdk/internal/bundle/trigger.go | 64 + go-sdk/internal/genspec/authoring.go | 4 +- go-sdk/pkg/execution/client.go | 46 + go-sdk/pkg/execution/client_test.go | 136 ++ go-sdk/pkg/execution/genmodels/models.gen.go | 191 ++- go-sdk/pkg/execution/task_runner.go | 38 +- go-sdk/pkg/execution/trigger_runner.go | 418 +++++ go-sdk/pkg/execution/trigger_runner_test.go | 648 ++++++++ go-sdk/schema/dag-schema.json | 12 + go-sdk/schema/supervisor-schema.json | 114 ++ java-sdk/README.md | 10 +- java-sdk/capabilities.yaml | 18 +- .../airflow/example/ExampleBundleBuilder.java | 3 +- .../example/nativedag/AnnotationExample.java | 44 +- .../example/nativedag/InterfaceExample.java | 57 +- .../airflow/example/nativedag/TargetExample.java | 49 + java-sdk/plugin/build.gradle.kts | 6 + .../apache/airflow/sdk/plugin/AirflowSdkPlugin.kt | 78 +- .../org/apache/airflow/sdk/plugin/ClassFiles.kt | 85 + .../apache/airflow/sdk/plugin/PackDagSources.kt | 256 +++ .../airflow/sdk/plugin/AirflowSdkPluginTest.kt | 415 +++++ .../apache/airflow/sdk/plugin/ClassFilesTest.kt | 80 + .../airflow/sdk/plugin/PackDagSourcesTest.kt | 89 ++ .../org/apache/airflow/sdk/plugin/TestSupport.kt | 44 +- .../org/apache/airflow/sdk/BuilderProcessor.kt | 209 ++- .../kotlin/org/apache/airflow/sdk/BuilderTest.kt | 692 +++++++- .../ci/prek/check_serialization_conformance.py | 2 +- java-sdk/sdk/build.gradle.kts | 69 + java-sdk/sdk/module.md | 6 +- java-sdk/sdk/schema/dag-schema.json | 12 + .../main/kotlin/org/apache/airflow/sdk/Bundle.kt | 27 +- .../org/apache/airflow/sdk/BundleInspector.kt | 113 ++ .../kotlin/org/apache/airflow/sdk/Condition.kt | 224 +++ .../main/kotlin/org/apache/airflow/sdk/DagDef.kt | 150 +- .../main/kotlin/org/apache/airflow/sdk/Decider.kt | 90 ++ .../kotlin/org/apache/airflow/sdk/IdValidation.kt | 86 + .../main/kotlin/org/apache/airflow/sdk/Server.kt | 109 +- .../main/kotlin/org/apache/airflow/sdk/Switch.kt | 240 +++ .../kotlin/org/apache/airflow/sdk/TaskGroupRef.kt | 81 + .../kotlin/org/apache/airflow/sdk/TriggerDagRun.kt | 189 +++ .../org/apache/airflow/sdk/execution/Client.kt | 88 + .../org/apache/airflow/sdk/execution/Logger.kt | 5 + .../org/apache/airflow/sdk/execution/Serde.kt | 129 +- .../org/apache/airflow/sdk/execution/Task.kt | 42 +- .../apache/airflow/sdk/execution/TriggerRunner.kt | 324 ++++ .../org/apache/airflow/sdk/internal/DagSource.kt | 66 + .../org/apache/airflow/sdk/internal/Fields.kt | 33 + .../kotlin/org/apache/airflow/sdk/internal/Ids.kt | 10 + .../apache/airflow/example/DagSourceFixtures.kt | 35 +- .../org/apache/airflow/sdk/ArgTestSupport.kt | 19 + .../org/apache/airflow/sdk/BundleInspectorTest.kt | 164 ++ .../kotlin/org/apache/airflow/sdk/ClientTest.kt | 19 + .../kotlin/org/apache/airflow/sdk/ConditionTest.kt | 208 +++ .../kotlin/org/apache/airflow/sdk/DagSourceTest.kt | 132 ++ .../org/apache/airflow/sdk/IdValidationTest.kt | 105 ++ .../kotlin/org/apache/airflow/sdk/ServerTest.kt | 6 +- .../kotlin/org/apache/airflow/sdk/SwitchTest.kt | 224 +++ .../org/apache/airflow/sdk/TriggerDagRunTest.kt | 275 ++++ .../airflow/sdk/conformance/SerializeJava.kt | 191 ++- .../org/apache/airflow/sdk/execution/CommTest.kt | 171 ++ .../org/apache/airflow/sdk/execution/TaskTest.kt | 319 ++++ .../airflow/sdk/execution/TriggerRunnerTest.kt | 473 ++++++ .../apache/airflow/sdk/internal/ArgValuesTest.kt | 19 + .../org/apache/airflow/sdk/internal/RefsTest.kt | 65 + kubernetes-tests/lang_sdk/Dockerfile.runtimes | 49 + kubernetes-tests/lang_sdk/README.md | 145 +- kubernetes-tests/lang_sdk/airflowignore_all | 1 + kubernetes-tests/lang_sdk/config/values.yaml | 67 +- ..._sdk_combined.py => lang_sdk_mixed_language.py} | 30 +- kubernetes-tests/lang_sdk/go_example/main.go | 21 +- .../airflow/k8sexample/K8sBundleBuilder.java | 4 +- ...binedExample.java => MixedLanguageExample.java} | 16 +- .../lang_sdk/pod_templates/lang_sdk_golang.yaml | 118 -- .../{lang_sdk_java.yaml => lang_sdk_worker.yaml} | 60 +- kubernetes-tests/lang_sdk/stage_artifacts.py | 92 -- kubernetes-tests/lang_sdk/ts_example/.gitignore | 3 + .../lang_sdk/ts_example}/package.json | 5 +- .../lang_sdk/ts_example/pnpm-lock.yaml | 336 ++++ kubernetes-tests/lang_sdk/ts_example/src/main.ts | 47 + .../lang_sdk/ts_example}/tsconfig.json | 13 +- ...executor.py => test_lang_sdk_mixed_language.py} | 24 +- .../kubernetes_tests/test_lang_sdk_native_dag.py | 206 +++ providers/.last_release_date.txt | 2 +- providers/airbyte/README.rst | 6 +- providers/airbyte/docs/changelog.rst | 22 + 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 | 20 + providers/akeyless/docs/index.rst | 6 +- providers/akeyless/provider.yaml | 3 +- providers/akeyless/pyproject.toml | 6 +- .../src/airflow/providers/akeyless/__init__.py | 2 +- providers/alibaba/README.rst | 6 +- providers/alibaba/docs/changelog.rst | 17 + providers/alibaba/docs/index.rst | 6 +- providers/alibaba/provider.yaml | 3 +- providers/alibaba/pyproject.toml | 6 +- .../src/airflow/providers/alibaba/__init__.py | 2 +- providers/amazon/README.rst | 12 +- .../docs/auth-manager/setup/identity-center.rst | 10 + providers/amazon/docs/changelog.rst | 55 + providers/amazon/docs/index.rst | 8 +- providers/amazon/docs/transfer/exasol_to_s3.rst | 63 + providers/amazon/provider.yaml | 4 +- providers/amazon/pyproject.toml | 8 +- .../src/airflow/providers/amazon/__init__.py | 2 +- .../amazon/aws/auth_manager/routes/login.py | 9 +- .../providers/amazon/aws/transfers/exasol_to_s3.py | 5 +- .../airflow/providers/amazon/get_provider_info.py | 1 + .../system/amazon/aws/example_exasol_to_s3.py | 92 ++ .../amazon/aws/tests/test_aws_auth_manager.py | 65 +- .../amazon/aws/auth_manager/routes/test_login.py | 27 +- .../aws/executors/batch/test_batch_executor.py | 31 +- .../amazon/aws/executors/ecs/test_ecs_executor.py | 31 +- providers/anthropic/README.rst | 8 +- providers/anthropic/docs/changelog.rst | 22 + providers/anthropic/docs/commits.rst | 5 +- providers/anthropic/docs/index.rst | 8 +- providers/anthropic/provider.yaml | 3 +- providers/anthropic/pyproject.toml | 8 +- .../src/airflow/providers/anthropic/__init__.py | 2 +- providers/apache/arrow/README.rst | 6 +- providers/apache/arrow/docs/changelog.rst | 19 + providers/apache/arrow/docs/commits.rst | 8 +- providers/apache/arrow/docs/index.rst | 6 +- providers/apache/arrow/provider.yaml | 3 +- providers/apache/arrow/pyproject.toml | 6 +- .../src/airflow/providers/apache/arrow/__init__.py | 2 +- providers/apache/beam/README.rst | 6 +- providers/apache/beam/docs/changelog.rst | 17 + providers/apache/beam/docs/index.rst | 6 +- providers/apache/beam/provider.yaml | 3 +- providers/apache/beam/pyproject.toml | 6 +- .../src/airflow/providers/apache/beam/__init__.py | 2 +- providers/apache/cassandra/README.rst | 6 +- providers/apache/cassandra/docs/changelog.rst | 17 + providers/apache/cassandra/docs/index.rst | 6 +- providers/apache/cassandra/provider.yaml | 3 +- providers/apache/cassandra/pyproject.toml | 6 +- .../airflow/providers/apache/cassandra/__init__.py | 2 +- providers/apache/drill/README.rst | 6 +- providers/apache/drill/docs/changelog.rst | 21 + providers/apache/drill/docs/index.rst | 6 +- providers/apache/drill/provider.yaml | 3 +- providers/apache/drill/pyproject.toml | 6 +- .../src/airflow/providers/apache/drill/__init__.py | 2 +- providers/apache/druid/README.rst | 6 +- providers/apache/druid/docs/changelog.rst | 17 + providers/apache/druid/docs/index.rst | 6 +- providers/apache/druid/provider.yaml | 3 +- providers/apache/druid/pyproject.toml | 6 +- .../src/airflow/providers/apache/druid/__init__.py | 2 +- providers/apache/flink/README.rst | 6 +- providers/apache/flink/docs/changelog.rst | 17 + providers/apache/flink/docs/index.rst | 6 +- providers/apache/flink/provider.yaml | 3 +- providers/apache/flink/pyproject.toml | 6 +- .../src/airflow/providers/apache/flink/__init__.py | 2 +- providers/apache/hdfs/README.rst | 6 +- providers/apache/hdfs/docs/changelog.rst | 17 + providers/apache/hdfs/docs/index.rst | 6 +- providers/apache/hdfs/provider.yaml | 3 +- providers/apache/hdfs/pyproject.toml | 6 +- .../src/airflow/providers/apache/hdfs/__init__.py | 2 +- providers/apache/hive/README.rst | 8 +- providers/apache/hive/docs/changelog.rst | 19 + providers/apache/hive/docs/index.rst | 6 +- providers/apache/hive/provider.yaml | 3 +- providers/apache/hive/pyproject.toml | 6 +- .../src/airflow/providers/apache/hive/__init__.py | 2 +- providers/apache/iceberg/README.rst | 6 +- providers/apache/iceberg/docs/changelog.rst | 20 + providers/apache/iceberg/docs/index.rst | 6 +- providers/apache/iceberg/provider.yaml | 3 +- providers/apache/iceberg/pyproject.toml | 6 +- .../airflow/providers/apache/iceberg/__init__.py | 2 +- providers/apache/impala/README.rst | 14 +- providers/apache/impala/docs/changelog.rst | 24 + providers/apache/impala/docs/index.rst | 6 +- providers/apache/impala/provider.yaml | 3 +- providers/apache/impala/pyproject.toml | 6 +- .../airflow/providers/apache/impala/__init__.py | 2 +- providers/apache/kafka/README.rst | 6 +- providers/apache/kafka/docs/changelog.rst | 29 + providers/apache/kafka/docs/index.rst | 6 +- providers/apache/kafka/provider.yaml | 3 +- providers/apache/kafka/pyproject.toml | 6 +- .../src/airflow/providers/apache/kafka/__init__.py | 2 +- providers/apache/kylin/README.rst | 6 +- providers/apache/kylin/docs/changelog.rst | 17 + providers/apache/kylin/docs/index.rst | 6 +- providers/apache/kylin/provider.yaml | 3 +- providers/apache/kylin/pyproject.toml | 6 +- .../src/airflow/providers/apache/kylin/__init__.py | 2 +- providers/apache/livy/README.rst | 6 +- providers/apache/livy/docs/changelog.rst | 19 + providers/apache/livy/docs/index.rst | 6 +- providers/apache/livy/provider.yaml | 3 +- providers/apache/livy/pyproject.toml | 6 +- .../src/airflow/providers/apache/livy/__init__.py | 2 +- providers/apache/pig/README.rst | 6 +- providers/apache/pig/docs/changelog.rst | 17 + providers/apache/pig/docs/index.rst | 6 +- providers/apache/pig/provider.yaml | 3 +- providers/apache/pig/pyproject.toml | 6 +- .../src/airflow/providers/apache/pig/__init__.py | 2 +- providers/apache/pinot/README.rst | 6 +- providers/apache/pinot/docs/changelog.rst | 21 + providers/apache/pinot/docs/index.rst | 6 +- providers/apache/pinot/provider.yaml | 3 +- providers/apache/pinot/pyproject.toml | 6 +- .../src/airflow/providers/apache/pinot/__init__.py | 2 +- providers/apache/spark/README.rst | 6 +- providers/apache/spark/docs/changelog.rst | 27 + providers/apache/spark/docs/index.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 | 48 +- .../unit/apache/spark/hooks/test_spark_submit.py | 491 +++--- providers/apache/tinkerpop/README.rst | 8 +- providers/apache/tinkerpop/docs/changelog.rst | 17 + providers/apache/tinkerpop/docs/index.rst | 6 +- providers/apache/tinkerpop/provider.yaml | 7 +- providers/apache/tinkerpop/pyproject.toml | 9 +- .../airflow/providers/apache/tinkerpop/__init__.py | 2 +- providers/apprise/README.rst | 6 +- providers/apprise/docs/changelog.rst | 17 + providers/apprise/docs/index.rst | 6 +- providers/apprise/provider.yaml | 3 +- providers/apprise/pyproject.toml | 6 +- .../src/airflow/providers/apprise/__init__.py | 2 +- providers/arangodb/README.rst | 6 +- providers/arangodb/docs/changelog.rst | 17 + providers/arangodb/docs/index.rst | 6 +- providers/arangodb/provider.yaml | 3 +- providers/arangodb/pyproject.toml | 6 +- .../src/airflow/providers/arangodb/__init__.py | 2 +- providers/asana/README.rst | 6 +- providers/asana/docs/changelog.rst | 17 + providers/asana/docs/index.rst | 6 +- providers/asana/provider.yaml | 3 +- providers/asana/pyproject.toml | 6 +- .../asana/src/airflow/providers/asana/__init__.py | 2 +- providers/atlassian/jira/README.rst | 6 +- providers/atlassian/jira/docs/changelog.rst | 17 + providers/atlassian/jira/docs/index.rst | 6 +- providers/atlassian/jira/provider.yaml | 3 +- providers/atlassian/jira/pyproject.toml | 6 +- .../airflow/providers/atlassian/jira/__init__.py | 2 +- providers/celery/README.rst | 6 +- providers/celery/docs/changelog.rst | 28 + providers/celery/docs/index.rst | 6 +- providers/celery/provider.yaml | 3 +- providers/celery/pyproject.toml | 6 +- .../src/airflow/providers/celery/__init__.py | 2 +- providers/clickhousedb/README.rst | 6 +- providers/clickhousedb/docs/changelog.rst | 28 + providers/clickhousedb/docs/index.rst | 6 +- providers/clickhousedb/provider.yaml | 3 +- providers/clickhousedb/pyproject.toml | 6 +- .../src/airflow/providers/clickhousedb/__init__.py | 2 +- providers/cloudant/README.rst | 6 +- providers/cloudant/docs/changelog.rst | 17 + providers/cloudant/docs/index.rst | 6 +- providers/cloudant/provider.yaml | 3 +- providers/cloudant/pyproject.toml | 6 +- .../src/airflow/providers/cloudant/__init__.py | 2 +- providers/cncf/kubernetes/README.rst | 6 +- providers/cncf/kubernetes/docs/changelog.rst | 30 + providers/cncf/kubernetes/docs/index.rst | 6 +- providers/cncf/kubernetes/provider.yaml | 3 +- providers/cncf/kubernetes/pyproject.toml | 6 +- .../airflow/providers/cncf/kubernetes/__init__.py | 2 +- .../kubernetes/executors/kubernetes_executor.py | 3 +- .../executors/test_kubernetes_executor.py | 40 + .../kubernetes/operators/test_spark_kubernetes.py | 4 +- providers/cohere/README.rst | 6 +- providers/cohere/docs/changelog.rst | 17 + providers/cohere/docs/index.rst | 6 +- providers/cohere/provider.yaml | 3 +- providers/cohere/pyproject.toml | 6 +- .../src/airflow/providers/cohere/__init__.py | 2 +- providers/common/ai/.pre-commit-config.yaml | 2 +- providers/common/ai/README.rst | 13 +- providers/common/ai/docs/agent_security.rst | 14 +- providers/common/ai/docs/capabilities.rst | 10 +- providers/common/ai/docs/changelog.rst | 93 ++ providers/common/ai/docs/connections/langchain.rst | 10 +- providers/common/ai/docs/hitl_review.rst | 14 +- providers/common/ai/docs/index.rst | 9 +- providers/common/ai/docs/model_providers.rst | 3 + providers/common/ai/docs/observability.rst | 18 +- providers/common/ai/docs/operators/agent.rst | 11 +- providers/common/ai/docs/operators/llm.rst | 53 +- providers/common/ai/docs/stability.rst | 5 +- providers/common/ai/docs/supported_services.rst | 82 + providers/common/ai/docs/toolsets/hook.rst | 11 +- providers/common/ai/docs/toolsets/index.rst | 26 +- providers/common/ai/docs/toolsets/logging.rst | 30 +- .../common/ai/docs/toolsets/managed_agent.rst | 8 + providers/common/ai/docs/toolsets/sql.rst | 20 +- providers/common/ai/provider.yaml | 35 +- providers/common/ai/pyproject.toml | 8 +- .../ai/src/airflow/providers/common/ai/__init__.py | 2 +- .../providers/common/ai/durable/fingerprint.py | 19 +- .../common/ai/example_dags/example_agent.py | 4 +- .../common/ai/example_dags/example_hook_toolset.py | 2 +- .../providers/common/ai/get_provider_info.py | 31 +- .../providers/common/ai/hooks/pydantic_ai.py | 2 +- .../providers/common/ai/mixins/hitl_review.py | 21 +- .../providers/common/ai/mixins/usage_budget.py | 152 ++ .../airflow/providers/common/ai/operators/agent.py | 154 +- .../airflow/providers/common/ai/operators/llm.py | 76 +- .../providers/common/ai/operators/llm_branch.py | 14 +- .../common/ai/operators/llm_file_analysis.py | 5 +- .../common/ai/operators/llm_schema_compare.py | 24 +- .../providers/common/ai/operators/llm_sql.py | 13 +- .../providers/common/ai/plugins/hitl_review.py | 125 +- .../providers/common/ai/plugins/www/package.json | 1 + .../providers/common/ai/plugins/www/src/api.ts | 13 +- .../ai/plugins/www/src/components/ChatPage.tsx | 9 +- .../common/ai/plugins/www/src/hooks/useSession.ts | 5 +- .../providers/common/ai/plugins/www/src/main.tsx | 46 +- .../common/ai/plugins/www/tests/api.test.ts | 63 + .../common/ai/plugins/www/tests/main.test.mjs | 43 + .../airflow/providers/common/ai/tools/__init__.py | 8 +- .../providers/common/ai/toolsets/__init__.py | 9 + .../airflow/providers/common/ai/toolsets/hook.py | 40 +- .../providers/common/ai/toolsets/logging.py | 51 +- .../providers/common/ai/toolsets/sandbox.py | 16 +- .../airflow/providers/common/ai/toolsets/sql.py | 41 +- .../airflow/providers/common/ai/utils/logging.py | 17 +- .../providers/common/ai/utils/usage_budget.py | 15 +- .../common/ai/tests/unit/common/ai/conftest.py | 48 + .../tests/unit/common/ai/decorators/test_agent.py | 12 +- .../ai/decorators/test_llm_schema_compare.py | 14 + .../unit/common/ai/decorators/test_llm_sql.py | 12 + .../unit/common/ai/durable/test_fingerprint.py | 15 + .../unit/common/ai/managed_agents/test_failover.py | 7 +- .../unit/common/ai/mixins/test_hitl_review.py | 37 +- .../unit/common/ai/mixins/test_usage_budget.py | 190 +++ .../tests/unit/common/ai/operators/test_agent.py | 611 +++++-- .../ai/tests/unit/common/ai/operators/test_llm.py | 265 ++- .../unit/common/ai/operators/test_llm_branch.py | 140 +- .../common/ai/operators/test_llm_file_analysis.py | 88 +- .../common/ai/operators/test_llm_schema_compare.py | 135 +- .../tests/unit/common/ai/operators/test_llm_sql.py | 125 +- .../unit/common/ai/plugins/test_hitl_review.py | 469 +++++- .../ai/tests/unit/common/ai/policies/test_retry.py | 18 +- .../ai/tests/unit/common/ai/sandbox/test_base.py | 2 +- .../ai/tests/unit/common/ai/sandbox/test_modal.py | 12 +- .../tests/unit/common/ai/test_provider_metadata.py | 478 ++++++ .../unit/common/ai/tools/test__from_toolset.py | 2 +- .../ai/tests/unit/common/ai/tools/test_tools.py | 5 +- .../ai/tests/unit/common/ai/toolsets/test_hook.py | 58 +- .../tests/unit/common/ai/toolsets/test_logging.py | 135 +- .../unit/common/ai/toolsets/test_managed_agent.py | 9 +- .../tests/unit/common/ai/toolsets/test_sandbox.py | 45 +- .../ai/tests/unit/common/ai/toolsets/test_sql.py | 62 + .../ai/tests/unit/common/ai/utils/test_logging.py | 17 - .../unit/common/ai/utils/test_sql_validation.py | 163 +- .../unit/common/ai/utils/test_toolset_base.py | 4 +- providers/common/compat/README.rst | 6 +- providers/common/compat/docs/changelog.rst | 27 + 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/io/README.rst | 6 +- providers/common/io/docs/changelog.rst | 14 + providers/common/io/docs/index.rst | 6 +- providers/common/io/docs/state_store_backend.rst | 4 +- providers/common/io/provider.yaml | 7 +- providers/common/io/pyproject.toml | 6 +- .../io/src/airflow/providers/common/io/__init__.py | 2 +- .../providers/common/io/get_provider_info.py | 2 +- .../providers/common/io/state_store/backend.py | 32 +- .../airflow/providers/common/io/version_compat.py | 1 + .../unit/common/io/state_store/test_backend.py | 49 +- providers/common/messaging/README.rst | 6 +- providers/common/messaging/docs/changelog.rst | 17 + providers/common/messaging/docs/index.rst | 6 +- providers/common/messaging/provider.yaml | 3 +- providers/common/messaging/pyproject.toml | 6 +- .../airflow/providers/common/messaging/__init__.py | 2 +- providers/common/sql/README.rst | 8 +- providers/common/sql/docs/changelog.rst | 27 + providers/common/sql/docs/index.rst | 6 +- providers/common/sql/provider.yaml | 3 +- providers/common/sql/pyproject.toml | 6 +- .../src/airflow/providers/common/sql/__init__.py | 2 +- providers/databricks/README.rst | 10 +- providers/databricks/docs/changelog.rst | 25 + providers/databricks/docs/index.rst | 8 +- providers/databricks/provider.yaml | 3 +- providers/databricks/pyproject.toml | 8 +- .../src/airflow/providers/databricks/__init__.py | 2 +- providers/datadog/README.rst | 6 +- providers/datadog/docs/changelog.rst | 17 + providers/datadog/docs/index.rst | 6 +- providers/datadog/provider.yaml | 3 +- providers/datadog/pyproject.toml | 6 +- .../src/airflow/providers/datadog/__init__.py | 2 +- providers/dbt/cloud/README.rst | 6 +- providers/dbt/cloud/docs/changelog.rst | 27 + providers/dbt/cloud/docs/index.rst | 6 +- providers/dbt/cloud/provider.yaml | 3 +- providers/dbt/cloud/pyproject.toml | 6 +- .../src/airflow/providers/dbt/cloud/__init__.py | 2 +- providers/dingding/README.rst | 6 +- providers/dingding/docs/changelog.rst | 17 + providers/dingding/docs/index.rst | 6 +- providers/dingding/provider.yaml | 3 +- providers/dingding/pyproject.toml | 6 +- .../src/airflow/providers/dingding/__init__.py | 2 +- providers/discord/README.rst | 6 +- providers/discord/docs/changelog.rst | 26 + providers/discord/docs/index.rst | 6 +- providers/discord/provider.yaml | 3 +- providers/discord/pyproject.toml | 6 +- .../src/airflow/providers/discord/__init__.py | 2 +- providers/docker/README.rst | 6 +- providers/docker/docs/changelog.rst | 17 + providers/docker/docs/index.rst | 6 +- providers/docker/provider.yaml | 3 +- providers/docker/pyproject.toml | 6 +- .../src/airflow/providers/docker/__init__.py | 2 +- providers/duckdb/README.rst | 6 +- providers/duckdb/docs/changelog.rst | 17 + providers/duckdb/docs/commits.rst | 4 +- providers/duckdb/docs/index.rst | 6 +- providers/duckdb/provider.yaml | 3 +- providers/duckdb/pyproject.toml | 6 +- .../src/airflow/providers/duckdb/__init__.py | 2 +- providers/edge3/docs/changelog.rst | 17 +- providers/edge3/provider.yaml | 2 +- .../src/airflow/providers/edge3/cli/api_client.py | 19 +- .../src/airflow/providers/edge3/cli/worker.py | 3 + .../providers/edge3/worker_api/datamodels.py | 7 + .../providers/edge3/worker_api/routes/logs.py | 31 +- .../edge3/worker_api/v2-edge-generated.yaml | 28 + .../edge3/tests/unit/edge3/cli/test_api_client.py | 52 + .../edge3/tests/unit/edge3/cli/test_worker.py | 31 +- .../unit/edge3/worker_api/routes/test_logs.py | 139 ++ providers/elasticsearch/README.rst | 6 +- providers/elasticsearch/docs/changelog.rst | 25 + 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 | 3 +- .../unit/elasticsearch/log/test_es_task_handler.py | 6 + providers/exasol/README.rst | 14 +- providers/exasol/docs/changelog.rst | 22 + providers/exasol/docs/index.rst | 6 +- providers/exasol/provider.yaml | 3 +- providers/exasol/pyproject.toml | 6 +- .../src/airflow/providers/exasol/__init__.py | 2 +- providers/fab/README.rst | 6 +- providers/fab/docs/changelog.rst | 30 + providers/fab/docs/index.rst | 6 +- providers/fab/provider.yaml | 3 +- providers/fab/pyproject.toml | 6 +- .../fab/src/airflow/providers/fab/__init__.py | 2 +- .../providers/fab/auth_manager/fab_auth_manager.py | 9 + .../unit/fab/auth_manager/test_fab_auth_manager.py | 18 + providers/facebook/README.rst | 6 +- providers/facebook/docs/changelog.rst | 21 + providers/facebook/docs/index.rst | 6 +- providers/facebook/provider.yaml | 3 +- providers/facebook/pyproject.toml | 6 +- .../src/airflow/providers/facebook/__init__.py | 2 +- providers/ftp/README.rst | 6 +- providers/ftp/docs/changelog.rst | 22 + providers/ftp/docs/index.rst | 6 +- providers/ftp/provider.yaml | 3 +- providers/ftp/pyproject.toml | 6 +- .../ftp/src/airflow/providers/ftp/__init__.py | 2 +- providers/git/README.rst | 6 +- providers/git/docs/changelog.rst | 24 + providers/git/docs/index.rst | 6 +- providers/git/provider.yaml | 3 +- providers/git/pyproject.toml | 6 +- .../git/src/airflow/providers/git/__init__.py | 2 +- providers/github/README.rst | 6 +- providers/github/docs/changelog.rst | 17 + providers/github/docs/index.rst | 6 +- providers/github/provider.yaml | 3 +- providers/github/pyproject.toml | 6 +- .../src/airflow/providers/github/__init__.py | 2 +- providers/google/README.rst | 16 +- providers/google/docs/changelog.rst | 51 + providers/google/docs/index.rst | 8 +- providers/google/provider.yaml | 3 +- providers/google/pyproject.toml | 8 +- .../src/airflow/providers/google/__init__.py | 2 +- .../google/cloud/operators/kubernetes_engine.py | 26 +- .../cloud/operators/test_kubernetes_engine.py | 39 +- providers/grpc/README.rst | 6 +- providers/grpc/docs/changelog.rst | 17 + providers/grpc/docs/index.rst | 6 +- providers/grpc/provider.yaml | 3 +- providers/grpc/pyproject.toml | 6 +- .../grpc/src/airflow/providers/grpc/__init__.py | 2 +- providers/hashicorp/README.rst | 8 +- providers/hashicorp/docs/changelog.rst | 22 + providers/hashicorp/docs/index.rst | 6 +- providers/hashicorp/provider.yaml | 3 +- providers/hashicorp/pyproject.toml | 6 +- .../src/airflow/providers/hashicorp/__init__.py | 2 +- providers/http/README.rst | 6 +- providers/http/docs/changelog.rst | 28 + providers/http/docs/index.rst | 6 +- providers/http/provider.yaml | 3 +- providers/http/pyproject.toml | 6 +- .../http/src/airflow/providers/http/__init__.py | 2 +- providers/ibm/db2/README.rst | 121 +- providers/ibm/mq/README.rst | 43 +- providers/imap/README.rst | 6 +- providers/imap/docs/changelog.rst | 17 + providers/imap/docs/index.rst | 6 +- providers/imap/provider.yaml | 3 +- providers/imap/pyproject.toml | 6 +- .../imap/src/airflow/providers/imap/__init__.py | 2 +- providers/influxdb/README.rst | 6 +- providers/influxdb/docs/changelog.rst | 22 + providers/influxdb/docs/index.rst | 6 +- providers/influxdb/provider.yaml | 3 +- providers/influxdb/pyproject.toml | 6 +- .../src/airflow/providers/influxdb/__init__.py | 2 +- providers/informatica/README.rst | 6 +- providers/informatica/docs/changelog.rst | 19 + providers/informatica/docs/index.rst | 6 +- providers/informatica/provider.yaml | 3 +- providers/informatica/pyproject.toml | 6 +- .../src/airflow/providers/informatica/__init__.py | 2 +- providers/jdbc/README.rst | 8 +- providers/jdbc/docs/changelog.rst | 15 + providers/jdbc/docs/index.rst | 6 +- providers/jdbc/provider.yaml | 3 +- providers/jdbc/pyproject.toml | 6 +- .../jdbc/src/airflow/providers/jdbc/__init__.py | 2 +- providers/jenkins/README.rst | 6 +- providers/jenkins/docs/changelog.rst | 23 + providers/jenkins/docs/index.rst | 6 +- providers/jenkins/provider.yaml | 3 +- providers/jenkins/pyproject.toml | 6 +- .../src/airflow/providers/jenkins/__init__.py | 2 +- providers/keycloak/README.rst | 6 +- providers/keycloak/docs/changelog.rst | 23 + providers/keycloak/docs/index.rst | 6 +- providers/keycloak/provider.yaml | 3 +- providers/keycloak/pyproject.toml | 6 +- .../src/airflow/providers/keycloak/__init__.py | 2 +- providers/microsoft/azure/README.rst | 8 +- providers/microsoft/azure/docs/changelog.rst | 27 + providers/microsoft/azure/docs/index.rst | 8 +- providers/microsoft/azure/provider.yaml | 3 +- providers/microsoft/azure/pyproject.toml | 8 +- .../airflow/providers/microsoft/azure/__init__.py | 2 +- providers/microsoft/mssql/README.rst | 6 +- providers/microsoft/mssql/docs/changelog.rst | 21 + providers/microsoft/mssql/docs/index.rst | 6 +- providers/microsoft/mssql/provider.yaml | 3 +- providers/microsoft/mssql/pyproject.toml | 6 +- .../airflow/providers/microsoft/mssql/__init__.py | 2 +- providers/microsoft/psrp/README.rst | 6 +- providers/microsoft/psrp/docs/changelog.rst | 17 + providers/microsoft/psrp/docs/index.rst | 6 +- providers/microsoft/psrp/provider.yaml | 3 +- providers/microsoft/psrp/pyproject.toml | 6 +- .../airflow/providers/microsoft/psrp/__init__.py | 2 +- providers/microsoft/winrm/README.rst | 6 +- providers/microsoft/winrm/docs/changelog.rst | 17 + providers/microsoft/winrm/docs/index.rst | 6 +- providers/microsoft/winrm/provider.yaml | 3 +- providers/microsoft/winrm/pyproject.toml | 6 +- .../airflow/providers/microsoft/winrm/__init__.py | 2 +- providers/modal/README.rst | 1 - providers/mongo/README.rst | 6 +- providers/mongo/docs/changelog.rst | 17 + providers/mongo/docs/index.rst | 6 +- providers/mongo/provider.yaml | 3 +- providers/mongo/pyproject.toml | 6 +- .../mongo/src/airflow/providers/mongo/__init__.py | 2 +- providers/mysql/README.rst | 6 +- providers/mysql/docs/changelog.rst | 17 + providers/mysql/docs/index.rst | 6 +- providers/mysql/provider.yaml | 3 +- providers/mysql/pyproject.toml | 6 +- .../mysql/src/airflow/providers/mysql/__init__.py | 2 +- providers/neo4j/README.rst | 6 +- providers/neo4j/docs/changelog.rst | 17 + providers/neo4j/docs/index.rst | 6 +- providers/neo4j/provider.yaml | 3 +- providers/neo4j/pyproject.toml | 6 +- .../neo4j/src/airflow/providers/neo4j/__init__.py | 2 +- providers/odbc/README.rst | 6 +- providers/odbc/docs/changelog.rst | 19 + providers/odbc/docs/index.rst | 6 +- providers/odbc/provider.yaml | 3 +- providers/odbc/pyproject.toml | 6 +- .../odbc/src/airflow/providers/odbc/__init__.py | 2 +- providers/openai/README.rst | 6 +- providers/openai/docs/changelog.rst | 27 + providers/openai/docs/commits.rst | 2 +- providers/openai/docs/index.rst | 6 +- providers/openai/provider.yaml | 3 +- providers/openai/pyproject.toml | 6 +- .../src/airflow/providers/openai/__init__.py | 2 +- providers/openfaas/README.rst | 6 +- providers/openfaas/docs/changelog.rst | 21 + providers/openfaas/docs/index.rst | 6 +- providers/openfaas/provider.yaml | 3 +- providers/openfaas/pyproject.toml | 6 +- .../src/airflow/providers/openfaas/__init__.py | 2 +- providers/openlineage/README.rst | 14 +- providers/openlineage/docs/changelog.rst | 25 + providers/openlineage/docs/index.rst | 6 +- providers/openlineage/provider.yaml | 3 +- providers/openlineage/pyproject.toml | 6 +- .../src/airflow/providers/openlineage/__init__.py | 2 +- .../providers/openlineage/plugins/facets.py | 7 +- .../providers/openlineage/plugins/listener.py | 37 +- .../providers/openlineage/plugins/macros.py | 6 +- .../airflow/providers/openlineage/utils/utils.py | 163 +- .../providers/openlineage/version_compat.py | 3 +- .../unit/openlineage/plugins/test_listener.py | 71 + .../tests/unit/openlineage/plugins/test_macros.py | 40 +- .../tests/unit/openlineage/plugins/test_utils.py | 39 +- .../tests/unit/openlineage/utils/test_utils.py | 285 +++- providers/opensearch/README.rst | 6 +- providers/opensearch/docs/changelog.rst | 30 + 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 | 3 +- .../unit/opensearch/log/test_os_task_handler.py | 6 + providers/opsgenie/README.rst | 6 +- providers/opsgenie/docs/changelog.rst | 18 + providers/opsgenie/docs/index.rst | 6 +- providers/opsgenie/provider.yaml | 3 +- providers/opsgenie/pyproject.toml | 6 +- .../src/airflow/providers/opsgenie/__init__.py | 2 +- providers/oracle/README.rst | 12 +- providers/oracle/docs/changelog.rst | 17 + providers/oracle/docs/index.rst | 6 +- providers/oracle/provider.yaml | 3 +- providers/oracle/pyproject.toml | 6 +- .../src/airflow/providers/oracle/__init__.py | 2 +- providers/pagerduty/README.rst | 6 +- providers/pagerduty/docs/changelog.rst | 17 + providers/pagerduty/docs/index.rst | 6 +- providers/pagerduty/provider.yaml | 3 +- providers/pagerduty/pyproject.toml | 6 +- .../src/airflow/providers/pagerduty/__init__.py | 2 +- providers/papermill/README.rst | 6 +- providers/papermill/docs/changelog.rst | 20 + providers/papermill/docs/index.rst | 6 +- providers/papermill/provider.yaml | 3 +- providers/papermill/pyproject.toml | 6 +- .../src/airflow/providers/papermill/__init__.py | 2 +- providers/pgvector/README.rst | 6 +- providers/pgvector/docs/changelog.rst | 20 + providers/pgvector/docs/index.rst | 6 +- providers/pgvector/provider.yaml | 3 +- providers/pgvector/pyproject.toml | 6 +- .../src/airflow/providers/pgvector/__init__.py | 2 +- providers/pinecone/README.rst | 6 +- providers/pinecone/docs/changelog.rst | 17 + providers/pinecone/docs/index.rst | 6 +- providers/pinecone/provider.yaml | 3 +- providers/pinecone/pyproject.toml | 6 +- .../src/airflow/providers/pinecone/__init__.py | 2 +- providers/postgres/README.rst | 8 +- providers/postgres/docs/changelog.rst | 23 + providers/postgres/docs/index.rst | 6 +- providers/postgres/provider.yaml | 3 +- providers/postgres/pyproject.toml | 6 +- .../src/airflow/providers/postgres/__init__.py | 2 +- providers/presto/README.rst | 8 +- providers/presto/docs/changelog.rst | 22 + providers/presto/docs/index.rst | 6 +- providers/presto/provider.yaml | 3 +- providers/presto/pyproject.toml | 6 +- .../src/airflow/providers/presto/__init__.py | 2 +- providers/qdrant/README.rst | 6 +- providers/qdrant/docs/changelog.rst | 17 + providers/qdrant/docs/index.rst | 6 +- providers/qdrant/provider.yaml | 3 +- providers/qdrant/pyproject.toml | 6 +- .../src/airflow/providers/qdrant/__init__.py | 2 +- providers/redis/README.rst | 6 +- providers/redis/docs/changelog.rst | 17 + providers/redis/docs/index.rst | 6 +- providers/redis/provider.yaml | 3 +- providers/redis/pyproject.toml | 6 +- .../redis/src/airflow/providers/redis/__init__.py | 2 +- providers/salesforce/README.rst | 6 +- providers/salesforce/docs/changelog.rst | 18 + providers/salesforce/docs/index.rst | 6 +- providers/salesforce/provider.yaml | 3 +- providers/salesforce/pyproject.toml | 6 +- .../src/airflow/providers/salesforce/__init__.py | 2 +- providers/samba/README.rst | 6 +- providers/samba/docs/changelog.rst | 17 + providers/samba/docs/index.rst | 6 +- providers/samba/provider.yaml | 3 +- providers/samba/pyproject.toml | 6 +- .../samba/src/airflow/providers/samba/__init__.py | 2 +- providers/segment/README.rst | 6 +- providers/segment/docs/changelog.rst | 17 + providers/segment/docs/index.rst | 6 +- providers/segment/provider.yaml | 3 +- providers/segment/pyproject.toml | 6 +- .../src/airflow/providers/segment/__init__.py | 2 +- providers/sendgrid/README.rst | 6 +- providers/sendgrid/docs/changelog.rst | 23 + providers/sendgrid/docs/index.rst | 6 +- providers/sendgrid/provider.yaml | 3 +- providers/sendgrid/pyproject.toml | 6 +- .../src/airflow/providers/sendgrid/__init__.py | 2 +- providers/sftp/README.rst | 8 +- providers/sftp/docs/changelog.rst | 28 + providers/sftp/docs/index.rst | 8 +- providers/sftp/provider.yaml | 3 +- providers/sftp/pyproject.toml | 8 +- .../sftp/src/airflow/providers/sftp/__init__.py | 2 +- providers/singularity/README.rst | 6 +- providers/singularity/docs/changelog.rst | 21 + providers/singularity/docs/index.rst | 6 +- providers/singularity/provider.yaml | 3 +- providers/singularity/pyproject.toml | 6 +- .../src/airflow/providers/singularity/__init__.py | 2 +- providers/slack/README.rst | 6 +- providers/slack/docs/changelog.rst | 23 + providers/slack/docs/index.rst | 6 +- providers/slack/provider.yaml | 3 +- providers/slack/pyproject.toml | 6 +- .../slack/src/airflow/providers/slack/__init__.py | 2 +- providers/smtp/README.rst | 6 +- providers/smtp/docs/changelog.rst | 23 + providers/smtp/docs/index.rst | 6 +- providers/smtp/provider.yaml | 3 +- providers/smtp/pyproject.toml | 6 +- .../smtp/src/airflow/providers/smtp/__init__.py | 2 +- providers/snowflake/README.rst | 16 +- providers/snowflake/docs/changelog.rst | 31 + providers/snowflake/docs/index.rst | 6 +- .../docs/operators/snowflake_cortex_agent.rst | 108 +- providers/snowflake/provider.yaml | 3 +- providers/snowflake/pyproject.toml | 6 +- .../src/airflow/providers/snowflake/__init__.py | 2 +- .../snowflake/operators/snowflake_cortex_agent.py | 278 +++- .../snowflake/example_snowflake_cortex_agent.py | 60 +- .../operators/test_snowflake_cortex_agent.py | 309 +++- providers/sqlite/README.rst | 6 +- providers/sqlite/docs/changelog.rst | 23 + providers/sqlite/docs/index.rst | 6 +- providers/sqlite/provider.yaml | 3 +- providers/sqlite/pyproject.toml | 6 +- .../src/airflow/providers/sqlite/__init__.py | 2 +- providers/ssh/README.rst | 6 +- providers/ssh/docs/changelog.rst | 27 + providers/ssh/docs/index.rst | 6 +- providers/ssh/provider.yaml | 3 +- providers/ssh/pyproject.toml | 6 +- .../ssh/src/airflow/providers/ssh/__init__.py | 2 +- providers/standard/README.rst | 6 +- providers/standard/docs/changelog.rst | 25 + providers/standard/docs/index.rst | 6 +- providers/standard/provider.yaml | 3 +- providers/standard/pyproject.toml | 6 +- .../src/airflow/providers/standard/__init__.py | 2 +- providers/tableau/README.rst | 6 +- providers/tableau/docs/changelog.rst | 17 + providers/tableau/docs/index.rst | 6 +- providers/tableau/provider.yaml | 3 +- providers/tableau/pyproject.toml | 6 +- .../src/airflow/providers/tableau/__init__.py | 2 +- providers/telegram/README.rst | 6 +- providers/telegram/docs/changelog.rst | 18 + providers/telegram/docs/index.rst | 6 +- providers/telegram/provider.yaml | 3 +- providers/telegram/pyproject.toml | 6 +- .../src/airflow/providers/telegram/__init__.py | 2 +- providers/teradata/README.rst | 8 +- 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 +- providers/trino/README.rst | 6 +- providers/trino/docs/changelog.rst | 17 + providers/trino/docs/index.rst | 6 +- providers/trino/provider.yaml | 3 +- providers/trino/pyproject.toml | 6 +- .../trino/src/airflow/providers/trino/__init__.py | 2 +- providers/vertica/README.rst | 14 +- providers/vertica/docs/changelog.rst | 28 + providers/vertica/docs/index.rst | 6 +- providers/vertica/provider.yaml | 3 +- providers/vertica/pyproject.toml | 6 +- .../src/airflow/providers/vertica/__init__.py | 2 +- providers/vespa/README.rst | 8 +- providers/vespa/docs/changelog.rst | 21 + providers/vespa/docs/index.rst | 6 +- providers/vespa/provider.yaml | 6 +- providers/vespa/pyproject.toml | 9 +- .../vespa/src/airflow/providers/vespa/__init__.py | 2 +- providers/weaviate/README.rst | 6 +- providers/weaviate/docs/changelog.rst | 17 + providers/weaviate/docs/index.rst | 6 +- providers/weaviate/provider.yaml | 3 +- providers/weaviate/pyproject.toml | 6 +- .../src/airflow/providers/weaviate/__init__.py | 2 +- providers/yandex/README.rst | 6 +- providers/yandex/docs/changelog.rst | 17 + providers/yandex/docs/index.rst | 6 +- providers/yandex/provider.yaml | 3 +- providers/yandex/pyproject.toml | 6 +- .../src/airflow/providers/yandex/__init__.py | 2 +- providers/ydb/README.rst | 14 +- providers/ydb/docs/changelog.rst | 16 + providers/ydb/docs/index.rst | 6 +- providers/ydb/provider.yaml | 3 +- providers/ydb/pyproject.toml | 6 +- .../ydb/src/airflow/providers/ydb/__init__.py | 2 +- providers/zendesk/README.rst | 6 +- providers/zendesk/docs/changelog.rst | 21 + providers/zendesk/docs/index.rst | 6 +- providers/zendesk/provider.yaml | 3 +- providers/zendesk/pyproject.toml | 6 +- .../src/airflow/providers/zendesk/__init__.py | 2 +- pyproject.toml | 8 +- registry/package.json | 2 +- registry/pnpm-lock.yaml | 26 +- scripts/ci/lang_sdk_serialization/test_dags.yaml | 7 +- scripts/ci/prek/check_applies_to_roots_in_sync.py | 117 ++ .../check_template_context_variable_in_sync.py | 2 + scripts/ci/prek/check_xcom_model_columns.py | 2 +- .../ci/prek/check_yaml_importer_schema_versions.py | 137 ++ scripts/ci/prek/generate_execution_api_schema.py | 2 + scripts/ci/prek/generate_yaml_importer_schema.py | 66 + scripts/ci/prek/sync_ts_sdk_schemas.py | 127 ++ scripts/ci/prek/ts_compile_lint_common_ai.py | 1 + scripts/docker/install_os_dependencies.sh | 3 + .../ci/prek/test_check_applies_to_roots_in_sync.py | 84 + scripts/tests/ci/prek/test_sync_ts_sdk_schemas.py | 122 ++ shared/dagnode/src/airflow_shared/dagnode/node.py | 113 +- shared/dagnode/tests/dagnode/test_node.py | 36 +- .../observability/metrics/metrics_template.yaml | 6 +- shared/state/src/airflow_shared/state/__init__.py | 48 +- shared/state/tests/state/test_state.py | 28 + task-sdk/docs/api.rst | 37 + task-sdk/docs/concepts.rst | 2 +- task-sdk/docs/deferred-vs-async-operators.rst | 12 +- task-sdk/docs/dynamic-task-mapping.rst | 8 +- task-sdk/docs/examples.rst | 4 +- task-sdk/pyproject.toml | 1 + task-sdk/src/airflow/sdk/__init__.py | 3 + task-sdk/src/airflow/sdk/__init__.pyi | 2 + task-sdk/src/airflow/sdk/api/client.py | 50 +- .../src/airflow/sdk/api/datamodels/_generated.py | 20 + task-sdk/src/airflow/sdk/bases/decorator.py | 31 +- task-sdk/src/airflow/sdk/bases/operator.py | 1 + task-sdk/src/airflow/sdk/bases/xcom.py | 2 + .../airflow/sdk/coordinators/java/_dag_importer.py | 4 +- .../src/airflow/sdk/definitions/_internal/loop.py | 218 +++ .../src/airflow/sdk/definitions/_internal/node.py | 15 +- .../src/airflow/sdk/definitions/asset/__init__.py | 13 + task-sdk/src/airflow/sdk/definitions/context.py | 4 +- task-sdk/src/airflow/sdk/definitions/dag.py | 62 +- .../sdk/definitions/decorators/task_group.py | 39 +- .../src/airflow/sdk/definitions/mappedoperator.py | 1 - task-sdk/src/airflow/sdk/definitions/taskgroup.py | 90 +- .../airflow/sdk/definitions/timetables/assets.py | 51 +- task-sdk/src/airflow/sdk/definitions/xcom_arg.py | 3 +- task-sdk/src/airflow/sdk/exceptions.py | 4 + task-sdk/src/airflow/sdk/execution_time/comms.py | 4 + .../airflow/sdk/execution_time/lazy_sequence.py | 4 + task-sdk/src/airflow/sdk/execution_time/loop.py | 104 ++ .../airflow/sdk/execution_time/request_handlers.py | 34 +- .../airflow/sdk/execution_time/schema/schema.json | 114 ++ .../sdk/execution_time/schema/versions/__init__.py | 6 + .../execution_time/schema/versions/v2026_10_30.py | 51 +- .../src/airflow/sdk/execution_time/supervisor.py | 6 +- .../src/airflow/sdk/execution_time/task_runner.py | 63 +- .../sdk/importers/yaml_importer/__init__.py | 26 +- .../sdk/importers/yaml_importer/migrator.py | 168 ++ .../airflow/sdk/importers/yaml_importer/models.py | 459 ++++++ .../airflow/sdk/importers/yaml_importer/parser.py | 102 ++ .../sdk/importers/yaml_importer/schema.json | 365 +++++ .../importers/yaml_importer/versions/__init__.py | 42 +- task-sdk/src/airflow/sdk/log.py | 33 +- task-sdk/src/airflow/sdk/types.py | 9 +- task-sdk/tests/conftest.py | 6 + task-sdk/tests/task_sdk/bases/test_decorator.py | 12 + .../coordinators/java/test_dag_importer.py | 19 + .../task_sdk/definitions/_internal/test_loop.py | 431 +++++ .../task_sdk/definitions/decorators/test_result.py | 39 +- .../definitions/decorators/test_task_group.py | 120 +- task-sdk/tests/task_sdk/definitions/test_asset.py | 16 + task-sdk/tests/task_sdk/definitions/test_dag.py | 342 +++- .../tests/task_sdk/definitions/test_xcom_arg.py | 51 +- .../task_sdk/definitions/timetables/test_assets.py | 166 ++ .../execution_time/schema/test_migrator.py | 153 +- .../tests/task_sdk/execution_time/test_comms.py | 16 +- .../tests/task_sdk/execution_time/test_loop.py | 245 +++ .../execution_time/test_request_handlers.py | 51 + .../task_sdk/execution_time/test_supervisor.py | 42 +- .../task_sdk/execution_time/test_task_runner.py | 204 ++- .../task_sdk/importers/yaml_importer/__init__.py | 16 - .../importers/yaml_importer/example_dag.yaml | 69 + .../importers/yaml_importer/test_migrator.py | 188 +++ .../importers/yaml_importer/test_parser.py | 576 +++++++ task-sdk/tests/task_sdk/test_log.py | 32 + ts-sdk/.pre-commit-config.yaml | 1 + ts-sdk/README.md | 378 ++--- ts-sdk/adr/0002-native-dag-interface.md | 18 +- ts-sdk/api-docs/dag-authoring-api.ts | 12 +- .../api-docs/{supporting-types.ts => hitl-api.ts} | 14 +- ts-sdk/api-docs/supporting-types.ts | 8 +- ts-sdk/capabilities.yaml | 14 +- ts-sdk/docs/index.md | 68 +- ts-sdk/example/README.md | 24 +- ts-sdk/example/dags/typescript_example.py | 10 + ts-sdk/example/package.json | 4 +- ts-sdk/example/src/ai-approval.ts | 198 +++ ts-sdk/example/src/hitl.ts | 137 ++ ts-sdk/example/src/main.ts | 48 +- ts-sdk/example/src/native.ts | 167 ++ ts-sdk/example/tsconfig.json | 4 +- ts-sdk/package.json | 4 + ts-sdk/pnpm-lock.yaml | 270 ++-- ts-sdk/schema/dag-schema.json | 12 + {go-sdk => ts-sdk}/schema/supervisor-schema.json | 114 ++ ts-sdk/scripts/ci/prek/check_supervisor_schema.py | 4 +- ts-sdk/scripts/ci/prek/sync_dag_schema.py | 65 - ts-sdk/scripts/generate-dag-schema.mjs | 4 +- ts-sdk/scripts/generate-supervisor.mjs | 7 +- ts-sdk/src/coordinator/client.ts | 217 ++- ts-sdk/src/coordinator/operator-runner.ts | 140 ++ ts-sdk/src/coordinator/protocol.ts | 9 + ts-sdk/src/coordinator/runtime.ts | 65 +- ts-sdk/src/coordinator/serde.ts | 275 +--- ts-sdk/src/generated/supervisor.ts | 37 + .../SearchDags => ts-sdk/src/hitl}/index.ts | 12 +- ts-sdk/src/hitl/operator.ts | 281 ++++ ts-sdk/src/hitl/spec.ts | 447 ++++++ ts-sdk/src/index.ts | 11 +- ts-sdk/src/sdk/bundle.ts | 30 +- ts-sdk/src/sdk/client-types.ts | 23 + ts-sdk/src/sdk/client.ts | 74 +- ts-sdk/src/sdk/dag-graph.ts | 236 +++ ts-sdk/src/sdk/dag.ts | 117 +- .../dag-authoring-api.ts => src/sdk/env.ts} | 24 +- ts-sdk/src/sdk/operator.ts | 150 ++ ts-sdk/src/sdk/plain-json.ts | 60 + .../trigger-dag-run-execute.ts} | 106 +- ts-sdk/src/sdk/trigger-dag-run.ts | 43 +- ts-sdk/tests/coordinator/client.test.ts | 238 ++- ts-sdk/tests/coordinator/integration.test.ts | 584 ++++++- ts-sdk/tests/coordinator/operator-runner.test.ts | 207 +++ ts-sdk/tests/hitl/operator.test.ts | 169 ++ ts-sdk/tests/hitl/spec.test.ts | 353 ++++ ts-sdk/tests/public-api.test.ts | 28 + ts-sdk/tests/sdk/dag.test.ts | 35 + ts-sdk/tests/sdk/hitl-inference.test.ts | 117 ++ ts-sdk/tests/sdk/native-dag-example.test.ts | 213 +++ ts-sdk/tests/sdk/trigger-dag-run.test.ts | 21 +- ts-sdk/tsconfig.json | 12 +- ts-sdk/vitest.config.ts | 15 + uv.lock | 757 +++++---- 1673 files changed, 74022 insertions(+), 11405 deletions(-)
