Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat: enable plugin support in launcher config with tests#503

Merged
dpasiukevich merged 4 commits intogoogle:mainfrom
MarcoCerino23:feature/launcher-plugin-support
Jan 23, 2026
Merged

feat: enable plugin support in launcher config with tests#503
dpasiukevich merged 4 commits intogoogle:mainfrom
MarcoCerino23:feature/launcher-plugin-support

Conversation

@MarcoCerino23
Copy link
Contributor

@MarcoCerino23 MarcoCerino23 commented Jan 22, 2026

Description
This PR enables plugin support in the Launcher, addressing issue #501.
Previously, plugins were supported by the Runner but could not be configured via the Launcher configuration struct.

Changes

  • cmd/launcher/launcher.go:

    • Added Plugins []plugin.Plugin field to the Config struct to allow passing plugins during initialization.
  • cmd/launcher/console/console.go:

    • Updated NewLauncher to pass the configured plugins from launcher.Config to the underlying runner.New.
  • server/adkrest/handler.go:

    • Updated the REST handler to accept and pass plugins to the Runtime API controller.
  • server/adkrest/controllers/runtime_test.go:

    • Added a new unit test TestNewRuntimeAPIController_PluginsAssignment to verify that plugins are correctly assigned and passed to the controller.

Verification

  • Unit Tests: Ran go test ./... -> All tests passed.
  • Manual E2E Verification:
    • Created a temporary main file to initialize the console launcher with a test plugin.
    • Verified that the plugin's BeforeRunCallback is executed before the agent interaction.

Evidence (Output):

[E2E SUCCESS] >>> PLUGIN SUCCESSFULLY EXECUTED IN RUNNER! <<<
package main

import (
	"context"
	"fmt"
	"iter"
	"time"

	"google.golang.org/adk/agent"
	"google.golang.org/adk/cmd/launcher"
	"google.golang.org/adk/cmd/launcher/console"
	"google.golang.org/adk/plugin"
	"google.golang.org/adk/session"
	"google.golang.org/genai"
)

func echoRun(ctx agent.InvocationContext) iter.Seq2[*session.Event, error] {
	return func(yield func(*session.Event, error) bool) {}
}

type MyLoader struct{ agentInstance agent.Agent }

func (l *MyLoader) LoadAgent(name string) (agent.Agent, error) { return l.agentInstance, nil }
func (l *MyLoader) RootAgent() agent.Agent                     { return l.agentInstance }
func (l *MyLoader) ListAgents() []string                       { return []string{l.agentInstance.Name()} }

func main() {
	// Create a plugin with a callback
	pPtr, _ := plugin.New(plugin.Config{
		Name: "test-plugin",
		BeforeRunCallback: func(ctx agent.InvocationContext) (*genai.Content, error) {
			fmt.Println("\n[E2E SUCCESS] >>> PLUGIN SUCCESSFULLY EXECUTED IN RUNNER! <<<")
			return nil, nil
		},
	})

	myAgent, _ := agent.New(agent.Config{Name: "echo", Description: "desc", Run: echoRun})

	// Configure launcher WITH the plugin (this verifies the fix)
	cfg := &launcher.Config{
		AgentLoader:    &MyLoader{agentInstance: myAgent},
		SessionService: session.InMemoryService(),
		Plugins:        []plugin.Plugin{*pPtr},
	}

	l := console.NewLauncher()
	go func() { _ = l.Run(context.Background(), cfg) }()

	// Simulate wait
	time.Sleep(5 * time.Second)
}

Fixes #501

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @MarcoCerino23, 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 introduces a significant enhancement by enabling comprehensive plugin support directly within the Launcher configuration. Previously, plugins were only supported by the Runner, limiting their configurability. This change integrates plugin management directly into the Launcher's configuration struct and ensures their proper propagation through the system, including the REST API, thereby streamlining plugin integration and expanding the framework's extensibility.

Highlights

  • Launcher Plugin Configuration: The launcher.Config struct now includes a Plugins field, allowing direct configuration of plugins at the launcher level, addressing a previous limitation where plugins were only configurable via the Runner.
  • Plugin Propagation: Updates ensure that configured plugins are correctly passed from the console.NewLauncher to the underlying runner.New and through the adkrest handler to the RuntimeAPIController, ensuring end-to-end plugin integration.
  • New Unit Test: A dedicated unit test (TestNewRuntimeAPIController_PluginsAssignment) has been added to verify the proper assignment and handling of plugins within the RuntimeAPIController, enhancing test coverage for this new functionality.

🧠 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.

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.

Copy link
Contributor

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

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 successfully enables plugin support in the launcher configuration by plumbing the Plugins field through various components. The changes are logical and well-tested. My main feedback is to consistently use pointers for plugins ([]*plugin.Plugin instead of []plugin.Plugin) throughout the implementation. This is more idiomatic in Go, especially since plugin.New returns a pointer, and it avoids unnecessary copying of plugin structs. I've provided specific suggestions to apply this change.

@MarcoCerino23 MarcoCerino23 force-pushed the feature/launcher-plugin-support branch from 13a59b7 to 294685c Compare January 22, 2026 21:41
@MarcoCerino23
Copy link
Contributor Author

Following the feedback from the code assistant, the implementation has been refactored to use plugin pointers ([]*plugin.Plugin) instead of values, ensuring idiomatic Go usage and type compatibility across internal packages.

Changes

  • Refactor to Pointers: Updated plugin.Plugin to *plugin.Plugin across the entire chain. This aligns with plugin.New() returning a pointer and avoids unnecessary struct copying.
  • Launcher: Added Plugins []*plugin.Plugin field to launcher.Config in cmd/launcher/launcher.go.
  • Runner: Updated runner.PluginConfig to accept pointer slices and correctly initialize the plugininternal.PluginManager.
  • Internal Manager: Updated internal/plugininternal/plugin_manager.go to be pointer-aware, resolving type mismatch issues.
  • REST API: Updated RuntimeAPIController and its constructor in server/adkrest/controllers/runtime.go to support plugin injection.
  • Tests:
    • Refactored runtime_test.go to validate plugin assignment in the REST controller.
    • Updated plugin_manager_test.go to handle pointer slices and improved error handling during plugin initialization.

Verification Results

  • Unit Tests: All tests passed (go test ./...).
  • Manual E2E Test: Verified that plugins are correctly executed when the launcher starts.
Click to see the updated manual test code used for verification
package main

import (
    "context"
    "fmt"
    "iter"
    "time"

    "google.golang.org/adk/agent"
    "google.golang.org/adk/cmd/launcher"
    "google.golang.org/adk/cmd/launcher/console"
    "google.golang.org/adk/plugin"
    "google.golang.org/adk/session"
    "google.golang.org/genai"
)

func echoRun(ctx agent.InvocationContext) iter.Seq2[*session.Event, error] {
    return func(yield func(*session.Event, error) bool) {}
}

type MyLoader struct{ agentInstance agent.Agent }
func (l *MyLoader) LoadAgent(name string) (agent.Agent, error) { return l.agentInstance, nil }
func (l *MyLoader) RootAgent() agent.Agent                     { return l.agentInstance }
func (l *MyLoader) ListAgents() []string                       { return []string{l.agentInstance.Name()} }

func main() {
    pPtr, _ := plugin.New(plugin.Config{
        Name: "test-plugin",
        BeforeRunCallback: func(ctx agent.InvocationContext) (*genai.Content, error) {
            fmt.Println("\n[E2E SUCCESS] >>> PLUGIN SUCCESSFULLY EXECUTED IN RUNNER! <<<")
            return nil, nil
        },
    })

    myAgent, _ := agent.New(agent.Config{
        Name: "echo",
        Description: "desc",
        Run: echoRun,
    })

    cfg := &launcher.Config{
        AgentLoader:    &MyLoader{agentInstance: myAgent},
        SessionService: session.InMemoryService(),
        Plugins:        []*plugin.Plugin{pPtr},
    }

    l := console.NewLauncher()
    go func() { _ = l.Run(context.Background(), cfg) }()

    time.Sleep(5 * time.Second)
}

dpasiukevich
dpasiukevich previously approved these changes Jan 23, 2026
Copy link
Collaborator

@dpasiukevich dpasiukevich left a comment

Choose a reason for hiding this comment

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

Thanks for the PR!

I've added a if p != nil validation.

@dpasiukevich
Copy link
Collaborator

I wanted to add a plugin is not nil validation check to approve and merge the PR. For simplicity used UI and in result had to make 3 commits for that 😅

@dpasiukevich dpasiukevich merged commit 49ede4c into google:main Jan 23, 2026
4 checks passed
@dpasiukevich
Copy link
Collaborator

Filed #504 to pass the config in A2A

