Commit: e0c09d1
Date: November 19, 2025 at 8:01 AM
- golangci-lint: add gofumpt formatters and settings
Signed-off-by: Koichi Shiraishi
- all: run golangci-lint fmt happy
$ go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest fmt
Signed-off-by: Koichi Shiraishi
---------
Signed-off-by: Koichi Shiraishi
Commit: 0a038b6
Date: November 14, 2025 at 4:18 PM
- refactor: extract repeated values into named constants
fix TraceMergedToolCalls() comment
- fix duplicate key in the attributes
fix untracked files
Commit: dabb9bd
Date: November 14, 2025 at 4:15 PM
- Added interceptor setting the user in metadata
- Ignore ctx in adka2a processor
- Update to TOC in CONTRIBUTING.md
- Fix typo in launcher/prod
- Restore .gitignore
- Added CallInterceptor to set the user in a2a
- Fix blank lines in CONTRIBUTING.md
- Minor fix - argument order
- Minor fix - execution arg order
Commit: 7a27c16
Date: November 14, 2025 at 3:33 AM
$ go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix -test ./...
Signed-off-by: Koichi Shiraishi
Commit: f1d3cc5
Date: November 13, 2025 at 9:26 PM
Add nil check in Flow.callLLM() after BeforeModelCallbacks but before
accessing Model.GenerateContent(). This prevents a nil pointer dereference
panic when an llmagent is created without a Model configuration.
The check is positioned after BeforeModelCallbacks to allow callbacks that
return cached responses to short-circuit execution without requiring a Model.
This provides a clear error message instead of a cryptic segmentation fault:
'agent %q has no Model configured; ensure Model is set in llmagent.Config'
Preserves valid use cases:
- Testing agent metadata/structure without running the agent
- BeforeAgentCallbacks that short-circuit before agent execution
- BeforeModelCallbacks that return cached responses
Fixes panic: runtime error: invalid memory address or nil pointer
dereference when sub-agents without Models were invoked.
Commit: 7f5fe5e
Date: November 13, 2025 at 4:39 PM
Commit: f5d265a
Date: November 13, 2025 at 4:30 PM
Commit: 437ef38
Date: November 13, 2025 at 4:29 PM
This change re-introduces error as a possible return value for function tools. The previous removal of this feature led to poor error-handling patterns, as functions often need to signal failures from validation, I/O, or network calls. Restoring the ability to return errors allows for conventional error handling.
Fixes #260.
Commit: 7b07455
Date: November 13, 2025 at 3:43 PM
VertexAI chat isn't suitable for session storage, and the implementation returns a fake "test-id" as the session ID. Remove this package.
Commit: b5bc2c3
Date: November 13, 2025 at 3:40 PM
Per Go style guideline, avoid repetitiveness caused by package name in identifier names.
Commit: 9992414
Date: November 13, 2025 at 10:01 AM
- Add command-line params in web launcher for server timeouts
- Added comments
#257: Return http.Handler instead of SetupRouter in server/restapi/web (#259)
Commit: cffe3b0
Date: November 12, 2025 at 12:18 PM
- Add NewHandler() function to return http.Handler instead of requiring mux.Router - Created NewHandler() that returns standard http.Handler for better decoupling - Marked SetupRouter() as deprecated for backward compatibility - Allows users to use ADK REST API with any HTTP server/router, not just gorilla/mux
- Update api launcher to use NewHandler() instead of SetupRouter() - Refactored SetupSubrouters to use web.NewHandler() - Wraps handler with CORS middleware before registration - Uses http.StripPrefix for proper path handling - No breaking changes to web launcher interface
- Add example demonstrating NewHandler() usage with standard net/http - Shows how to use web.NewHandler() with net/http.ServeMux - Demonstrates framework-agnostic approach - Includes health check endpoint to show composability - Example works with any HTTP server/router, not tied to gorilla/mux
- Resolve PR feedback: remove SetupRouter and update example to use launcher.Config
- Clean up comments in NewHandler and setupRouter
Removed comments about the preferred integration method and the public SetupRouter helper.
- Fix linter issues: handle w.Write error and format with goimports
- Fix missing newline at end of api.go
Add a newline at the end of the file.
- Fix goimports formatting: remove trailing blank line and handle w.Write error
---------
Co-authored-by: Dmitry Pasiukevich
Commit: 4336819
Date: November 12, 2025 at 9:11 AM
- Add database automigrate.
- Align an error message with common Go formatting conventions
- Improve error message for auto migration failure
---------
Co-authored-by: Dmitry Pasiukevich
Commit: f7322b1
Date: November 12, 2025 at 5:39 AM
Beacuse there will be other protocols we will have to support soon, and implement new Agent implementations. We can provide all first class remote agent implementations from this package.
Unsafe Template Package May Allow Malicious Code Injection in internal/llminternal/agent_transfer.go (#249)
Commit: b51b0ee
Date: November 11, 2025 at 10:31 AM
- fix: semgrep_go.lang.security.audit.xss.import-text-template.import-text-template_internal/llminternal/agent_transfer.go_21
- Reorder import statement for 'slices'
---------
Co-authored-by: Dmitry Pasiukevich
Commit: 9157fd1
Date: November 11, 2025 at 10:15 AM
- Improve readability in examples
Developers usually copy/paste these sample. Provide minor readability improvements.
- Fix typo in createAgent function name
---------
Co-authored-by: Dmitry Pasiukevich
Commit: e385395
Date: November 11, 2025 at 9:53 AM
- Remove the cmd/launcher/adk package
- Rename adkConfig to config
- Remove config parameter in AddSubrouter method
---------
Co-authored-by: Dmitry Pasiukevich
Commit: c6af0f0
Date: November 11, 2025 at 9:37 AM
- Fix refine usage golang example to handle only weather query
Commit: e4c5333
Date: November 11, 2025 at 9:36 AM
- Fix a few typos and one inconsisent naming issue
- Rename newVertexAiSessionService to newVertexAISessionService
- Apply Gemini's suggestions
Commit: 7e06e5b
Date: November 11, 2025 at 9:36 AM
Type aliases are useful for large scale refactoring for a gradual transition. They used to be used only exceptional cases when the old code has to keep using the old type.
Commit: 2325424
Date: November 10, 2025 at 1:34 PM
- Typo
- Update main.go
---------
Co-authored-by: Dmitry Pasiukevich
Commit: cbf8d4f
Date: November 10, 2025 at 12:46 PM
- refactor(mcp): integrate context propagation and signal-based cancellation
- Add signal handling to gracefully cancel the context on interrupt (SIGINT, SIGTERM)
- Update functions to accept context instead of creating a new one internally
- Pass the main context to MCP transport constructors for improved cancellation support
Signed-off-by: appleboy
- refactor: improve signal handling and cleanup unused imports
- Remove unused import of syscall
- Create cancellation context only for SIGINT (Ctrl+C), not SIGTERM
Signed-off-by: appleboy
- style: adopt Go-style octal file permissions throughout codebase
- Use Go-style octal notation (0o) for file permission arguments in os.MkdirAll and os.WriteFile
- Remove a few unnecessary blank lines at the end of main functions
Signed-off-by: appleboy
---------
Signed-off-by: appleboy
Commit: db9205e
Date: November 10, 2025 at 12:25 PM
- Add .gitignore for adk-go
- Remove vendor
- Draw a line for the function of the gitignore
- Remove lines
- Remove empty line from .gitignore
---------
Co-authored-by: Dmitry Pasiukevich
Commit: 185ba8d
Date: November 7, 2025 at 3:03 PM
Commit: 25c34c5
Date: November 7, 2025 at 12:03 PM
- Remove examples.Run method and update public docs
Commit: 68a9844
Date: November 7, 2025 at 10:27 AM
Commit: 693f47b
Date: November 7, 2025 at 10:26 AM
Refined docs for workflowagents, memory & model packages. (#223)
Commit: b82cf83
Date: November 6, 2025 at 6:00 PM
- Add workflowagents comments
- Add model comments
- Add memory package comments
- Update agent/workflowagents/loopagent/agent.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
- Update agent/workflowagents/sequentialagent/agent.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
- Update agent/workflowagents/parallelagent/agent.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
- Update agent/workflowagents/sequentialagent/agent.go
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
- Update memory/service.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>
Commit: a8f2b0e
Date: November 6, 2025 at 2:59 PM
- minor doc fixes
- remote a2a agent example
- set partial flag
- correct net/url usage
- remove addressChan
- fix reassignment of err from parent scope
Commit: 4251f7d
Date: November 6, 2025 at 1:55 PM
- Comments for cmd/adkgo/
- Comments for cmd/launcher/
- Make web and console launchers unexported
Commit: 18150b3
Date: November 6, 2025 at 12:32 PM
Commit: b81ab80
Date: November 6, 2025 at 12:31 PM
- Add gemini tracking headers.
- Add httprr test validating request headers
- Change func name
- Change test error message
Commit: bd771b9
Date: November 6, 2025 at 11:05 AM
Commit: ccd61aa
Date: November 5, 2025 at 9:27 PM
- Update LICENSE file name and go doc link
- Update README.md
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>
Commit: 257321e
Date: November 5, 2025 at 7:23 PM
Use google.golang.org/adk instead of github.com target
Commit: 4e594e4
Date: November 5, 2025 at 7:00 PM
Commit: 4e3f8ef
Date: November 5, 2025 at 2:48 PM
- Add args to CloudRun deployment for a2a agent card
- minor fix
Change dbsession state to validate key and use session.ErrStateKeyNotExist; Add session package documentation. (#208)
Commit: dec97c7
Date: November 5, 2025 at 2:06 PM
Commit: 2ebcd61
Date: November 5, 2025 at 1:18 PM
Commit: dd8b832
Date: November 4, 2025 at 3:22 PM
Those were added in the very beginning. But we kept Live feature support for later adk-go versions.
I'm removing these fields to adoid confusion from users.
Commit: fc146ad
Date: November 4, 2025 at 12:24 PM
- Removed cmd/adkgo/run/local
- Removed cmd/adkgo/root/build
- Remove non-existing imports
Commit: 1ac0a25
Date: November 4, 2025 at 12:17 PM
Commit: 294c298
Date: November 4, 2025 at 12:09 PM
- use jsonrpc instead of grpc
- fix test and comment
- remove wrapLaunchers
- use a2a 0.3.0
Commit: 82bef94
Date: November 4, 2025 at 11:25 AM
- build webui comments
- deploy cloudrun comments
- Removed http/2 support - no longer needed by A2A
- deploy comments
- internal/cli/util comments
- examples / web / ... comments
- cmd / restapi comments
- cmd / launcher comments
- cmd / adkgo comments
- Readme update
- linter fixes
- renamed WebSublauncher to Sublauncher
Commit: c390af8
Date: November 3, 2025 at 6:39 PM
- universal launcher test example
- use Host header
- fix lint
- simplify
- a2a launcher test
- test comment
- Apply suggestion from @dpasiukevich
---------
Co-authored-by: Dmitry Pasiukevich
Commit: bcf15ed
Date: November 3, 2025 at 6:29 PM
escalate exiting before yielding all current sub agent events (#196)
Commit: deddaac
Date: November 3, 2025 at 6:26 PM
- Fix ev.Escalate exiting before yielding all current sub agent events
- Replace log with testing log on TestNewLoopAgent
Commit: cc1a990
Date: November 3, 2025 at 4:03 PM
- Updated cloudrun build and deployment
- Added control over launchers (a2a, api, webui)
- Visibility fixes
- Comments & visibility fixes
- Minor fixes
Commit: 96f2973
Date: November 3, 2025 at 3:20 PM
- Add rootname validation to parentMap, ensuring that no child shares the root agent name
- Add subAgent uniqueness validation
- Change unique name message
Commit: d682fb2
Date: November 3, 2025 at 10:26 AM
- Fix incorrect LlmAgent validation on findAgentToRun
- Change TestNewSequentialAgent to loop validation
- Fix TestNewSequentialAgent, ignore stateDelta
Commit: 64491bf
Date: October 31, 2025 at 5:18 PM
- Add state delta modification by agent callbacks and model callbacks.
- Change tool context to pass state delta
- Remove endInvocation bool type
- Change AfterAgentCallback to create new event.
- Add nil stateDelta validation to CallbackContext state
- Fix state delta test comparisons
- Replace base_flow tmpEvent with stateDelta reference
Commit: 0befb4d
Date: October 31, 2025 at 2:44 PM
- Moved webui files
- Rewritten universal launcher
- Changed config struct
- Updated example quickstart
- Cleaning unsued code, minor fixes
- Updated examples
- Updated README for examples
- Rewritten universal launcher
- Removed web base
- Initial A2A support
- a2a fix
- Improved error message
- General launcher def
- Universal & console implementation
- New version of web + api launcher
- Quickstart example with web api
- Temporarly disabled
- Added A2A launcher
- Removed unneeded code
- Added WebUI launcher
- Fixes for API and Web launchers
- Updated Examples/quickstart
- Console code cleaning
- Code cleaning & comments
- Full & prod
- Updated examples/quickstart
- Updated examples
- Lint fix
- Moved api a2a and webui under web package
- Removed comments
- A2A fixes
- Added A2A Reflection
- Updated README.md for Examples
- Comment fix in prod launcher
- A2A update fix
- Unified API_KEY: GOOGLE_API_KEY instead of GEMINI_API_KEY
- Fixed typos
- Minor fixes
- Introduced root agent for agent loader
- Added non-failing NewSingleAgentLoader and possibly failing NewMultipleAgentLoader
- Comments for AgentLoader
- Refactor of launchers
- Updated examples
- Added memory service to adk config
- Comments
- Comments
Commit: 15a76de
Date: October 31, 2025 at 10:27 AM
- Add user scoped artifacts to inmemory artifact service
- Change userPathPart const to userScopedArtifactKey
- Add userScopedArtifactKey comment
Commit: 91262b5
Date: October 31, 2025 at 9:17 AM
- Add state scopes to inmemmory session service
- Fix TestRunner_SaveInputBlobsAsArtifacts using stale session copy
- Add stateMap alias, fix inmemoryService create to return copy.
- Remove TestMutableSession_Set_Persistence. Directly setting the state will not persist it.
- Add comment to appendEvent
- Fix typo
- Update session prefix references
Commit: 5eb9968
Date: October 31, 2025 at 9:06 AM
- update a2a-go
- make config accessible through internal/agent
- agent skill builder util
- use latest a2a
[ADK-Web] Add OPTIONS to the delete session / artifact endpoints (#191)
Commit: e96b399
Date: October 30, 2025 at 2:36 PM
Commit: 3248d98
Date: October 30, 2025 at 1:08 PM
- fix tests
- fix Fail in goroutine after test has completed
- cleanup
Commit: de4e4a1
Date: October 30, 2025 at 10:48 AM
- Add DatabaseSessionService
- Fix api changes
- Merge gomod
- Fix go mod tidy diff
- Add missing err validations on test db start
- Change service-test to run in sqlite instead o spanner
- Fix applyEvent timestamp
- Removed spanner dependency
- Clear comments
- Change gorm types visibility
- Add error context, and dynamicJSON json nils
- Add test to append event to session with existing events
- Update session prefix references.
Commit: d80c2c1
Date: October 30, 2025 at 9:35 AM
- feat: Add InstructionProviders
Added for instruction and globalinstruction.
Also exported util InjectSessionState func.
- Remove duplicate methods after rebase
- Add tests and expose util/instructionutil package
[ADK-Web] Add 501 Unimplemented routes for the routes Web UI uses (#188)
Commit: 7cdc189
Date: October 29, 2025 at 1:48 PM
Commit: d458a22
Date: October 29, 2025 at 10:37 AM
Commit: 5b52d9b
Date: October 28, 2025 at 12:27 PM
Commit: a6cc67e
Date: October 24, 2025 at 11:03 AM
Implements a remote a2a agent.
An agent can be created as `remoteagent.New(remoteagent.A2AConfig{...})`.
The agent can be configured with either an `a2a.AgentCard` or an `AgentCardSource` pointing to a local file or an http resource.
Other options contain configurations for the various steps of execution: card resolution, message send configuration, client creation.
For remote agent input:
1. If the last session event is a user function tool response: send content parts as new message parts with the task and contextID matching those on the matching function tool call.
2. Combine parts from all the events after the last event authored by the remote agent and present them as a single user message.
For remote agent output:
1. `TaskStatusUpdate` event parts are converted to thoughts, unless it's the final task status updates.
2. Empty `TaskArtifactUpdate`s (no parts) are skipped.
3. Every event has a `CustomMetadata` with task and context IDs, the original A2A request and a matching A2A event.
4. If an error is generated during an execution it's converted to a session event with ErrorMessage.
These are slightly different from Python, but changes changes were made based on the implementation of `adka2a.NewExecutor`, I'll open a bug in their tracker to reconcile implementations.
Commit: 37e0403
Date: October 24, 2025 at 6:57 AM
1. `getUserFunctionCallAt` returns a non-nil response if the last session event is a user function call response.
2. `toMissingRemoteSessionParts` collects parts from all the events not present in the remote agent session. An event is considered present in a remote session if there's an event at a higher index with remote agent as an author.
3. `presentAsUserMessage` takes an event authored by another agent and converts it to a user event describing the provided event, eg:
Commit: 959ef80
Date: October 24, 2025 at 5:54 AM
This clarifies for users which actual values are available.
Commit: adb487b
Date: October 23, 2025 at 6:35 PM
- Implement BeforeToolCallback
- Implement AfterToolCallback
- Address Comments
- Address comment vol2
Commit: 4d5117b
Date: October 23, 2025 at 3:54 PM
Commit: f4f6a84
Date: October 23, 2025 at 2:27 PM
- Add `adka2a` package `a2a.Event -> session.Event` converters for `remoteagent` package to use. (#167)
- Move `adka2a.toMapStructure` to `internal/utils/ToMapStructure`. The utility is used by `adka2a` and `remoteagent` for converting structs to metadata `map[string]any` values.
- Rename and export utility functions for creating metadata keys. Python adds `adk_` prefix for keys it stores in a2a metadata, and `a2a:` prefix for keys it stores in `session.Event.CustomMetadata`, I'm doing the same.
Commit: 93eccf7
Date: October 23, 2025 at 1:35 PM
Commit: d759896
Date: October 23, 2025 at 12:32 PM
Commit: 18bc277
Date: October 22, 2025 at 1:48 PM
From the feedback of ADK team, Toolset is one word so it should be named
as Toolset.
Commit: 977d08a
Date: October 22, 2025 at 12:20 PM
- Extended AgentLoader to provide a method for accessing a Root() agent. This will likely be useful for restapi as well.
- Extended cmd/web/server.go to support exposing a root agent via a2a.
Commit: 484c1b3
Date: October 22, 2025 at 12:18 PM
Commit: ee2a659
Date: October 22, 2025 at 11:24 AM
Commit: 7651a0a
Date: October 22, 2025 at 9:02 AM
- Move each tool to its own package
This converges the tools API, as now some tools are in its package and
some are in the tool package.
- Rename functiontool.Function -> Func
- Merge long_running_function_tool to function_tool
Commit: 8aca055
Date: October 22, 2025 at 8:44 AM
1. They now return actual responses instead a subset of it. This should
make it more prone to changes in future.
2. Added a context to parameters to get rid of context.Background() in
the Artifacts/Memory implementation.
Commit: 68f6428
Date: October 21, 2025 at 7:58 PM
- Toolset is not a tool anymore
- Update package mcptool -> mcptoolset
Commit: d3427db
Date: October 21, 2025 at 12:24 PM
Right now it's a pointer, which requires checking for nil or explicitly
setting the field.
In addition, I've made llm.CreateLLMResponse func as adk internal, as
it's not needed to be in the public API.
Commit: 2198be0
Date: October 20, 2025 at 6:53 PM
Commit: 3a9f522
Date: October 20, 2025 at 3:10 PM
Commit: 94d7967
Date: October 20, 2025 at 12:26 PM
Commit: 20fee56
Date: October 20, 2025 at 8:13 AM
Executor invokes an ADK agent and translates session.Events to a2a.Events according to the following rules:
- If the input doesn't reference any `Task`, produce a `TaskStatusUpdateEvent` with `TaskStateSubmitted`.
- Right before `runner.Runner` invocation, produce `TaskStatusUpdateEvent` with `TaskStateWorking`.
- For every `session.Event` produce a `TaskArtifactUpdateEvent{Append=true}` with transformed parts.
- After the last `session.Event` is processed produce an empty `TaskArtifactUpdateEvent{Append=true}` with `LastChunk=true`, if at least one artifact update was produced during the run.
- If there was an `LLMResponse` with non-zero error code, produce a `TaskStatusUpdateEvent` with `TaskStateFailed`.
Else if there was an `LLMResponse` with long-running tool invocation, produce a `TaskStatusUpdateEvent` with `TaskStateInputRequired`.
Else produce a `TaskStatusUpdateEvent` with `TaskStateCompleted`.
There's no `TaskAuthRequiredState` production rules at the moment, because A2A assumes an Agent is still executing while waiting for auth credentials. A proper integration will require more research and planning.
Commit: 4b493e0
Date: October 20, 2025 at 7:51 AM
Event processing logic required for adka2a adapter.
- For every `session.Event` produce a `TaskArtifactUpdateEvent{Append=true}` with transformed parts.
- After the last `session.Event` is processed produce an empty `TaskArtifactUpdateEvent{Append=true}` with `LastChunk=true`, if at least one artifact update was produced during the run.
- If there was an `LLMResponse` with non-zero error code, produce a `TaskStatusUpdateEvent` with `TaskStateFailed`.
Else if there was an `LLMResponse` with long-running tool invocation, produce a `TaskStatusUpdateEvent` with `TaskStateInputRequired`.
Else produce a `TaskStatusUpdateEvent` with `TaskStateCompleted`.
Commit: cf95b74
Date: October 17, 2025 at 12:56 PM
Adds functionality to run the same code in console or web (according to command-line params).
Allows easier e2e tests for examples
- Universal launcher for web
- Update example for web
- Move ADK Web UI distr files
- Added support for console
- BuildLauncher fix
- Example Web - fix
- Add NewSingleAgentLoader
- Renaming & small fixes
- Comments & licences
- userloop removal
- Config by value
- lint fix
- Bringing back userloop
- Added MatchingAgent to retrieve an agent to be run
- Name / packege conflict fix
- BuildLauncher fix
- Added dedicated error message for empty agent name
- Lint fix
- Redesigned Agent loaders
- Comments
Commit: 7cc2548
Date: October 15, 2025 at 1:46 PM
Commit: 051d855
Date: October 13, 2025 at 8:44 PM
- Add ExitLoop Tool
- Omit type int from declaration
- Change exit loop tool to "exit_loop" and remove unused wantErr
- Merge fix, api changes
Commit: a223885
Date: October 13, 2025 at 1:32 PM
agent: extend ReadonlyContext to match the change in python's (#154)
Commit: 41760bc
Date: October 13, 2025 at 11:11 AM
Python's ReadonlyContext/CallbackContext/ToolContext will allow
to access user id, branch, etc.
In the mean time, fix the tool.Context so it doesn't allow to
access to InvocationContext.
And add tests.
Commit: 08020f8
Date: October 10, 2025 at 4:11 PM
- Add agent outputKey and state injecting for instructions
- Add sequentialCode sample
- Add nil event validation for save to state, and propagate error for state.Set
- Change TestInjectSessionState to use in memory implementations
- Change output key to llmagent.State
Commit: bb28888
Date: October 9, 2025 at 2:51 PM
- Add check parent is llmagent in tranfer agent targets.
- Add AgentWithParallelParent and AgentWithSequetialParent tests to agent transfer
- Add AgentWithSequentialSubagent test case
Commit: 48a3a1c
Date: October 9, 2025 at 1:35 PM
Commit: 735e0fe
Date: October 9, 2025 at 1:23 PM
[ADK-Web] [ADK-Core] Add OpenTelemetry integration; Implement trace event endpoint (#128)
Commit: af7b60a
Date: October 9, 2025 at 11:43 AM
Commit: b6e070d
Date: October 9, 2025 at 8:03 AM
Commit: 140b564
Date: October 8, 2025 at 7:47 AM
Commit: 1c967fb
Date: October 8, 2025 at 7:47 AM
Also:
- Updated the struct name: memoryservice.MemoryEntry -> memory.Entry
- Updated the internal package name: internal/memoryinternal ->
internal/memory (with imemory import name) to make the internal
package naming consistent.
Commit: b5fb31f
Date: October 7, 2025 at 11:28 PM
Commit: d893163
Date: October 7, 2025 at 1:45 PM
It's replaced with InvocationContext, ReadonlyContext and
CallbackContext to have ADK conformity.
Commit: 76e862b
Date: October 6, 2025 at 12:14 PM
- Embed resources and serve them from the executable
- Change CLI UI - expose errors less (gcloud writes non-error messages to stderr a lot)
- Improve help for main commands
- Improved error reporting
- Removed copying static WebUI content from container creation
- Merge fix
- Removing flags for webui distr
- Lint fixes
Commit: 0fd811f
Date: October 6, 2025 at 12:09 PM
Commit: a594958
Date: October 3, 2025 at 9:29 AM
In all places we use New(Config). The runner had New(*Config). Updating
it to align to one consistent approach.
Commit: 9b53121
Date: October 3, 2025 at 8:10 AM
- Rename artifactservice -> artifact
- Shorten the dir name for artifactsinternal -> artifact
- Rename artifact.Mem() -> artifact.InMemoryService
- Move artifact service test suite to internal
Commit: edad99a
Date: October 2, 2025 at 8:10 PM
- Rename sessionservice -> session.Service
Removed StoredSession and Session.ID for ADK conformity
Commit: 28e3009
Date: October 2, 2025 at 5:02 PM
Other ADKs' BaseLLM class exposes only one method: generate_content(req,
stream) -> iterator
[CLI] Moved to static ADK Web distribution for cloudrun and local run (#127)
Commit: acb5dfb
Date: October 2, 2025 at 11:45 AM
- CLI for command build webui
- Added compiled version of adk-web - https://github.com/google/adk-web/commit/280f08de309dac5a65dd7a010be85e1d8dc2b5a0
- Added runtime generation of /assets/config/runtime-config.json
- Modified command line description
- Modified the way the local server is run
- Modified the deployment to cloudrun to use compiled version of adk-web
- Error handling fixes
- Removed unused variables
- Text changes. Default redirection from / to /ui/
- Merging fixes
- Cloudrun deployment with ingress set to "all"
- Lint fix - Err assigment
- Removed commented code, minor fixes
- Removed runtime-config.json (generated in runtime)
- Commented runtime generation of /assets/config/runtime-config.json
- Removed rs/cors implementation
- go mod tidy
- Removed flags for starting ADK REST API and/or ADK Web UI
- Minor code structure update
Commit: ea22150
Date: October 2, 2025 at 9:35 AM
Also 2 types rename:
llm.Request -> model.LLMRequest
llm.Response -> model.LLMResponse
Commit: ce11bc5
Date: October 1, 2025 at 12:06 PM
- Add StreamAggregator model proxy
- Add stream aggregator tests
- Modify the implementation to apply the aggregator directly to the model.
- Fix set_test to use llm.Model.
- Add llmResponse create function using GenerateContentResponse
- Add test for create llm request
- Change gemini_test readResponse to use custom struct
Commit: ca9cdbc
Date: September 30, 2025 at 2:42 PM
llmagent.Config.GenerateContentConfig was dropped. Correctly pass it.
Add a test that uses llmagent's handling of streaming genai api
and thinking mode, which indirectly tests GenerateContentConfig
configuration handling.
[ADK-Web] Add missing functionality in graph endpoint implementation (#125)
Commit: 556f806
Date: September 30, 2025 at 2:27 PM
Commit: 693415d
Date: September 29, 2025 at 1:21 PM
Commit: 4d0e5c3
Date: September 29, 2025 at 10:22 AM
Update LLMAgent to remove DisplayName from media files in Gemini API. (#117)
Commit: 1599bc5
Date: September 26, 2025 at 1:45 PM
Update LLMAgent to remove DisplayName from media files as Gemini API doesn't support that
Commit: 0d91e9a
Date: September 26, 2025 at 11:31 AM
- Fix LoadArtifactsTool
There were two issues with load artifacts tool:
Unmarshalling json string array, it was treating string array as []any instead of []string, because of it it wasn't converting properly, leaving the artifactsName array empty.
The prompt wasn't completely right, the older prompt ran into issues like failing to process the artifact since it thought it could load them once and be done. But we want it to issue the load_artifact function call every time it needs to access them. I've asked about the issue to Java adk developer and they fixed it on their side as well.
I've also added example where I insert two artifacts and you can ask the agent about it and it can describe them without issues.
Commit: f1bef15
Date: September 26, 2025 at 9:39 AM
- CLI for command build webui
- Improved error handling & comments
- Function name update
- Naming and text fixes
- Moved cli util to internal
- Import fix for cli/util
Commit: 80de3f1
Date: September 25, 2025 at 6:53 PM
Commit: 9899067
Date: September 25, 2025 at 3:26 PM
- Add rearrange events to content processor
- Add complete long running function test suite.
- Replace contentWithPartsByModel/user with gen.ai function
- Change test to use tool.Context
- Moved event methods to content helper functions
- Add rearrange test suite to content processor
- Simplify long_running_function tests with cmp
- Improve failure message for test slice length checks
Commit: fe3a283
Date: September 25, 2025 at 2:41 PM
- Add GCSArtifactService.
- Fix dependecies diff
- Add io.Close err validation
- Standardize function and method naming for gcsService.
Rename functions and methods within the gcsService to improve clarity and align with Go conventions.
- Add artifactservice/gcs package, add request detailed validation
Moved the gcs artifact service implementation to a separate gcs package, and the test suite to artifactservice_test.
- Make mockable_gcs interfaces unexported
The mockable_gcs interface is only relevant for testing and its use can be limited to the gcs package.
- Add ValidatorTestCases interface to reduce duplicated code on test execution
- Move mockable_storage to test file
- Improve gcs service error handling, add support for parts with text. Add parallel execution on delete all versions.
- Add err validation to setAttrSelection
- Change test suite to include NewPartFromText example
- Add Client.Options to gcs artifact service constructor for configuring the client
- Add err context for request validation in artifact service
all: update to jsonschema-go@v0.3.0, modelcontextprotocol/go-sdk@v0.7.0 (#120)
Commit: f1d8000
Date: September 25, 2025 at 12:38 PM
update to jsonschema-go@v0.3.0
update github.com/modelcontextprotocol/go-sdk@v0.7.0
jsonschema-go@v0.3.0 isn't compatible with older version of mcp-go
Commit: 20c97a8
Date: September 25, 2025 at 7:34 AM
- feat: Add MCP tool set basic logic
Tool sets are used for their Tools() method to extract tools during llm.request preprocess
Commit: c7ab027
Date: September 24, 2025 at 11:43 AM
Commit: e765c59
Date: September 23, 2025 at 3:03 PM
Commit: 7e70cc3
Date: September 23, 2025 at 9:52 AM
Commit: 4fa468a
Date: September 19, 2025 at 2:21 PM
Commit: 1dd3df1
Date: September 19, 2025 at 2:02 PM
- Changed cli to adkgo to make go install easier
- Changed cli to adkgo to make go install easier
Commit: 025b502
Date: September 19, 2025 at 11:55 AM
Implement basic graph representation of agents structure.
Commit: 8a2eb76
Date: September 19, 2025 at 11:48 AM
Implementation of artifact handlers in ADK-Web REST API.
Commit: f951e94
Date: September 19, 2025 at 11:04 AM
Implementation of runtime and app endpoints in ADK-Web REST API
Commit: 8205a65
Date: September 19, 2025 at 10:30 AM
- Initial CLI version with cloudrun deployment
- Added pretty stdout/stderr forwarding from
commands
- Rearranged CLI commands, added web server
- Added cli descriptions
- Housekeeping
- go.mod updates
- Added licence headers
- Added licence headers
- Simplified ReprintableStream
- Updated licence headers
- Minor fixes
- Removed comments
- Added comments
- Added comments
Commit: 4b8df2e
Date: September 18, 2025 at 3:15 PM
Commit: cba136a
Date: September 18, 2025 at 8:31 AM
Initial version of implementation of session service in ADK Web REST API.
Commit: 366201d
Date: September 17, 2025 at 3:55 PM
Use real artifact service implementation in load artifacts tool tests (#101)
Commit: 11eec05
Date: September 17, 2025 at 3:47 PM
Commit: 26a8c68
Date: September 17, 2025 at 3:04 PM
- Add LongRunningFunctionTool, Moved TestAgentRunner to internal testutils package.
Added LongRunningFunctionTool struct, the callIDs to long running tool are now stored in the Event.
- Modify findLongRunningFunctionCallIDs to use slices.Collect and maps.Keys.
Changes to longRunningTool and Tool comments.
- Add runner.Config to NewTestAgentRunner
Commit: 3ae0694
Date: September 16, 2025 at 11:10 AM
Initial structure for ADK-Web REST API service.
Commit: a304842
Date: September 16, 2025 at 10:02 AM
Commit: 0ab6f11
Date: September 15, 2025 at 8:34 PM
Commit: 66870dc
Date: September 12, 2025 at 11:14 AM
Change function.Run to create wrapper map if result can't be unmarshaled (#98)
Commit: 09ae8a8
Date: September 11, 2025 at 10:51 AM
- Change function.Run to create wrapper map if result can't be unmarshaled
- Update tool/function.go explicit nil err return
Co-authored-by: Dmitry Pasiukevich
---------
Co-authored-by: Dmitry Pasiukevich
Commit: 6908892
Date: September 10, 2025 at 8:16 AM
Commit: 4f35d0e
Date: September 9, 2025 at 12:48 PM
- Add memoryservice with in-memory implementation.
Reflects
https://github.com/google/adk-python/tree/e45c3be23895b5ec68908ad9ee19bd622dcbd003/src/google/adk/memory
It currently operates with session.Session. I'd follow up regarding the
use-cases for Session vs StoredSession and update if needed in future
PR.
Inmemory implementation is based on the 2-level map: {appName, userID} ->
sessionID -> {event + eventWords}
eventWords is a precomputation to fetch based on the read request words.
- Skip joining string
all: replace jsonschema module with github.com/google/jsonschema-go (#92)
Commit: b246f59
Date: September 5, 2025 at 5:38 PM
Updated httprr files to reflect changes in jsonschema json marshalling
Reference: internal CL/803459492 by rfindley
Commit: cc5edc3
Date: September 5, 2025 at 12:32 PM
Commit: f3d3773
Date: September 3, 2025 at 7:50 PM
- Make gemini tool adapter.
- Add a default google_search tool.
- Rename agent/context.go
Commit: a1cb067
Date: August 29, 2025 at 4:41 PM
- Add parallel agent.
- Handle errors from subAgents in the parallelAgent
- Handle case if main goroutine exits during cancelled context
Commit: be08481
Date: August 28, 2025 at 8:59 PM
- Update after agent callback to receive resp and error.
This would allow the callback implementation to inspect and take action
based on the actual agent response and errors.
- align test case field names with the api struct
Commit: 73f639c
Date: August 28, 2025 at 8:53 PM
- Minimize tool interface.
- Rename package itype -> toolinternal
- Update tool constructors to return Tool interface.
Also added test to verify tools implement toolinternal interfaces.
- Use t.Fatal with string literal
Commit: b7492cf
Date: August 26, 2025 at 5:29 PM
Commit: a19fcac
Date: August 21, 2025 at 1:19 PM
- Moving the original httprr files to 'rr' folder with a proper LICENCE file
- Updated LICENCE (contains two licences for
different parts )
- Separate httprr and genai (genai goes to internal/testutil)
- removed local .vscode/tasks.json
- Added README.md. Added information about licenses
- Renamed internal testutil - got rid for 'ForTesting' from the function name
Commit: 500d94f
Date: August 21, 2025 at 8:47 AM
Originally it held all public adk types together but we restructured it
to separate own packages.
Commit: 914bc3a
Date: August 21, 2025 at 8:32 AM
- Migrate agent_run_config.
Added as runner.AgentRunConfig for users to specify runtime
configuration.
Commit: 4c853b7
Date: August 20, 2025 at 5:52 PM
Commit: c6aadfc
Date: August 20, 2025 at 5:40 PM
Commit: b262229
Date: August 20, 2025 at 5:40 PM
Commit: 1bcecf5
Date: August 20, 2025 at 4:51 PM
As a part of the overall reconsuction effort, the contents of the types package is living in their corresponding package. Removing the dead/duplicate code that is not used for the rest of the packages.
Commit: e7df4a5
Date: August 20, 2025 at 8:50 AM
1. Used t.Context() in tests instead of ctx.Background()
2. Minor updates to the in-memory service implementation:
* no error on delete not_found
* required fields set validation
Commit: ff5f5ed
Date: August 19, 2025 at 7:27 AM
When an agent is created, adk automatically sets a parent for subagents.
This is done in the "agent" package.
For LLMAgent creation this means, it's needed to propagate "self" to
this code to ensure each subagent.Parent is set with a proper concrete
type of llmagent (and not just a base agent).
To get rid of the "self" field in the public API, we can move the agent
tree setup to an internal package, used by runner on creation.
Also, this shows an example of propagating data from runner to the
agent.
Such propagation will be done only for 2 cases:
- agent hierarchy (created by runner, needed by LLMAgent for transfer
logic).
- agent run config (set by users to control agents).
Commit: 26eace3
Date: August 18, 2025 at 2:08 PM
Commit: dedaf8b
Date: August 18, 2025 at 1:36 PM
To sync with g3. Genai lib version 1.13 client generated URLs with
double //. This was captured by httprr.
But internally we use version genai 1.20 and its client has proper / in
the URIs.
This diff caused test failures internally due to httprr URL
mismatch.
Commit: 3c040a3
Date: August 18, 2025 at 7:36 AM
- Move llm agent code to new packages.
1. Now it uses new session, llm, agent, llmagent packages.
2. LLMAgent request processors are now moved to the internal package.
3. Test case logic is kept the same everywhere.
4. Diffs with the doc (these are temporary to simplify the
migration):
* Tool interface has ProcessRequest method and llm.Request has Tools
field. This is to keep current request_processors logic for
llmagent.
* agent.Config accepts Self field to allow setting correct entity as a
parent.
Commit: 363d074
Date: August 13, 2025 at 3:04 PM
- Add agent_context implementation.
It's mostly a placeholder for now.
agent.NewContext(...) will be used by the runner or agent packages to
create a new context for each agent Run call.
- Update runner from types package.
Now runner uses new packages: session, agent.
There is only types.AgentRunConfig but this will be updated in
subsequent PRs.
Remove internal runner -- because callback logic (the only logic there)
is now moved to agent, wrapping each agent Run.
- Update workflow agents to use new packages.
Workflow agents are now structured as:
agent/workflowagents
loopagent/
sequentialagent/
And they are created now with
loopagent.New(...)
sequentialagent.New(...)
- review comments
Commit: fef856d
Date: August 12, 2025 at 9:01 AM
From Builder{}.Agent() to more agent.New(agent.Config{}) and similarly
for LLMAgent.
Introduce internal/llmagent package to allow reading LLMAgent properties
in adk (e.g. runner).
Commit: 69503f3
Date: August 11, 2025 at 8:05 AM
- Pinned action dependencies to commit hashes
- Parallel lint and test jobs in PR check workflow
- Enforce tidy `go.mod`
- Enforce `goimports` (and transitively `gofmt`)
- Use `golangci-lint` with default linters and `goheader` for license header enforcement
- Add a nightly workflow that runs shuffled test with race detector and cache ignore
- Run `govulncheck` in the nightly workflow
- Make code changes for `golangci-lint` to pass
- Add concurrency control block for cancelling CI runs if multiple commits modifying a PR are pushed in rapid succession
Commit: 77293cb
Date: August 8, 2025 at 10:10 AM
Let's do it iterativery, otherwise the PR may get quite large.
Commit: f4a0689
Date: August 8, 2025 at 8:35 AM
- Add sessionservice definitions
- Add inmemory sessionservice
Commit: 2c77bb6
Date: August 6, 2025 at 10:03 AM
- Add loop and sequential agents.
In addition also update runner to set event.Author if it's not set (e.g.
by a custom agent).
Logic to determine author is same as in adk-python: if event.contents.author
== "user" -> "user" else agent_name.
- review comments
- update code to fetch latest types
Basic LLMAgent implementation based on the restruct proposal. (#59)
Commit: a63b6c6
Date: August 5, 2025 at 8:16 PM
- Add llm package.
It provides basic LLM definitions.
- Add new entities for the session package.
Current code is kept to have a buildable code. Later we will
update/move/cleanup this code.
- Add entities for agent and tools packages.
- Add LLMAgent implementation
Commit: a6c7b48
Date: August 5, 2025 at 2:32 PM
This reverts commit 31206ec096b176480f6f05b317eed97711f43364.
Commit: 935c761
Date: August 5, 2025 at 2:31 PM
This reverts commit c0a642e0b0ec86ad51bc20950f581f4e401200ff.
Commit: c0a642e
Date: August 5, 2025 at 1:58 PM
Commit: 31206ec
Date: August 5, 2025 at 11:15 AM
Commit: 86d3a16
Date: August 1, 2025 at 2:03 PM
- Add agent events to session service in runner.
Current implementation only adds user events.
- Remove test runner implementation in favor or adk.runner
Commit: bec9f02
Date: August 1, 2025 at 12:20 PM
The root of the module will host the documentation for users
and contributors.
Commit: b8e7b6d
Date: August 1, 2025 at 9:22 AM
Java example: https://github.com/google/adk-java/blob/main/core/src/main/java/com/google/adk/tools/GoogleSearchTool.java
Python example:
Python example: https://github.com/google/adk-python/blob/main/src/google/adk/tools/googlesearchtool.py
Commit: 3babda3
Date: July 31, 2025 at 10:44 AM
It hosts basic simple examples with the intention for new users to easily try out ADK Go.
Commit: f9c785d
Date: July 31, 2025 at 6:51 AM
Commit: a82f85b
Date: July 31, 2025 at 6:31 AM
This is similar to the in-memory session service, and built on top
of the omap.
Commit: 48a6557
Date: July 30, 2025 at 2:58 PM
Commit: b31ac57
Date: July 30, 2025 at 7:19 AM
Commit: fbe6ba9
Date: July 30, 2025 at 5:59 AM
Commit: 8c1db63
Date: July 29, 2025 at 7:51 AM
This reverts commit 0fbfaf374b8b0b89a71b698d01efaa96d796db17.
Commit: 0fbfaf3
Date: July 28, 2025 at 9:23 AM
This removes need to embed/cast between agent types.
Currently all fields are exported but if we decide it would be easy to hide them behind constructor and accessors.
Commit: e4d83d9
Date: July 25, 2025 at 8:18 AM
agent: replace BaseAgent with AgentSpec and simplify Agent interface (#38)
Commit: ccf7ac7
Date: July 25, 2025 at 5:54 AM
This change simplifies the Agent interface to be
```
type Agent interface {
Spec() *AgentSpec
Run(context.Context, InvocationContext) iter.Seq2[Event, error]
// TODO: RunLive
}
```
And consolidate common properties of ADK Agents into `AgentSpec`.
In the offline discussion, AgentSpec was suggested as a type in a sub package and used by LLMAgent and other custom agents. However, circular dependency makes it challenging and harder to maintain.
I hope it's not too bad to have AgentSpec along with the Agent.
The AgentSpec needs some initialization so it can be associated with the Agent that is containing the AgentSpec.
This is done by `Init`.
For example, if a logic in the AgentSpec needs to call the logic implemented in the containing Agent, it needs to know which Agent implementation it should use. See the usage of `AgentSpec.self` in this draft.
Instead of making the interface include methods like `Name`, `Parent`, `SubAgents`, `Description`, ...
I propose to have just `Spec()` that returns the Agent's AgentSpec. That will help us avoid expanding the interface.
Adding methods or fields to AgentSpec won't break custom agents in the future.
For LLMAgent, this PR experiments with the variadic Option
that can configure both LLMAgent's AgentSpec and LLMAgent's own properties.
Powered by ChangeCrab