Skip to content

feat: add GetArtifactVersion method to artifact service - #575

Merged
hanorik merged 10 commits into
google:mainfrom
hanorik:get_artifact_version
Mar 25, 2026
Merged

hanorik merged 10 commits into
google:mainfrom
hanorik:get_artifact_version

Conversation

@hanorik

@hanorik hanorik commented Feb 17, 2026

Copy link
Copy Markdown
Contributor

Adds GetArtifactVersion method that returns the metadata for a specific artifact version. Includes implementations for both in-memory and GCS services, aligning Go capabilities with the existing Python service.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @hanorik, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the artifact service by introducing a new capability to fetch comprehensive metadata for individual artifact versions. This addition brings the Go artifact service into closer parity with its existing Python counterpart, providing richer information about stored artifacts, such as their canonical URI, custom metadata, and creation details. The change is implemented across both GCS and in-memory storage backends, ensuring consistent behavior and robust validation for requests.

Highlights

  • New GetArtifactVersion Method: Introduced a new GetArtifactVersion method to the artifact.Service interface, allowing retrieval of detailed metadata for a specific artifact version.
  • GCS Service Implementation: Implemented the GetArtifactVersion method for the GCS artifact service, which fetches artifact attributes from Google Cloud Storage, including canonical URI, custom metadata, creation time, and MIME type. It also handles retrieving the latest version if a specific version is not provided.
  • In-Memory Service Implementation: Provided an implementation for the GetArtifactVersion method in the in-memory artifact service, retrieving stored artifact metadata and determining its MIME type. Similar to GCS, it can find the latest version if none is specified.
  • Request and Response Types: Defined new data structures: ArtifactVersion to hold artifact metadata, GetArtifactVersionRequest for method parameters, and GetArtifactVersionResponse for the return type.
  • Request Validation and Testing: Added validation logic for GetArtifactVersionRequest to ensure all required fields are present and that the FileName does not contain path separators. Comprehensive unit tests were also added for this validation.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • artifact/gcsartifact/service.go
    • Added GetArtifactVersion method to gcsService to retrieve metadata for a specific artifact version from GCS.
    • Implemented logic to fetch blob attributes, construct canonical URIs, and extract custom metadata.
  • artifact/inmemory.go
    • Added GetArtifactVersion method to inMemoryService to retrieve metadata for a specific artifact version from in-memory storage.
    • Included logic to determine the artifact's MIME type based on its inline data.
  • artifact/request_validation_test.go
    • Added TestGetArtifactVersionRequest_Validate suite to test the validation rules for the new request type.
  • artifact/service.go
    • Added GetArtifactVersion method signature to the Service interface.
    • Defined ArtifactVersion struct to encapsulate artifact metadata.
    • Introduced GetArtifactVersionRequest struct for input parameters, including validation logic.
    • Created GetArtifactVersionResponse struct for the method's return value.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces the GetArtifactVersion method to the artifact service, complete with implementations for both GCS and in-memory backends, along with necessary request/response types and validation tests. The changes are well-implemented and align the Go service with existing capabilities. My feedback primarily focuses on improving long-term maintainability by identifying opportunities to reduce code duplication in both new service implementations. I've also pointed out a minor typo in a code comment for better clarity.