@MarcoCerino23 MarcoCerino23 deleted the feature/launcher-plugin-support branch January 23, 2026 10:12
davidli2010 pushed a commit to davidli2010/adk-go that referenced this pull request Feb 4, 2026
* feat: enable plugin support in launcher config with tests

* Add nil check for plugin registration

* Fix nil plugin check in registerPlugin method

* Fix nil check for plugin registration

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>
japerry911 added a commit to japerry911/adk-go that referenced this pull request Feb 12, 2026
* fix: update time truncation in database session service (google#448)

When truncating to microseconds (to match db max allowed precision) we
need to keep the location of the event. Right now it's overwritten here.

That's the fix for tests mostly, because in real world scenario the
event is created and overwritten here by the same library code, thus it
will be the same location anyway.

* fix: Only last state change for multiple tool calls is being committed to state (google#449)

* fix: merge state deltas from multiple tool calls instead of overwriting

Previously, when multiple tools were called in parallel, only the last
tool's state delta was preserved because mergeEventActions used direct
assignment. This change uses maps.Copy to properly merge all state
deltas, preserving state changes from all tool calls.

Fixes google#354

Signed-off-by: majiayu000 <[email protected]>

* fix: deep merge state delta in parallel tool actions

---------

Signed-off-by: majiayu000 <[email protected]>

* fix: remote agent responses are not stored in streaming mode (google#420)

Events marked as Partial are not stored in the sessions store.

Updated comments to make it more clear.
Updated A2A remote-agent to aggregate text and thoughts from partial events and emit them with or before the terminal events.
Long-running functions calls are emitted as well because a response is expected to be delivered as a follow-up function call.

Before the fix remoteagent responses in streaming mode were lost unless a Task was emitted as the terminal event (which is not the case for adka2a.Executor)

* fix: support CitationMetadata (google#463)

Added converters for CitationMetadata in ./server/adka2a/metadata.go and verified in test case.

* fix: parse events with errors in agenttool (google#468)

Right now agenttool for error flow only handles go errors (e.g. when ADK
Go agent is wrapped).

But agenttool can also wrap remoteagent which may return events with
error_code and/or error_message. Currently agenttool would return {}
because may not have a content, which hides the error.

* chore: correct LoadArtifactHandler Route Name (google#464)

* artifact: don't allow file names with path separators (google#472)

File separators as filename breaks the layout of the object name. Reject file names that contain any separators.

* Implement graceful shutdown for web server via context cancellation (google#462)

* fix: use context to perform graceful shutdown for the web server

* Add configurable shutdown-timeout for web server

* fix: Increase default server shutdown timeout from 5s to 15s

* Return ctx.Err() on graceful shutdown as per PR review

* fix: close errChan when srv.ListeandServer() returning nil or error is not http.ErrServerClosed

Signed-off-by: Imre Nagi <[email protected]>

* fix: handle closed errChan in webLauncher Run

---------

Signed-off-by: Imre Nagi <[email protected]>

* fix: resolve nil pointer in tool.Context.SearchMemory in webui mode (google#476)

* fix: resolve nil pointer in tool.Context.SearchMemory in webui mode

* Apply suggestion from @dpasiukevich

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* Implement OutputResponseProcessor to enable use of OutputSchema and tools (google#441)

* Implement OutputResponseProcessor to enable use of OutputSchema and
tools

on Gemini models that does not support structured outputs with tools [1]

Based on adk-python [2], if both specified on non-supported model,
   - Do not set output schema on the model config,
   - Add a special tool called set_model_response using the output schema,
   - Instruct the model to use this tool to output its final result,
     rather than output text directly.

Fixes google#307

Tested via https://gist.github.com/caglar10ur/52e49e9be5f64f5ac47107810c9e60fb

[1] https://ai.google.dev/gemini-api/docs/structured-output?example=recipe#structured_outputs_with_tools
[2] google/adk-python@af63567

Signed-off-by: Çağlar Onur <[email protected]>

* Address gemini-code-assist comments

Signed-off-by: Çağlar Onur <[email protected]>

* Add missing copyright headers and fix formatting isssues

Signed-off-by: Çağlar Onur <[email protected]>

* Address remaining formatting isssues

Signed-off-by: Çağlar Onur <[email protected]>

* Address incorrect return after yield comment

Signed-off-by: Çağlar Onur <[email protected]>

* Adjust the tests based on the previous change

Signed-off-by: Çağlar Onur <[email protected]>

---------

Signed-off-by: Çağlar Onur <[email protected]>

* feat: include gen_ai.conversation.id in OTEL spans (google#421) (google#428)

* fix: return nil when server has been shutdown (google#487)

* fix(database): cascade delete events when deleting session (google#483)

Previously, attempting to delete a session with related events failed due to a foreign key constraint violation.
This commit adds `OnDelete:CASCADE` to the GORM relationship between sessions and events, ensuring that deleting a session will also remove its associated events.
This resolves errors encountered during session deletion and allows safe cleanup of sessions with related events.

* Make the type comparison case insensitive (google#488)

* Make the type comparison case insensitive

Otherwise schema validation that uses lowercase values of enums such as "object" or "string" fails.

* Add some unittests while at it

* Do not modify but create a shallow copy

* normalize instead of creating a copy

* feat: add FilterToolset helper (google#489)

* fix: mark cancellation events as Final in Executor (google#494)

* fix: cancelation error

* removed debugging block

* remove unnecessary initialized ctx

* fix lint

* Update adk-web to 958c8d6278b45c59e413f52ace147c28c5767a4d (google#491)

Generated using following Dockerfile

```
FROM node:iron-trixie AS builder

RUN apt-get update && apt-get install -y git

RUN git clone https://github.com/google/adk-web

RUN mkdir output && cd adk-web && npm install && npm install -g @angular/cli && ng build --output-path=../output
```

via executing

```
docker build -t adk-web:latest .
docker create adk-web:latest
docker cp affectionate_chaplygin:/output .
rsync --delete -avz output/browser/ adk-go/cmd/launcher/web/webui/distr/
```

* feat: add plugin package (google#480)

* Add plugin system

* Add plugin system

* Removed test with redundant check, tool.Context can never be cast to agent.InvocationContext.

* lint fixes

* Fix tests plugin name

* Added symmetrical after callback execution for plugins

* Moved pluginManager to internal context value

* Fix runOnToolErrorCallbacks for tool not found

* Change plugins fields to private

* Small test fix

* Avoid maintaining the copyright year manually (google#495)

* Avoid maintaining the copyright year manually

* Fix format issue

* Add vertexAi session service (google#235)

* vertex ai session service implementation

* fix comments

* add events list method, save appended event locally

* Create vertexai package
- Move vertexai session service to separate package.
- Allow multiple app usage by having different reasoning engine.
- Add create_engine example.

* Add log to Close err

* Fix unsafe type assertion, out of bounds numRecentEvents

* Add session state update

* Add aiplatform to genai convertion for GroundingMetadata and content parts.

* Add vertexai session service tests

* Run go mod tidy

* Add option.WithoutAuthentication() to replay, fix lint issues

* Fix lint issues

* Fix linter execution

* Modify state All iterator to use copy

* Fix getReasoningEngineID regex and add respsective tests

* chore: go mod tidy

* Add IsNotFoundError validation for retry, make vertex session service Get concurrent

* Fix vertex ai session service timestamp Filter tests

* Change example env variable name

* Add session name validations

* fix GOOGLE_GOOGLE_CLOUD_LOCATION env name

* Add part tought and thoughtSignature to converter

---------

Co-authored-by: Dima Stabrouski <[email protected]>

* fix: resolve the run config streaming mode param ineffective issue in a2a remote agent (google#485)

* fix: Add MCP session reconnection with Ping health check (google#417)

* auto-reconnect on connection failure

* introduce MCPClient struct

* Update tool/mcptoolset/set_test.go

* address lint issues

* only consider refreshing on certain errors

* Add TODO for session not found error handling

---------

Co-authored-by: majiayu000 <[email protected]>

* docs: update docs for llmagent (google#500)

* update docs for llmagent

* update docs for Aftertoolback

* feat: enable plugin support in launcher config with tests (google#503)

* feat: enable plugin support in launcher config with tests

* Add nil check for plugin registration

* Fix nil plugin check in registerPlugin method

* Fix nil check for plugin registration

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* fix: pass pluginConfig instead of only plugins (google#504)

* fix: pass pluginConfig instead of only plugins

* fix: long-running operation handling as a2a input-required task (google#499)

* Include long-running tool function call and response are into A2A TaskStatus message. This is tracked by `inputRequiredProcessor`. This makes it possible for non-blocking clients to discover which input is required to continue a task. 
* Before starting execution in `adka2a.Executor` validate that user message carries all the required `FunctionCallResponse`s by comparing them against those recorded in task status.
* Added test for checking that A2A request payload is assembled correctly by remoteagent.
* Refactored `contents_processor` to use functions from `utils`.
* Updated `runner.go` to handle the case when user message carries a function response for a long-running call initiated by a non-root agent. This agent needs to be invoked bypassing root.

Added integration tests for two cases:
* a2aclient -> a2aserver -> adka2a.Executor -> llmagent with a long running tool
* a2aclient -> server A -> adka2a.Executor A ->-> llmagent with remote subagent -> remotesubagent -> server B -> adka2a.Executor B -> llmagent with a long running tool

* Fix MCP reconnection on EOF error (google#505)

* docs: upd docs for vertexai (google#515)

* docs: upd docs for vertexai

* Removed plugin manager after callback symmetry (google#514)

* feat: add human in the loop confirmation (google#490)

* Add ToolConfirmation (WIP)

* Modify processor type to generator

* Add tool confirmation sample

* Fix loss of tool confirmation when handling event with multiple function calls

* Add basic tool confirmation test

* Add request confirmation tests

* Fix merge test failures

* lint fixes

* Remove duplicated code block

* merge fix

* fix merge confict in base_flow_test

* Add tool confirmation docs

* merge fix set_test

* lint fix

* Add package doc for toolconfirmation example

* Add tools_processor to cache tools

* Update RequireConfirmationProvider doc

* Move session.REQUEST_CONFIRMATION_FUNCTION_CALL_NAME to toolconfirmation.RequestConfirmationFunctionCallName. Add toolconfirmation.OriginalCallFrom helper function.

* Add OriginalCallFrom godocs

* Remove comments on OriginalCallFrom

* Change RequestConfirmationFunctionCallName to toolconfirmation.FunctionCallName

* Fix godoc

* Add custom part converters to ADK Executor. (google#512)

* Add custom part converters to ADK Executor.

This change essentially mirrors the functionality available in the Python A2A implementation at https://github.com/google/adk-python/blob/main/src/google/adk/a2a/executor/a2a_agent_executor.py#L62-L67.

The use case here is to allow conversion of specific A2A Data parts into something slightly structured (or annotated in some way) for ADK consumption. Currently data parts which are not Function or ExecutableCode related get converted to Text parts (https://github.com/google/adk-go/blob/main/server/adka2a/parts.go#L253). Conceptually these could become InlineData parts (which do tend to overlap with the model of File parts) or extra processing could be applied to make them more consumable by ADK agents. Similarly semi-structured output from ADK agents are returned as TextParts, this just gives us the responsible to marshal these as typed data parts based on whatever signifies we include.

* refactor

* Shorten converter type and field names
* Do not make a separate filter pass
* Do not export WithConverter methods
* Export singular mappers to make delegation easier

---------

Co-authored-by: Yaroslav Shevchuk <[email protected]>

* feat: provide access to session events from executor callbacks (google#521)

* provide access to session events from executor callbacks

* gemini nitpicks

* test cleanup

* docs: update feature_request.md (google#520)

* Update feature_request.md

* docs: made "willingness to contribute" section optional

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* docs: update bug_report.md (google#519)

* Update bug_report.md

* upd

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* Implement the load memory tool for searching memory (google#497)

* Implement the load memory tool for searching memory

* Fix lint issue

* fix InvocationId being replaced on invocationContext duplication (google#525)

* feat: add human in the loop confirmation for mcp toolset (google#523)

* Add tool confirmation for MCP tool set

* Add RequireConfirmationProvider_Validation test

* fix small doc change

* fix requireConfirmation provider priority over bool field

* Add toolname to mcptool confirmation provider

* lint fix

* Change to only call confirmation provider if toolconfirmation does not exist

* Change test struct

* fix test missing invocation context

* feature: add WithContext method to agent.InvocationContext to support context modification (google#526)

* feat: add `WithContext` to `InvocationContext`

* Apply Code Assist comments

* docs: add note about future context changes

Add temporary note regarding context handling changes.

* Fix comment formatting

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* feat: add loggin plugin (google#534)

* feat: console refactor (google#533)

* fix: apply temp state deltas to local session to keep them within invocation (google#537)

* feat: add a function call modifier plugin. (google#535)

* Add function call modifier plugin.

* lint fix

* simplify test check logic

* flat afterModelCallback func

* Add support of the preload memory tool (google#527)

* feat: add OpenTelemetry configuration and initialization - TracerProvider (google#524)

* Implement telemetry initialization

* Update telemetry/setup_otel.go

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* Review comments

* cherry-picked Implement telemetry initialization

* GCP config improvements

* Replace telemetry.Service intefrace with telemetry.Providers struct

* Add helper function for resolving quota and resource projects.

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* Move the function call modifier plugin into one package (google#546)

* Migrate old telemetry (google#529)

* fix: set SkipSummarization in RequestConfirmation to stop agent loop (google#544)

* fix: set SkipSummarization in RequestConfirmation to stop agent loop

When using ctx.RequestConfirmation() manually, the agent loop does not
stop because SkipSummarization is not set on the function response event.
The built-in RequireConfirmation path (functiontool) sets it automatically,
but the manual RequestConfirmation path does not.

Fixes google#543

* test: add ToolConfirmation field assertions to auto-generated ID test

* fix: remoteagent partial response handling leads to data duplication (google#545)

* set explicit partial event marking and maintain a temporary artifact for streaming events

* fix metadata merging

* fix duplicating long running function call

* fix citations not included

* explicit mark as turnComplete on event conversion

* fix response duplication for partial and non-partial events

* aggregation logic tests

* gemini mock streaming test

* added failing test cases

* lint

* fix partial not reset on errors

* fix test

* fix: pass long_running_function_ids in the event generated for request confirmation (google#553)

* chore: added tests to verify tool confirmation works with a2a (google#560)

* add tool confirmation test

* lint

* gemini comments

* fix: clear aggregated text and thoughts when receiving a non-appending task artifact update (google#555)

clear aggregated text and thoughts when receiving a non-appending task artifact update

* feat: Implement OpenTelemetry semconv tracing (google#548)

* feat: Implement OpenTelemetry semconv tracing for agent invocations and LLM calls.

* Fix shadowed context issue

* Clean up attributes

* Revert changes to CallLLM span

* refactor: changes from review comments

1. Rename telemetry span creation functions to `Start...Span`, result recording functions to `Trace...Result`
1. skip merged tool call span when there is single tool call.
1. Dedupe tool params and move args to span start.
1. Remove redundant `codes.Ok` status setting for spans without errors.

* fix: End `GenerateContent` telemetry span immediately upon final response or error to accurately measure model latency.

* refactor: Inline telemetry attribute keys and remove redundant LLM request/response attributes from tool call traces.

* cleanup: remove unused error variable assignment in test range loops

* fix: prevent duplicate span ending in LLM flow by tracking span state

* refactor: Update `StartInvokeAgentSpan` to accept an `agent` interface and session ID directly, removing the `StartInvokeAgentSpanParams` struct.

* cleanup: remove call_llm span after adding semconv tracing (google#556)

---------

Signed-off-by: majiayu000 <[email protected]>
Signed-off-by: Imre Nagi <[email protected]>
Signed-off-by: Çağlar Onur <[email protected]>
Co-authored-by: Dmitry Pasiukevich <[email protected]>
Co-authored-by: lif <[email protected]>
Co-authored-by: Yaroslav <[email protected]>
Co-authored-by: Serob Nahapetyan <[email protected]>
Co-authored-by: Suraj Bobade <[email protected]>
Co-authored-by: Jaana Dogan <[email protected]>
Co-authored-by: Imre Nagi <[email protected]>
Co-authored-by: sjy3 <[email protected]>
Co-authored-by: Çağlar Onur <[email protected]>
Co-authored-by: Jeet <[email protected]>
Co-authored-by: Esteban Del Boca <[email protected]>
Co-authored-by: Çağlar Onur <[email protected]>
Co-authored-by: Serob Nahapetyan <[email protected]>
Co-authored-by: João Westerberg <[email protected]>
Co-authored-by: hulk <[email protected]>
Co-authored-by: Dima Stabrouski <[email protected]>
Co-authored-by: Marcus Rodan <[email protected]>
Co-authored-by: indurireddy-TF <[email protected]>
Co-authored-by: MarcoCerino23 <[email protected]>
Co-authored-by: Zack Birkenbuel <[email protected]>
Co-authored-by: Yasir Modak <[email protected]>
Co-authored-by: Paweł Maciejczek <[email protected]>
Co-authored-by: Jayden Park <[email protected]>
Co-authored-by: Daria Wieliczko <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

the launcher not support plugins

3 participants