This is an automated email from the ASF dual-hosted git repository.
dabla pushed a change to branch
dabla/durable-operators/02-durable-msgraph-powerbi
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard c0d009b242a Make the PowerBI refresh and MSGraph operators resume
after a retry
discard 8c33841b41f Use one ResumableJobMixin fallback from common.compat in
providers
add 0652ebe94e0 Fix deferred dbt Cloud tasks failing with tenacity
retry_args (#74489)
add 3a23d4429e5 Clarify what common.ai message_history does and does not
cover (#74625)
add d6bb744aea1 Validate the connection type in PydanticAIHook.get_hook
(#74626)
add 2f62550383a Add a Why Common AI page comparing the provider with a
plain task (#74685)
add 2bf8c2e6053 Let an agent ask for tool approval in more than one step
(#74686)
add c245439c5aa Add an example of a decision model approving an agent's
tool calls (#74697)
add bbcf4d58dea Move Common AI provider from incubation to production
lifecycle (#74705)
add 2002ba522e6 Graduate durable agent execution to stable in Common AI
(#74704)
add 4c39202d20e DateTimeSensorAsync support start_from_trigger and
templated target_time (#73928)
add a1c3755a23d Graduate ClassifierRetryPolicy to stable in Common AI
(#74707)
add 63f5845dd20 Migrate Task SDK to `httpx2` (#73116)
add 350761ce775 Mark decision_policy experimental on the decision models
page and finish the ClassifierRetryPolicy stability row (#74713)
add de856e4aa44 Fix the common.ai message_history trimming example and
link the memory page (#74706)
add d79c0b18f35 Fix ORM models failing to configure in processes that skip
database setup (#74642)
add dd607da5ab3 Add Anthropic tool runner adapter for `common.ai` toolsets
(#73962)
add e288b73c85b Check all names before airflow roles import writes
anything (#74711)
add 90ea1b7ed86 Add EmrServerlessGetSessionEndpointOperator to Amazon
provider (#70766)
add 98391ff597b Add `OpenShell` backend for sandbox tools (#73961)
add 64c207d56f8 Document how common.ai agent tasks recover from provider
and worker failures (#74708)
add 1f70ead81ef Fix /ui/dags recent-runs query degradation on large,
skewed dag_run tables (#74401)
add 190befa57c1 Ask the model again when a durable agent's retry would
replay its rejected answers (#74720)
add 7993ee19955 Remove `agent_params` from LLM operators so they cannot
run tools (#74721)
add 3259e8960f8 Mask tool output from every capability in Common AI agents
(#73993)
add f31684af859 Add the manifest format for manifest-backed versioned Dag
bundles (#72476)
add bcbb825e199 Stop rejecting valid non-ASCII Anthropic batches as too
large (#74662)
add 7e3b2c64f1d UI: Keep JSON text in string HITL params instead of
showing [object Object] (#74702)
add 0b7aed6491d Add a feature map to the Common AI docs (#74723)
add ea805e3bfb0 UI: Fix clearing a task instance doing nothing after
Confirm (#74725)
add 7f733c87abf Prepare ad-hoc providers release 2026-10-14 (#74733)
add d189eac87c1 Cover YAML-generated Java Dags in the java_sdk e2e test
(#74710)
add 22f86cb5514 Snowflake, Databricks: emit query lineage via OpenLineage
public API (#73655)
add 6a91a17be4e Fix Dag processor client compatibility with httpx2 (#74731)
add dd7e8ab8321 Fail the task when a reviewed output no longer matches
`output_type` (#74473)
add 27433bf4830 Show Dag version diff values-hidden pill only when values
are hidden (#74746)
add df5cf9ecb56 UI: Add clicked tags to the Dags list filters instead of
replacing them (#74622)
add 52ae0697490 Use one ResumableJobMixin fallback from common.compat in
providers
add a43b6d8864a Make the PowerBI refresh and MSGraph operators resume
after a retry
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (c0d009b242a)
\
N -- N -- N
refs/heads/dabla/durable-operators/02-durable-msgraph-powerbi (a43b6d8864a)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.../docs/security/jwt_token_authentication.rst | 2 +-
airflow-core/newsfragments/73116.significant.rst | 11 +
airflow-core/pyproject.toml | 3 +
.../airflow/api_fastapi/core_api/routes/ui/dags.py | 31 +-
.../api_fastapi/execution_api/in_process.py | 17 +-
.../src/airflow/config_templates/config.yml | 2 +-
.../src/airflow/dag_processing/api_client.py | 34 +-
.../src/airflow/dag_processing/bundles/manifest.py | 571 ++++++++
airflow-core/src/airflow/models/base.py | 11 +-
.../src/airflow/ui/public/i18n/locales/ca/dag.json | 4 +-
.../src/airflow/ui/public/i18n/locales/de/dag.json | 4 +-
.../src/airflow/ui/public/i18n/locales/el/dag.json | 4 +-
.../src/airflow/ui/public/i18n/locales/en/dag.json | 4 +-
.../src/airflow/ui/public/i18n/locales/fr/dag.json | 4 +-
.../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 +-
.../ClearTaskInstanceConfirmationDialog.tsx | 12 +-
.../TaskInstance/ClearTaskInstanceDialog.test.tsx | 47 +-
.../ui/src/pages/Dag/Versions/VersionDiff.test.tsx | 33 +-
.../ui/src/pages/Dag/Versions/VersionDiff.tsx | 16 +-
.../airflow/ui/src/pages/DagsList/DagTags.test.tsx | 124 ++
.../src/airflow/ui/src/pages/DagsList/DagTags.tsx | 62 +-
.../airflow/ui/src/pages/Run/Execution.test.tsx | 22 -
airflow-core/src/airflow/ui/src/utils/hitl.test.ts | 48 +-
airflow-core/src/airflow/ui/src/utils/hitl.ts | 18 +-
.../src/airflow/utils/orm_event_handlers.py | 4 -
.../api_fastapi/core_api/routes/ui/test_dags.py | 51 +
.../unit/api_fastapi/execution_api/test_app.py | 10 +-
.../execution_api/test_dag_processor_client.py | 18 +-
.../unit/dag_processing/bundles/test_manifest.py | 881 ++++++++++++
.../tests/unit/dag_processing/test_api_client.py | 173 +--
airflow-core/tests/unit/models/test_base.py | 43 +-
.../tests/unit/utils/test_orm_event_handlers.py | 37 -
airflow-e2e-tests/docker/java.yml | 6 +
airflow-e2e-tests/java-native-bundle/build.gradle | 1 +
.../apache/airflow/e2e/NativeBundleBuilder.java | 12 +-
.../apache/airflow/e2e/nativedag/DynamicDags.java | 74 +
.../e2e_test_utils/dynamic_dags.py | 71 +
.../go_sdk_tests/test_go_sdk_dynamic_dag.py | 47 +-
.../java_sdk_tests/test_java_sdk_dynamic_dag.py | 89 ++
devel-common/src/tests_common/pytest_plugin.py | 15 -
.../tests_common/test_utils/in_process_taskrun.py | 40 +-
docs/spelling_wordlist.txt | 12 +
providers/.last_release_date.txt | 2 +-
providers/amazon/README.rst | 2 +-
providers/amazon/docs/changelog.rst | 16 +-
providers/amazon/docs/index.rst | 2 +-
.../amazon/docs/operators/emr/emr_serverless.rst | 17 +
providers/amazon/provider.yaml | 2 +-
providers/amazon/pyproject.toml | 2 +-
.../airflow/providers/amazon/aws/operators/emr.py | 60 +-
.../amazon/aws/example_emr_serverless_session.py | 11 +
.../aws/operators/test_emr_serverless_session.py | 62 +-
providers/common/ai/README.rst | 18 +-
providers/common/ai/docs/agent_security.rst | 18 +-
providers/common/ai/docs/approval_gates.rst | 25 +
providers/common/ai/docs/capabilities.rst | 6 +-
providers/common/ai/docs/changelog.rst | 97 +-
providers/common/ai/docs/decision_models.rst | 17 +-
providers/common/ai/docs/durable_execution.rst | 22 +-
providers/common/ai/docs/features.rst | 303 +++-
providers/common/ai/docs/frameworks/anthropic.rst | 212 +++
providers/common/ai/docs/frameworks/index.rst | 25 +-
.../common/ai/docs/frameworks/pydantic_ai.rst | 22 +-
providers/common/ai/docs/index.rst | 24 +-
providers/common/ai/docs/installation.rst | 12 +-
providers/common/ai/docs/message_history.rst | 63 +-
providers/common/ai/docs/observability.rst | 21 +-
providers/common/ai/docs/operations.rst | 3 +
providers/common/ai/docs/operators/llm.rst | 47 +-
providers/common/ai/docs/operators/llm_branch.rst | 6 +-
.../common/ai/docs/operators/llm_file_analysis.rst | 6 +-
.../ai/docs/operators/llm_schema_compare.rst | 9 +-
providers/common/ai/docs/provider_fallback.rst | 22 +-
providers/common/ai/docs/recovery.rst | 164 +++
providers/common/ai/docs/retry_policies.rst | 10 +-
providers/common/ai/docs/sandbox/backends.rst | 221 ++-
providers/common/ai/docs/sandbox/configuration.rst | 21 +-
providers/common/ai/docs/sandbox/index.rst | 58 +-
providers/common/ai/docs/stability.rst | 60 +-
providers/common/ai/docs/tool_approval.rst | 126 +-
providers/common/ai/docs/toolsets/hook.rst | 4 +-
providers/common/ai/docs/toolsets/index.rst | 10 +-
providers/common/ai/docs/toolsets/mcp.rst | 4 +-
.../common/ai/docs/toolsets/object_storage.rst | 3 +-
providers/common/ai/docs/toolsets/sql.rst | 6 +-
providers/common/ai/docs/troubleshooting.rst | 8 +
providers/common/ai/docs/why_common_ai.rst | 199 +++
providers/common/ai/provider.yaml | 17 +-
providers/common/ai/pyproject.toml | 27 +-
.../ai/src/airflow/providers/common/ai/__init__.py | 2 +-
.../airflow/providers/common/ai/batch/anthropic.py | 24 +-
.../providers/common/ai/batch/output_schema.py | 9 +-
.../providers/common/ai/durable/capability.py | 13 +-
.../providers/common/ai/durable/fingerprint.py | 7 +-
.../airflow/providers/common/ai/durable/journal.py | 63 +-
.../ai/example_dags/example_agent_recovery.py | 70 +
.../ai/example_dags/example_agent_tool_judge.py | 188 +++
.../example_dags/example_aip_progress_tracker.py | 6 +-
.../example_dags/example_anthropic_tool_runner.py | 82 ++
.../common/ai/example_dags/example_llm.py | 11 +-
.../ai/example_dags/example_why_common_ai.py | 56 +
.../src/airflow/providers/common/ai/exceptions.py | 28 +-
.../providers/common/ai/get_provider_info.py | 7 +-
.../providers/common/ai/hooks/pydantic_ai.py | 51 +-
.../airflow/providers/common/ai/mixins/approval.py | 49 +-
.../providers/common/ai/mixins/hitl_review.py | 14 +-
.../airflow/providers/common/ai/operators/agent.py | 172 ++-
.../airflow/providers/common/ai/operators/llm.py | 70 +-
.../providers/common/ai/operators/llm_branch.py | 9 +-
.../common/ai/operators/llm_file_analysis.py | 11 +-
.../common/ai/operators/llm_schema_compare.py | 26 +-
.../providers/common/ai/operators/llm_sql.py | 10 +-
.../airflow/providers/common/ai/policies/retry.py | 10 -
.../providers/common/ai/sandbox/__init__.py | 2 +
.../providers/common/ai/sandbox/openshell.py | 1139 +++++++++++++++
.../airflow/providers/common/ai/tools/__init__.py | 4 +-
.../airflow/providers/common/ai/tools/anthropic.py | 288 ++++
.../providers/common/ai/utils/coroutines.py | 13 +-
.../airflow/providers/common/ai/utils/masking.py | 26 +-
.../providers/common/ai/utils/output_type.py | 142 +-
.../providers/common/ai/utils/tool_metrics.py | 2 +-
.../providers/common/ai/utils/toolset_base.py | 83 +-
.../common/ai/tests/system/common/ai/README.md | 17 +
.../common/ai/example_sandbox_toolset_openshell.py | 122 ++
.../tests/unit/common/ai/batch/test_anthropic.py | 57 +-
.../unit/common/ai/batch/test_output_schema.py | 13 +-
.../unit/common/ai/durable/test_capability.py | 106 +-
.../tests/unit/common/ai/durable/test_journal.py | 90 +-
.../tests/unit/common/ai/hooks/test_pydantic_ai.py | 153 +-
.../tests/unit/common/ai/mixins/test_approval.py | 133 +-
.../unit/common/ai/mixins/test_hitl_review.py | 58 +
.../tests/unit/common/ai/operators/test_agent.py | 197 ++-
.../ai/operators/test_agent_tool_approval.py | 221 ++-
.../common/ai/operators/test_agent_tool_judge.py | 234 ++++
.../ai/tests/unit/common/ai/operators/test_llm.py | 115 +-
.../unit/common/ai/operators/test_llm_branch.py | 25 +
.../common/ai/operators/test_llm_file_analysis.py | 31 +-
.../common/ai/operators/test_llm_schema_compare.py | 14 +-
.../tests/unit/common/ai/operators/test_llm_sql.py | 13 +-
.../tests/unit/common/ai/sandbox/test_openshell.py | 1479 ++++++++++++++++++++
.../ai/tests/unit/common/ai/test_exceptions.py | 2 +
.../tests/unit/common/ai/tools/test_anthropic.py | 364 +++++
.../tests/unit/common/ai/utils/test_coroutines.py | 14 +
.../ai/tests/unit/common/ai/utils/test_masking.py | 51 +-
.../tests/unit/common/ai/utils/test_output_type.py | 422 +++++-
.../unit/common/ai/utils/test_toolset_base.py | 42 +-
providers/common/compat/README.rst | 6 +-
providers/common/compat/docs/changelog.rst | 11 +
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 +-
.../src/airflow/providers/common/compat/sdk.py | 20 +-
providers/databricks/docs/index.rst | 2 +-
providers/databricks/pyproject.toml | 2 +-
.../providers/databricks/hooks/databricks_sql.py | 5 +-
.../providers/databricks/utils/openlineage.py | 123 +-
.../unit/databricks/hooks/test_databricks_sql.py | 16 +-
.../unit/databricks/utils/test_openlineage.py | 947 +++----------
providers/dbt/cloud/docs/changelog.rst | 3 +-
providers/dbt/cloud/provider.yaml | 2 +-
.../airflow/providers/dbt/cloud/triggers/dbt.py | 24 +-
.../tests/unit/dbt/cloud/triggers/test_dbt.py | 20 +
.../fab/auth_manager/cli_commands/role_command.py | 26 +
.../auth_manager/cli_commands/test_role_command.py | 69 +
providers/google/docs/changelog.rst | 9 +-
providers/google/provider.yaml | 2 +-
providers/microsoft/azure/pyproject.toml | 2 +-
.../openlineage/utils/sql_hook_lineage.py | 28 +-
.../openlineage_policy_hook_lineage_dag.json | 16 +-
.../openlineage/utils/test_sql_hook_lineage.py | 6 +-
providers/snowflake/docs/index.rst | 2 +-
providers/snowflake/pyproject.toml | 2 +-
.../airflow/providers/snowflake/hooks/snowflake.py | 5 +-
.../providers/snowflake/utils/openlineage.py | 174 +--
.../tests/unit/snowflake/hooks/test_snowflake.py | 17 +-
.../tests/unit/snowflake/utils/test_openlineage.py | 886 +++---------
.../providers/standard/sensors/date_time.py | 54 +-
.../providers/standard/triggers/temporal.py | 56 +-
.../tests/unit/standard/sensors/test_date_time.py | 86 +-
.../tests/unit/standard/triggers/test_temporal.py | 42 +
scripts/ci/prek/generate_execution_api_schema.py | 4 +-
.../src/airflow_shared/logging/structlog.py | 19 +-
shared/logging/tests/logging/test_structlog.py | 44 +
.../observability/metrics/metrics_template.yaml | 4 +-
task-sdk/dev/generate_task_sdk_models.py | 4 +-
task-sdk/pyproject.toml | 6 +-
task-sdk/src/airflow/sdk/api/client.py | 62 +-
.../src/airflow/sdk/execution_time/supervisor.py | 10 +-
task-sdk/tests/task_sdk/__init__.py | 10 +-
task-sdk/tests/task_sdk/api/test_client.py | 819 +++++------
.../execution_time/test_request_handlers.py | 6 +-
.../task_sdk/execution_time/test_supervisor.py | 142 +-
uv.lock | 45 +-
196 files changed, 12130 insertions(+), 3157 deletions(-)
create mode 100644 airflow-core/newsfragments/73116.significant.rst
create mode 100644 airflow-core/src/airflow/dag_processing/bundles/manifest.py
create mode 100644
airflow-core/src/airflow/ui/src/pages/DagsList/DagTags.test.tsx
create mode 100644
airflow-core/tests/unit/dag_processing/bundles/test_manifest.py
delete mode 100644 airflow-core/tests/unit/utils/test_orm_event_handlers.py
create mode 100644
airflow-e2e-tests/java-native-bundle/src/java/org/apache/airflow/e2e/nativedag/DynamicDags.java
create mode 100644
airflow-e2e-tests/tests/airflow_e2e_tests/e2e_test_utils/dynamic_dags.py
create mode 100644
airflow-e2e-tests/tests/airflow_e2e_tests/java_sdk_tests/test_java_sdk_dynamic_dag.py
create mode 100644 providers/common/ai/docs/frameworks/anthropic.rst
create mode 100644 providers/common/ai/docs/recovery.rst
create mode 100644 providers/common/ai/docs/why_common_ai.rst
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_agent_recovery.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_agent_tool_judge.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_anthropic_tool_runner.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_why_common_ai.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/sandbox/openshell.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/tools/anthropic.py
create mode 100644
providers/common/ai/tests/system/common/ai/example_sandbox_toolset_openshell.py
create mode 100644
providers/common/ai/tests/unit/common/ai/operators/test_agent_tool_judge.py
create mode 100644
providers/common/ai/tests/unit/common/ai/sandbox/test_openshell.py
create mode 100644
providers/common/ai/tests/unit/common/ai/tools/test_anthropic.py