This is an automated email from the ASF dual-hosted git repository.
jason810496 pushed a change to branch jason/lang-sdk-e2e/07-java-sdk
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard 196ed3af56e Java SDK: Serialize native Dags to DagSerialization v3 on
parse requests
discard 65b09deb5d1 Java SDK: Declare a Dag's task graph with @Builder.Deps
discard 98d421a45c0 Java SDK: Resolve a task's arguments from the Dag's own
wiring
discard 57ddfadbf87 Java SDK: Generate Dag and task configuration from the
serialization schema
discard 93f18940610 Java SDK: Describe native Java Dags without reference to
Python
discard 32456fb458e Complete the license header of the TS SDK conformance check
discard 9301fcfb7c5 TS SDK: add triggerDagRun to the native Dag surface
discard e6d7b2de893 TS SDK: add multi-way branching with dag.switch
discard c1f2661bb98 TS SDK: add conditional branching with dag.if
discard 90658e5ff3c TS SDK: answer the Dag-parsing request from bundle.serve
discard fc27f3164b6 TS SDK: serialize a native Dag to Dag JSON
discard 6473db76f0b TS SDK: reject a Dag whose order-only edges form a cycle
discard 5b7b2d5e09f TS SDK: add task groups to the native Dag surface
discard a5bb084089a TS SDK: draw order-only edges with before and after
discard 3fa2b8aad9d TS SDK: default a task id to the handler's name
discard 1705d22ce94 Share the bundle section mutation helper between Node tests
discard 3be07bd0d71 Document parsing native TypeScript Dags
discard 32a4ec7cb40 Parse native TypeScript Dags with the Node coordinator
discard f8acd1d7096 Name the JAR manifest attributes the Java coordinator reads
discard bc61615889f Test the Java Dag source placeholder for a JAR without a
manifest
discard 3b391b3f4f5 Treat an unreadable JAR like one without a manifest
discard 50e5d767802 Document native Java Dag parsing
discard f9b81e18ffc Parse native Java Dags with their coordinator
discard 10828544575 Embed the Dag source in Java bundle JARs
discard a4023058636 Build the JVM command that parses a Dag JAR
discard 3e048430657 Read JAR manifests per the JAR specification
discard c4b3431f802 Start a coordinator's runtime from a fresh interpreter on
macOS
discard 7f48f6f5220 Keep a bundle's importers when the coordinator config is
broken
discard 7f3576d6a12 Store only native Dags that a Dag bag can rebuild
discard a3014e53664 Start a Lang-SDK parse runtime with default signal handling
discard 6297218dd45 Keep the first parse result from a Lang-SDK runtime
discard cc204e6886a Run the Lang-SDK runtime in its own process group
discard 3de70a8fd6f Report an invalid frame from a Lang-SDK runtime as an
import error
discard 03122a7e814 Name the missing task when a native Dag's edge points
nowhere
discard d46f9fdfd00 Keep a native Dag's timezone when rebuilding it
discard d23a5677f4e Reject a native Dag whose task graph has a cycle
discard 038b90dc74f Signal a Lang-SDK runtime's whole process tree
discard e1e4b7934e8 Kill the Lang-SDK runtime when its parse is interrupted
discard 428596b74da Parse coordinator-claimed Dag files with their runtime
discard cbbd88af0a2 Import native Dags through their coordinator
discard 79e8ab72480 Parse a coordinator's Dag file outside the Dag processor
discard 302707a97ea Parse a Dag file with its coordinator's runtime
discard 6c9059c07a6 Rebuild a Lang-SDK Dag as an airflow.sdk.DAG
discard 931c4a9913e Keep a stub task's preset arg bindings when serializing it
discard e025b017ed9 Find the coordinators that parse a Dag bundle
omit 98bfa5be9b4 Harden claimed-file discovery errors and archive importers
omit 89e8f78cb15 Tidy the importer routing helpers and their tests
omit 12da1d38851 Keep claimed files queued when their importer cannot list
them
omit eb7b084b292 Claim Dag files by extension and keep .py, .pyc and .zip
legacy
omit edefb917b15 Read a claimed file's Dag source through its importer
omit 441fce1cdf4 Queue and track files that a Task SDK importer claims
omit 5feefffb6b7 Parse files that a Task SDK importer claims
omit 18334707dec Reject blank subprocess coordinator artifact roots
omit e8e1a8ba506 Reject empty subprocess coordinator artifact roots
omit bada0a79306 Reject concurrent subprocess coordinator execution
consistently
omit a6557be73bd Make task bundle access dependencies explicit
omit 68cca25a3e1 Preserve custom subprocess coordinator compatibility
omit e9da1565f5b Read the Dag bundle configuration through a single entry
point
omit 8c674c638d5 Resolve coordinator Dag bundles without importing the task
runner
omit e6c1deca9d9 Make JavaCoordinator main_class optional in co-located mode
omit 0e857247f41 Harden subprocess coordinator artifact bundle resolution
omit 9257c50cf16 Document dag_bundle_name option for language-SDK
coordinators
omit d8c78379e77 Add dag_bundle_name option to subprocess coordinators
add 3f60fa9e2c7 Fix Firefox and WebKit UI e2e runs failing at login
(#73872)
add ac88accf4ed Add bundle_name tag to missing dag processor metrics
(#73717)
add 7afece8efb0 Update providers metadata 2026-09-29 (#73884)
add 4b6606543fd Distinguish OpenAI batch timeout and cancellation in
deferrable tasks (#72149)
add 8b3d4d315fa Surface the retry policy decision on task instances page
(#73030)
add bc28bb0804c Go SDK: Fix the mixed language task handler binding
semantic (#73648)
add 9ebc2644741 Revert "Secrets backends order updated (#70681)" (#73891)
add 4e23910701b Go SDK: check Go naming conventions with staticcheck
(#73874)
add 0768924a0cd Automatically isolate `breeze testing` for each git
worktree in a totally isolated project. (#73836)
add 3e8318969e1 Add ADR for Lang SDK Dag and mixed-language Task
processing flow (#71929)
add e8d43932077 Add ADR for supporting Dynamic Dag Generation across
Language SDKs (#73518)
add 8d815efdbc3 Own the BaseAsyncOperator event loop through
asyncio.Runner (#73560)
add 647add72afe Mark experimental `common.ai` features ahead of 1.0
(#73896)
add 5eba7439d76 Make cron timetables hashable (#73859)
add d776f003b71 UI: Add team column and filter to the jobs list (#73295)
add d0b8476825d Set `SameSite` on the fab auth manager session cookie
(#73894)
add 6b90003fe27 Document override semantics for EcsRunTaskOperator (#73860)
add a3555c74cfc TS SDK: default a task id to the handler's name (#73437)
add a65a3ddf8be Fix Postgres data volume path in Breeze (#73862)
add 85321901f10 Add EmrServerlessStartSessionOperator to Amazon provider
(#70763)
add 9198acb15e8 UI: Add team filter to Human-in-the-loop task instances
listing (#73726)
add 836a5565c58 Scope plugin scheduling classes to their team in
multi-team mode (#73569)
add cc19675d24f Add DuckDB support to the Amazon provider (#73301)
add 029cdf8f6cc Return an approved agent answer as `output_type` after
human review (#73904)
add 3c76a47f65c Remove accidentally adopted Magpie contributor-growth
plugin (#73927)
add 73b07c5aedb Name the tools a durable agent retry will run again
(#73873)
add 5799660c4d4 TS SDK: draw order-only edges with before and after
(#73438)
add a8a62573f54 TS SDK: embed one source region per native Dag file
(#73723)
add bfa2fe02fc1 Account for AgentOperator spend on failed runs and across
retries (#73706)
add 023f859e5a6 Mask secrets in tool results before they reach the model
(#73897)
add 2b806f949b0 Rework common.ai Strands support into a plugin and add
Google ADK (#73898)
add e46d1938619 Add `ObjectStorageToolset` for reading files on object
storage (#73899)
add 35507e99a6e Let HookToolset pin arguments the model must not choose
(#73900)
add 40ed903b6d6 Count and trace tool calls made by native agent frameworks
(#73901)
add 2eb11c14b85 Document running your own Pydantic AI agent, and sandboxes
in other frameworks (#73902)
add d4ba567a390 Tell the model how many rows a Parquet or Avro file holds
(#73925)
add 21bbf2f40a2 Java SDK: Generate Dag and task configuration from the
serialization schema (#73595)
add 76bf88a4877 API: Translate domain ValueError in Task State Store route
(#73753)
add 1a67bf46b55 Support DagBundle based deployment for Coordinator (#70805)
add 53ca2a427ba TS SDK: add task groups to the native Dag surface (#73439)
add 5e785acfb3b Discard the task state values for a task instance when it
is cleared (#72100)
add 7938c0dbb65 Make `execute_tool` the public method `AirflowToolset`
subclasses implement (#73938)
add 6cd2f6f36d9 Remove migration tests for migrations that have already
landed. (#73953)
add 5136c6c41bf Use plain ifs to normalize configured artifact roots
(#73944)
add e15b3a66137 Retry S3Hook.delete_bucket when a late write leaves bucket
non-empty (#73930)
add acd42922f3d Filter jobs API is_alive in SQL so pagination stays
correct (#73684)
add 508301ab263 Add ADR for per-Dag source in the Lang-SDK bundle artifact
(#73948)
add 91423baf366 Fix breeze down crashing when a start-airflow container is
running (#73955)
add 0fdb0f9da61 Parse files that a Task SDK importer claims
add f8ac157c155 Queue and track files that a Task SDK importer claims
add a9af8a9b209 Read a claimed file's Dag source through its importer
add f48fbb795a6 Claim Dag files by extension and keep .py, .pyc and .zip
legacy
add b01e97995a2 Keep claimed files queued when their importer cannot list
them
add 53a4447965d Tidy the importer routing helpers and their tests
add 57c9a34141c Harden claimed-file discovery errors and archive importers
add e14a5841015 Share Dag cycle detection between the Task SDK and core
add 81f19b6f8e2 Let a coordinator parse the Dag files of the bundles it
serves
add 7a1fcaa17a9 Check that a serialized Dag can be stored and loaded
add e131f891ef3 Move the Dag file processor's shared plumbing into a base
class
add 7e511c8eace Parse coordinator-claimed Dag files with their runtime
add d7886ef1273 Fill a native Dag's unset settings from the Airflow config
add b5171525cd0 Report a Lang-SDK parse past its import timeout as an
import error
add e6de2dfe616 Report a native Dag's task that reaches a Python worker
add c9b01c62215 Read JAR manifests per the JAR specification
add 44b4b8eab00 Build the JVM command that parses a Dag JAR
add 2a87a70f23f Embed the Dag source in Java bundle JARs
add 9071a450ae9 Parse native Java Dags with their coordinator
add 31b2048b99a Document native Java Dag parsing
add ad6afb1f973 Treat an unreadable JAR like one without a manifest
add fa83246d2fb Test the Java Dag source placeholder for a JAR without a
manifest
add ceb6b6a5dfb Name the JAR manifest attributes the Java coordinator reads
add 61c44fc5268 Parse native TypeScript Dags with the Node coordinator
add 05d888c6970 Document parsing native TypeScript Dags
add 7443b465a67 Share the bundle section mutation helper between Node tests
add 50552ef4cae TS SDK: serialize a native Dag to Dag JSON
add e971fa9cbfc TS SDK: answer the Dag-parsing request from bundle.serve
add 24b6570bcc3 TS SDK: add conditional branching with dag.if
add 2ec66162261 TS SDK: add multi-way branching with dag.switch
add 1d9eee4fd72 TS SDK: add triggerDagRun to the native Dag surface
add 8f6d6a2bb87 Java SDK: Resolve a task's arguments from the Dag's own
wiring
add 2ea90a3cc76 Java SDK: Declare a Dag's task graph with @Builder.Deps
add 3d6e6a552c6 Java SDK: Serialize native Dags to DagSerialization v3 on
parse requests
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 (196ed3af56e)
\
N -- N -- N refs/heads/jason/lang-sdk-e2e/07-java-sdk
(3d6e6a552c6)
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:
.../committer-onboarding-config.md | 272 ----
.apache-magpie-overrides/committer-readiness.md | 169 ---
.../contributor-nomination-config.md | 186 ---
.../contributor-sentiment-config.md | 66 -
.../good-first-issue-config.md | 93 --
.../onboarding-concierge-config.md | 70 -
.apache-magpie.lock | 43 -
.gitignore | 5 -
.pre-commit-config.yaml | 30 +-
airflow-core/adr/lang-sdk/0004-dag-parsing.md | 8 +-
.../0007-taskflow-across-language-boundary.md | 39 +
.../adr/lang-sdk/0008-control-flow-constructs.md | 10 +-
.../adr/lang-sdk/0010-native-dag-processing.md | 212 +++
.../lang-sdk/0011-mixed-language-dag-processing.md | 245 ++++
.../adr/lang-sdk/0012-lang-sdk-parse-protocol.md | 233 ++++
.../0013-persisted-task-handler-bindings.md | 593 +++++++++
.../0014-bundle-metadata-and-cache-digest.md | 122 ++
.../0015-per-dag-source-in-bundle-artifact.md | 127 ++
airflow-core/adr/lang-sdk/README.md | 6 +
.../task-and-asset-state-store.rst | 4 +
.../language-sdks/java.rst | 30 +-
.../language-sdks/typescript.rst | 89 +-
airflow-core/docs/core-concepts/dag-run.rst | 11 +-
.../docs/core-concepts/resumable-tasks.rst | 75 +-
.../docs/core-concepts/task-state-store.rst | 6 +-
.../security/secrets/secrets-backend/index.rst | 23 +-
airflow-core/newsfragments/70681.significant.rst | 7 -
airflow-core/newsfragments/72100.significant.rst | 59 +
.../api_fastapi/common/parameters/__init__.py | 4 +
.../airflow/api_fastapi/common/parameters/job.py | 50 +
.../airflow/api_fastapi/common/parameters/misc.py | 43 +
.../core_api/datamodels/task_instance_history.py | 19 +-
.../core_api/datamodels/task_instances.py | 23 +-
.../api_fastapi/core_api/openapi/_private_ui.yaml | 107 +-
.../core_api/openapi/v2-rest-api-generated.yaml | 57 +-
.../api_fastapi/core_api/routes/public/hitl.py | 4 +
.../api_fastapi/core_api/routes/public/job.py | 10 +-
.../core_api/routes/public/task_instances.py | 8 +
.../core_api/routes/public/task_state_store.py | 7 +-
.../api_fastapi/core_api/routes/ui/config.py | 45 +-
.../core_api/services/public/task_instances.py | 41 +
.../src/airflow/cli/commands/dag_command.py | 8 +-
.../airflow/cli/commands/dag_processor_command.py | 26 +-
.../src/airflow/config_templates/config.yml | 34 -
airflow-core/src/airflow/configuration.py | 7 +-
.../src/airflow/dag_processing/collection.py | 104 ++
airflow-core/src/airflow/dag_processing/dagbag.py | 96 +-
.../src/airflow/dag_processing/importer_routing.py | 6 +-
.../airflow/dag_processing/lang_sdk_processor.py | 493 +++++++
airflow-core/src/airflow/dag_processing/manager.py | 66 +-
.../src/airflow/dag_processing/processor.py | 726 +---------
airflow-core/src/airflow/models/dagcode.py | 15 +-
airflow-core/src/airflow/plugins_manager.py | 42 +
airflow-core/src/airflow/secrets/__init__.py | 4 +-
airflow-core/src/airflow/secrets/base_secrets.py | 5 +-
.../src/airflow/serialization/definitions/dag.py | 2 +
.../airflow/serialization/serialized_objects.py | 78 +-
airflow-core/src/airflow/timetables/_cron.py | 2 +-
.../src/airflow/ui/openapi-gen/queries/common.ts | 16 +-
.../ui/openapi-gen/queries/ensureQueryData.ts | 24 +-
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 24 +-
.../src/airflow/ui/openapi-gen/queries/queries.ts | 24 +-
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 24 +-
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 30 +
.../ui/openapi-gen/requests/services.gen.ts | 34 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 43 +-
.../airflow/ui/public/i18n/locales/en/admin.json | 2 -
.../airflow/ui/public/i18n/locales/en/common.json | 9 +
.../airflow/ui/public/i18n/locales/en/dags.json | 1 +
.../TaskInstance/ClearGroupTaskInstanceDialog.tsx | 40 +-
.../TaskInstance/ClearTaskInstanceDialog.test.tsx | 127 ++
.../Clear/TaskInstance/ClearTaskInstanceDialog.tsx | 23 +-
.../src/airflow/ui/src/components/StatsCard.tsx | 2 +-
.../src/airflow/ui/src/constants/localStorage.ts | 1 +
.../airflow/ui/src/hooks/useUserSettings.test.tsx | 21 +
.../src/airflow/ui/src/hooks/useUserSettings.ts | 4 +
.../ui/src/pages/HITLTaskInstances/HITLFilters.tsx | 6 +
.../HITLTaskInstances/HITLTaskInstances.test.tsx | 62 +-
.../pages/HITLTaskInstances/HITLTaskInstances.tsx | 21 +
airflow-core/src/airflow/ui/src/pages/Jobs.tsx | 22 +-
.../ui/src/pages/Settings/Settings.test.tsx | 8 +
.../src/airflow/ui/src/pages/Settings/Settings.tsx | 13 +
.../ui/src/pages/TaskInstance/Details.test.tsx | 137 ++
.../airflow/ui/src/pages/TaskInstance/Details.tsx | 16 +
.../ui/src/pages/TaskInstance/Header.test.tsx | 54 +
.../airflow/ui/src/pages/TaskInstance/Header.tsx | 20 +
.../TaskInstance/stateReason.ts} | 35 +-
.../TaskInstances/BulkClearTaskInstancesButton.tsx | 34 +-
.../ui/src/pages/Variables/BackendsOrderCard.tsx | 45 -
.../ui/src/pages/Variables/BackendsOrderModal.tsx | 64 -
.../airflow/ui/src/pages/Variables/Variables.tsx | 2 -
.../ui/src/queries/useBulkClearTaskInstances.ts | 2 +
.../src/airflow/ui/tests/e2e/global-setup.ts | 14 +-
airflow-core/src/airflow/utils/cli.py | 10 +-
airflow-core/tests/unit/always/test_secrets.py | 121 --
.../core_api/routes/public/test_hitl.py | 49 +-
.../api_fastapi/core_api/routes/public/test_job.py | 51 +
.../core_api/routes/public/test_task_instances.py | 210 +++
.../routes/public/test_task_state_store.py | 14 +
.../api_fastapi/core_api/routes/ui/test_config.py | 62 -
.../cli/commands/test_dag_processor_command.py | 58 +
.../tests/unit/dag_processing/fake_importers.py | 15 +-
.../tests/unit/dag_processing/fake_lang_sdk.py | 84 +-
.../unit/dag_processing/fake_lang_sdk_runtime.py | 218 ---
.../tests/unit/dag_processing/test_collection.py | 347 ++++-
.../tests/unit/dag_processing/test_dagbag.py | 173 ++-
.../unit/dag_processing/test_lang_sdk_processor.py | 578 ++++++++
.../tests/unit/dag_processing/test_manager.py | 196 ++-
.../tests/unit/dag_processing/test_processor.py | 497 +------
...est_0049_remove_pickled_data_from_xcom_table.py | 237 ----
...t_0055_remove_pickled_data_from_dagrun_table.py | 143 --
.../test_0080_deadline_callback_migration.py | 268 ----
.../test_0094_deadline_callback_migration.py | 178 ---
.../test_0117_deadline_interval_json_migration.py | 91 --
...9_add_indexes_on_serialized_dag_and_dag_code.py | 55 -
.../migrations/test_0131_lower_case_team_names.py | 138 --
.../test_0136_fold_task_map_into_xcom.py | 184 ---
...t_0138_allocate_pending_task_attempt_numbers.py | 448 -------
airflow-core/tests/unit/models/test_dagcode.py | 36 +-
.../tests/unit/plugins/test_plugins_manager.py | 61 +
.../unit/serialization/test_dag_serialization.py | 132 +-
.../unit/timetables/test_trigger_timetable.py | 7 +
airflow-core/tests/unit/utils/test_cli_util.py | 56 +
.../src/airflowctl/api/datamodels/generated.py | 21 +
airflow-ctl/src/airflowctl/api/operations.py | 2 +-
.../tests/airflow_ctl/api/test_operations.py | 19 +-
.../go_sdk_tests/test_go_sdk_taskflow_binding.py | 72 +-
dev/breeze/doc/03_developer_tasks.rst | 44 +-
dev/breeze/doc/04_troubleshooting.rst | 11 +
dev/breeze/doc/05_test_commands.rst | 14 +
dev/breeze/doc/ci/04_selective_checks.md | 12 +-
dev/breeze/doc/images/output-commands.svg | 165 ++-
dev/breeze/doc/images/output_cleanup.svg | 2 +-
dev/breeze/doc/images/output_cleanup.txt | 2 +-
dev/breeze/doc/images/output_down.svg | 48 +-
dev/breeze/doc/images/output_down.txt | 2 +-
dev/breeze/doc/images/output_run.svg | 45 +-
dev/breeze/doc/images/output_run.txt | 2 +-
dev/breeze/doc/images/output_shell.svg | 285 ++--
dev/breeze/doc/images/output_shell.txt | 2 +-
dev/breeze/doc/images/output_start-airflow.svg | 237 ++--
dev/breeze/doc/images/output_start-airflow.txt | 2 +-
.../doc/images/output_testing_core-tests.svg | 145 +-
.../doc/images/output_testing_core-tests.txt | 2 +-
.../doc/images/output_testing_providers-tests.svg | 161 ++-
.../doc/images/output_testing_providers-tests.txt | 2 +-
.../src/airflow_breeze/commands/common_options.py | 10 +-
.../airflow_breeze/commands/developer_commands.py | 52 +-
.../commands/developer_commands_config.py | 2 +-
.../src/airflow_breeze/commands/main_command.py | 23 +-
.../airflow_breeze/commands/testing_commands.py | 12 +-
.../commands/testing_commands_config.py | 5 +-
dev/breeze/src/airflow_breeze/global_constants.py | 15 +-
.../src/airflow_breeze/params/shell_params.py | 17 +-
.../airflow_breeze/utils/docker_command_utils.py | 248 ++--
dev/breeze/src/airflow_breeze/utils/path_utils.py | 10 +-
.../src/airflow_breeze/utils/selective_checks.py | 4 -
dev/breeze/tests/test_developer_commands.py | 38 +-
dev/breeze/tests/test_docker_command_utils.py | 487 +++++--
dev/breeze/tests/test_selective_checks.py | 56 +-
dev/breeze/tests/test_shell_params.py | 82 ++
.../src/tests_common/test_utils/mock_plugins.py | 42 +-
generated/known_sdk_imports_in_core.txt | 3 +-
generated/provider_metadata.json | 496 ++++---
go-sdk/.pre-commit-config.yaml | 7 +
go-sdk/README.md | 14 +-
go-sdk/adr/0006-cross-language-argument-binding.md | 15 +-
.../adr/0007-mixed-lang-task-handler-interface.md | 6 +-
go-sdk/airflow/bundle.go | 20 +-
go-sdk/airflow/task_handler.go | 10 +-
go-sdk/airflow/task_handler_test.go | 6 +-
.../cmd/airflow-go-pack/pack_integration_test.go | 4 +-
go-sdk/dags/go_examples.py | 28 +-
.../bundle/concurrentxcom/concurrentxcom_test.go | 2 +-
go-sdk/example/bundle/main.go | 14 +-
.../bundle/taskflowbinding/taskflowbinding.go | 61 +-
.../bundle/taskflowbinding/taskflowbinding_test.go | 44 +-
go-sdk/internal/bundle/task.go | 2 +-
go-sdk/pkg/binding/binding.go | 56 +-
go-sdk/pkg/binding/binding_test.go | 106 +-
go-sdk/pkg/execution/client.go | 22 +-
go-sdk/pkg/execution/client_test.go | 6 +-
go-sdk/pkg/execution/comms.go | 13 +-
go-sdk/pkg/execution/comms_test.go | 10 +-
go-sdk/pkg/execution/integration_test.go | 14 +-
go-sdk/pkg/execution/messages.go | 6 +-
go-sdk/pkg/execution/messages_test.go | 4 +-
go-sdk/sdk/sdk.go | 4 +-
.../org/apache/airflow/sdk/BuilderProcessor.kt | 39 +-
.../kotlin/org/apache/airflow/sdk/BuilderTest.kt | 103 +-
java-sdk/sdk/build.gradle.kts | 18 +-
.../src/main/kotlin/org/apache/airflow/sdk/Arg.kt | 2 +-
.../main/kotlin/org/apache/airflow/sdk/Context.kt | 11 +-
.../main/kotlin/org/apache/airflow/sdk/DagDef.kt | 17 +-
.../org/apache/airflow/sdk/execution/Task.kt | 2 +-
.../org/apache/airflow/sdk/internal/ArgValues.kt | 74 +-
.../org/apache/airflow/sdk/internal/TaskArgs.kt | 14 +-
.../org/apache/airflow/sdk/ArgTestSupport.kt | 2 +-
.../kotlin/org/apache/airflow/sdk/DagDefTest.kt | 57 +
.../kotlin/org/apache/airflow/sdk/InputTaskTest.kt | 41 +
.../apache/airflow/sdk/internal/ArgValuesTest.kt | 70 +-
providers/amazon/docs/index.rst | 2 +
providers/amazon/docs/operators/duckdb.rst | 180 +++
providers/amazon/docs/operators/ecs.rst | 35 +
.../amazon/docs/operators/emr/emr_serverless.rst | 23 +
providers/amazon/provider.yaml | 31 +
providers/amazon/pyproject.toml | 9 +-
.../airflow/providers/amazon/aws/hooks/duckdb.py | 277 ++++
.../src/airflow/providers/amazon/aws/hooks/emr.py | 51 +
.../src/airflow/providers/amazon/aws/hooks/s3.py | 8 +-
.../airflow/providers/amazon/aws/operators/ecs.py | 3 +
.../airflow/providers/amazon/aws/operators/emr.py | 112 ++
.../airflow/providers/amazon/aws/triggers/emr.py | 48 +
.../amazon/aws/waiters/emr-serverless.json | 37 +
.../airflow/providers/amazon/get_provider_info.py | 23 +
.../{example_gcs_to_s3.py => example_duckdb.py} | 120 +-
.../amazon/aws/example_emr_serverless_session.py | 103 ++
.../tests/unit/amazon/aws/hooks/test_duckdb.py | 307 +++++
.../unit/amazon/aws/hooks/test_emr_serverless.py | 57 +
.../amazon/tests/unit/amazon/aws/hooks/test_s3.py | 19 +
.../aws/operators/test_emr_serverless_session.py | 137 ++
.../tests/unit/amazon/aws/triggers/test_emr.py | 60 +
providers/common/ai/docs/agent_security.rst | 32 +-
providers/common/ai/docs/approval_gates.rst | 5 +
providers/common/ai/docs/changelog.rst | 14 +
providers/common/ai/docs/classifier_models.rst | 5 +
providers/common/ai/docs/code_mode.rst | 5 +
providers/common/ai/docs/connections/langchain.rst | 5 +
.../common/ai/docs/connections/llamaindex.rst | 5 +
providers/common/ai/docs/durable_execution.rst | 19 +-
providers/common/ai/docs/frameworks/adk.rst | 109 ++
providers/common/ai/docs/frameworks/index.rst | 87 +-
.../common/ai/docs/frameworks/pydantic_ai.rst | 78 ++
providers/common/ai/docs/frameworks/strands.rst | 96 +-
providers/common/ai/docs/guardrails.rst | 6 +
providers/common/ai/docs/hooks/langchain.rst | 5 +
providers/common/ai/docs/hooks/llamaindex.rst | 5 +
providers/common/ai/docs/index.rst | 1 +
providers/common/ai/docs/observability.rst | 119 +-
providers/common/ai/docs/operators/agent.rst | 58 +-
.../common/ai/docs/operators/document_loader.rst | 5 +
.../ai/docs/operators/llamaindex_embedding.rst | 5 +
.../ai/docs/operators/llamaindex_retrieval.rst | 5 +
providers/common/ai/docs/operators/llm.rst | 35 +-
providers/common/ai/docs/operators/llm_batch.rst | 5 +
providers/common/ai/docs/operators/llm_branch.rst | 5 +
.../common/ai/docs/operators/llm_file_analysis.rst | 5 +
.../ai/docs/operators/llm_schema_compare.rst | 5 +
providers/common/ai/docs/operators/llm_sql.rst | 5 +
providers/common/ai/docs/rag_pipelines.rst | 5 +
providers/common/ai/docs/retry_policies.rst | 21 +-
providers/common/ai/docs/sandbox/backends.rst | 5 +
providers/common/ai/docs/sandbox/configuration.rst | 5 +
providers/common/ai/docs/sandbox/index.rst | 39 +
providers/common/ai/docs/stability.rst | 188 +++
providers/common/ai/docs/tool_approval.rst | 5 +
providers/common/ai/docs/toolsets/datafusion.rst | 5 +
providers/common/ai/docs/toolsets/hook.rst | 60 +-
providers/common/ai/docs/toolsets/index.rst | 13 +-
providers/common/ai/docs/toolsets/langchain.rst | 39 +-
providers/common/ai/docs/toolsets/logging.rst | 5 +
.../common/ai/docs/toolsets/managed_agent.rst | 9 +-
.../common/ai/docs/toolsets/object_storage.rst | 124 ++
providers/common/ai/docs/toolsets/skills.rst | 5 +
providers/common/ai/provider.yaml | 1 +
.../airflow/providers/common/ai/batch/__init__.py | 2 +-
.../airflow/providers/common/ai/batch/anthropic.py | 5 +
.../src/airflow/providers/common/ai/batch/base.py | 10 +
.../airflow/providers/common/ai/batch/dispatch.py | 5 +
.../airflow/providers/common/ai/batch/openai.py | 5 +
.../providers/common/ai/decorators/llm_batch.py | 5 +
.../common/ai/decorators/llm_file_analysis.py | 5 +
.../common/ai/decorators/llm_schema_compare.py | 5 +
.../providers/common/ai/decorators/llm_sql.py | 5 +
.../airflow/providers/common/ai/durable/base.py | 19 +-
.../providers/common/ai/durable/caching_model.py | 122 +-
.../providers/common/ai/durable/caching_toolset.py | 47 +-
.../providers/common/ai/durable/replay_usage.py | 240 ++++
.../providers/common/ai/durable/step_counter.py | 4 +
.../airflow/providers/common/ai/durable/storage.py | 16 +-
.../common/ai/durable/task_state_store.py | 16 +-
.../common/ai/example_dags/example_adk_agent.py | 105 ++
.../example_dags/example_object_storage_toolset.py | 48 +
.../ai/example_dags/example_pydantic_ai_agent.py | 72 +
.../ai/example_dags/example_strands_agent.py | 38 +-
.../airflow/providers/common/ai/hooks/langchain.py | 5 +
.../providers/common/ai/hooks/llamaindex.py | 5 +
.../airflow/providers/common/ai/operators/agent.py | 438 +++++--
.../common/ai/operators/document_loader.py | 5 +
.../common/ai/operators/llamaindex_embedding.py | 5 +
.../common/ai/operators/llamaindex_retrieval.py | 5 +
.../airflow/providers/common/ai/operators/llm.py | 3 +-
.../providers/common/ai/operators/llm_batch.py | 5 +
.../providers/common/ai/operators/llm_branch.py | 6 +-
.../common/ai/operators/llm_file_analysis.py | 5 +
.../common/ai/operators/llm_schema_compare.py | 5 +
.../providers/common/ai/operators/llm_sql.py | 5 +
.../providers/common/ai/policies/decision.py | 11 +
.../airflow/providers/common/ai/policies/retry.py | 17 +-
.../airflow/providers/common/ai/sandbox/base.py | 15 +
.../airflow/providers/common/ai/sandbox/modal.py | 5 +
.../providers/common/ai/sandbox/opensandbox.py | 5 +
.../airflow/providers/common/ai/sandbox/output.py | 6 +-
.../src/airflow/providers/common/ai/sandbox/sbx.py | 5 +
.../ai/src/airflow/providers/common/ai/skills.py | 5 +
.../airflow/providers/common/ai/tools/__init__.py | 121 +-
.../providers/common/ai/tools/_from_toolset.py | 209 ++-
.../src/airflow/providers/common/ai/tools/adk.py | 112 ++
.../airflow/providers/common/ai/tools/strands.py | 107 +-
.../airflow/providers/common/ai/tools/tracing.py | 192 +++
.../providers/common/ai/toolsets/__init__.py | 2 +
.../providers/common/ai/toolsets/datafusion.py | 31 +-
.../airflow/providers/common/ai/toolsets/hook.py | 84 +-
.../common/ai/toolsets/langchain_bridge.py | 163 +--
.../providers/common/ai/toolsets/logging.py | 9 +-
.../providers/common/ai/toolsets/managed_agent.py | 28 +-
.../airflow/providers/common/ai/toolsets/mcp.py | 35 +-
.../providers/common/ai/toolsets/object_storage.py | 384 ++++++
.../providers/common/ai/toolsets/sandbox.py | 124 +-
.../airflow/providers/common/ai/toolsets/skills.py | 5 +
.../airflow/providers/common/ai/toolsets/sql.py | 59 +-
.../providers/common/ai/triggers/llm_batch.py | 5 +
.../providers/common/ai/utils/file_analysis.py | 123 +-
.../airflow/providers/common/ai/utils/logging.py | 42 +-
.../airflow/providers/common/ai/utils/masking.py | 120 ++
.../providers/common/ai/utils/query_results.py | 7 +-
.../providers/common/ai/utils/tool_definition.py | 13 +-
.../providers/common/ai/utils/tool_metrics.py | 63 +
.../providers/common/ai/utils/toolset_base.py | 250 ++++
.../providers/common/ai/utils/usage_budget.py | 214 +++
.../tests/unit/common/ai/decorators/test_agent.py | 9 +-
.../unit/common/ai/durable/test_caching_model.py | 252 +++-
.../unit/common/ai/durable/test_caching_toolset.py | 36 +-
.../unit/common/ai/durable/test_replay_cost.py | 171 ++-
.../unit/common/ai/durable/test_replay_usage.py | 114 ++
.../tests/unit/common/ai/durable/test_storage.py | 9 +
.../common/ai/durable/test_task_state_store.py | 22 +-
.../tests/unit/common/ai/operators/test_agent.py | 1381 +++++++++++++++++++-
.../ai/operators/test_agent_tool_approval.py | 45 +-
.../unit/common/ai/tools/test__from_toolset.py | 229 +++-
.../ai/tests/unit/common/ai/tools/test_adk.py | 157 +++
.../ai/tests/unit/common/ai/tools/test_strands.py | 170 ++-
.../ai/tests/unit/common/ai/tools/test_tools.py | 94 +-
.../ai/tests/unit/common/ai/tools/test_tracing.py | 230 ++++
.../unit/common/ai/toolsets/test_datafusion.py | 16 +-
.../ai/tests/unit/common/ai/toolsets/test_hook.py | 167 ++-
.../common/ai/toolsets/test_langchain_bridge.py | 58 +-
.../ai/tests/unit/common/ai/toolsets/test_mcp.py | 8 +
.../unit/common/ai/toolsets/test_object_storage.py | 416 ++++++
.../tests/unit/common/ai/toolsets/test_sandbox.py | 164 ++-
.../ai/tests/unit/common/ai/toolsets/test_sql.py | 54 +
.../unit/common/ai/utils/test_file_analysis.py | 27 +-
.../ai/tests/unit/common/ai/utils/test_logging.py | 77 ++
.../ai/tests/unit/common/ai/utils/test_masking.py | 117 ++
.../unit/common/ai/utils/test_query_results.py | 9 +
.../unit/common/ai/utils/test_tool_definition.py | 21 +-
.../unit/common/ai/utils/test_tool_metrics.py | 179 +++
.../unit/common/ai/utils/test_toolset_base.py | 281 ++++
.../unit/common/ai/utils/test_usage_budget.py | 242 ++++
providers/duckdb/docs/operators.rst | 6 +
.../src/airflow/providers/duckdb/hooks/duckdb.py | 6 +-
.../airflow/providers/duckdb/operators/duckdb.py | 48 +-
.../tests/unit/duckdb/operators/test_duckdb.py | 33 +-
.../fab/src/airflow/providers/fab/www/views.py | 6 +-
providers/fab/tests/unit/fab/www/test_views.py | 21 +-
providers/openai/docs/changelog.rst | 19 +
.../src/airflow/providers/openai/exceptions.py | 11 +
.../src/airflow/providers/openai/hooks/openai.py | 50 +-
.../airflow/providers/openai/operators/openai.py | 63 +-
.../airflow/providers/openai/triggers/openai.py | 19 +-
.../openai/tests/unit/openai/hooks/test_openai.py | 36 +
.../tests/unit/openai/operators/test_openai.py | 114 +-
.../openai/tests/unit/openai/test_exceptions.py | 15 +-
.../tests/unit/openai/triggers/test_openai.py | 47 +-
scripts/ci/docker-compose/backend-mysql.yml | 6 +
scripts/ci/docker-compose/backend-postgres.yml | 10 +-
scripts/ci/docker-compose/base.yml | 9 +
.../ci/docker-compose/integration-cassandra.yml | 5 +
scripts/ci/docker-compose/integration-celery.yml | 8 +
scripts/ci/docker-compose/integration-drill.yml | 5 +
.../docker-compose/integration-elasticsearch.yml | 5 +
scripts/ci/docker-compose/integration-kafka.yml | 2 +
scripts/ci/docker-compose/integration-kerberos.yml | 7 +
scripts/ci/docker-compose/integration-keycloak.yml | 2 +
.../ci/docker-compose/integration-localstack.yml | 2 +
scripts/ci/docker-compose/integration-mongo.yml | 5 +
scripts/ci/docker-compose/integration-mssql.yml | 5 +
.../ci/docker-compose/integration-openlineage.yml | 5 +
.../ci/docker-compose/integration-opensearch.yml | 5 +
scripts/ci/docker-compose/integration-otel.yml | 11 +
scripts/ci/docker-compose/integration-pinot.yml | 2 +
scripts/ci/docker-compose/integration-qdrant.yml | 2 +
scripts/ci/docker-compose/integration-redis.yml | 7 +
scripts/ci/docker-compose/integration-statsd.yml | 8 +
.../ci/docker-compose/integration-tinkerpop.yml | 5 +
scripts/ci/docker-compose/integration-trino.yml | 5 +
scripts/ci/docker-compose/integration-ydb.yml | 2 +
scripts/ci/docker-compose/local-all-sources.yml | 6 +
scripts/ci/docker-compose/local.yml | 6 +
.../ci/lang_sdk_serialization}/__init__.py | 0
scripts/ci/lang_sdk_serialization/compare.py | 233 ++++
.../ci/lang_sdk_serialization/serialize_python.py | 140 ++
scripts/ci/lang_sdk_serialization/test_dags.yaml | 166 +++
.../in_container/run_provider_yaml_files_check.py | 2 +
.../tests/ci/lang_sdk_serialization}/__init__.py | 0
.../ci/lang_sdk_serialization/test_compare.py | 245 ++++
.../configuration/secrets_backends.py | 88 --
shared/dagnode/src/airflow_shared/dagnode/cycle.py | 73 ++
shared/dagnode/tests/dagnode/test_cycle.py | 87 ++
.../observability/metrics/metrics_template.yaml | 13 +-
task-sdk/src/airflow/sdk/bases/operator.py | 69 +-
task-sdk/src/airflow/sdk/configuration.py | 10 +-
.../airflow/sdk/coordinators/_bundle_metadata.py | 9 +-
.../src/airflow/sdk/coordinators/_dag_importer.py | 75 +-
.../src/airflow/sdk/coordinators/_materialize.py | 291 -----
.../src/airflow/sdk/coordinators/_subprocess.py | 33 +-
.../airflow/sdk/coordinators/java/_dag_importer.py | 9 +-
.../sdk/coordinators/node/_bundle_reader.py | 210 ++-
.../airflow/sdk/coordinators/node/_dag_importer.py | 12 +-
task-sdk/src/airflow/sdk/definitions/dag.py | 41 +-
.../airflow/sdk/execution_time/secrets/__init__.py | 9 +-
.../src/airflow/sdk/execution_time/supervisor.py | 3 +-
.../src/airflow/sdk/execution_time/task_runner.py | 37 +-
task-sdk/src/airflow/sdk/importers/base.py | 12 +-
.../src/airflow/sdk/importers/python_importer.py | 2 +-
task-sdk/src/airflow/sdk/importers/zip_importer.py | 2 +-
task-sdk/tests/task_sdk/bases/test_operator.py | 171 +++
.../coordinators/fixtures/ts_conformance.json | 1324 +++++++++----------
.../coordinators/fixtures/ts_native_rich.json | 220 ----
.../coordinators/java/test_dag_importer.py | 14 +
.../coordinators/node/_bundle_test_utils.py | 55 +-
.../coordinators/node/test_bundle_reader.py | 125 +-
.../coordinators/node/test_dag_importer.py | 38 +-
.../task_sdk/coordinators/test_dag_importer.py | 102 +-
.../task_sdk/coordinators/test_materialize.py | 245 ----
.../tests/task_sdk/coordinators/test_subprocess.py | 38 +
.../tests/task_sdk/execution_time/test_context.py | 13 +-
.../tests/task_sdk/execution_time/test_secrets.py | 3 +-
.../task_sdk/execution_time/test_task_runner.py | 116 ++
.../tests/task_sdk/importers/test_zip_importer.py | 3 +-
ts-sdk/.pre-commit-config.yaml | 14 +
ts-sdk/.prettierignore | 6 -
ts-sdk/package.json | 3 +-
ts-sdk/pnpm-lock.yaml | 27 +-
.../scripts/ci/prek/check_conformance_recording.py | 66 -
..._lint.py => check_serialization_conformance.py} | 16 +-
ts-sdk/src/cli/bundle-encoder.ts | 181 ++-
ts-sdk/src/cli/pack.ts | 140 +-
ts-sdk/src/coordinator/client.ts | 53 +
ts-sdk/src/coordinator/manifest.ts | 24 +-
ts-sdk/src/coordinator/protocol.ts | 8 +
ts-sdk/src/coordinator/runtime.ts | 27 +-
ts-sdk/src/coordinator/serde.ts | 183 +--
ts-sdk/src/coordinator/trigger-runner.ts | 239 ++++
ts-sdk/src/index.ts | 7 +-
ts-sdk/src/sdk/bundle.ts | 19 +
ts-sdk/src/sdk/cycle.ts | 89 --
ts-sdk/src/sdk/dag.ts | 260 ++--
ts-sdk/src/sdk/module-source.ts | 74 ++
ts-sdk/src/sdk/operators.ts | 151 ---
ts-sdk/src/sdk/trigger-dag-run.ts | 215 +++
ts-sdk/tests/cli/fixtures/bundle-v1.min.mjs | 6 +-
ts-sdk/tests/cli/pack.test.ts | 323 ++++-
ts-sdk/tests/conformance/fixtures.ts | 162 ---
ts-sdk/tests/conformance/serialize_python.py | 181 ---
ts-sdk/tests/conformance/serialize_typescript.ts | 176 ++-
ts-sdk/tests/conformance/serialized_python.json | 638 ---------
ts-sdk/tests/conformance/test_dags.json | 249 ----
ts-sdk/tests/coordinator/conformance.test.ts | 153 ---
ts-sdk/tests/coordinator/integration.test.ts | 354 ++++-
ts-sdk/tests/coordinator/runtime-manifest.test.ts | 26 +
ts-sdk/tests/coordinator/serde.test.ts | 51 +-
ts-sdk/tests/public-api.test.ts | 10 +-
ts-sdk/tests/sdk/cycle.test.ts | 104 --
ts-sdk/tests/sdk/dag.test.ts | 235 ++--
.../{operators.test.ts => trigger-dag-run.test.ts} | 169 ++-
uv.lock | 8 +-
477 files changed, 24093 insertions(+), 11522 deletions(-)
delete mode 100644 .apache-magpie-overrides/committer-onboarding-config.md
delete mode 100644 .apache-magpie-overrides/committer-readiness.md
delete mode 100644 .apache-magpie-overrides/contributor-nomination-config.md
delete mode 100644 .apache-magpie-overrides/contributor-sentiment-config.md
delete mode 100644 .apache-magpie-overrides/good-first-issue-config.md
delete mode 100644 .apache-magpie-overrides/onboarding-concierge-config.md
create mode 100644 airflow-core/adr/lang-sdk/0010-native-dag-processing.md
create mode 100644
airflow-core/adr/lang-sdk/0011-mixed-language-dag-processing.md
create mode 100644 airflow-core/adr/lang-sdk/0012-lang-sdk-parse-protocol.md
create mode 100644
airflow-core/adr/lang-sdk/0013-persisted-task-handler-bindings.md
create mode 100644
airflow-core/adr/lang-sdk/0014-bundle-metadata-and-cache-digest.md
create mode 100644
airflow-core/adr/lang-sdk/0015-per-dag-source-in-bundle-artifact.md
delete mode 100644 airflow-core/newsfragments/70681.significant.rst
create mode 100644 airflow-core/newsfragments/72100.significant.rst
create mode 100644
airflow-core/src/airflow/api_fastapi/common/parameters/job.py
create mode 100644
airflow-core/src/airflow/dag_processing/lang_sdk_processor.py
create mode 100644
airflow-core/src/airflow/ui/src/components/Clear/TaskInstance/ClearTaskInstanceDialog.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/pages/TaskInstance/Details.test.tsx
copy airflow-core/src/airflow/ui/src/{components/StateBadge.tsx =>
pages/TaskInstance/stateReason.ts} (54%)
delete mode 100644
airflow-core/src/airflow/ui/src/pages/Variables/BackendsOrderCard.tsx
delete mode 100644
airflow-core/src/airflow/ui/src/pages/Variables/BackendsOrderModal.tsx
delete mode 100644
airflow-core/tests/unit/dag_processing/fake_lang_sdk_runtime.py
create mode 100644
airflow-core/tests/unit/dag_processing/test_lang_sdk_processor.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0049_remove_pickled_data_from_xcom_table.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0055_remove_pickled_data_from_dagrun_table.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0080_deadline_callback_migration.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0094_deadline_callback_migration.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0117_deadline_interval_json_migration.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0129_add_indexes_on_serialized_dag_and_dag_code.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0131_lower_case_team_names.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0136_fold_task_map_into_xcom.py
delete mode 100644
airflow-core/tests/unit/migrations/test_0138_allocate_pending_task_attempt_numbers.py
create mode 100644 providers/amazon/docs/operators/duckdb.rst
create mode 100644
providers/amazon/src/airflow/providers/amazon/aws/hooks/duckdb.py
copy providers/amazon/tests/system/amazon/aws/{example_gcs_to_s3.py =>
example_duckdb.py} (52%)
create mode 100644
providers/amazon/tests/system/amazon/aws/example_emr_serverless_session.py
create mode 100644 providers/amazon/tests/unit/amazon/aws/hooks/test_duckdb.py
create mode 100644
providers/amazon/tests/unit/amazon/aws/operators/test_emr_serverless_session.py
create mode 100644 providers/common/ai/docs/frameworks/adk.rst
create mode 100644 providers/common/ai/docs/frameworks/pydantic_ai.rst
create mode 100644 providers/common/ai/docs/stability.rst
create mode 100644 providers/common/ai/docs/toolsets/object_storage.rst
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/durable/replay_usage.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_adk_agent.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_object_storage_toolset.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/example_dags/example_pydantic_ai_agent.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/tools/adk.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/tools/tracing.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/toolsets/object_storage.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/masking.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/tool_metrics.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/toolset_base.py
create mode 100644
providers/common/ai/src/airflow/providers/common/ai/utils/usage_budget.py
create mode 100644
providers/common/ai/tests/unit/common/ai/durable/test_replay_usage.py
create mode 100644 providers/common/ai/tests/unit/common/ai/tools/test_adk.py
create mode 100644
providers/common/ai/tests/unit/common/ai/tools/test_tracing.py
create mode 100644
providers/common/ai/tests/unit/common/ai/toolsets/test_object_storage.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_masking.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_tool_metrics.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_toolset_base.py
create mode 100644
providers/common/ai/tests/unit/common/ai/utils/test_usage_budget.py
copy {airflow-core/src/airflow/_shared =>
scripts/ci/lang_sdk_serialization}/__init__.py (100%)
create mode 100644 scripts/ci/lang_sdk_serialization/compare.py
create mode 100644 scripts/ci/lang_sdk_serialization/serialize_python.py
create mode 100644 scripts/ci/lang_sdk_serialization/test_dags.yaml
copy {airflow-core/src/airflow/_shared =>
scripts/tests/ci/lang_sdk_serialization}/__init__.py (100%)
create mode 100644 scripts/tests/ci/lang_sdk_serialization/test_compare.py
delete mode 100644
shared/configuration/src/airflow_shared/configuration/secrets_backends.py
create mode 100644 shared/dagnode/src/airflow_shared/dagnode/cycle.py
create mode 100644 shared/dagnode/tests/dagnode/test_cycle.py
delete mode 100644 task-sdk/src/airflow/sdk/coordinators/_materialize.py
delete mode 100644
task-sdk/tests/task_sdk/coordinators/fixtures/ts_native_rich.json
delete mode 100644 task-sdk/tests/task_sdk/coordinators/test_materialize.py
delete mode 100755 ts-sdk/scripts/ci/prek/check_conformance_recording.py
copy ts-sdk/scripts/ci/prek/{ts_sdk_lint.py =>
check_serialization_conformance.py} (67%)
create mode 100644 ts-sdk/src/coordinator/trigger-runner.ts
delete mode 100644 ts-sdk/src/sdk/cycle.ts
create mode 100644 ts-sdk/src/sdk/module-source.ts
delete mode 100644 ts-sdk/src/sdk/operators.ts
create mode 100644 ts-sdk/src/sdk/trigger-dag-run.ts
delete mode 100644 ts-sdk/tests/conformance/fixtures.ts
delete mode 100644 ts-sdk/tests/conformance/serialize_python.py
delete mode 100644 ts-sdk/tests/conformance/serialized_python.json
delete mode 100644 ts-sdk/tests/conformance/test_dags.json
delete mode 100644 ts-sdk/tests/coordinator/conformance.test.ts
delete mode 100644 ts-sdk/tests/sdk/cycle.test.ts
rename ts-sdk/tests/sdk/{operators.test.ts => trigger-dag-run.test.ts} (60%)