Comment thread artifact/gcsartifact/service.go
Comment thread artifact/inmemory.go
Comment thread artifact/service.go Outdated
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@hanorik
hanorik requested a review from mazas-google March 3, 2026 16:42
@hanorik
hanorik merged commit b8eb8c5 into google:main Mar 25, 2026
4 checks passed
@hanorik
hanorik deleted the get_artifact_version branch March 25, 2026 16:41
japerry911 added a commit to japerry911/adk-go that referenced this pull request Apr 1, 2026
* fix: enable llm variant for gemini 2.5 and below (google#562)

* fix: enable llm variant for gemini 2.5 and below

* chore: remove internal mutable session struct (google#572)

It does nothing, leftover from the refactoring.

* feat: Introduce Retry and Reflect plugin (google#564)

* Introduce Retry and Reflect pluging

* Address gemini-bot review comments

* Add some unit tests

* Run gofumpt -l -w .

* Improve the explanation of WithErrorIfRetryExceeded

* move guidances to templates

* feat: add MustNew func

---------

Co-authored-by: dpasiukevich <dpasiukevich@google.com>

* fix: format go.mod by direct and indirect dependencies (google#580)

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>

* feat: implement v2 trace debug endpoints based on semconv spans and logs (google#570)

* feat(telemetry): add logging setup options

* feat: Implement new debug endpoints

* Apply suggestions from code review

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* resolve review comments

* go mod tidy

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: improve telemetry GCP quota and resource projects validation to (google#584)

fail on whitespace

* feat: add otel structured logging (google#552)

* feat: Add OpenTelemetry structured logging for GenAI requests and responses.

* refactor: Align OpenTelemetry gen_ai event logging with ADK Python and clarify deviations from semconv.

* refactor: move logging to generateContent function

* refactor: rename logger to otelLogger

* feature: add genAICaptureMessageContent to telemetry.config and options

* refactor: update the logic behind guessAISystem

* add tests for log span propagation

* add logging tests to base_flow tests

* feat: Add genAICaptureMessageContent to the telemetry Providers struct initialization.

* feat(telemetry): add OTel logger initialization (google#573)

* feat(telemetry): add logging setup options

* fix flaky tests

* feat: add script for updating embedded adk-web (google#594)

* fix: runssehandler-causes-superfluous-responsewriteheader-on-errors (google#531)

* chore: Add a pull request template

* doc:pull_request_template

* refactor(doc):typo correction

* refactor(doc):apply suggestions

* refactor(doc):implement suggestions

* refactor(doc):add extra line

* feat: adka2a mode with artifact per non-partial event (google#599)

* implement alternative artifact production mode

* update artifact aggregation logic on remote agent

append=false, lastChunk=false: emit as partial, restart aggregation
append=false, lastChunk=true: emit as non partial, drop aggregation
append=true, lastChunk=false: emit as partial, update aggregation
append=true, lastChunk=true: emit as partial, update aggregation, emit aggregation as non partial, drop aggregation

* agent run processor tests

* mixed mode tests

* executor outputs test

* update explanation

* fix lint

* remove duplicate test

* feat: integrate debug endpoints with adk-web (google#597)

* feat: integrate debug endpoints with adk-web

The previous version was based on proposed V2 debug endpoints, which got abandoned
Adk web will support v1 endpoints and semconv spans.

* feat: Add unique event IDs to LLM responses for telemetry tracking and update API CORS to allow all origins.

* fix: deterministic remoteagent aggregate event emit order (google#603)

* deterministic update emit order

* remove duplication

* use func

* feat: refactor debugtelemetry - optimize trace access (google#593)

* refactor: improve traces lookup in DebugTelemetry and remove otel test dependency

* Introduce tool.WithConfirmation  (google#579)

Introduce *experimental* tool.WithConfirmation. 
It wraps a toolset to inject confirmation logic in each tool after they created.

* fix: race conditions in parallel agents (google#530)

* fix: race conditions in parallel agents

* fix

* file name

* refactor: centralize session concurrency management by removing mutexes from `MutableSession` and adding them to `InMemorySession`'s event and state updates, along with a new deadlock test.

* fix yield errgroup.Wait() err

* lint fix

* Add clone to state All and store a copy of the event to stored_session

* fix temp event state delta clear

* Add TestParallelAgent_StateSync

* lint fix

---------

Co-authored-by: jaxxjj <yc5082@nyu.edu>

* chore(deps): bump github.com/modelcontextprotocol/go-sdk (google#604)

Bumps the go_modules group with 1 update in the / directory: [github.com/modelcontextprotocol/go-sdk](https://github.com/modelcontextprotocol/go-sdk).


Updates `github.com/modelcontextprotocol/go-sdk` from 0.7.0 to 1.3.1
- [Release notes](https://github.com/modelcontextprotocol/go-sdk/releases)
- [Commits](modelcontextprotocol/go-sdk@v0.7.0...v1.3.1)

---
updated-dependencies:
- dependency-name: github.com/modelcontextprotocol/go-sdk
  dependency-version: 1.3.1
  dependency-type: direct:production
  dependency-group: go_modules
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat: implements identityRequestProcessor to internal/llminternal (google#585)

* feat: implements identityRequestProcessor

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>

* fix: quote agent name and description in identity processor to match adk-python

The Python reference wraps name/description in double quotes as delimiters.
Also removes variable shadowing of the agent import and cleans up string
building.

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>

* chore: extract mockLLMAgent to helpers_test.go

Move the shared test mock from outputschema_processor_test.go to a
dedicated helpers_test.go to prevent fragile cross-file test coupling.

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>

* fix: support testcase to identity request processors injects

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>

* fix: update model to gemini-2.5-flash in test case

Since gemini-2.0-flash is deprecated, `go generate` can no longer generate testdata using httprr.

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>

* fix: regenerate httprr testdata and fix test case

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>

* fix: use `strings.Join` to make system promppt

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* feat: remove loopagent dependency from sequential agent (google#611)

* Remove loopagent dependency from sequential agent

* lint fix

* test: regenerate parallel agent test (google#614)

Include the recent changes where identityProcessor is added.

* fix: use LLMRequest.Model in Gemini GenerateContent calls (google#620)

* fix: use LLMRequest.Model in Gemini GenerateContent calls

The Gemini model implementation was hardcoding m.name when calling the
GenAI API, ignoring the LLMRequest.Model field. This field is set by
base_flow.go and can be modified by BeforeModelCallback, but the value
was never read. This made runtime model switching via callbacks silently
ineffective.

Add a modelName() helper that prefers req.Model when set, falling back
to the construction-time name. This preserves existing behavior (since
req.Model defaults to m.name via base_flow) while enabling callback-
driven model overrides.

* Update model/gemini/gemini_test.go

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* fix: `generateRequestConfirmationEvent` creates events with empty ID (google#588)

* Update functions.go

* Update functions_test.go

* Add missing fields to adkrest data model and event's ModelVersion field (google#609)

* Add missing fields to adkrest data model and event's ModelVersion field

* lint fix

* test fix

* test: fixed expected model name (google#621)

* fix: output not rendering in non-TTY environments (google#536) (google#568)

* fix output not rendering in non-TTY environments (google#536)

* fix output not rendering in non-TTY environments (google#536)

* replace x/term with stdlib TTY detection

* move streamingMode resolution outside user loop

* chore: fix go sum

* chore: fix go sum

---------

Co-authored-by: dpasiukevich <dpasiukevich@google.com>

* Add http.RoundTripper to merge request's header values. (google#607)

* Add http.RoundTripper to merge request's header values.

* Modify gemini new to copy the config to avoid mutating the httpclient

* fix: switch to the new mcp.ErrSessionMissing (google#625)

* feat: add adk configurable and cli initializer (google#617)

* Add adk configurable and cli initializer

* lint fixes

* lint fix

* Add conversion checks

* lint fix

* Move configurable and cli to internal packages

* Move conformance loader to internal

* fix nit

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* chore: update internal version (google#628)

* Add replay plugin (google#618)

* Add replay plugin

* lint fixes

* lint fix

* Add allowedBaseDir to replay_plugin

* lint fix

* Move replay plugin to internal/configurable/comformance

* Add Python-isms to JSON-isms normalizer to replay plugin

* Simplify records unmarshaling

* Add example tool that adds examples to llm request (google#612)

* Add example tool that adds examples to llm request

* Add missing copyright header

* Add sanitization for example tool "End few-shot"

* lint fix

* all: run go fix ./... (google#634)

* Initialize EventActions' ArtifactDelta to empty map (google#610)

* Initialize artifact_delta to empty map

* lint fix

* Modify tests to check ArtifactDeltas

* lint fix

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* Change content "For context" formatting (google#613)

* Changes content "For context" to formatting

* Removed stringify pythonism from contents_processor

* Add custom description to gemini tool

* lint fix

* test fix

* merge fix RegisterToolFactory using geminitool

* Add runner options, WithStateDelta (google#615)

* Add pathPrefix config to api launcher (google#616)

* Add pathPrefix config to api launcher

* Add handle trailing and leading slashs

* feat: extension points for remoteagent part conversions (google#627)

extension points for part conversions

* feat: add apigee model (google#639)

* chore: sync codebase

* Modify append instructions to modify existig part. Add ExampleTool factory to configurable. (google#640)

* Modify append instructions to modify existig part. Add ExampleTool factory.

* lint fix

* Keep transfer_to_agent declaration and rewrite expected in replay plugin

* Remove callback print

* chore: upgrade GitHub Actions to latest versions (google#643)

Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com>

* chore: upgrade GitHub Actions for Node 24 compatibility (google#642)

Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com>
Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* fix: do not retry confirmation requests as they are not really errors. (google#641)

* Do not retry confirmation requests as they are not really errors.

* Also exclude rejections from being retried same way

* Fix the typo in the name

* Address gemini-code-assist comment about scopedFailureCounters

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* fix: skip vendor in copyright header test (google#636)

The copyright header walk should not descend into vendored sources.

Add vendor to the ignore list used by TestCopyrightHeader so the test only checks repository-owned Go files.

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* refactor: remove duplicated ConfirmationProvider (google#649)

* refactor: remove duplicated ConfirmationProvider

BREAKING CHANGE: there's already such entity in the tool package.

* refactor: rename tool.StringPredicate

* refactor: consistent memory service naming (google#650)

* refactor: consistent memory service naming

BREAKING CHANGE: updating the memory service naming to be consistent
with other ADKs prior releasing v1.0

* feat: remoteagent and executor subtask cleanup (google#645)

* If remoteagent run completes with an error or early break (yield returns false) - cancel rpc task will be sent to the remote server
* Added `A2ARemoteTaskCleanupCallback` callback option to `remoteagent.NewA2A`, it can be used to override the remote task cancellation behavior
* Extracted agent card resolution to `internal/agent/remoteagent` so that it can be reused in `adka2a` package
* Added internal remoteagent state which hold a spec for connecting to the remote server: agent card, resolver options, client factory, etc.
* Added the logic for cancelling subagent tasks in input-required when root agent task is cancelled. Cancellation is best-effort.
* Added `A2AExecutionCleanupCallback` to `adka2a.Executor` which gets invoked after execution or cancellation completes with either result or an error. The default behavior is to log an error.
* Fixed `A2AEventConverter` taking `ReadonlyContext` making it not possible to invoke the default adka2a.ToSessionEvent which requires an `InvocationContext`
* Fixed `adka2a.A2APartConverter` not used in remoteagent
* Fixed `updateAggregation` failing for nil-content events
* Updated a2a-go to `0.3.9`

* feat: add progressive SSE to streaming aggregator and parallel function call execution (google#654)

* Modify streaming aggregator to support progressive sse

* Add parallel execution, add replay test

* Remove previous TestStreamAggregator

* Remove unused httpr

* lint fixes

* Add check thoughtSignature to TestParallelFunctionCalls

* Change aggregator close to use response error code and message

* fix interleaved thought&text aggregation (google#655)

* fix: part converter not used in input required processor (google#657)

The main event processing pipeline checks for a part converter in
processor.go just after handling the inputRequiredProcessor.  If any
parts are found to be "input required" parts they are sliced off of the
content and put onto a new A2A message that is returned after the main
A2A message. Unfortunately that means that if there are any special
converters that would affect those parts they do not get the chance to
be invoked.

This change just plumbs through the existing converter and makes sure it
gets a chance to run.

* refactor: remove launcher dependency from adkrest (google#660)

* refactor: remove launcher dependency from adkrest

Launcher package may be revised in future (for example in favor of ADK
App).
Right now we need to make sure that we don't import the launcher as a
config type in critical packages, e.g. `server` packages.

BREAKING CHANGE: updated adkrest package, replaced NewHandler with
NewServer constructor.

* upd

* upd

* feat(otel): replace batch span and log processors with synchronous implementations (google#661)

* feature: update adk-web to the latest version (google#653)

`$ ./scripts/adk-web/update-adk-web.sh`

* chore(deps): bump google.golang.org/grpc (google#663)

Bumps the go_modules group with 1 update in the / directory: [google.golang.org/grpc](https://github.com/grpc/grpc-go).


Updates `google.golang.org/grpc` from 1.78.0 to 1.79.3
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.78.0...v1.79.3)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.79.3
  dependency-type: direct:production
  dependency-group: go_modules
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: update a2a-go and fix test race (google#664)

* update a2a-go and fix test race

* tidy

* Update to the latest version (google#666)

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* chore(deps): bump github.com/modelcontextprotocol/go-sdk (google#667)

Bumps the go_modules group with 1 update in the / directory: [github.com/modelcontextprotocol/go-sdk](https://github.com/modelcontextprotocol/go-sdk).


Updates `github.com/modelcontextprotocol/go-sdk` from 1.4.0 to 1.4.1
- [Release notes](https://github.com/modelcontextprotocol/go-sdk/releases)
- [Commits](modelcontextprotocol/go-sdk@v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: github.com/modelcontextprotocol/go-sdk
  dependency-version: 1.4.1
  dependency-type: direct:production
  dependency-group: go_modules
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: allow the runner to automatically create a session if AutoCreateSession is enabled. (google#622)

* feat: allow the runner to automatically create a session if `AutoCreateSession` is enabled.

* Update runner/runner.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* refactor: update memory req/resp names (google#671)

BREAKING CHANGE

* Conformance fixes for change to yaml format and progressive sse (google#672)

Co-authored-by: Mikalai Senkevich <hanorik@google.com>

* fix: preserve error details and finish reason in streaming response aggregator and update test expectations (google#678)

* feat: Implement and test recursive agent lookup by name. (google#626)

* feat: Implement and test recursive agent lookup by name.

* refactor: convert `TestFindAgent` to a table-driven test and enable parallel execution.

* feat: Introduce a `FindAgent` method on `llmAgent` to locate sub-agents by name, replacing the `runner` package's internal `findAgent` helper.

* feat: add GetArtifactVersion method to artifact service (google#575)

* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* feat: custom runner provider for adka2a executor (google#680)

* custom runner provider for adka2a executor

* remove the mandatory dependency on runnerConfig

* Add session service test suite (google#675)

* Add session service test suite

* lint fix

* lint fix

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* fix: fix data part conversions (google#689)

* fix data part conversions

* fix: correct json envelope for datapart (google#695)

* chore: update a2a-go and fix double cleanup (google#698)

* update a2a-go and fix double cleanup

* tidy

---------

Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Salman Muin Kayser Chishti <13schishti@gmail.com>
Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>
Co-authored-by: Çağlar Onur <caglaronur@google.com>
Co-authored-by: dpasiukevich <dpasiukevich@google.com>
Co-authored-by: Koichi Shiraishi <zchee.io@gmail.com>
Co-authored-by: Paweł Maciejczek <pawel-maciejczek@users.noreply.github.com>
Co-authored-by: indurireddy-TF <indurireddy@google.com>
Co-authored-by: Rohit Yanamadala <ryanamadala@google.com>
Co-authored-by: Yaroslav <yarolegovich@gmail.com>
Co-authored-by: João Westerberg <westerberg@google.com>
Co-authored-by: jaxxjj <yc5082@nyu.edu>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: David Mora <dla.mora@gmail.com>
Co-authored-by: Daniel Novikov <36117344+dannovikov@users.noreply.github.com>
Co-authored-by: Foued Benzaid <benzaid.foued@gmail.com>
Co-authored-by: Hyang-Ah Hana Kim <hakim@google.com>
Co-authored-by: Serob Nahapetyan <serob@google.com>
Co-authored-by: Salman Chishti <salmanmkc@GitHub.com>
Co-authored-by: Zack Birkenbuel <zbirkenbuel@google.com>
Co-authored-by: Karol Droste <kdroste@google.com>
Co-authored-by: Mikalai Senkevich <hanorik@google.com>
hanorik added a commit to hanorik/adk-go that referenced this pull request Apr 8, 2026
* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
kdroste-google pushed a commit to kdroste-google/adk-go that referenced this pull request Apr 8, 2026
* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Fuabioo pushed a commit to hulilabs/adk-go that referenced this pull request Apr 30, 2026
* Conformance fixes for change to yaml format and progressive sse (google#672)

Co-authored-by: Mikalai Senkevich <hanorik@google.com>

* fix: preserve error details and finish reason in streaming response aggregator and update test expectations (google#678)

* feat: Implement and test recursive agent lookup by name. (google#626)

* feat: Implement and test recursive agent lookup by name.

* refactor: convert `TestFindAgent` to a table-driven test and enable parallel execution.

* feat: Introduce a `FindAgent` method on `llmAgent` to locate sub-agents by name, replacing the `runner` package's internal `findAgent` helper.

* feat: add GetArtifactVersion method to artifact service (google#575)

* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* feat: custom runner provider for adka2a executor (google#680)

* custom runner provider for adka2a executor

* remove the mandatory dependency on runnerConfig

* Add session service test suite (google#675)

* Add session service test suite

* lint fix

* lint fix

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* fix: fix data part conversions (google#689)

* fix data part conversions

* fix: correct json envelope for datapart (google#695)

* chore: update a2a-go and fix double cleanup (google#698)

* update a2a-go and fix double cleanup

* tidy

* feat: Introduce skill package, define frontmatter and helper functions. (google#693)

Define frontmatter per https://agentskills.io/specification#frontmatter.

Implement helper functions for:
- parsing frontmatter and instructions out from SKILL.md file content,
- validating frontmatter struct,
- building SKILL.md file content from frontmatter and instructions.

* feat: setup subrouter for pub/sub trigger (google#704)

Create a new subrouter that will handle the pubsub trigger endpoint and add the implementation for this trigger.

* feat: update cloudrun deployment script to include pubsub (google#712)

update cloudrun deployment script to include pubsub trigger

* feat: add telemetry attributes for cache read input tokens and reason… (google#714)

* feat: add telemetry attributes for cache read input tokens and reasoning tokens

* fix: align indentation in telemetry test usage metadata struct fields

* refactor: align attribute key variable definitions for better readability

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: Define skill.Source interface and implement file system skill source. (google#711)

Source interface defines a contract via which skills framework is going to access skills.

* feat(telemetry): add configurable LRU cache in debug telemetry to avoid memory leaks (google#687)

* feat(telemetry): add configurable LRU cache in debug telemetry to avoid memory leaks

* improve error handling and mention cache size default in the docs

* refactor the logic touching the trace ids for event spans

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: add the implementation of Eventarc subrouter (google#713)

Implementation of Cloud Events trigger processing

* feat: Add agent engine deployment to ADK GO CLI (google#715)

Co-authored-by: Karol Droste <kdroste@google.com>

* Update content processor to exclude toolconfirmation.FunctionCallName (google#717)

* Update content processor exclude

* remove mds

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: update cloudrun deployment script to include eventarc subrouter (google#716)

Adds the eventarc trigger configuration to the cloudrun deployment docker container

* feat: Allow toolsets implement toolinternal.RequestProcessor. (google#730)

While for tools it's a requirement, for toolsets it's optional.
The ability of toolsets to implement RequestProcessor is required
to implement Agent Skills feature as a toolset.

* feat: Implement SkillToolset. (google#733)

SkillToolset encapsulates the Agent Skills feature.
This toolset ensures agent is equipped with all the tools needed to use
skills and is provided with proper instructions.

What skill toolset enable agent to do:
- List available skills.
- Read instructions of the skills (by skill name).
- Read specific resources of the skills (by resource path).

Current implementation is very basic, e.g.:
- There is no script execution support yet.
- Skill activation is history-based: skill instructions and resources
  are provided to the llm as function call results in conversation history.
- Every resource should be specifically mentioned in the SKILL.md
  file: the agent is unable to list resources available for the skills.

* fix: adk-web sse error format (google#734)

fix adk-web sse error format so it corresponds with SSE specifications

* fix: add traceCapacity to the api config (google#731)

* feat: Add skill Source proxy for preloading skills. (google#745)

WithCompletePreloadSource proxy allows to load the skills to memory on
initialization.
It offers the fastest possible data access speed upon initialization,
at the expense of higher memory usage and longer initialization.

* feat: Add preload frontmatters skill source proxy. (google#748)

Given instructions and resource files can be large, it might turn out to
be expensive to load them all to RAM.

Fortunately, at this stage of skill toolset implementation, instructions
and resources are most likely going to be read just once - and then
they'll stay in the conversation history.

Frontmatters, on the other hand, are going to be listed frequently, and
frontmatters are relatively lightweight, thus a proxy caching only the
frontmatters (as opposed to the full preload) can help reach maximum
benefit.

* feat: Add merged skill source proxy. (google#747)

This proxy allows combining multiple skill sources into a single source.

* Agent Engine support (google#749)

* Agent Engine support

* Test fix

* Fixes

* Fixes

* Error handling fix

* Fixes

* Fixes in encode

* Fixed encode

* sseTimeout fix

* reflection fix

* sseWriteTime fix

* fix

* encode fixes

* linter fixes

* various fixes

* encode tests

* linter fixes

* fix

* linter fixes

* Fixes in encode

---------

Co-authored-by: João Westerberg <westerberg@google.com>
Co-authored-by: Mikalai Senkevich <hanorik@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Yaroslav <yarolegovich@gmail.com>
Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>
Co-authored-by: Serob Nahapetyan <serob@google.com>
Co-authored-by: Artsiom Shut <63152812+foxfrikses@users.noreply.github.com>
Co-authored-by: Anastasia <adudarenko@google.com>
Co-authored-by: Piotr Górski <piotrgorski@google.com>
Co-authored-by: Paweł Maciejczek <pawel-maciejczek@users.noreply.github.com>
Co-authored-by: Karol Droste <kdroste@google.com>
Co-authored-by: David Mora <david.mora@huli.io>
newtonnthiga pushed a commit to alis-exchange/adk-go that referenced this pull request Jun 11, 2026
* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
marconn pushed a commit to hulilabs/adk-go that referenced this pull request Jul 13, 2026
* Conformance fixes for change to yaml format and progressive sse (google#672)

Co-authored-by: Mikalai Senkevich <hanorik@google.com>

* fix: preserve error details and finish reason in streaming response aggregator and update test expectations (google#678)

* feat: Implement and test recursive agent lookup by name. (google#626)

* feat: Implement and test recursive agent lookup by name.

* refactor: convert `TestFindAgent` to a table-driven test and enable parallel execution.

* feat: Introduce a `FindAgent` method on `llmAgent` to locate sub-agents by name, replacing the `runner` package's internal `findAgent` helper.

* feat: add GetArtifactVersion method to artifact service (google#575)

* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* feat: custom runner provider for adka2a executor (google#680)

* custom runner provider for adka2a executor

* remove the mandatory dependency on runnerConfig

* Add session service test suite (google#675)

* Add session service test suite

* lint fix

* lint fix

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* fix: fix data part conversions (google#689)

* fix data part conversions

* fix: correct json envelope for datapart (google#695)

* chore: update a2a-go and fix double cleanup (google#698)

* update a2a-go and fix double cleanup

* tidy

* feat: Introduce skill package, define frontmatter and helper functions. (google#693)

Define frontmatter per https://agentskills.io/specification#frontmatter.

Implement helper functions for:
- parsing frontmatter and instructions out from SKILL.md file content,
- validating frontmatter struct,
- building SKILL.md file content from frontmatter and instructions.

* feat: setup subrouter for pub/sub trigger (google#704)

Create a new subrouter that will handle the pubsub trigger endpoint and add the implementation for this trigger.

* feat: update cloudrun deployment script to include pubsub (google#712)

update cloudrun deployment script to include pubsub trigger

* feat: add telemetry attributes for cache read input tokens and reason… (google#714)

* feat: add telemetry attributes for cache read input tokens and reasoning tokens

* fix: align indentation in telemetry test usage metadata struct fields

* refactor: align attribute key variable definitions for better readability

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: Define skill.Source interface and implement file system skill source. (google#711)

Source interface defines a contract via which skills framework is going to access skills.

* feat(telemetry): add configurable LRU cache in debug telemetry to avoid memory leaks (google#687)

* feat(telemetry): add configurable LRU cache in debug telemetry to avoid memory leaks

* improve error handling and mention cache size default in the docs

* refactor the logic touching the trace ids for event spans

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: add the implementation of Eventarc subrouter (google#713)

Implementation of Cloud Events trigger processing

* feat: Add agent engine deployment to ADK GO CLI (google#715)

Co-authored-by: Karol Droste <kdroste@google.com>

* Update content processor to exclude toolconfirmation.FunctionCallName (google#717)

* Update content processor exclude

* remove mds

---------

Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>

* feat: update cloudrun deployment script to include eventarc subrouter (google#716)

Adds the eventarc trigger configuration to the cloudrun deployment docker container

* feat: Allow toolsets implement toolinternal.RequestProcessor. (google#730)

While for tools it's a requirement, for toolsets it's optional.
The ability of toolsets to implement RequestProcessor is required
to implement Agent Skills feature as a toolset.

* feat: Implement SkillToolset. (google#733)

SkillToolset encapsulates the Agent Skills feature.
This toolset ensures agent is equipped with all the tools needed to use
skills and is provided with proper instructions.

What skill toolset enable agent to do:
- List available skills.
- Read instructions of the skills (by skill name).
- Read specific resources of the skills (by resource path).

Current implementation is very basic, e.g.:
- There is no script execution support yet.
- Skill activation is history-based: skill instructions and resources
  are provided to the llm as function call results in conversation history.
- Every resource should be specifically mentioned in the SKILL.md
  file: the agent is unable to list resources available for the skills.

* fix: adk-web sse error format (google#734)

fix adk-web sse error format so it corresponds with SSE specifications

* fix: add traceCapacity to the api config (google#731)

* feat: Add skill Source proxy for preloading skills. (google#745)

WithCompletePreloadSource proxy allows to load the skills to memory on
initialization.
It offers the fastest possible data access speed upon initialization,
at the expense of higher memory usage and longer initialization.

* feat: Add preload frontmatters skill source proxy. (google#748)

Given instructions and resource files can be large, it might turn out to
be expensive to load them all to RAM.

Fortunately, at this stage of skill toolset implementation, instructions
and resources are most likely going to be read just once - and then
they'll stay in the conversation history.

Frontmatters, on the other hand, are going to be listed frequently, and
frontmatters are relatively lightweight, thus a proxy caching only the
frontmatters (as opposed to the full preload) can help reach maximum
benefit.

* feat: Add merged skill source proxy. (google#747)

This proxy allows combining multiple skill sources into a single source.

* Agent Engine support (google#749)

* Agent Engine support

* Test fix

* Fixes

* Fixes

* Error handling fix

* Fixes

* Fixes in encode

* Fixed encode

* sseTimeout fix

* reflection fix

* sseWriteTime fix

* fix

* encode fixes

* linter fixes

* various fixes

* encode tests

* linter fixes

* fix

* linter fixes

* Fixes in encode

* refactor: remove manual session ID input and enable auto-creation in runner (google#754)

* refactor: remove manual session ID input and enable auto-creation in runner

* refactor: remove unused output field from DeleteSessionResponse serialization

* feat: add support for updating existing Agent Engine instances (google#755)

* feat: add update functionality for Agent Engine instances via gcloud command flags

* feat: add --update and --instance_name flags to support updating existing Agent Engine instances

* feat: include and upload class methods in reasoning engine update request

* refactor: replace update and instance_name flags with agent_engine_id for streamlined resource identification

* refactor: replace update and instance_name flags with agent_engine_id for streamlined resource identification

* Add support for simple text instead of full genai.Content for stream_query (google#773)

* Add support for simple text instead of full genai.Content for stream_query

* Small non-functional fixes

* Small non-functional fixes (~/go/bin/golangci-lint run --fix)

* feat: make adk work with a2a-go/v2 (google#701)

* Copied the code to ./agent/remoteagent and ./server/adka2a to v2 directories.
* Migrated the code in v2 directories to use a2a-go v2 types.
* Changed the code in the original directories to delegate to the new code and serve as a type translation layer.
* Deprecated original packages with a reference to v2 directories.

What this gives is that ADK can be used with a2a-go/v2 which implements A2A protocol v1 (as well as v0).

* refactor: rename experimental reasoning tokens attribute to gen_ai.us… (google#779)

* refactor: rename experimental reasoning tokens attribute to gen_ai.usage.reasoning.output_tokens

* fix: include thoughts token count in total output token calculation for telemetry spans

* refactor: fix formatting of telemetry attribute key and token count calculation

* refactor: add comment explaining gen_ai.usage.reasoning.output_tokens and gen_ai.usage.output_tokens relation

* fix: propagate thought signature to first function call in mixed responses (google#788)

* fix: propagate thought signature to first function call in mixed responses

Propagates the thought signature of a candidate response to its first subsequent function call if it lacks one. This ensures Vertex AI validates the turn history when echoing it back on the next turn.

* remove gitignore changes

* Added VertexAI MemoryBank support  (google#801)

* Added support for Memory Bank

* Fixed comments and names in util/vertexai

* Fixed names

* Fixed aiplatform package comment

* Removed debug

* Small fixes

* Context fix

* fix the old adka2a public api depending on the new a2a-go/v2 (google#813)

* ADK GO version update for LLM Request tagging (google#816)

* Add parallel HITL function test (google#817)

* Added parallel hitl function test

* fix: use tagged switch on origCall.ID

* bump a2a-go version to have nil part fix (google#827)

* Changed model for gemini API to gemini-3.1-flash-lite (in examples) (google#839)

* feat(live): Add core bidirectional streaming support (google#833)

* feat(live): Add core bidirectional streaming support
Brings over the core files for live agent execution, including RunLive implementation, base flow updates, and session management.

* Change live run config type

* lint fixes

* lint fix

* Add logging to runtime controller

* Replace fmt prints with log

* chore: add Dependabot config for automated genai dependency updates (google#843)

Add file-based Dependabot configuration to enable weekly scheduled
dependency updates for google.golang.org/genai. The config uses an
allow-list approach so only the genai SDK is updated automatically,
with the list easily extensible to more dependencies in the future.

Configuration:
- Ecosystem: gomod
- Schedule: weekly on Mondays at 02:00 UTC
- Scope: google.golang.org/genai only (via allow-list)
- Reviewer: wolo-lab
- Commit prefix: chore(deps)
- Labels: dependencies

* feat(live): Add sequential agent live run (google#835)

* feat(live): Add sequential agent live run

* Change sample static folder to dynamic path

* Add log to session close

* feat(live): Add live example (google#834)

* feat(live): Add live example

* Add README, fix null element on querySelector

* fix: Stop ignoring request Decode error in runtime. (google#851)

When d.Decode returned an error, we were overriding it (with nil in
most cases). This was not intended.

The documentation for http.Request.Body mentions:
> The Server will close the request body.
> The ServeHTTP Handler does not need to.

Given there is no need to Close the Body in the first place, we just
remove this defer.

* fix: Propagate StateDelta for non-streaming agent. (google#854)

While StateDelta from agent request is propagated to runner in SSE
Handler, it's silently ignored in non-SSE Handler.

Make it propagate StateDelta in both handlers.

* fix: Prevent nil deref when a tool doesn't implement tool.Tool interface. (google#855)

If a tool doesn't implement tool.Tool interface, runOneStep yields an
error.
If that error is ignored (yield returns true), we need to skip this
tool.
What we were doing so far, however, is we added nil to the map of tools.

If that ever happen in runtime, the code will later crash with nil
deref.

I don't know if that could actually happen in context of where
runOneStep is used, but anyway, let's handle it properly: added
continue, which will skip adding nil to the map and will go to the next
tool.

* feat(live): Add session resumption (google#837)

* feat(live): Add core bidirectional streaming support
Brings over the core files for live agent execution, including RunLive implementation, base flow updates, and session management.

* lint fixes

* feat(live): Add session resumption

* lint fix

* Change prints to log

* Add invocation_context comments and simplify base flow context type cast.

* feat(live): Add streaming tools (google#836)

* feat(live): Add streaming tools

* Change sample static folder to dynamic path

* lint fix

* lint fix

* Clean examples uiMode if

* feat(live): Add audio cache for save artifact (google#838)

* feat(live): Add core bidirectional streaming support
Brings over the core files for live agent execution, including RunLive implementation, base flow updates, and session management.

* lint fixes

* feat(live): Add audio cache for save artifact

* lint fix

* Fix audio cache manager different mimetypes for output and input

* Change audio_cache_manager_test to table driven testing

* chore: fix folder name (google#859)

* fix: user auth propagation not working in adka2a compat (google#861)

* fix user auth propagation in adka2a compat

* fix import

* fix: add validation for transfer agent (google#824)

* fix replay_plugin: empty llmresponses and normalize function formatting before comparing. (google#869)

* fix replay_plugin: empty llmresponses found in recording and normalize function formatting before comparing.

* refactor(replay): Simplify YAML AST node copying and add description tests

Use direct pointer struct copying for original YAML nodes in type mismatch correction, preserving all AST metadata (comments, line/column positions) automatically without manual property assignments.

Add a comprehensive table-driven test suite for the package-private normalizeDescription utility, covering boundary spaces, edge newlines, middle empty lines, and complex whitespaces.

* fix: copy ThoughtSignature onto adk_request_confirmation parts (google#763)

Gemini thinking models require replayed model-role function-call parts to
carry their thought signature. The synthetic adk_request_confirmation
parts created by generateRequestConfirmationEvent did not preserve the
original part's ThoughtSignature, causing replay to fail with
400 INVALID_ARGUMENT.

Fixes google#656

* fix: yield tool responses before confirmations (google#765)

A consumer that pauses on receiving an adk_request_confirmation event
(typically to await human approval) would never see the merged
function-response event for tools that already executed in the same
step. Yield completed responses first so they are persisted before the
human-confirmation pause.

Fixes google#759

* fix: preserve Vertex AI function call IDs (google#762)

Keep function call and response IDs when deserializing Vertex AI session events so tool history can be matched across invocations.

* feat: update examples and cli launcher to use a2a-go/v2 sdk (google#780)

update examples and cli launcher to use a2a-go/v2 sdk

* feat: adka2a structured error propagation (google#874)

* implement adka2a structured error propagation

* lint

* status preservation test

* fix wrong parts passed

* add state guard for extracting errmessage

* fix test

---------

Co-authored-by: João Westerberg <westerberg@google.com>

* fix: a2a execution cleanup callback not triggered (google#903)

* fix A2AExecutionCleanupCallback trigger

* default client factory

* Context unification agent/context + internal/contenxt/callback_context (google#868)

* Create unified callbackContext

* Fixed Actions

* Introduced optional NewCallbackContextWithArtifactTracking

* fix: preserve unrelated function events (google#767)

* fix: preserve unrelated function events

Keep unrelated function-call and function-response events when rearranging the latest function response so valid tool history is not dropped.

* test: Add extended tool confirmation tests

* Context unification: merged tool context to callbackContext (google#871)

* Merged internal.toolinternal.toolContext into agent.CallbackContext

* Renaming

* Moved to agent

* Updated model for examples/vertexai/imagegenerator

* Renamed tool.ToolContext to tool.Context

* Added explicit make(map[]) for actions passed to NewCallbackContext/NewCallbackContextWithArtifactTracking

* Minor fixes

* Switched from tool.NewToolContext to agent.NewToolContext

* feat: Add conformance test recording plugin (google#890)

* Add conformance test recording plugin.

* lint fix

* lint fix

* lint fix

* fix: accept metadata-only SSE chunks instead of aborting stream in StreamingResponseAggregator (google#918)

* fix: skip metadata-only SSE chunks instead of aborting stream in StreamingResponseAggregator

## Link to Issue or Description of Change

Signed-off-by: anish k <ak8686@princeton.edu>

* Fix for SSE chunks with no candidates

* Linter fix

---------

Signed-off-by: anish k <ak8686@princeton.edu>
Co-authored-by: anish k <ak8686@princeton.edu>

* Add v2 checks (google#937)

* Context unification: switch all to not deprecated  (google#935)

* Replaced tool.Context with agent.ToolContext

* fixed runnableTool

* fix: bump x/net and otel OTLP exporters to patch govulncheck advisories (google#994)

Resolves the nightly govulncheck failures (exit 3) by updating the modules
flagged in the call graph to their fixed versions:

- golang.org/x/net v0.54.0 -> v0.55.0 (GO-2026-5026)
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 -> v0.19.0 (GO-2026-4985)
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 -> v1.43.0 (GO-2026-4985)

Core go.opentelemetry.io/otel stays at v1.43.0; companion indirect deps
(otel/log, otel/sdk/log, otlptrace, proto/otlp, grpc-gateway, x/sys) move
forward via go mod tidy.

Verified locally: go build ./... and go test -race -mod=readonly -count=1
-shuffle=on ./... both pass, and govulncheck no longer reports GO-2026-5026
or GO-2026-4985.

* chore: complete Node 24 migration for GitHub Actions (google#996)

Bump the remaining actions still on the deprecated Node 20 runtime:
- actions/setup-go v5.5.0 -> v6.4.0 (shared setup composite)
- actions/cache v4.2.3 -> v5.0.5 (shared setup composite)
- golang/govulncheck-action v1.0.4 -> master HEAD

setup-go only moved to Node 24 in v6.2.0, so v5.5.0 was still Node 20. The
govulncheck-action latest release (v1.0.4) internally pins
actions/checkout@v4.1.1 and actions/setup-go@v5.0.0 (Node 20); its master
branch already uses Node 24 actions but has not been tagged, so it is pinned to
master HEAD with a TODO to re-pin once a release past v1.0.4 is cut.

A previous pass only bumped actions/checkout, leaving these behind.

* feat: add platform clock and UUID provider seams for deterministic event creation (google#964)

Introduce a platform package whose current time and UUID generation can be
overridden per-context, mirroring the ContextVar-based seams in ADK-Python:

  - platform.Now(ctx) / platform.WithTimeProvider(ctx, fn)
  - platform.NewUUID(ctx) / platform.WithUUIDProvider(ctx, fn)

Both fall back to time.Now and uuid.NewString when no provider is installed,
so default behavior is unchanged.

To honor the API stability policy (no breaking changes in a minor release),
the existing session.NewEvent(invocationID) signature is preserved and marked
deprecated; it delegates to the new session.NewEventWithContext(ctx,
invocationID), which sources the event ID and timestamp from the platform
seams. All in-repo event/session creation call sites are threaded with context
and use NewEventWithContext, so a host runtime can make event creation
deterministic and replay-safe (e.g. a workflow engine that must reproduce an
execution exactly on replay).

* feat(agent): add StrictContextMock test double (google#1019)

StrictContextMock implements the full ToolContext / CallbackContext /
ReadonlyContext surface so it can be embedded in a test fake; embedders keep
compiling as the interfaces grow, instead of breaking on every added method.

Un-overridden methods panic with "not implemented" (a loud failure on
unexpected calls), while the context.Context methods (Deadline/Done/Err/Value)
delegate to the wrapped Ctx.

* fix: Allow manual setting of session IDs (google#721)

* fix/allow manual setting of session IDs

* fixing missing return + session case issues for inevitable test replay

* Changes in tests

* Updated replays

* check rpc status code instead of string match

---------

Co-authored-by: Karol Droste <kdroste@google.com>

* docs: add AGENTS.md for AI coding agents (google#1045)

Add an AGENTS.md with project context, exact build/test/lint commands,
repository layout, idioms, a minimal example, framework-extension and
testing guidance, and contribution boundaries for AI coding agents.

GEMINI.md and CLAUDE.md are thin pointers to AGENTS.md so Gemini CLI and
Claude Code pick up the same single source of truth.

* fix(agentengine): support Gemini Enterprise AgentSpace streams (google#777)

* fix(agentengine): support Gemini Enterprise AgentSpace streams

* refactor(agentengine): split streaming_agent_run_with_events handler

* fix(agentengine): add MemoryService to streamingAgentRunWithEventsHandler runner configuration.

* fix(adkrest): make debug telemetry span tests order-insensitive

- The Go test check was failing in TestDebugTelemetryGetSpansBySessionID because the test asserted a fixed ordering for returned spans. In practice, the debug telemetry store can return the same set of spans in a different  order depending on span/export timing, especially when spans are created and ended very close together.

- This change keeps the production behavior unchanged and updates the tests to compare spans as a stable sorted set before diffing. The comparison still checks the span names, relevant attributes, and logs, but no longer treats  incidental retrieval order as part of the contract.

* chore(agentengine): clarify streaming agent run metadata

Document the request_json payload for streaming_agent_run_with_events, mark the method as async_stream consistently, and replace realistic test fixture IDs with clearly fake values.

* Get rid of context.Background (google#1062)

* Got rid of context.Background

* Linter fixes

* fix: update built-in load_memory tool for compatibility with VertexAiSessionService (google#793)

* fix: update load_memory tool with json marshaling of memory search response into map[string]any to avoid downstream incompatibility with Go struct types

* revert: undo initial changes to load_memory tool

* fix: safely normalize all part.FunctionResponse.Response types via JSON round-trip before conversion to structpb.

This prevents errors or panics in `structpb.NewStruct()` caused by raw Go types that are incompatible with Protocol Buffers.

* feat: add utility to safely normalize Go types via JSON round-trip before conversion to structpb.

This prevents errors or panics in structpb.NewStruct() caused by raw Go types that are incompatible with Protocol Buffers.

* chore: rename and simplify toStructPB util function

* chore: add broader vertexai sessions test coverage

---------

Co-authored-by: nicholas@alisx.com <nicholas@alisx.com>
Co-authored-by: Karol Droste <kdroste@google.com>

* Main linter fixes (google#1068)

* session test suite fix

* Linter fixes

* fix(conformance): Add "system_instruction" keyNode processing (google#1075)

* test(session/vertexai): add table-driven tests for FunctionCall/Response mapping (google#739)

Add TestAiplatformToGenaiContent_FunctionCallMapping, a table-driven
test that verifies aiplatformToGenaiContent correctly preserves:
- ID, Name, and Args for FunctionCall parts
- ID, Name, and Response for FunctionResponse parts
- empty-string IDs are passed through unchanged

The table-driven format matches the style used elsewhere in this file
and makes it easy to add further cases.

* docs(model): document dual session-resumption carriers on LLMResponse

Post-v1.5.0-merge, LLMResponse carries session resumption twice by
design: upstream's SessionResumptionHandle string (populated by the
googlellm connection, read by llminternal Flow.RunLive) and the fork's
structured SessionResumptionUpdate (populated by model/gemini, consumed
by the liveflow engine, which also honors Resumable=false handle
invalidation). Document that on the fork field so neither carrier is
removed as an apparent duplicate during future syncs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

* docs(liveflow): document relationship to the upstream live engine

The v1.5.0 merge brought in a second live engine: Runner.RunLive /
agent.LiveSession / adkrest /run_live drive upstream Flow.RunLive plus
the googlellm connection. Fence it off in the liveflow package doc by
listing its verified v1.5.0 gaps (string-matched GoAway, no reconnect
backoff or attempt budget, history re-sent on resume, dropped
ToolCallCancellation, input transcriptions authored as the agent) and
naming Runner.RunLiveQueue + liveflow as the hulilabs-supported path.
Strengthen the RunLiveQueue doc comment to point at that comparison.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

* fix(runner): extend sub-runner plugin-inheritance guard to upstream RunLive

Fork fix #46 (2208905) made Run and the queue-based live entry point
(now RunLiveQueue) skip installing the runner's own plugin manager into
context when it has no plugins, so a plugin-less sub-runner inherits the
parent's manager and model/tool/agent callbacks keep propagating.

The upstream Runner.RunLive that arrived with v1.5.0 kept the
unconditional upstream line, so a plugin-less sub-runner driven through
it would clobber an inherited parent manager with its own empty one.
Apply the same HasPlugins guard there and add a regression test that
captures the context plugin manager via a fake live agent (the upstream
live engine itself cannot run offline).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

* docs(session): point LiveDiagnostics docs at RunLiveQueue after rename

The v1.5.0 merge renamed the fork's queue-based Runner.RunLive to
RunLiveQueue and rebound the RunLive name to upstream's new
agent.LiveSession entry point, whose engine never sets LiveDiagnostics.
The LiveDiagnostics struct doc and the session.Event field doc still
said the field is populated "for events from RunLive", steering
upstream-RunLive callers into expecting diagnostics they will never
get. Reference RunLiveQueue and state explicitly that upstream-API
RunLive events carry nil.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

* docs(runner): warn pre-v1.5.0 fork callers on the rebound RunLive name

The v1.5.0 merge renamed the fork's queue-based Runner.RunLive to
RunLiveQueue while upstream introduced a different RunLive
(agent.LiveSession API) under the surviving name. The compile break for
out-of-repo fork consumers is loud, but the surviving name silently
points at the weaker upstream engine, so a consumer adapting to the new
signature could migrate onto it unknowingly. Document on RunLive itself
that it is the upstream engine, that its events never carry
LiveDiagnostics, and that pre-v1.5.0 callers belong on RunLiveQueue.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

* test(runner): cover own-manager install on upstream RunLive plugin guard

The three existing tests all prove the inheritance branch (plugin-less
runner leaves the context-seeded parent manager). A guard regressed to
never installing would still pass the suite. Add the positive
counterpart: a runner that owns plugins must replace the seeded parent
manager with its own. Verified the test fails with the guard mutated to
never-install.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

* refactor(context): realign invocation context with upstream order and docs

The v1.5.0 merge union kept the fork's method ordering and dropped
upstream's doc comments on the resumption-handle accessors, inflating
the permanent diff against upstream in a file both sides edit. Restore
upstream's declaration order and comments so the fork delta is exactly
the LiveRequestQueue param and accessor.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

* docs(liveflow): add upstream engine goroutine leak to known-gaps list

Review feedback on PR #50 identified a per-reconnect goroutine leak in
the upstream Flow.RunLive engine (unbuffered errChan abandoned on
resumable errors). The engine is fenced as unsupported here; record the
gap alongside the others and link the upstream report
(google#1152).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WQUNntrYi9Yn1ExuN9f5VR

---------

Signed-off-by: anish k <ak8686@princeton.edu>
Co-authored-by: João Westerberg <westerberg@google.com>
Co-authored-by: Mikalai Senkevich <hanorik@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Yaroslav <yarolegovich@gmail.com>
Co-authored-by: Dmitry Pasiukevich <20398573+dpasiukevich@users.noreply.github.com>
Co-authored-by: Serob Nahapetyan <serob@google.com>
Co-authored-by: Artsiom Shut <63152812+foxfrikses@users.noreply.github.com>
Co-authored-by: Anastasia <adudarenko@google.com>
Co-authored-by: Piotr Górski <piotrgorski@google.com>
Co-authored-by: Paweł Maciejczek <pawel-maciejczek@users.noreply.github.com>
Co-authored-by: Karol Droste <kdroste@google.com>
Co-authored-by: Karol Piotrowicz <karol.piotrowicz@gmail.com>
Co-authored-by: Gustaf <32815781+gustafvh@users.noreply.github.com>
Co-authored-by: Serob Nahapetyan <serobnahapetyan@gmail.com>
Co-authored-by: anish k <ak8686@princeton.edu>
Co-authored-by: David Hyde <DABH@users.noreply.github.com>
Co-authored-by: wolo <wolo@google.com>
Co-authored-by: Brett Dietsch <brett.dietsch@bayer.com>
Co-authored-by: Jan Krynauw <jan@alisx.com>
Co-authored-by: Nicholas Breckwoldt <52029793+nicholasbreckwoldt@users.noreply.github.com>
Co-authored-by: nicholas@alisx.com <nicholas@alisx.com>
Co-authored-by: nuthalapativarun <nuthalapativarun@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
PratikDhanave pushed a commit to PratikDhanave/adk-go that referenced this pull request Aug 15, 2026
* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

* Extract resolveVersion helper in gcsartifact.

---------
houzhonglogic pushed a commit to Seek-Key-LTD/key-agent that referenced this pull request Sep 13, 2026
* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants