feat: add GetArtifactVersion method to artifact service - #575
Conversation
Summary of ChangesHello @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 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
Using Gemini Code AssistThe 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
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 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
|
There was a problem hiding this comment.
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.
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
… get_artifact_version
* 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>
* 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: 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>
* 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>
* 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>
* 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>
* feat: add GetArtifactVersion method to artifact service * chore: remove adk-go main executable. * Update artifact/service.go * Extract resolveVersion helper in gcsartifact. ---------
* 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>
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.