feat(sdk): add shutdown() and ashutdown() lifecycle API#70
Merged
namrataghadi-galileo merged 3 commits intomainfrom Mar 9, 2026
Merged
feat(sdk): add shutdown() and ashutdown() lifecycle API#70namrataghadi-galileo merged 3 commits intomainfrom
namrataghadi-galileo merged 3 commits intomainfrom
Conversation
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
…internals - Split _fetch_controls_async() from refresh_controls_async() so the background worker can check stop_event after fetch, before publishing. This prevents an in-flight refresh from writing controls back into global state after shutdown() has logically completed. - Add sync_shutdown_observability() as a public API in the observability module; shutdown() now uses it instead of reaching into _batcher. - Extract _reset_state() helper to deduplicate state clearing in both shutdown() and ashutdown(). - Fix unused import (F401) and import ordering (I001) in test_shutdown.py. - Update test_policy_refresh_loop.py to patch _fetch_controls_async. - Add race regression tests for both sync and async shutdown paths.
lan17
requested changes
Mar 6, 2026
Contributor
lan17
left a comment
There was a problem hiding this comment.
The shutdown API is close, but there are still two lifecycle regressions in the refresh path that should be fixed before merge.
lan17
approved these changes
Mar 9, 2026
Contributor
lan17
left a comment
There was a problem hiding this comment.
Re-reviewed the updated lifecycle changes. The prior refresh/shutdown concerns appear addressed, and the current SDK tests pass locally.
namrataghadi-galileo
approved these changes
Mar 9, 2026
galileo-automation
pushed a commit
that referenced
this pull request
Mar 11, 2026
## [1.1.0](ts-sdk-v1.0.1...ts-sdk-v1.1.0) (2026-03-11) ### Features * **examples:** add Google ADK Agent Control examples ([#69](#69)) ([4b83542](4b83542)) * **infra:** publish UI image and add compose UI service ([#57](#57)) ([207c1af](207c1af)) * **sdk:** 57143 strands extra ([#59](#59)) ([97f2518](97f2518)) * **sdk:** add shutdown() and ashutdown() lifecycle API ([#70](#70)) ([9e29d86](9e29d86)) * **sdk:** migrate strands integration to be a plugin ([#74](#74)) ([897ece3](897ece3)) * **server:** enforce admin-only control-plane mutations ([#62](#62)) ([579407f](579407f)), closes [#61](#61) * **ui:** serve exported Agent Control UI from the FastAPI server ([#71](#71)) ([c140198](c140198)) ### Bug Fixes * **docs:** add centered logo, header, and badges to README ([#92](#92)) ([39c3cbf](39c3cbf)) * **docs:** Test all examples ([#16](#16)) ([39e95c2](39e95c2)) * **evaluators:** migrate sqlglot rs extra to sqlglot c ([#86](#86)) ([5e3e48c](5e3e48c)) * **infra:** fix docker compose to make ui work ([#82](#82)) ([5edbb6b](5edbb6b)) * **infra:** Remove UI service from docker-compose.yml ([#91](#91)) ([330ef55](330ef55)) * **sdk): Revert "fix(sdk:** bundle evaluators in sdk wheel" ([#90](#90)) ([b516ea6](b516ea6)), closes [#89](#89) * **sdk:** bundle evaluators in sdk wheel ([#89](#89)) ([ea5889a](ea5889a)) * **sdk:** fix observability events not reaching the server ([#63](#63)) ([70016db](70016db)) * **ui:** name update being saved now ([#87](#87)) ([919672d](919672d)) * **ui:** Step name not getting saved ([#68](#68)) ([13abef9](13abef9))
Collaborator
|
🎉 This PR is included in version 1.1.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
agent_control.shutdown()(sync) andagent_control.ashutdown()(async) for deterministic SDK teardown.init()This gives users a single, documented shutdown path instead of relying on best-effort
atexitbehavior - which is fragile for short-lived scripts, CLI tools, and demos.Implementation details
_fetch_controls_async()(fetch-only, no publish) so the refresh worker can check the stop event between fetch and publish, preventing zombie state writes after shutdown.sync_shutdown_observability()as a public API in the observability module;shutdown()uses it instead of reaching into_batcherinternals._reset_state()helper to deduplicate state clearing across both shutdown paths.Shortcut: sc-57753
Test plan
make sdk-lintmake sdk-typecheckmake sdk-test(all passed, pre-existing integration failures only)test_shutdown.pycovering sync/async paths, idempotency, no-init safety, and zombie refresh race regressiontest_policy_refresh_loop.pyto match new_fetch_controls_asynccall path (14 tests pass)