This is an automated email from the ASF dual-hosted git repository.
dabla pushed a change to branch dabla/agent-async/01-task-agent-aexecute
in repository https://gitbox.apache.org/repos/asf/airflow.git
from 82179b5889d Annotate the task state store accessor stub in the async
AgentOperator tests
add 91a8ab6950a Fix airflowctl pools export/import dropping pool team
ownership (#73132)
add d5ba49cbd6a Close German Translation Gaps 2026-10-15 (#74802)
add 4c4bab01e06 Allow loop gates to add human-readable decisions (#74806)
add 238bb6ee2bd Complete Hebrew UI translations 2026-10-16 (#74467)
add 4c98adf9e20 Skip the scheduler's Dag lookup for Dag runs with no
callback to send (#74835)
add 896f3711bdd Update Magpie floor to 0.9.0.dev202610140816 (#74815)
add 028a4da8672 Add Map Index search to dag breadcrumb (#74763)
add a23aa81c62e Fix flaky static checks crashing on ts-sdk node_modules
during editable build (#74117)
add d6d425da028 Declare pyarrow for Parquet output of SqlToS3Operator
(#74691)
add 8317410ef7d Do not warn about bare postgresql:// metadata DB URLs
(#74863)
add 23f4aee0239 Fix Dag version diff max-changes border, limit wording and
duplicate count (#74818)
add 0795688f863 Bump swagger-ui-dist from 5.33.1 to 5.33.2 in /registry
(#74872)
add 7acab3c3b02 Bump the ui-plugin-template-package-updates group across 1
directory with 7 updates (#74877)
add e009c1167eb Bump the edge-ui-package-updates group across 1 directory
with 13 updates (#74879)
add b9aa889577c Cover long-running jobs in the deferrable BigQuery check
system test (#74356)
add f54d32d969b Cap the workers of the SFTP concurrent directory transfer
test (#74888)
add 3ce8d152d0d Keep queued connection tests from overwriting newer
connections (#74837)
add 20ccfcd7457 Match camelCase keys against sensitive field names in
masker (#74840)
add c7cec687bb6 Cap `pydantic-ai-skills` below 2 for the Common AI skills
extra (#74899)
add 91937288435 Bump the core-ui-package-updates group across 1 directory
with 16 updates (#74881)
add f8b42cf2f41 Bump happy-dom from 20.14.5 to 21.0.1 in
/airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui (#74876)
add 7178a785947 Bump the ts-sdk-package-updates group across 1 directory
with 3 updates (#74874)
add 1f4fe796933 Keep the pydantic-ai first-run banner out of Common AI
task logs (#74900)
add b1ce1cac7f5 Fix Common AI Model tab not loading on Airflow 3.4 (#74898)
add 0eab1db3d2b Replay an OpenAI Agents SDK agent's completed calls when
Airflow retries its task (#74770)
add f5038e67834 Fix dynamically mapped tasks never running on scheduled
Dag runs (#74861)
add bd0aedee6eb Bump the typescript group across 1 directory with 4
updates (#74878)
add 6e16f26400f Bump the auth-ui-package-updates group across 1 directory
with 8 updates (#74875)
add 47c1c416525 Bump happy-dom from 20.14.5 to 21.0.1 in
/airflow-core/src/airflow/ui (#74882)
add 47b092846cc Bump the uv-dependency-updates group across 1 directory
with 4 updates (#74509)
add f3784d2e9e1 Cancel the BigQuery job when BigQueryToGCSOperator is
killed (#74564)
add ed5496fe78d Remove unreachable break in get_bagged_dag (#72332)
add bfe64b1991e Add AthenaSparkSensor (#72229)
add a6af7e5a08e Show the actual value in two breeze and CI script error
messages (#74894)
add db1397a1e89 Reject duplicate durable toolset ids and fail deferred
tools with `UnsupportedToolDeferralError` (#74902)
add 4eda1ee76ea Make Common AI example Dags reach the behaviour they show
(#74901)
add dba55d8728a Add password grant type to Snowflake OAuth token requests
(#74804)
add 5caec465d3d Stop the OpenLineage execution timeout test flaking on
busy CI runners (#74927)
add 3fbf0134fde Remove redundant Snowflake prefixes from Cortex Agent and
SQL API modules (#74300)
add a5c28069af8 Cancel the Dataflow job when a user kills the deferred
task (#69586)
add c35db24a38c Fix Cloud Function invoke operator docs link (#69226)
add d5aed746ad9 Avoid Vertex AI Feature Store system Dag import timeout
(#69823)
add 6a925a8fbe6 Resolve loop iterations through family and path columns on
dynamic regions (#74892)
add a1dbc930726 Stop holding `typesafe-sdk` and `boat-sdk` back in the uv
lock (#74903)
add 79ce98f1101 Prepare ad-hoc providers release 2026-10-17 (#74933)
add 70363ba55e6 Fix stale Common AI docs and add a guide to writing a
toolset (#74904)
add 4b464ee29ba Clear language SDK task XComs in the coordinator when a
try starts (#74221)
add c0e61578a82 Add the Common AI docs fixes to the 1.0.0 changelog
(#74937)
add 76943ec8e44 Fix Celery result backend compatibility with PgBouncer
(#74841)
add 0266cae0e24 Keep the custom-toolset example's version from changing
the PyPI path (#74939)
add 4bc581aab21 Allow GKE Autopilot clusters without node pools and stop
GKE pod trigger reviving should_delete_pod (#69876)
add a9440be98a9 Update providers metadata 2026-10-18 (#74942)
add 5dc96d65dd3 Fail publishing provider docs when a provider is missing
from the site index (#74941)
add fd4654dce4f Fall back for empty console domain (#70067)
add 7644e35f8b7 Add retry-safe batch_id_prefix to
DataprocCreateBatchOperator (#69855)
add b00cfeb11f0 Drain result_queue before dispatch in LocalExecutor to
prevent runtime dispatch deadlock (#70545)
add c3cc5573b80 Batch triggerer unused trigger cleanup deletes (#70961)
add 3f03b18920f Document that use_job_schedule also stops asset-triggered
Dag runs (#73952)
add b59f7489cd8 Make ZIP_REGEX case-insensitive to match .ZIP archives
(#74269)
add 4fbbcddf022 Reduce db clean batch probe overhead (#74455)
add b8987f0356c UI: Open nav sidebar menus on hover and add a Dags menu
(#74745)
add 113bc123a6b Warn when ignore_unknown_values is a no-op in
GCSToBigQueryOperator (#71675)
add 0f8d6f88b0e UI: Keep unnamed columns out of the table columns menu
(#74774)
add 912bbe58050 Fix Dag list run badges and counters not refreshing after
completion (#74734)
add 71e74bc9554 Add deadline callback log visibility to the Dag Run view
in UI (#73580)
add a1e66b1f1d3 Check hooks before cancelling BigQuery jobs in on_kill
(#74946)
add ae8c970f12d Fix Discord embed author name length validation using
wrong limit (#74940)
add 34ffab8e4a4 Fix GKEStartPodOperator ignoring execution_timeout when
deferrable (#71528)
add 4bda61c8c3d Keep the HTTPError when a Dataprep error body is not JSON
(#71702)
add 7bf4936bd79 Bump prettier from 3.9.9 to 3.9.10 in
/providers/fab/src/airflow/providers/fab/www (#74765)
add 675b02a2f9b Make airflow-core typing hold for SQLAlchemy 2.0 and 2.1
(#74629)
add 099c03e4435 Fix SqlToS3Operator failing for every format when df_type
is polars (#74692)
add ad8fd59c1a8 Merge branch 'main' into
dabla/agent-async/01-task-agent-aexecute
No new revisions were added by this update.
Summary of changes:
.agents/skills/airflow-translations/locales/he.md | 32 +-
.../prepare-providers-documentation/SKILL.md | 7 +
.../release-management-config.md | 9 +
.apache-magpie.lock | 6 +-
.../docs/authoring-and-scheduling/loops.rst | 30 +-
airflow-core/docs/migrations-ref.rst | 4 +-
airflow-core/newsfragments/74837.bugfix.rst | 1 +
airflow-core/newsfragments/74840.bugfix.rst | 1 +
airflow-core/pyproject.toml | 2 +-
.../api_fastapi/auth/managers/base_auth_manager.py | 3 +-
.../auth/managers/simple/ui/package.json | 18 +-
.../auth/managers/simple/ui/pnpm-lock.yaml | 462 +++++------
.../api_fastapi/core_api/datamodels/ui/deadline.py | 7 +
.../api_fastapi/core_api/datamodels/ui/grid.py | 14 +-
.../api_fastapi/core_api/openapi/_private_ui.yaml | 151 +++-
.../core_api/openapi/v2-rest-api-generated.yaml | 11 +
.../core_api/routes/public/connections.py | 4 +-
.../api_fastapi/core_api/routes/public/xcom.py | 18 +
.../api_fastapi/core_api/routes/ui/deadlines.py | 75 +-
.../core_api/services/public/task_instances.py | 11 +-
.../core_api/services/ui/dependencies.py | 6 +-
.../api_fastapi/core_api/services/ui/grid.py | 18 +-
.../execution_api/datamodels/taskinstance.py | 21 +
.../execution_api/routes/connection_tests.py | 7 +-
.../execution_api/routes/task_instances.py | 52 +-
.../api_fastapi/execution_api/routes/xcoms.py | 58 +-
.../api_fastapi/execution_api/versions/__init__.py | 2 +
.../execution_api/versions/v2026_10_30.py | 12 +
.../src/airflow/config_templates/config.yml | 14 +-
airflow-core/src/airflow/configuration.py | 29 +-
.../src/airflow/example_dags/example_task_loops.py | 6 +-
.../src/airflow/executors/local_executor.py | 1 +
.../src/airflow/jobs/scheduler_job_runner.py | 11 +-
.../src/airflow/jobs/triggerer_job_runner.py | 16 +-
.../0143_3_4_0_add_dynamic_region_storage.py | 6 +
...add_commit_allows_update_to_connection_test.py} | 25 +-
..._job.py => 0148_3_5_0_add_session_id_to_job.py} | 4 +-
airflow-core/src/airflow/models/connection_test.py | 26 +-
airflow-core/src/airflow/models/dagrun.py | 44 +-
airflow-core/src/airflow/models/dynamic_region.py | 232 ++++--
airflow-core/src/airflow/models/pool.py | 2 +-
.../src/airflow/models/task_coordinates.py | 9 +-
airflow-core/src/airflow/models/trigger.py | 63 +-
airflow-core/src/airflow/models/xcom.py | 7 +-
.../src/airflow/ui/openapi-gen/queries/common.ts | 14 +-
.../ui/openapi-gen/queries/ensureQueryData.ts | 25 +-
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 25 +-
.../src/airflow/ui/openapi-gen/queries/queries.ts | 25 +-
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 25 +-
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 44 +-
.../ui/openapi-gen/requests/services.gen.ts | 37 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 51 +-
airflow-core/src/airflow/ui/package.json | 42 +-
airflow-core/src/airflow/ui/pnpm-lock.yaml | 891 +++++++++++----------
.../src/airflow/ui/public/i18n/locales/ca/dag.json | 4 -
.../airflow/ui/public/i18n/locales/de/common.json | 7 +
.../src/airflow/ui/public/i18n/locales/de/dag.json | 28 +-
.../airflow/ui/public/i18n/locales/de/dags.json | 4 +-
.../src/airflow/ui/public/i18n/locales/el/dag.json | 4 -
.../airflow/ui/public/i18n/locales/en/common.json | 3 +
.../src/airflow/ui/public/i18n/locales/en/dag.json | 28 +-
.../airflow/ui/public/i18n/locales/en/dags.json | 1 +
.../src/airflow/ui/public/i18n/locales/fr/dag.json | 4 -
.../airflow/ui/public/i18n/locales/he/admin.json | 35 +-
.../airflow/ui/public/i18n/locales/he/assets.json | 19 +-
.../airflow/ui/public/i18n/locales/he/browse.json | 35 +
.../airflow/ui/public/i18n/locales/he/common.json | 150 +++-
.../ui/public/i18n/locales/he/components.json | 63 +-
.../src/airflow/ui/public/i18n/locales/he/dag.json | 122 ++-
.../airflow/ui/public/i18n/locales/he/dags.json | 51 +-
.../ui/public/i18n/locales/he/dashboard.json | 26 +-
.../src/airflow/ui/public/i18n/locales/ko/dag.json | 4 -
.../src/airflow/ui/public/i18n/locales/pl/dag.json | 4 -
.../airflow/ui/public/i18n/locales/zh-TW/dag.json | 4 -
.../airflow/ui/src/components/Breadcrumb/Crumb.tsx | 22 +-
.../ui/src/components/Breadcrumb/CrumbSwitcher.tsx | 18 +-
.../DataTable/DataTable.columnVisibility.test.tsx | 20 +
.../DataTable/DataTable.expanding.test.tsx | 74 ++
.../ui/src/components/DataTable/DataTable.tsx | 35 +-
.../ui/src/components/DataTable/TableList.tsx | 32 +-
.../ui/src/components/DataTable/features.ts | 5 +-
.../LoopDecisionReason.tsx} | 28 +-
.../src/airflow/ui/src/components/SearchSelect.tsx | 113 +--
.../ui/src/components/renderStructuredLog.test.tsx | 18 +-
.../ui/src/components/renderStructuredLog.tsx | 3 +-
.../ui/src/layouts/Details/DagBreadcrumb.test.tsx | 29 +-
.../ui/src/layouts/Details/DagBreadcrumb.tsx | 32 +-
.../src/layouts/Details/MapIndexSwitcherButton.tsx | 98 +++
.../ui/src/layouts/Details/SearchDagRuns.test.tsx | 38 +-
.../ui/src/layouts/Details/SearchDagRuns.tsx | 49 +-
.../ui/src/layouts/Details/SearchDags.test.tsx | 135 +++-
.../airflow/ui/src/layouts/Details/SearchDags.tsx | 74 +-
.../src/layouts/Details/SearchMapIndexes.test.tsx | 192 +++++
.../ui/src/layouts/Details/SearchMapIndexes.tsx | 168 ++++
.../ui/src/layouts/Details/searchOptions.test.ts | 41 +-
.../ui/src/layouts/Details/searchOptions.ts | 59 +-
.../src/airflow/ui/src/layouts/Nav/AdminButton.tsx | 20 +-
.../airflow/ui/src/layouts/Nav/BrowseButton.tsx | 20 +-
.../airflow/ui/src/layouts/Nav/DagsButton.test.tsx | 67 ++
.../src/airflow/ui/src/layouts/Nav/DagsButton.tsx | 77 ++
.../src/airflow/ui/src/layouts/Nav/DocsButton.tsx | 56 +-
.../src/airflow/ui/src/layouts/Nav/Nav.tsx | 11 +-
.../airflow/ui/src/layouts/Nav/NavMenu.test.tsx | 90 +++
.../src/airflow/ui/src/layouts/Nav/NavMenu.tsx | 170 ++++
.../src/airflow/ui/src/layouts/Nav/PluginMenus.tsx | 44 +-
.../airflow/ui/src/layouts/Nav/SecurityButton.tsx | 26 +-
.../ui/src/layouts/Nav/UserSettingsButton.tsx | 190 +++--
.../Asset/AssetStateStore/AssetStateStore.tsx | 1 +
.../ui/src/pages/Connections/Connections.tsx | 1 +
.../ui/src/pages/Dag/Versions/VersionDiff.test.tsx | 30 +-
.../ui/src/pages/Dag/Versions/VersionDiff.tsx | 41 +-
.../ui/src/pages/Dag/Versions/Versions.test.tsx | 6 +
.../airflow/ui/src/pages/Dag/Versions/Versions.tsx | 9 +
.../src/airflow/ui/src/pages/DagRuns/DagRuns.tsx | 1 +
.../DagsList/DagsListColumns.test.tsx} | 16 +-
.../ui/src/pages/DagsList/DagsListColumns.tsx | 4 +
.../GroupTaskInstance/useLoopOutcomeStats.test.tsx | 64 ++
.../GroupTaskInstance/useLoopOutcomeStats.tsx | 16 +-
.../airflow/ui/src/pages/Run/CallbackLogs.test.tsx | 85 ++
.../src/airflow/ui/src/pages/Run/CallbackLogs.tsx | 189 +++++
.../airflow/ui/src/pages/Run/Callbacks.test.tsx | 139 ++++
.../src/airflow/ui/src/pages/Run/Callbacks.tsx | 161 ++++
.../src/airflow/ui/src/pages/Run/Run.test.tsx | 81 ++
airflow-core/src/airflow/ui/src/pages/Run/Run.tsx | 35 +-
.../ui/src/pages/TaskInstance/Header.test.tsx | 34 +-
.../airflow/ui/src/pages/TaskInstance/Header.tsx | 12 +
.../ui/src/pages/TaskInstances/TaskInstances.tsx | 1 +
.../ui/src/pages/TaskStateStore/TaskStateStore.tsx | 1 +
.../airflow/ui/src/pages/Variables/Variables.tsx | 1 +
.../src/airflow/ui/src/pages/XCom/XCom.test.tsx | 18 +
.../src/airflow/ui/src/pages/XCom/XCom.tsx | 2 +
.../ui/src/queries/useDagRunStateCounts.tsx | 2 +-
.../src/airflow/ui/src/queries/useDags.test.tsx | 101 +++
.../src/airflow/ui/src/queries/useDags.tsx | 2 +-
.../src/airflow/ui/src/queries/useLogs.tsx | 45 +-
airflow-core/src/airflow/ui/src/router.tsx | 2 +
airflow-core/src/airflow/ui/src/utils/option.ts | 10 +-
airflow-core/src/airflow/utils/cli.py | 2 -
airflow-core/src/airflow/utils/db.py | 2 +-
airflow-core/src/airflow/utils/db_cleanup.py | 4 +-
airflow-core/src/airflow/utils/file.py | 2 +-
.../src/airflow/utils/log/path_log_reader.py | 98 +++
airflow-core/src/airflow/utils/sqlalchemy.py | 12 +-
.../tests/unit/always/test_project_structure.py | 1 -
.../auth/managers/test_base_auth_manager.py | 17 +
.../core_api/routes/public/test_connections.py | 21 +
.../core_api/routes/public/test_extra_links.py | 7 +-
.../core_api/routes/public/test_task_instances.py | 10 +-
.../core_api/routes/public/test_xcom.py | 48 ++
.../core_api/routes/ui/test_deadlines.py | 125 ++-
.../api_fastapi/core_api/routes/ui/test_grid.py | 40 +-
.../tests/unit/api_fastapi/core_api/test_app.py | 1 +
.../versions/head/test_connection_tests.py | 33 +
.../versions/head/test_task_instances.py | 251 ++----
.../execution_api/versions/head/test_xcoms.py | 53 +-
airflow-core/tests/unit/core/test_configuration.py | 24 +
.../tests/unit/executors/test_local_executor.py | 80 ++
airflow-core/tests/unit/jobs/test_scheduler_job.py | 57 +-
airflow-core/tests/unit/jobs/test_triggerer_job.py | 31 +
.../test_0143_add_dynamic_region_storage.py | 10 +-
.../test_0144_rename_stored_map_index.py | 12 +-
airflow-core/tests/unit/models/conftest.py | 8 +-
.../tests/unit/models/test_connection_test.py | 32 +-
airflow-core/tests/unit/models/test_dagrun.py | 36 +-
.../tests/unit/models/test_dynamic_region.py | 233 +++++-
.../tests/unit/models/test_taskinstance.py | 4 +-
airflow-core/tests/unit/models/test_trigger.py | 218 ++++-
.../tests/unit/utils/log/test_path_log_reader.py | 76 ++
airflow-core/tests/unit/utils/test_db_cleanup.py | 22 +
airflow-core/tests/unit/utils/test_file.py | 16 +-
airflow-core/tests/unit/utils/test_sqlalchemy.py | 20 +
.../src/airflowctl/ctl/commands/pool_command.py | 2 +
.../airflow_ctl/ctl/commands/test_pool_command.py | 45 ++
dev/README_RELEASE_PROVIDERS.md | 65 +-
.../images/output_workflow-run_publish-docs.svg | 28 +-
.../images/output_workflow-run_publish-docs.txt | 2 +-
.../airflow_breeze/commands/workflow_commands.py | 170 +++-
.../commands/workflow_commands_config.py | 1 +
dev/breeze/src/airflow_breeze/utils/github.py | 2 +-
dev/breeze/tests/test_workflow_commands.py | 205 +++++
dev/breeze/uv.lock | 91 +--
.../react_plugin_template/package.json | 14 +-
.../react_plugin_template/pnpm-lock.yaml | 404 +++++-----
docs/spelling_wordlist.txt | 1 +
generated/provider_metadata.json | 16 +
go-sdk/pkg/execution/genmodels/models.gen.go | 22 +-
go-sdk/schema/supervisor-schema.json | 49 ++
providers/.last_release_date.txt | 2 +-
.../alibaba/cloud/log/oss_task_handler.py | 2 +-
providers/amazon/docs/index.rst | 7 +-
.../amazon/docs/operators/athena/athena_spark.rst | 25 +-
providers/amazon/docs/transfer/sql_to_s3.rst | 4 +
providers/amazon/provider.yaml | 1 +
providers/amazon/pyproject.toml | 6 +
.../airflow/providers/amazon/aws/hooks/athena.py | 7 +
.../amazon/aws/log/cloudwatch_task_handler.py | 6 +-
.../providers/amazon/aws/log/s3_task_handler.py | 2 +-
.../providers/amazon/aws/sensors/athena_spark.py | 84 ++
.../providers/amazon/aws/transfers/sql_to_s3.py | 18 +-
.../airflow/providers/amazon/get_provider_info.py | 5 +-
.../system/amazon/aws/example_athena_spark.py | 25 +-
.../unit/amazon/aws/sensors/test_athena_spark.py | 175 ++++
.../unit/amazon/aws/transfers/test_sql_to_s3.py | 59 +-
.../providers/apache/hdfs/log/hdfs_task_handler.py | 2 +-
providers/celery/docs/celery_executor.rst | 17 +
providers/celery/provider.yaml | 2 +
.../providers/celery/executors/default_celery.py | 30 +-
.../airflow/providers/celery/get_provider_info.py | 2 +-
.../unit/celery/executors/test_celery_executor.py | 7 +-
.../unit/celery/executors/test_default_celery.py | 175 ++++
providers/common/ai/README.rst | 4 +-
providers/common/ai/docs/changelog.rst | 34 +-
providers/common/ai/docs/durable_execution.rst | 6 +-
providers/common/ai/docs/features.rst | 5 +-
providers/common/ai/docs/frameworks/adk.rst | 2 +-
providers/common/ai/docs/frameworks/anthropic.rst | 11 +-
.../common/ai/docs/frameworks/openai_agents.rst | 72 +-
.../common/ai/docs/frameworks/pydantic_ai.rst | 6 +
providers/common/ai/docs/frameworks/strands.rst | 2 +-
providers/common/ai/docs/index.rst | 2 +-
providers/common/ai/docs/retry_policies.rst | 4 +-
providers/common/ai/docs/stability.rst | 3 +-
providers/common/ai/docs/supported_services.rst | 10 +-
providers/common/ai/docs/toolsets/custom.rst | 173 ++++
providers/common/ai/docs/toolsets/datafusion.rst | 7 +-
providers/common/ai/docs/toolsets/index.rst | 4 +-
providers/common/ai/docs/troubleshooting.rst | 4 +
providers/common/ai/pyproject.toml | 7 +-
.../providers/common/ai/durable/openai_agents.py | 479 +++++++++++
.../common/ai/example_dags/example_adk_agent.py | 8 +-
.../ai/example_dags/example_agent_tool_approval.py | 2 +-
.../example_dags/example_anthropic_tool_runner.py | 7 +-
.../ai/example_dags/example_custom_toolset.py | 160 ++++
.../ai/example_dags/example_llm_retry_policy.py | 19 +-
...s_agent.py => example_openai_agents_durable.py} | 48 +-
.../ai/example_dags/example_strands_agent.py | 6 +-
.../providers/common/ai/hooks/pydantic_ai.py | 5 +
.../airflow/providers/common/ai/operators/agent.py | 55 +-
.../providers/common/ai/plugins/model_panel.py | 2 +-
.../airflow/providers/common/ai/policies/retry.py | 5 +-
.../airflow/providers/common/ai/toolsets/skills.py | 16 +-
.../unit/common/ai/durable/test_openai_agents.py | 521 ++++++++++++
.../tests/unit/common/ai/hooks/test_pydantic_ai.py | 18 +
.../tests/unit/common/ai/operators/test_agent.py | 127 ++-
.../ai/operators/test_agent_tool_approval.py | 1 -
.../unit/common/ai/plugins/test_model_panel.py | 18 +-
.../ai/tests/unit/common/ai/policies/test_retry.py | 45 +-
.../tests/unit/common/ai/toolsets/test_skills.py | 17 +
.../providers/discord/hooks/discord_webhook.py | 2 +-
.../unit/discord/hooks/test_discord_webhook.py | 2 +-
.../providers/edge3/plugins/www/package.json | 26 +-
.../providers/edge3/plugins/www/pnpm-lock.yaml | 815 ++++++++++---------
.../providers/elasticsearch/log/es_task_handler.py | 5 +-
.../unit/elasticsearch/log/test_es_task_handler.py | 3 +
.../fab/src/airflow/providers/fab/www/package.json | 2 +-
.../src/airflow/providers/fab/www/pnpm-lock.yaml | 10 +-
providers/google/docs/operators/cloud/dataproc.rst | 13 +
.../google/docs/operators/cloud/functions.rst | 26 +
.../google/docs/operators/cloud/vertex_ai.rst | 5 +
.../providers/google/cloud/hooks/dataprep.py | 16 +-
.../google/cloud/hooks/vertex_ai/feature_store.py | 31 +-
.../google/cloud/log/cloud_logging_task_handler.py | 5 +-
.../providers/google/cloud/log/gcs_task_handler.py | 4 +-
.../providers/google/cloud/operators/bigquery.py | 6 +-
.../providers/google/cloud/operators/dataflow.py | 37 +-
.../providers/google/cloud/operators/dataproc.py | 52 +-
.../providers/google/cloud/operators/functions.py | 2 +-
.../google/cloud/operators/kubernetes_engine.py | 26 +-
.../cloud/operators/vertex_ai/feature_store.py | 17 +-
.../google/cloud/transfers/bigquery_to_gcs.py | 13 +
.../google/cloud/transfers/gcs_to_bigquery.py | 44 +-
.../providers/google/cloud/triggers/dataflow.py | 101 ++-
.../google/cloud/triggers/kubernetes_engine.py | 3 +-
.../providers/google/common/hooks/base_google.py | 3 +-
.../bigquery/example_bigquery_queries_async.py | 54 +-
.../cloud/dataproc/example_dataproc_batch.py | 22 +
.../kubernetes_engine/example_kubernetes_engine.py | 2 +-
.../example_kubernetes_engine_async.py | 5 +-
.../example_kubernetes_engine_job.py | 5 +-
.../example_kubernetes_engine_kueue.py | 2 +-
.../example_kubernetes_engine_ray.py | 6 -
.../example_kubernetes_engine_resource.py | 5 +-
.../vertex_ai/example_vertex_ai_feature_store.py | 36 +-
.../tests/unit/google/cloud/hooks/test_dataprep.py | 31 +
.../cloud/hooks/vertex_ai/test_feature_store.py | 40 +-
.../cloud/log/test_cloud_logging_task_handler.py | 5 +
.../unit/google/cloud/operators/test_bigquery.py | 12 +
.../unit/google/cloud/operators/test_dataflow.py | 116 +++
.../unit/google/cloud/operators/test_dataproc.py | 170 ++++
.../cloud/operators/test_kubernetes_engine.py | 98 ++-
.../google/cloud/transfers/test_bigquery_to_gcs.py | 53 ++
.../google/cloud/transfers/test_gcs_to_bigquery.py | 124 +++
.../unit/google/cloud/triggers/test_dataflow.py | 224 +++++-
.../cloud/triggers/test_kubernetes_engine.py | 20 +-
.../unit/google/common/hooks/test_base_google.py | 16 +
.../microsoft/azure/log/wasb_task_handler.py | 2 +-
providers/openai/README.rst | 2 +-
providers/openai/docs/index.rst | 2 +-
providers/openai/pyproject.toml | 2 +-
.../unit/openlineage/plugins/test_execution.py | 9 +-
.../providers/opensearch/log/os_task_handler.py | 5 +-
.../unit/opensearch/log/test_os_task_handler.py | 3 +
providers/sftp/tests/unit/sftp/hooks/test_sftp.py | 4 +
providers/snowflake/docs/connections/snowflake.rst | 5 +-
...snowflake_cortex_agent.rst => cortex_agent.rst} | 8 +-
.../snowflake/docs/redirects.txt | 2 +-
providers/snowflake/provider.yaml | 12 +-
.../providers/snowflake/get_provider_info.py | 12 +-
.../airflow/providers/snowflake/hooks/__init__.py | 19 +
.../{snowflake_cortex_agent.py => cortex_agent.py} | 0
.../airflow/providers/snowflake/hooks/snowflake.py | 35 +-
.../hooks/{snowflake_sql_api.py => sql_api.py} | 0
.../providers/snowflake/operators/__init__.py | 14 +
.../{snowflake_cortex_agent.py => cortex_agent.py} | 2 +-
.../providers/snowflake/operators/snowflake.py | 2 +-
.../snowflake/triggers/snowflake_trigger.py | 2 +-
.../providers/snowflake/utils/openlineage.py | 4 +-
.../snowflake/example_snowflake_cortex_agent.py | 4 +-
...wflake_cortex_agent.py => test_cortex_agent.py} | 27 +-
.../tests/unit/snowflake/hooks/test_snowflake.py | 126 +++
.../{test_snowflake_sql_api.py => test_sql_api.py} | 4 +-
...wflake_cortex_agent.py => test_cortex_agent.py} | 4 +-
.../unit/snowflake/operators/test_snowflake.py | 14 +-
.../{test_snowflake_sql.py => test_sql.py} | 0
.../unit/snowflake/triggers/test_snowflake.py | 8 +-
.../tests/unit/snowflake/utils/test_openlineage.py | 14 +-
pyproject.toml | 31 +-
registry/package.json | 2 +-
registry/pnpm-lock.yaml | 10 +-
scripts/ci/testing/summarize_captured_warnings.py | 2 +-
.../logging/src/airflow_shared/logging/remote.py | 16 +-
.../secrets_masker/secrets_masker.py | 17 +-
.../tests/secrets_masker/test_secrets_masker.py | 49 +-
task-sdk/docs/api.rst | 2 +
task-sdk/docs/index.rst | 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 | 16 +-
.../src/airflow/sdk/api/datamodels/_generated.py | 14 +
.../src/airflow/sdk/coordinators/_subprocess.py | 41 +-
.../src/airflow/sdk/definitions/_internal/loop.py | 10 +-
.../sdk/definitions/decorators/task_group.py | 6 +-
.../src/airflow/sdk/definitions/loop.py | 20 +-
task-sdk/src/airflow/sdk/execution_time/comms.py | 2 +
task-sdk/src/airflow/sdk/execution_time/loop.py | 70 +-
.../airflow/sdk/execution_time/schema/schema.json | 49 ++
.../execution_time/schema/versions/v2026_10_30.py | 12 +-
.../src/airflow/sdk/execution_time/supervisor.py | 18 +
.../src/airflow/sdk/execution_time/task_runner.py | 11 +-
task-sdk/tests/task_sdk/api/test_client.py | 27 +
.../tests/task_sdk/coordinators/test_subprocess.py | 179 ++++-
.../tests/task_sdk/execution_time/test_loop.py | 214 +++--
.../task_sdk/execution_time/test_supervisor.py | 92 ++-
ts-sdk/pnpm-lock.yaml | 145 ++--
ts-sdk/schema/supervisor-schema.json | 49 ++
ts-sdk/src/generated/supervisor.ts | 14 +
uv.lock | 40 +-
357 files changed, 12584 insertions(+), 3019 deletions(-)
create mode 100644 airflow-core/newsfragments/74837.bugfix.rst
create mode 100644 airflow-core/newsfragments/74840.bugfix.rst
copy
airflow-core/src/airflow/migrations/versions/{0140_3_4_0_add_language_to_dag_code.py
=> 0147_3_4_0_add_commit_allows_update_to_connection_test.py} (60%)
rename
airflow-core/src/airflow/migrations/versions/{0147_3_5_0_add_session_id_to_job.py
=> 0148_3_5_0_add_session_id_to_job.py} (97%)
create mode 100644
airflow-core/src/airflow/ui/src/components/DataTable/DataTable.expanding.test.tsx
copy airflow-core/src/airflow/ui/src/{layouts/Details/Grid/DurationTick.tsx =>
components/LoopDecisionReason.tsx} (67%)
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/MapIndexSwitcherButton.tsx
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/SearchMapIndexes.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/SearchMapIndexes.tsx
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Nav/DagsButton.test.tsx
create mode 100644 airflow-core/src/airflow/ui/src/layouts/Nav/DagsButton.tsx
create mode 100644 airflow-core/src/airflow/ui/src/layouts/Nav/NavMenu.test.tsx
create mode 100644 airflow-core/src/airflow/ui/src/layouts/Nav/NavMenu.tsx
copy airflow-core/src/airflow/ui/src/{utils/isOneOf.test.ts =>
pages/DagsList/DagsListColumns.test.tsx} (63%)
create mode 100644
airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/useLoopOutcomeStats.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/Run/CallbackLogs.test.tsx
create mode 100644 airflow-core/src/airflow/ui/src/pages/Run/CallbackLogs.tsx
create mode 100644 airflow-core/src/airflow/ui/src/pages/Run/Callbacks.test.tsx
create mode 100644 airflow-core/src/airflow/ui/src/pages/Run/Callbacks.tsx
create mode 100644 airflow-core/src/airflow/ui/src/pages/Run/Run.test.tsx
create mode 100644 airflow-core/src/airflow/ui/src/queries/useDags.test.tsx
create mode 100644 airflow-core/src/airflow/utils/log/path_log_reader.py
create mode 100644 airflow-core/tests/unit/utils/log/test_path_log_reader.py
create mode 100644
providers/amazon/src/airflow/providers/amazon/aws/sensors/athena_spark.py
create mode 100644
providers/amazon/tests/unit/amazon/aws/sensors/test_athena_spark.py
create mode 100644
providers/celery/tests/unit/celery/executors/test_default_celery.py
create mode 100644 providers/common/ai/docs/toolsets/custom.rst
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/durable/openai_agents.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_custom_toolset.py
copy
providers/common/ai/src/airflow/providers/common/ai/example_dags/{example_openai_agents_agent.py
=> example_openai_agents_durable.py} (66%)
create mode 100644
providers/common/ai/tests/unit/common/ai/durable/test_openai_agents.py
rename providers/snowflake/docs/operators/{snowflake_cortex_agent.rst =>
cortex_agent.rst} (91%)
copy airflow-core/src/airflow/py.typed =>
providers/snowflake/docs/redirects.txt (92%)
rename
providers/snowflake/src/airflow/providers/snowflake/hooks/{snowflake_cortex_agent.py
=> cortex_agent.py} (100%)
rename
providers/snowflake/src/airflow/providers/snowflake/hooks/{snowflake_sql_api.py
=> sql_api.py} (100%)
rename
providers/snowflake/src/airflow/providers/snowflake/operators/{snowflake_cortex_agent.py
=> cortex_agent.py} (99%)
rename
providers/snowflake/tests/unit/snowflake/hooks/{test_snowflake_cortex_agent.py
=> test_cortex_agent.py} (97%)
rename
providers/snowflake/tests/unit/snowflake/hooks/{test_snowflake_sql_api.py =>
test_sql_api.py} (99%)
rename
providers/snowflake/tests/unit/snowflake/operators/{test_snowflake_cortex_agent.py
=> test_cortex_agent.py} (98%)
rename
providers/snowflake/tests/unit/snowflake/operators/{test_snowflake_sql.py =>
test_sql.py} (100%)
copy airflow-core/tests/unit/task/conftest.py =>
task-sdk/src/airflow/sdk/definitions/loop.py (66%)