Skip to content

Releases: polyai/adk

v0.26.0

19 Jun 13:35
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.26.0 (2026-06-19)

This release is published under the Apache-2.0 License.

Documentation

Summary

Motivation

Closes #

Changes

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [x] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [ ] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [ ] Commit messages follow conventional commits

Screenshots / Logs

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

Features

  • Send X-Poly-Source header on all API requests (#196, e48e963)

Summary

Adds the X-Poly-Source: adk header to all outbound API requests so the platform can identify traffic originating from the ADK CLI.

Motivation

Enables the platform team to distinguish ADK-originated requests from other API consumers for analytics, debugging, and rate-limiting purposes.

Changes

  • Added X-Poly-Source: adk header to PlatformAPIHandler.make_request (API-key auth path) - Added X-Poly-Source: adk header to JWT-authenticated endpoints (push_resource, push_function, publish_agent) - Added X-Poly-Source: adk header to get_conversation_logs - Added X-Poly-Source: adk header to SourcererSDK request headers

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [x] Tested against a live Agent Studio project - [ ] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

Detailed Changes: v0.25.11...v0.26.0

v0.25.11

19 Jun 11:25
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.11 (2026-06-19)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Strip strings at YamlResource base level to eliminate phantom diffs (#195, 57a0904)

Summary

Eliminates phantom |-| diffs that persist after ad push by stripping whitespace from all string values at the YamlResource base class level, matching the platform's Zod .trim() behavior.

Motivation

After pushing, ad diff shows spurious changes like content: |-content: | because the platform trims all string fields but local YAML files can retain trailing newlines. This causes false is_modified() hash mismatches and confusing diff output.

Changes

  • Add _strip_strings() recursive helper in resource.py and wire it into YamlResource.raw, compute_hash, and to_pretty - Remove redundant per-resource .strip() calls from to_yaml_dict in flows.py and variant_attributes.py

Test strategy

  • Added/updated unit tests - [x] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

🤖 Generated with Claude Code

Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com


Detailed Changes: v0.25.10...v0.25.11

v0.25.10

17 Jun 14:16
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.10 (2026-06-17)

This release is published under the Apache-2.0 License.

Bug Fixes

  • [docs] bottom-panel loop-backs across docs (#193, 0f56d55)

Summary

  • Replace backward-pointing "Related" / "Next steps" card links with forward-pointing ones across 6 pages so every bottom panel guides readers deeper into the docs - Fix examples/index.md which listed no actual examples — now links to all 3 example pages - Fix reference/branch_merge.md which was a complete navigation dead-end (all 4 links backward)

Pages changed

| Page | Problem | Fix | |------|---------|-----| | get-started/what-is-the-adk | 2 of 3 links loop back to get-started | Points forward to walkthrough, prerequisites, first-commands | | get-started/prerequisites | Only link goes back to get-started | Points forward to first-commands | | tutorials/build-an-agent | Links back to walkthrough video | Points forward to restaurant-booking tutorial + core concepts | | examples/index | No example links; 2 of 3 links backward | Lists all 3 example pages | | reference/tooling | Both links backward | Points forward to agent_settings, flows, functions | | reference/branch_merge | All 4 links backward (dead end) | Points forward to tests, tooling + keeps multi-user cross-ref |

Test plan

  • Run mkdocs serve locally and verify bottom-panel "Previous/Next" navigation follows sidebar order - [ ] Click through all changed card links and confirm they resolve correctly - [ ] Verify no broken links introduced

🤖 Generated with Claude Code

Co-authored-by: Claude Opus 4.6 noreply@anthropic.com

Summary Bump experimental schema to latest version

Motivation

Keeps up to date

Changes

  • Add latests changes

Test strategy

  • Added/updated unit tests
  • Manual CLI testing (poly <command>)
  • Tested against a live Agent Studio project
  • N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass
  • pytest passes
  • No breaking changes to the poly CLI interface (or migration path documented)
  • Commit messages follow conventional commits

Detailed Changes: v0.25.9...v0.25.10

v0.25.9

17 Jun 12:44
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.9 (2026-06-17)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Add dataclass-aware YAML field type validation at parse time (#192, c871f34)

Summary

Adds automatic type validation for YAML resource fields at parse time, catching the colon-space footgun where unquoted strings silently parse as dicts.

Motivation

YAML values with unquoted mid-sentence colons (e.g., the outcome: either a time slot or...) silently parse as dicts instead of strings. This causes opaque TypeError: bad argument type for built-in operation from protobuf C code at push time — with no hint about which field or file caused it. A confirmed case in prompt_assertions burned ~7 push attempts before the user found the cause.

Supersedes #191 — moves the detection from project.py's generic error handler down to the YAML resource layer with field-level precision.

Changes

  • Add check_yaml_field_types() in resource.py using dataclasses.fields() + typing.get_type_hints() to introspect declared types and validate str / list[str] fields aren't dicts - Recurses into nested dataclass fields (catches e.g. TestCaseAssertion.prompts inside TestCase) - Hook into YamlResource.read_local_resource — all YAML resources get the check automatically - Hook into FlowStep and Pronunciation overriding read_local_resource methods - 6 unit tests covering str→dict, list[str]→dict, nested recursion, valid passthrough, Optional[str] None, and error message content

Test strategy

  • Added/updated unit tests - [x] Manual CLI testing (poly <command>) - [x] Tested against a live Agent Studio project - [ ] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

Screenshots / Logs

Example error output for the confirmed bug (test case with unquoted colon in prompt assertion):

ValueError: Error reading resource test_booking at test_suite/test_booking.yaml: 'assertions.prompts[1]' should be a string but got a dict.

🤖 Generated with Claude Code


Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com


Detailed Changes: v0.25.8...v0.25.9

v0.25.8

15 Jun 13:23
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.8 (2026-06-15)

This release is published under the Apache-2.0 License.

Bug Fixes

  • languages: Correct update command field for default_language (#190, ee9fceb)

Summary

Fixes a bug where changing a project's default_language via push always returned 422 — Protocol message Command has no "update_languages_update_default_language" field. DefaultLanguage now emits the correct languages_update_default_language Command field.

Motivation

Tracking: https://linear.app/poly-ai/issue/ORCH-309

Surfaced from Glot eval runs (lead-qualification, restaurant-booking, multilingual-payment-reminder): authoring an agent in a primary language other than the template default (en-GB) sent every build into a languages.yaml rewrite loop, because the default-language update could never push. Adding a locale to additional_languages worked; changing the default did not.

Root cause: DefaultLanguage.command_type already returns the full Command field name languages_update_default_language, but the base update_command_type derives the field as f"update_{command_type}", producing the nonexistent update_languages_update_default_language. sync_client then builds Command(**{update_type: build_update_proto()}) with that bad name and the proto rejects it. The payload (Languages_UpdateDefaultLanguage) was always correct — only the field name was wrong. AdditionalLanguage already overrides create_/delete_command_type for the same reason; DefaultLanguage was missing the matching update_command_type override.

Changes

  • DefaultLanguage: override update_command_type to return languages_update_default_language (no update_ prefix), mirroring AdditionalLanguage. - Add test_update_command_type_is_a_real_command_field: asserts the field name and constructs the Command the way sync_client does, so a future regression fails loudly.

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [ ] N/A (docs, config, or trivial change)

New test verified to fail without the fix (update_languages_update_default_language != languages_update_default_language) and pass with it.

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes (683 passed) - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits (fix: → patch)

Screenshots / Logs

Without the fix: FAILED ...::DefaultLanguageTests::test_update_command_type_is_a_real_command_field AssertionError: 'update_languages_update_default_language' != 'languages_update_default_language'

With the fix: 683 passed, 22 warnings, 30 subtests passed in 9.28s ruff check . -> All checks passed!

Co-authored-by: Claude Opus 4.8 (1M context) noreply@anthropic.com


Detailed Changes: v0.25.7...v0.25.8

v0.25.7

12 Jun 20:19
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.7 (2026-06-12)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Recursively copy integrations stubs into _gen/ (#188, 10bc608)

Summary

Fix save_imports to recursively copy subdirectories from poly.types into _gen/, so the integrations/ stubs are included.

Motivation

save_imports only iterated top-level .py files via pkg.iterdir(), skipping the integrations/ subdirectory added in #187. This meant conv.integrations had no type hints in Agent Studio.

Changes

  • Add _copy_types_tree helper that recursively walks the types package and copies .py files (including __init__.py) into _gen/ - Replace the flat iteration in save_imports with _copy_types_tree

Test strategy

  • Added/updated unit tests - [x] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [x] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes (682/682) - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com


Detailed Changes: v0.25.6...v0.25.7

v0.25.6

12 Jun 16:53
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.6 (2026-06-12)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Use relative imports in type stubs and add integrations stubs (#187, b365a46)

Summary

Fix type stubs to use relative imports and add integrations stubs.

Motivation

The stubs updated in #184 used absolute runtime. imports. When copied into _gen/, the rewriter regex didn't catch all forms, causing import errors. Also missing stubs for the integrations subpackage.

Changes

  • Replace from runtime.X importfrom .X import in all stubs - Expand import runtime.X as Y into direct name imports (from .X import A, B) - Add integrations stubs: Integration base class, Integrations facade, OpenTable, Tripleseat

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [x] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com


Detailed Changes: v0.25.5...v0.25.6

v0.25.5

12 Jun 15:20
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.5 (2026-06-12)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Preserve unicode characters in JSON output (#182, 1b2c099)

Summary

Prevents json.dumps from escaping Unicode characters (e.g. ') in experimental config and formatted JSON output.

Motivation

When pulling agent configs containing Unicode characters like smart quotes ('), the JSON serializer escapes them to \uXXXX sequences. This makes config files harder to read and creates noisy diffs.

Changes

  • Set ensure_ascii=False in ExperimentalConfig.raw property - Set ensure_ascii=False in format_json() utility

Test strategy

  • Added/updated unit tests - [x] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [x] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

Screenshots / Logs

diff - "step_footer": "If the user asks a follow-up question while you are waiting for an answer, answer the user’s question first..." + "step_footer": "If the user asks a follow-up question while you are waiting for an answer, answer the user's question first..."

🤖 Generated with Claude Code

Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com

Chores

  • Add sync script and update runtime type stubs (#184, 4a195ff)

Summary

Add a script to auto-generate type stubs from genai_lambda_runtime/python/runtime and update all stubs to match current source.

Motivation

The type stubs in src/poly/types/ were manually maintained and had drifted from the runtime source. These stubs are copied into _gen/ during poly pull to provide IDE autocomplete in Agent Studio. This adds an automated sync script so stubs can be regenerated with a single command.

Changes

  • Add scripts/sync_runtime_stubs.py — extracts public API signatures from runtime source, synthesizes __init__ for dataclasses, prunes unused imports, derives __all__ lists, and handles TYPE_CHECKING imports - Update all 10 existing stubs to match current runtime source - Add 5 new stubs: agentic_dial.py, emails.py, entity_validator.py, value_extraction_types.py, webchat.py - New types: WebchatInterface, ChatCallAction, AgenticDial, Destinations, OutgoingEmail, EntityValidationResult, entity config types - New Conversation properties: webchat, translations, provider_voice_id, integrations - New Conversation methods: goto_csat_flow, set_csat_*, send_content_template - Updated Utils.prompt_llm model list with GPT-4.1/5 and Claude models

Usage: python scripts/sync_runtime_stubs.py --runtime-path /path/to/genai_lambda_runtime/python/runtime

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [x] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com


Detailed Changes: v0.25.4...v0.25.5

v0.25.4

12 Jun 15:03
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.4 (2026-06-12)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Add global DTMF config to experimental_config schema (#185, 6f09c50)

Summary

  • Adds dtmf.global section to experimental_config_schema.yaml, syncing with poly_core#42747
  • Global DTMF enables digit collection on every turn; step-level DTMF takes precedence when enabled
  • New properties: is_enabled, max_digits, end_key, collect_while_agent_speaking

Jira: FDX-3768

Test plan

  • Existing ExperimentalConfigTests pass (schema validation + invalid config)

🤖 Generated with Claude Code

Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com

Summary

  • The GitHub Issues link in README.md pointed to PolyAI-LDN/adk which is inaccessible to public users
  • Updated to PolyAI/adk to match the actual public repository

Test plan

  • Verify the new link resolves to the correct repo

🤖 Generated with Claude Code

Co-authored-by: Claude Opus 4.6 (1M context) noreply@anthropic.com

  • Update README to remove Early Access information (#151, d6c61a0)

Removed Early Access section and prerequisites from README. as they both they we're in early access and API key needs to be requested from PolyAI

Summary

Motivation

Closes #

Changes

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [ ] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [ ] pytest passes - [ ] No breaking changes to the poly CLI interface (or migration path documented) - [ ] Commit messages follow conventional commits

Screenshots / Logs

Co-authored-by: Aaron Forinton 89849359+AaronForinton@users.noreply.github.com

Documentation

  • Fix(experimental-config): add payload (#183, 8067d78)

Summary

This is related to PR #171

Motivation

Closes #

Changes

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [x] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [ ] pytest passes - [x] No breaking changes to the poly CLI interface (or migration path documented) - [ ] Commit messages follow conventional commits

Screenshots / Logs

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

Summary

Motivation

Closes #

Changes

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [ ] N/A (docs, config, or trivial change)

Checklist

  • ruff check . and ruff format --check . pass - [ ] pytest passes - [ ] No breaking changes to the poly CLI interface (or migration path documented) - [ ] Commit messages follow conventional commits

Screenshots / Logs


Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>


Detailed Changes: v0.25.3...v0.25.4

v0.25.3

09 Jun 17:46
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

v0.25.3 (2026-06-09)

This release is published under the Apache-2.0 License.

Bug Fixes

  • Persist new test case prompt_assertions and tags on push (#177, 6c0f5e1)

Summary

A newly-created TestCase was pushed with its base fields only — its prompt_assertions and tags were silently dropped, so a pushpull round-trip lost them (the case came back with a scenario but no prompt_assertions).

Motivation

Surfaced in Glot, which authors test_suite/*.yaml cases, pushes, then runs them: after the projection round-trip the cases came back assertion-less, so the runner skipped them. The cases only "stuck" on a second push, once the case already existed.

Root cause: TestCase.get_new_updated_deleted_subresources returns its assertions and tags in the updated bucket even for a brand-new case — they have no create proto and are only settable via set_test_case_assertions / set_test_case_tags. But AgentStudioProject._get_updated_subresources only forwarded the new bucket for newly-created resources, so the set_test_case_assertions / set_test_case_tags commands were never emitted. The case landed in the projection with no assertions; pull (_read_test_cases_from_projection) faithfully reconstructed an assertion-less case.

Changes

  • _get_updated_subresources: for newly-created resources, forward the updated and deleted sub-resources too, not just new. Creates are already ordered before updates, so Create_TestCase is followed by set_test_case_assertions / set_test_case_tags. - This also fixes the same latent drop for a new Function's non-default latency_control, which is bucketed identically. - Adds GetUpdatedSubresourcesTest.test_new_test_case_emits_assertions_and_tags asserting a brand-new TestCase emits its assertions/tags in the updated change-set.

Test strategy

  • Added/updated unit tests - [ ] Manual CLI testing (poly <command>) - [ ] Tested against a live Agent Studio project - [ ] N/A (docs, config, or trivial change)

Couldn't run pytest locally (a ruamel namespace-package quirk in my env); the new test targets the exact buckets and CI exercises it.

Checklist

  • ruff check . and ruff format --check . pass - [x] pytest passes (verified via CI — see note above) - [x] No breaking changes to the poly CLI interface (or migration path documented) - [x] Commit messages follow conventional commits

Screenshots / Logs

Before: a freshly-authored test_suite/<name>.yaml round-trips (push→pull) with its scenario but no prompt_assertions. After: assertions and tags survive the round-trip.


Detailed Changes: v0.25.2...v0.25.3