Commit: e0c09d1
Date: November 19, 2025 at 8:01 AM
Signed-off-by: Koichi Shiraishi
$ 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
fix TraceMergedToolCalls() comment
fix untracked files
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:
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.
#257: Return http.Handler instead of SetupRouter in server/restapi/web (#259)
Commit: cffe3b0
Date: November 12, 2025 at 12:18 PM
Removed comments about the preferred integration method and the public SetupRouter helper.
Add a newline at the end of the file.
---------
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: 9157fd1
Date: November 11, 2025 at 10:15 AM
Developers usually copy/paste these sample. Provide minor readability improvements.
---------
Co-authored-by: Dmitry Pasiukevich
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: cbf8d4f
Date: November 10, 2025 at 12:46 PM
Signed-off-by: appleboy
Signed-off-by: appleboy
Signed-off-by: appleboy
---------
Signed-off-by: appleboy
Commit: 185ba8d
Date: November 7, 2025 at 3:03 PM
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
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>
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>
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: 18150b3
Date: November 6, 2025 at 12:32 PM
Commit: bd771b9
Date: November 6, 2025 at 11:05 AM
Commit: ccd61aa
Date: November 5, 2025 at 9:27 PM
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
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: 1ac0a25
Date: November 4, 2025 at 12:17 PM
Commit: bcf15ed
Date: November 3, 2025 at 6:29 PM
escalate exiting before yielding all current sub agent events (#196)
[ADK-Web] Add OPTIONS to the delete session / artifact endpoints (#191)
Commit: e96b399
Date: October 30, 2025 at 2:36 PM
Commit: d80c2c1
Date: October 30, 2025 at 9:35 AM
Added for instruction and globalinstruction.
Also exported util InjectSessionState func.
[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: 4d5117b
Date: October 23, 2025 at 3:54 PM
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: 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
This converges the tools API, as now some tools are in its package and
some are in the tool package.
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: 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:
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.
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
Commit: 7cc2548
Date: October 15, 2025 at 1:46 PM
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: 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:
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: 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: edad99a
Date: October 2, 2025 at 8:10 PM
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: ea22150
Date: October 2, 2025 at 9:35 AM
Also 2 types rename:
llm.Request -> model.LLMRequest
llm.Response -> model.LLMResponse
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
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: 80de3f1
Date: September 25, 2025 at 6:53 PM
Commit: fe3a283
Date: September 25, 2025 at 2:41 PM
Rename functions and methods within the gcsService to improve clarity and align with Go conventions.
Moved the gcs artifact service implementation to a separate gcs package, and the test suite to artifactservice_test.
The mockable_gcs interface is only relevant for testing and its use can be limited to the gcs package.
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
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: 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: 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
Added LongRunningFunctionTool struct, the callIDs to long running tool are now stored in the Event.
Changes to longRunningTool and Tool comments.
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
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
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.
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: be08481
Date: August 28, 2025 at 8:59 PM
This would allow the callback implementation to inspect and take action
based on the actual agent response and errors.
Commit: 73f639c
Date: August 28, 2025 at 8:53 PM
Also added test to verify tools implement toolinternal interfaces.
Commit: b7492cf
Date: August 26, 2025 at 5:29 PM
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
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:
logic).
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
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
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.
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.
Workflow agents are now structured as:
agent/workflowagents
loopagent/
sequentialagent/
And they are created now with
loopagent.New(...)
sequentialagent.New(...)
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: 77293cb
Date: August 8, 2025 at 10:10 AM
Let's do it iterativery, otherwise the PR may get quite large.
Commit: 2c77bb6
Date: August 6, 2025 at 10:03 AM
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.
Basic LLMAgent implementation based on the restruct proposal. (#59)
Commit: a63b6c6
Date: August 5, 2025 at 8:16 PM
It provides basic LLM definitions.
Current code is kept to have a buildable code. Later we will
update/move/cleanup this code.
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: 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.