Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
d2bedd0
Conformance fixes for change to yaml format and progressive sse (#672)
baptmont Mar 23, 2026
68be1e5
fix: preserve error details and finish reason in streaming response a…
baptmont Mar 24, 2026
5d2993b
feat: Implement and test recursive agent lookup by name. (#626)
hanorik Mar 25, 2026
b8eb8c5
feat: add GetArtifactVersion method to artifact service (#575)
hanorik Mar 25, 2026
9a6efea
feat: custom runner provider for adka2a executor (#680)
yarolegovich Mar 26, 2026
e44b228
Add session service test suite (#675)
baptmont Mar 31, 2026
a386bed
fix: fix data part conversions (#689)
nahapetyan-serob Mar 31, 2026
6eb2fa9
fix: correct json envelope for datapart (#695)
nahapetyan-serob Mar 31, 2026
5e5e139
chore: update a2a-go and fix double cleanup (#698)
yarolegovich Apr 1, 2026
090cbe5
feat: Introduce skill package, define frontmatter and helper function…
foxfrikses Apr 7, 2026
0ad77f7
feat: setup subrouter for pub/sub trigger (#704)
anFatum Apr 8, 2026
4c91d12
feat: update cloudrun deployment script to include pubsub (#712)
anFatum Apr 8, 2026
1890cee
feat: add telemetry attributes for cache read input tokens and reason…
pigorski Apr 8, 2026
c613610
feat: Define skill.Source interface and implement file system skill s…
foxfrikses Apr 8, 2026
ea1865b
feat(telemetry): add configurable LRU cache in debug telemetry to avo…
pawel-maciejczek Apr 8, 2026
a37ce95
feat: add the implementation of Eventarc subrouter (#713)
anFatum Apr 13, 2026
adeb90b
feat: Add agent engine deployment to ADK GO CLI (#715)
hanorik Apr 13, 2026
203a070
Update content processor to exclude toolconfirmation.FunctionCallName…
baptmont Apr 13, 2026
2ef1b4f
feat: update cloudrun deployment script to include eventarc subrouter…
anFatum Apr 13, 2026
336105a
feat: Allow toolsets implement toolinternal.RequestProcessor. (#730)
foxfrikses Apr 14, 2026
a68fb11
feat: Implement SkillToolset. (#733)
foxfrikses Apr 17, 2026
1495051
fix: adk-web sse error format (#734)
anFatum Apr 17, 2026
8c0e0fa
fix: add traceCapacity to the api config (#731)
anFatum Apr 17, 2026
b89683b
feat: Add skill Source proxy for preloading skills. (#745)
foxfrikses Apr 20, 2026
df03967
feat: Add preload frontmatters skill source proxy. (#748)
foxfrikses Apr 21, 2026
4093a8a
feat: Add merged skill source proxy. (#747)
foxfrikses Apr 22, 2026
a586408
Agent Engine support (#749)
kdroste-google Apr 23, 2026
346d720
refactor: remove manual session ID input and enable auto-creation in …
hanorik Apr 28, 2026
61b0fd1
feat: add support for updating existing Agent Engine instances (#755)
hanorik Apr 28, 2026
fe25b93
Add support for simple text instead of full genai.Content for stream_…
kdroste-google Apr 29, 2026
415c921
feat: make adk work with a2a-go/v2 (#701)
yarolegovich Apr 29, 2026
6ceec3b
refactor: rename experimental reasoning tokens attribute to gen_ai.us…
pigorski May 5, 2026
8369260
fix: propagate thought signature to first function call in mixed resp…
baptmont May 5, 2026
48ac84b
Added VertexAI MemoryBank support (#801)
kdroste-google May 8, 2026
120787d
fix the old adka2a public api depending on the new a2a-go/v2 (#813)
yarolegovich May 11, 2026
ae7aed4
ADK GO version update for LLM Request tagging (#816)
kdroste-google May 12, 2026
853c11b
Add parallel HITL function test (#817)
baptmont May 13, 2026
992c1c2
bump a2a-go version to have nil part fix (#827)
yarolegovich May 13, 2026
a242cb6
Changed model for gemini API to gemini-3.1-flash-lite (in examples) (…
kdroste-google May 15, 2026
3f835cd
feat(live): Add core bidirectional streaming support (#833)
baptmont May 15, 2026
402259c
chore: add Dependabot config for automated genai dependency updates (…
karolpiotrowicz May 16, 2026
8fb171b
feat(live): Add sequential agent live run (#835)
baptmont May 18, 2026
5fb72b9
feat(live): Add live example (#834)
baptmont May 18, 2026
3954b83
fix: Stop ignoring request Decode error in runtime. (#851)
foxfrikses May 18, 2026
ead8568
fix: Propagate StateDelta for non-streaming agent. (#854)
foxfrikses May 18, 2026
9eb7630
fix: Prevent nil deref when a tool doesn't implement tool.Tool interf…
foxfrikses May 18, 2026
2b79d38
feat(live): Add session resumption (#837)
baptmont May 18, 2026
e5c3f51
feat(live): Add streaming tools (#836)
baptmont May 19, 2026
236cab7
feat(live): Add audio cache for save artifact (#838)
baptmont May 19, 2026
f2aee53
chore: fix folder name (#859)
baptmont May 19, 2026
428efad
fix: user auth propagation not working in adka2a compat (#861)
yarolegovich May 20, 2026
96e74d1
fix: add validation for transfer agent (#824)
anFatum May 20, 2026
ffb3c53
fix replay_plugin: empty llmresponses and normalize function formatti…
baptmont May 22, 2026
50a84c0
fix: copy ThoughtSignature onto adk_request_confirmation parts (#763)
gustafvh May 25, 2026
a709192
fix: yield tool responses before confirmations (#765)
gustafvh May 25, 2026
f09fe89
fix: preserve Vertex AI function call IDs (#762)
gustafvh May 25, 2026
ae8321f
feat: update examples and cli launcher to use a2a-go/v2 sdk (#780)
nahapetyan-serob May 25, 2026
05d6b95
feat: adka2a structured error propagation (#874)
yarolegovich May 27, 2026
6e1fcdb
fix: a2a execution cleanup callback not triggered (#903)
nahapetyan-serob May 28, 2026
6c2384a
Context unification agent/context + internal/contenxt/callback_contex…
kdroste-google May 28, 2026
163763b
fix: preserve unrelated function events (#767)
gustafvh May 28, 2026
d19c167
Context unification: merged tool context to callbackContext (#871)
kdroste-google May 28, 2026
6516f76
feat: Add conformance test recording plugin (#890)
baptmont May 29, 2026
2472d61
fix: accept metadata-only SSE chunks instead of aborting stream in St…
kdroste-google May 29, 2026
f771a33
Add v2 checks (#937)
kdroste-google Jun 1, 2026
81a63d8
Context unification: switch all to not deprecated (#935)
kdroste-google Jun 2, 2026
a9a99a7
fix: bump x/net and otel OTLP exporters to patch govulncheck advisori…
karolpiotrowicz Jun 10, 2026
38b11f7
chore: complete Node 24 migration for GitHub Actions (#996)
karolpiotrowicz Jun 10, 2026
c6f168f
feat: add platform clock and UUID provider seams for deterministic ev…
DABH Jun 15, 2026
9f6080f
feat(agent): add StrictContextMock test double (#1019)
wolo-lab Jun 16, 2026
90091e2
fix: Allow manual setting of session IDs (#721)
dietb Jun 16, 2026
bfab1bd
docs: add AGENTS.md for AI coding agents (#1045)
karolpiotrowicz Jun 16, 2026
fea8596
fix(agentengine): support Gemini Enterprise AgentSpace streams (#777)
jankrynauw Jun 18, 2026
b304aaf
Get rid of context.Background (#1062)
kdroste-google Jun 18, 2026
ca2e3d5
fix: update built-in load_memory tool for compatibility with VertexAi…
nicholasbreckwoldt Jun 19, 2026
44e3d67
Main linter fixes (#1068)
kdroste-google Jun 19, 2026
5350266
fix(conformance): Add "system_instruction" keyNode processing (#1075)
baptmont Jun 24, 2026
caf798a
test(session/vertexai): add table-driven tests for FunctionCall/Respo…
nuthalapativarun Jun 30, 2026
5aefe31
chore: merge upstream google/adk-go v1.5.0
dmora Jul 13, 2026
0265e02
docs(model): document dual session-resumption carriers on LLMResponse
dmora Jul 13, 2026
bfda3b4
docs(liveflow): document relationship to the upstream live engine
dmora Jul 13, 2026
7cb8006
fix(runner): extend sub-runner plugin-inheritance guard to upstream R…
dmora Jul 13, 2026
4cfd2e8
docs(session): point LiveDiagnostics docs at RunLiveQueue after rename
dmora Jul 13, 2026
9617b71
docs(runner): warn pre-v1.5.0 fork callers on the rebound RunLive name
dmora Jul 13, 2026
cc9f756
test(runner): cover own-manager install on upstream RunLive plugin guard
dmora Jul 13, 2026
ab2389a
refactor(context): realign invocation context with upstream order and…
dmora Jul 13, 2026
700d279
docs(liveflow): add upstream engine goroutine leak to known-gaps list
dmora Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ runs:
steps:
- name: Set up Go
id: setup-go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: 'go.mod'
cache: false # wrapper for actions/cache that doesn't support all functionality

- name: Load Go cache
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.cache/go-build
Expand Down
18 changes: 18 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
version: 2
updates:
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "02:00"
commit-message:
prefix: "chore"
include: "scope"
labels:
- "dependencies"
reviewers:
- "wolo-lab"
allow:
- dependency-name: "google.golang.org/genai"
open-pull-requests-limit: 10
4 changes: 2 additions & 2 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ name: Go

on:
push:
branches: [ "main" ]
branches: [ "main", "v2" ]

pull_request:
branches: [ "main" ]
branches: [ "main", "v2" ]

workflow_dispatch:

Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Run govulncheck
uses: golang/govulncheck-action@b625fbe08f3bccbe446d94fbf87fcc875a4f50ee # v1.0.4
# NOTE: pinned to master HEAD instead of a tag. The latest release (v1.0.4)
# internally uses actions/checkout@v4.1.1 and actions/setup-go@v5.0.0 (Node 20),
# which are deprecated. master uses checkout v6.0.2 + setup-go v6.2.0 (Node 24).
# TODO: re-pin to a tagged release once upstream tags one past v1.0.4.
uses: golang/govulncheck-action@31f7c5463448f83528bd771c2d978d940080c9fd # master, post-v1.0.4 (Node 24)
with:
go-version-file: go.mod
repo-checkout: true
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ linters:
# Changes to the default config:
- -QF1001 # Exclude "Apply De Morgan's law"
- -QF1008 # Exclude "Omit embedded fields from selector expression"
- -SA1019 # Exclude to keep the old a2a compatibility, can remove for ADK v2

exclusions:
rules:
Expand Down
149 changes: 149 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# AGENTS.md

Context for AI coding agents (Claude Code, Gemini CLI, Cursor, Copilot, etc.)
working in the ADK Go repository. Human contributors should start with
CONTRIBUTING.md.

## Project overview

ADK Go (`google.golang.org/adk`) is an open-source, code-first Go toolkit for
building, evaluating, and deploying AI agents. It is model-agnostic but
optimized for Gemini, and is one of three ADK implementations — Go, Python, and
Java — that share a conceptual model but are independent codebases. Requires
Go 1.25+.

## Setup & core commands

Run from the repo root. These match what CI enforces (CI also passes `-v`):

- Build: `go build -mod=readonly ./...`
- Test: `go test -race -mod=readonly -count=1 -shuffle=on ./...`
- Single pkg: `go test -race ./agent/...`
- Lint: `golangci-lint run` (golangci-lint v2; CI pins v2.3.1; config in `.golangci.yml`)
- Tidy check: `go mod tidy -diff` (must print nothing)
- Format: `golangci-lint fmt` (applies gofumpt + goimports per config)

## Definition of done

A change is complete only when all of these pass locally:

1. `go build` (above) succeeds.
2. `go test` (above) is green.
3. `golangci-lint run` reports no findings.
4. `go mod tidy -diff` prints nothing.
5. New/changed behavior has tests; a bug fix has a test that reproduces the bug.
6. Every new Go file starts with the Apache 2.0 license header (enforced by `goheader`).

## Repository layout

- `agent/` Agent interface + types (`llmagent`, `workflowagents`, `remoteagent`)
- `runner/` Execution engine that drives the run loop
- `model/` LLM abstraction (`gemini`, `apigee`)
- `tool/` Tool/Toolset interface + built-in tools (incl. `skilltoolset/`, `mcptoolset/`)
- `session/` Conversation state + events
- `memory/`, `artifact/` Long-term memory and file/data services
- `plugin/` Cross-cutting lifecycle hooks
- `server/` HTTP servers (`adkrest` is primary; `adka2a`, `agentengine`)
- `cmd/` CLI (`adkgo`) and server launchers
- `telemetry/`, `util/` Public helper packages
- `internal/` Private packages — NOT public API; `internal/httprr` is vendored
- `examples/` Runnable example agents (quickstart, tools, a2a, skills, …)

## Conventions & idioms

- **Streaming:** agent runs return `iter.Seq2[*session.Event, error]`; consume
with `for event, err := range … {}`. Don't collect events into a slice.
- **Interface-first:** public packages expose interfaces (`Agent`, `Tool`,
`Toolset`, `Service`); concrete impls live in sub-packages or `internal/`.
- **Callbacks over subclassing** (`Before*`/`After*` for Agent/Model/Tool);
returning non-nil from a `Before` callback short-circuits execution.
- **Errors:** wrap with `fmt.Errorf("…: %w", err)`. Tool confirmation uses
sentinel errors (e.g. `tool.ErrConfirmationRequired`).
- Prefer an existing helper over a new one; keep packages small and focused.

## Minimal example

```go
model, err := gemini.NewModel(ctx, "gemini-2.5-flash",
&genai.ClientConfig{APIKey: os.Getenv("GOOGLE_API_KEY")})
// handle err
a, err := llmagent.New(llmagent.Config{
Name: "assistant",
Model: model,
Instruction: "You are a helpful assistant.",
Tools: []tool.Tool{ /* ... */ },
})
// handle err
r, err := runner.New(runner.Config{
AppName: "my-app",
Agent: a,
SessionService: session.InMemoryService(),
AutoCreateSession: true,
})
// handle err
msg := genai.NewContentFromText("Hello", genai.RoleUser)
for event, err := range r.Run(ctx, userID, sessionID, msg, agent.RunConfig{}) {
// handle err; read event.LLMResponse.Content
}
```

See `examples/quickstart` for a full runnable program.

## Extending the framework

- **Add a tool:** wrap a Go function with
`functiontool.New[Args, Results](cfg, handler)` (Args/Results are structs), or
implement the `tool.Tool` interface for full control.
- **Add a toolset:** implement `tool.Toolset`; its `Tools(ctx)` may return
different tools per invocation.
- **Add an agent type:** follow the `agent/workflowagents/*` packages; construct
agents via `llmagent.New` / `agent.New`, not by implementing `agent.Agent`
directly.
- **Add cross-cutting behavior:** register a `plugin.New(plugin.Config{...})`
hook (`Before*`/`After*` for run/agent/model/tool) instead of editing the loop.

## Testing

- Tests run **offline by default**: LLM HTTP traffic is replayed from
`testdata/*.httprr` via `internal/httprr`. Never add live model or network
calls to tests.
- To (re)record a package's traffic, supply real credentials (e.g.
`GOOGLE_API_KEY`) and run `go generate ./<pkg>/...` (it runs
`go test -httprecord=…`); commit the updated `testdata/*.httprr`.
- Prefer table-driven tests; shared helpers live in `internal/testutil`.

## Boundaries

**Always**
- Run build, tests, lint, and `go mod tidy -diff` before declaring done.
- Keep PRs small and focused — one concern per PR.
- Add or update tests for the code you change.

**Ask first**
- Adding or upgrading a dependency (`go.mod`).
- Changing a high-fan-in package (`session`, `agent`, `model`, `tool`,
`runner`) — prefer additive, backward-compatible changes.
- Any change to the public API surface, and any breaking change.

**Never**
- Break the public API — keep changes backward-compatible.
- Edit vendored code (`internal/httprr`) or commit secrets / API keys.
- Add tests that make live LLM or network calls.

## PRs & commits

See `CONTRIBUTING.md` for the full process and CLA. Key points for agents:
most PRs (beyond trivial docs/typos) need a linked issue; include a **Testing
Plan**; attach logs or screenshots for behavior changes (Runner output / ADK Web).

## Alignment with adk-python

[adk-python](https://github.com/google/adk-python) is the source of truth for
feature behavior. When porting or validating a feature, check parity with the
Python implementation.

## Resources

- Docs: https://google.github.io/adk-docs/
- Examples: `./examples`
- Java ADK: https://github.com/google/adk-java
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
See [AGENTS.md](./AGENTS.md) for project context, commands, and contribution guidelines for AI coding agents.
1 change: 1 addition & 0 deletions GEMINI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
See [AGENTS.md](./AGENTS.md) for project context, commands, and contribution guidelines for AI coding agents.
Loading
Loading