* Add the Kotlin tab for the BigQuery agent analytics quickstart
adk-kotlin 0.8.0 ships BigQueryAgentAnalyticsPlugin, so the quickstart's setup
group can carry a Kotlin tab alongside Python and Java. Transcluded, so CI
compiles and lints it.
The tab says plainly what the Kotlin plugin does not do, because a bare third
tab under this page's overview would promise far more than it delivers. It logs
INVOCATION_STARTING and INVOCATION_COMPLETED only - not the LLM, tool, state or
HITL events the page's table lists - fills the identity columns and content
while leaving trace_id, latency_ms and attributes null, and writes rows one at a
time through insertAll synchronously on the invocation path, not asynchronously
through the Storage Write API the page describes. Grounded in
BigQueryAgentAnalyticsPlugin.kt at the v0.8.0 tag, not the working tree.
Only the setup group gets Kotlin. The page's six other groups cover event
payloads and configuration surface the Kotlin plugin does not have.
The plugin lives in the integrations module, so examples/kotlin needs that
artifact to compile the snippet. One line is enough: unlike the a2a artifact,
google-adk-kotlin-integrations publishes google-cloud-bigquery and google-auth
on jvmApiElements, so the types its constructor defaults name are already on the
compile classpath.
Verified with the snippet ladder: L0 symbols, L1 compile, L2 ktlint, L3
transclusions, L5 registration and L6 badge all pass against the 0.8.0 pin.
* Scope the Kotlin BigQuery claims to what the plugin actually does
Review of the branch turned up five over-claims, all of the same kind: the page
describes the Python and Java plugins, and adding a Kotlin badge and tab quietly
extended every one of those promises to Kotlin.
- The page-level badge advertised Kotlin next to Python and Java on a page whose
opening promises Auto Schema Upgrade, tool provenance, HITL tracing, view
creation, ADK 2.0 workflow events and drop stats. Kotlin implements none of
them: BigQueryAgentAnalyticsPlugin overrides two Plugin callbacks. The
correction lived only inside the Kotlin tab, which a reader on the Python tab
never renders, so it moves to a page-level "Kotlin support" note next to the
pricing warning, following the "Java support" note this page already uses.
- The page says ingestion goes through the Storage Write API and links its
pricing. Kotlin calls tabledata.insertAll, a different billing line: charged
per inserted row with a 1 KB minimum and no monthly free tier, so cost tracks
invocation count, not bytes.
- BigQuerySchema creates no views, so the v_* names in the captured-events table
do not exist for Kotlin. A reader would have queried v_invocation_completed
and got a not-found.
- Configuration options is Python and Java only. Kotlin's whole surface is
BigQueryLoggerConfig's six fields, now listed, and `location` (default "US")
was undiscoverable - the snippet takes it as a parameter instead of pinning a
no-op tableName that already matches the default.
- Every logging failure is swallowed: a table that cannot be created or a row
that cannot be inserted is logged and the turn continues, so a misconfigured
agent looks healthy while writing nothing.
A second review pass caught a defect in the first pass's own fix: it told
readers to raise the log level for `bigquery_agent_analytics`, which is the
plugin's ADK name, not its logger. FloggerLoggingProvider names loggers with
kClass.java.name, so the text now gives the class name.
Verified: ./tools/kotlin-snippets/runner.sh build and lint both PASS on the
snippet (JDK 17), check_kotlin_snippets.sh passes, verify_snippets.py L0-L6 all
pass, and the page was rendered with the repo's own markdown extension set to
confirm the Kotlin tab joins the Python/Java tabbed set and the note renders as
an admonition rather than stray text.
* Update bigquery-agent-analytics.md
a few minor updates
* Update bigquery-agent-analytics.md
* Move the Kotlin scoping next to the content it scopes
The Kotlin support note described the page's tables as wrong from a
separate block, so a reader arriving at a table by anchor link, or
reading top to bottom, saw only the unqualified version. Each caveat now
sits with what it qualifies: the captured-events table says Kotlin logs
two event types and creates no views, the schema reference says which
columns are populated, and the lifecycle payload table records the
message content Kotlin writes.
Configuration options gains a Kotlin tab covering BigQueryLoggerConfig,
which is what the quickstart tab was asserting from the outside. With a
real section to point at, the quickstart can lead with how to use the
plugin rather than with what it cannot do.
Drop the BigQuery insert pricing detail; it belongs in the BigQuery
docs, not here.
* Update bigquery-agent-analytics.md
---------
Co-authored-by: Joe Fernandez <931947+joefernandez@users.noreply.github.com>
* Add Kotlin tabs to the Skills page
The Skills page documented Python, TypeScript and Go but not Kotlin, even
though SkillToolset has existed since adk-kotlin v0.1.0. This was missed
because every earlier coverage audit diffed one release tag against the
next, so symbols that already existed at v0.1.0 were never checked.
Kotlin's shape differs from Python's in two ways the tabs need to show.
SkillToolset takes a single SkillSource rather than a list of loaded
skills, so NewFileSystemSource discovers every skill under a base
directory instead of loading them one by one. And like ADK Go, Kotlin
ships no built-in source for skills defined in code, so the inline-skills
tab implements SkillSource directly rather than pretending a Python-style
model class exists.
* Badge the Skills page with the version SkillToolset shipped in
The badge said Kotlin v0.8.0, which is the version adk-docs compiles
against, not the version the feature landed in. Every other badge on the
page and across the site names the introducing release - SkillToolset has
been present since v0.1.0.
* Point Kotlin readers at the adk-kotlin repo for Skills feedback
The Experimental callout invites feedback per SDK but listed only
Python, TypeScript and Go, which is now inconsistent with the Kotlin
badge this branch adds.
The link has no template parameter, unlike its three siblings, because
adk-kotlin has no issue templates - its .github directory holds only
workflows, so ?template=feature_request.md would silently fall back to a
blank issue.
* Add Kotlin tabs to the tool confirmation page
All three tab groups showed Python, TypeScript, Go and Java but not
Kotlin, even though the API has existed since adk-kotlin v0.1.0.
Kotlin turns out to sit closer to Python than to TypeScript here: the
@Tool annotation carries a requireConfirmation flag, so the boolean case
is a direct equivalent of FunctionTool(require_confirmation=True) rather
than something callers hand-roll. The flag is a compile-time constant,
though, so dynamic thresholds are evaluated inside the tool through
ToolContext, the way ADK Java does it. The prose that previously singled
out TypeScript for that now names Kotlin too.
The advanced example reads the returned payload through Number rather
than casting straight to Int, because the payload arrives decoded from
JSON and its numeric type is not guaranteed - the same trap the Go tab
calls out for float64.
* Badge the confirmation page with the version the API shipped in
The badge said Kotlin v0.8.0, the version adk-docs compiles against,
rather than the introducing release. ToolConfirmation,
ToolContext.requestConfirmation and the @Tool requireConfirmation flag
were all present at v0.1.0.
* Update confirmation.md
---------
Co-authored-by: Joe Fernandez <931947+joefernandez@users.noreply.github.com>
* Add Kotlin to the session rewind page
The page was single-language: one bare Python fence, no tab structure,
and a badge div listing Python only. Kotlin has had Runner.rewindAsync
with matching semantics, so the code block is converted into a
Python/Kotlin tab group with the Python content kept verbatim.
Semantics were checked against the implementation rather than inferred
from the method name, since the page makes specific promises. Two hold:
AbstractRunner.rewindAsync appends a synthetic user event carrying
reversing state and artifact deltas, so rewound requests stay in the log
as the "How it works" section describes; and keys prefixed app: or user:
are skipped when the delta is computed, which is exactly the
"Global agent resources" limitation.
Worth knowing for anyone reading the interface: Runner.rewindAsync has a
default implementation that throws NotImplementedError. AbstractRunner
overrides it and InMemoryRunner extends AbstractRunner, so the documented
path works, but a custom Runner built straight on the interface would
not.
Runner.close was on the same backlog row and is left out: it is a
lifecycle concern with nothing to do with rewinding.
* Badge the rewind page with the version rewindAsync shipped in
The badge said Kotlin v0.8.0, the version adk-docs compiles against,
rather than the introducing release. Checking the tags, rewindAsync is
absent at v0.1.0 and v0.2.0 and first appears in AbstractRunner at
v0.3.0 - so the backlog row that recorded it as a v0.1.0 member was
wrong as well.
* Add Kotlin snippet for filtering a toolset's tools
The Toolsets section had no Kotlin. ToolFilter and ToolPredicate arrived in
adk-kotlin 0.7.0 and give Kotlin something the other languages do not have: a
filter that receives the ReadonlyContext, so a toolset's tool list can depend on
session state or the current user.
The Python tab in the Simple Math Toolset example only gestures at this, in a
commented-out branch inside get_tools(). This snippet implements it, showing all
three states: no filter selects everything, allowList selects by name, and a
Predicate decides per invocation.
Placed in its own subsection rather than as a fourth tab on the Simple Math
Toolset example. That group is one worked example explained by five bullets --
an agent, a greet tool, name prefixing, a tool_context.state write and close() --
and a filtering snippet satisfies none of them. Kotlin cannot satisfy the prefix
bullet at all, since BaseTool.name is a val and adk-kotlin has no prefix
mechanism. A tab there would have left readers with four bullets that do not
describe the code above them.
Transcluded, so CI compiles and lints it. Verified beyond compiling: the tools
are generated by KSP, filtering returns the expected sets for all three cases,
and the tool bodies run -- addNumbers(7,3) -> {result=10}.
* feat: add Kotlin code snippets for tool definition and usage examples to ADK documentation
* refactor: move doc snippet markers above imports in Kotlin tool examples
* Match ExternalApprovalTool to the 0.8.0 BaseTool.run signature
adk-kotlin 0.8.0 widened `BaseTool.run`'s args from `Map<String, Any>` to
`Map<String, Any?>`, so the override in this snippet overrides nothing and the
class no longer implements its abstract member. `compileKotlin` fails with
"'run' overrides nothing" at MultiAgentExample.kt:61.
The break arrived on main with the 0.8.0 bump in #2143, not from this branch.
It surfaces here because the snippet runner builds the whole examples project,
while that PR's own check only compiled the files it changed - and it changed
no .kt files at all. Fixing it here because it blocks this PR; it is one
character and unrelated to the toolset filtering content.
* Correct the tool badges and drop the exclusivity from the filter heading
Four things from joefernandez's review:
- Heading shortened to "Filter tools in toolsets" as suggested.
- That shorter heading is conceptual, and the subsection carries a Kotlin-only
badge, which would repeat the exclusivity claim his b/548652184 is about.
Python, Java and TypeScript all filter toolsets by name or by a
context-aware predicate on BaseToolset, so the section now says so in a
sentence and the badge's title scopes the version to the Kotlin ToolFilter
API rather than to filtering as a concept.
- Page badge Kotlin v0.7.0 -> v0.1.0, and the Toolsets badge likewise. @Tool,
ToolContext and Toolset all exist at the v0.1.0 tag; only ToolFilter is new
in v0.7.0, and function-tools.md already carries v0.1.0.
- The Toolsets badge's bare "Java" span now reads v0.3.0, the first adk-java
release containing BaseToolset (added in a211ac4c, tagged v0.3.0).
* Add A2A consuming quickstart for Kotlin
adk-kotlin has been able to consume remote A2A agents since 0.6.0, and the docs
had no Kotlin page for it. This adds one alongside the Python, Go and Java
quickstarts, plus its nav entry.
A new page rather than a tab: docs/a2a has no tab groups at all, it is one page
per language, so this follows the section's own shape.
Two dependencies are needed, not one. The a2a artifact publishes the A2A SDK as
runtime-only, and A2AAgent's httpClient parameter defaults to JdkA2AHttpClient(),
so a2a-java-sdk-client has to be on the compile classpath as well. That number
was established by compiling, not by reading module metadata: the a2a artifact
alone fails with "Cannot access class 'A2AHttpClient'", and adding the client
artifact is sufficient -- spec and the jsonrpc transport arrive transitively.
Only the consuming side is documented, because that is all that exists: no
webserver source at v0.7.0 mentions a2a, so there is no Kotlin equivalent of the
exposing quickstarts. The page says so and links to the Python and Java ones.
A2AAgent is a suspending factory, and the implementation class behind it is
internal, so the factory is the only way to construct one. The snippet notes it.
Verified end to end rather than by compiling alone: served a real agent card
from a local server and ran the snippet, which fetched it, parsed it and wired
the remote agent in as a sub-agent --
"Root agent root_agent delegates to prime_agent".
* Correct the agent card claims and make the server step usable
A2AAgent does not read the remote's name from the card: the name is the
caller's, and independent of what the card advertises. It does not read the
transport either, which is hardcoded to JSON-RPC. What the card supplies is
the description and the streaming capability.
The server step told readers to start a server without saying how, and the
two obvious candidates do not work: adk-kotlin parses A2A 1.0 cards, which
require supportedInterfaces with a protocolBinding, and the adk-java and
adk-python samples both publish 0.3-style cards that A2AAgent rejects with
AgentCardResolutionError. State that, and give a minimal card verified by
running the snippet against it.
Also fix the root agent instruction, which referenced dice-rolling the agent
cannot do; match the Java snippet's prime-delegation wording.
* Point the A2A quickstart at the adk-python sample server
The page claimed neither the adk-java nor the adk-python sample works as the
server for this quickstart. The adk-python half is wrong. adk-python does not
serve its `agent.json` verbatim: `fast_api.py` parses it through
`_compat.parse_agent_card`, and under a2a-sdk 1.x that parse promotes the
legacy `url` and `preferredTransport` into `supportedInterfaces`. The dependency
is `a2a-sdk>=0.3.4,<2`, so a fresh install resolves to 1.x and the card on the
wire is A2A 1.0 - exactly what the Kotlin client requires.
So the page now names a server a reader can actually start, instead of asking
them to hand-write a card:
adk api_server --a2a --port 8001 \
contributing/samples/a2a/a2a_basic/remote_a2a
Its card is served under the agent's own prefix, and the snippet's agentCardUrl
follows it to http://localhost:8001/a2a/check_prime_agent. Confirmed the route
prefix in `attach_a2a_routes_to_app` and that the sample card's own `url`
already points there.
The adk-java half of the claim was correct and stays: `a2a_server` is pinned to
the 0.3.x A2A SDK and serves a 0.3 card. That, and the A2A 1.0 requirement it
illustrates, move into a note. The hand-written card survives as a collapsible
fallback for readers bringing their own server.
Reported by joefernandez in review of #2118.
* Document how to check whether the context cache was used
The caching page explained how to turn caching on and never how to tell whether
it is working. CacheMetadata has been available since adk-kotlin 0.6.0 and is
undocumented: adk-python has fourteen code references to cache_metadata, while
adk-docs mentions it twice, both incidental -- a BigQuery schema table and a
bullet in the Live dev guide.
The snippet reads it from Event.cacheMetadata and covers both states the type
can be in, because the constructor enforces the split: cacheName, expireTime and
invocationsUsed must either all be set (an active cache) or all be null (the
fingerprint-only state used for prefix matching before a cache exists).
Notes that token counts live on LlmResponse.usageMetadata rather than here,
which the KDoc calls out to avoid duplication and a reader would otherwise
reasonably look for on CacheMetadata.
Badged Kotlin v0.6.0 and verified rather than assumed: the snippet compiles
against a temporary 0.6.0 pin as well as the current 0.7.0 one.
Transcluded and registered, so CI compiles and lints it. Exercised all four
paths with synthetic events: no metadata, fingerprint-only, active, and active
with expireSoon true.
* Correct when CacheMetadata is present on an event
The section claimed every event backed by an LLM response carries a
CacheMetadata. It does not: LlmResponse.cacheMetadata is null when caching
is disabled and also when the call produced no cache information, so the
claim was wrong even with caching on.
Say "can carry", name both null cases, and explain why the snippet checks
before reading. The snippet's own comment made the same overstatement.
* docs: clarify the behavior of expireSoon and cache status in documentation and snippets
adk-kotlin 0.7.0 added a plugins parameter to the agent-based InMemoryRunner
constructor. App.plugins already existed at 0.6.0, so this is an ergonomic
shorthand rather than a new capability, but it is the form a Kotlin reader
should see and the plugins page had no Kotlin at all.
Two tab groups rather than one. The Register group's prose refers to
"the CountInvocationPlugin plugin defined in the previous section", so a Kotlin
tab there alone would point at a class the page never defines in Kotlin. Adding
the Create group as well makes the pair self-contained.
Kotlin now appears in two of the page's nine groups; the remaining seven are
per-callback detail. Whether to finish the page is a separate decision.
Plugin declares exactly one abstract member, name -- all twelve callbacks and
close() have defaults -- so a custom plugin only overrides what it needs. The
snippet overrides beforeAgent and beforeModel, matching the callbacks the
surrounding prose describes.
Transcluded and registered, so CI compiles and lints it. Also run: the runner is
constructed with the plugin wired, and invoking beforeAgent twice prints
"[Plugin] Agent run count: 1" then 2, so the counter callbacks work.
* Upgrade Kotlin examples to adk-kotlin 0.7.0
The Kotlin examples were pinned to adk-kotlin 0.5.0, which predates the
context caching, Vertex AI memory, and RAG retrieval APIs. Bump the pin to
0.7.0 so snippets for those features can be added.
Three consequences of the bump are handled here:
- `ExperimentalResumabilityFeature` was removed in 0.7.0, so RunConfigExample
no longer opts into it. The annotation class is gone, not merely deprecated,
so this is a hard compile break rather than a warning that could be deferred.
- The Vertex AI session and memory services expose Ktor's `HttpClient` as a
defaulted constructor parameter, so any snippet naming them needs Ktor on the
compile classpath, not just at runtime.
- The `resolutionStrategy` block forcing kotlin-stdlib 2.1.20 is now dead. It
worked around 0.5.0 publishing a stdlib newer than this project's compiler;
0.6.0 fixed that upstream. Verified that the highest stdlib on the compile
classpath is still 2.1.20 without it.
Also fixes two unrelated snags found while validating the above:
- `check_kotlin_snippets.sh` walked `examples/kotlin` without pruning build
output, so after any local build it reported every generated KSP file as an
unregistered snippet. CI only ever ran it against a clean checkout, so the
bug was invisible there.
- A transclusion path in logging.md was split across two lines, so the include
never resolved and the code block rendered empty.
* Fix broken links to adk-python plugin samples
The three plugin sample links 404. adk-python renamed
`contributing/samples/plugin/` to `contributing/samples/plugins/`; the
directory contents are otherwise unchanged, so only the path segment moves.
This is what the repo-wide `link-check` job has been failing on. It is
unrelated to the 0.7.0 upgrade in this PR, but the check gates the merge and
the fix is confined to the three URLs.
Verified all three targets return 200.
* Add Kotlin snippet for the Knowledge Engine retrieval tool
The Knowledge Engine integration page only showed Python. `VertexAiRagRetrieval`
landed in adk-kotlin 0.7.0, so add a Kotlin tab and advertise Kotlin support in
the page badge.
Retrieval runs inside the model through the Gemini-native `vertexRagStore` kind
rather than as a locally executed tool, so the snippet configures the corpus via
`VertexRagStoreRagResource` and leaves invocation to the model.
Registers the new file in files_to_test.txt so it stays in the compile
regression suite.
* Use the conventional package for the RAG retrieval snippet
RagEngine.kt declared `package integrations`. Every other snippet in the tree
uses `com.google.adk.kt.examples.<area>`. It compiled either way because the
source root is `snippets/` and Kotlin does not require the directory to match
the package, so nothing would have caught it.
Also worth flagging for anyone reading this alongside the memory snippets: the
two APIs take opposite corpus formats. `VertexAiRagRetrieval` here wants the
full `projects/.../ragCorpora/...` resource name, while
`VertexAiRagMemoryService` wants a bare corpus id and rejects the full name.
That is the library's doing, not a docs inconsistency.
* Upgrade Kotlin examples to adk-kotlin 0.7.0
The Kotlin examples were pinned to adk-kotlin 0.5.0, which predates the
context caching, Vertex AI memory, and RAG retrieval APIs. Bump the pin to
0.7.0 so snippets for those features can be added.
Three consequences of the bump are handled here:
- `ExperimentalResumabilityFeature` was removed in 0.7.0, so RunConfigExample
no longer opts into it. The annotation class is gone, not merely deprecated,
so this is a hard compile break rather than a warning that could be deferred.
- The Vertex AI session and memory services expose Ktor's `HttpClient` as a
defaulted constructor parameter, so any snippet naming them needs Ktor on the
compile classpath, not just at runtime.
- The `resolutionStrategy` block forcing kotlin-stdlib 2.1.20 is now dead. It
worked around 0.5.0 publishing a stdlib newer than this project's compiler;
0.6.0 fixed that upstream. Verified that the highest stdlib on the compile
classpath is still 2.1.20 without it.
Also fixes two unrelated snags found while validating the above:
- `check_kotlin_snippets.sh` walked `examples/kotlin` without pruning build
output, so after any local build it reported every generated KSP file as an
unregistered snippet. CI only ever ran it against a clean checkout, so the
bug was invisible there.
- A transclusion path in logging.md was split across two lines, so the include
never resolved and the code block rendered empty.
* Fix broken links to adk-python plugin samples
The three plugin sample links 404. adk-python renamed
`contributing/samples/plugin/` to `contributing/samples/plugins/`; the
directory contents are otherwise unchanged, so only the path segment moves.
This is what the repo-wide `link-check` job has been failing on. It is
unrelated to the 0.7.0 upgrade in this PR, but the check gates the merge and
the fix is confined to the three URLs.
Verified all three targets return 200.
* adding go getting started to 2.0 docs
* updating graphs docs for go; adding in workflow example go snippets
* Updating HiTL docs for Go 2.0
* updating Go getting started guide for v2
* Updating Routes docs for Go v2
* Updating data handling docs for Go 2.0
* Updating dynamic workflows docs for Go 2.0
* fix(docs): set ADK Go 2.0 GA date on the 2.0 landing page
* fix(docs): standardize ADK Go 2.0 install/import on /v2 @ v2.0.0
* updating announcement banner
* routes snippets updates
* 2.0 install instructions clean-up
* updating collaboration docs for go v2 + new example snippet
---------
Co-authored-by: Karol Piotrowicz <kpiotrowicz@google.com>
* Add GA tag injection to Kotlin API docs generation script
- Inject Google Analytics tag into all generated HTML files using awk
- Remove unnecessary gradle prerequisite check (script uses ./gradlew)
- Update prerequisites comment to clarify Android SDK requirement
* Regenerate ADK Kotlin 0.1.0 API docs with Google Analytics tag
* Add Python API docs generation script and Sphinx config
* Add Python API reference docs for ADK Python 2.0.0
* Include version and release number in config for built API docs
* Migrating from Map to typed data classes in FuncTool and LongRunningTool kotlin examples
* lint cleanup of kotlin snippets
* adding gradle wrapper for kotlin snippets
* cleaning up build file for kotlin
* fixing ktlint_code_style, added focus on included Gradle Wrapper
---------
Co-authored-by: Kristopher Overholt <koverholt@google.com>
* Add Kotlin to hero / front page
* Add quickstart page for Kotlin
* Complete Kotlin quickstart guide and fix hero code sample (#2)
* Replace GitHub repo links with language icons in header (#3)
* Fix header icon FOUC and homepage font weight regression (#4)
* Testing staging pipeline
* Revert test edit (for staging pipeline)
* Update language icon tooltips to indicate GitHub destination (#5)
* Add link to ADK Kotlin release notes (#7)
* Initial commit of ADK Kotlin API reference docs (#6)
* Add script to generate ADK Kotlin API reference docs (#8)
* Update links and link checker ignore list (temporarily) (#9)
* Add ADK Kotlin for Android getting started guide to Advanced setup page (#10)
* Add advanced setup page with steps to "Use ADK Kotlin in Android projects"
* Update temp link checker rules
* Add placeholder folder for adk-samples (#13)
* adding linter/compilation checks for kotlin snippets (#12)
* adding linter/compilation checks for kotlin snippets
* Add Kotlin validation scripts
* Initial commit of Kotlin sample agents for adk-samples (#15)
* Adding kotlin snippet for llm agents (#16)
* Adding kotlin snippets to Events (#17)
* Pull changes to docs/events/index.md from glaforge-kotlin-snippets
* fixing kotlin event timestamp and longRunningToolIds
* Fix language tags (#19)
* Fix language tags
* Update
* Fix wrapping
* Fix wrapping (again)
* Fix wrapping/format
* Fix language tag on integration page
* Enable check_paths in PyMdown Snippets Extension to make the build fail if a snippet can't be found (#20)
* Update mkdocs config (#21)
* Fix broken links, update URLs to adk.dev, and improve (temp) lychee config (#22)
* Add Kotlin/maven badge to README (#23)
* Adding Kotlin snippets for artifacts (#18)
* Pull Kotlin snippets for artifacts from glaforge-kotlin-snippets
* Add comprehensive Kotlin snippets for artifacts
* Refactor artifacts documentation to use external Kotlin snippets
* Update Kotlin model to gemini-flash-latest
* Fix GCS initialization in Kotlin artifact snippet
* afixi failing test with capital-agent added to files_to_check
* Fix snippet label syntax for MkDocs build
* Configure proper Gradle project for Kotlin snippets and fix dependencies
* Add KSP support and generated sources to Kotlin snippets build
* fixing capital_agent turnComplete
* Fix syntax error in build.gradle.kts by removing invalid placeholders (#25)
* Adding Kotlin snippets to google-gemini.md (#27)
Pulling kotlin changes to google-gemini.md from glaforge-kotlin-snippets
* Add a warning about not adding an api key to production code. (#28)
* Add a warning about not adding an api key to production code.
* Update note
---------
Co-authored-by: Kristopher Overholt <koverholt@google.com>
* Add ADK Demo App sample showcasing Gemini-powered agents (#29)
This sample demonstrates how to use the Google ADK (Agent Development Kit) in an Android application to create a chat interface powered by a Gemini-based "Fun Facts" agent. The implementation features:
* Integration with the Kotlin ADK core and processor libraries.
* A `FunFactsAgent` defined using `LlmAgent` and the Gemini model.
* A `ChatViewModel` utilizing `InMemoryRunner` for asynchronous message streaming.
* A modern UI built with Jetpack Compose and Material 3.
* Build configuration logic for secure API key management via environment variables or `local.properties`.
* Update Kotlin docs and samples to align with adk-kotlin API changes (#30)
Rename GeminiModel to Gemini, @AdkTool/@AdkParam to @Tool/@Param,
adkTools() to generatedTools(), replace DebugRunner with InMemoryRunner,
fix AgentLoader import path, use SingleAgentLoader, bump Kotlin to
2.3.21 and KSP to 2.3.7, and update Android minSdk from 24 to 26.
* adding kotlin info to READMEs (#14)
* Reorganize Android sample agent and add READMEs (#31)
* Move Android sample agent
* Update repo README, add Android README, update sample agent README
* Minor edit to language support tags (#32)
* Remove blog post link (#33)
Will re-add after it's published
* Remove examples link (#34)
* Adding Kotlin snippets for Sessions docs (#26)
* initial kotlins snippets additions to sessions docs
* Updating memory docs with kotlin snippets
* Adding kotlin snippets to session state docs.
* update model to gemini-flash-latest
* sessions examples clean-up
* fixing sessions snippet markers
* adding kotlin session snippets to files to test
* adding callback to memory_example
* Fixing capital agent snippet (#35)
Fixing file name
Updating adkTool > Tool
Updating GeminiModel > Gemini
* Adding kotlin snippets for tools docs (#36)
* adding function tool kotlin snippets
* adding function_tools snippets to files to test
* Adding kotlin snippets to observability docs (#37)
* initial kotlin observability updates
* adding observability snippets to file check (#38)
* Adding Kotlin snippets to Callbacks docs (#39)
* kotlin callbacks snippets
* adding callbacks snippets to file check
* Align Kotlin and KSP versions with published 0.1.0 artifacts (#40)
* switch CLI entry points from InMemoryRunner to ReplRunner (#41)
* Switch CLI entry points from InMemoryRunner to ReplRunner
* Fix wording
* Update API reference docs for Kotlin, 2026-05-18 (#42)
* Remove ADK on Android note until published (#43)
* Update Kotlin code samples (#44)
* Rename GeminiModel to Gemini in Kotlin snippets and docs
* Remove broken SessionKey call and use sessionId directly in AgentTool snippet
* Rewrite Go hero snippet to use llmagent API
* Use isFinalResponse with safe access in CapitalAgent snippet
* Use Role.USER constant instead of raw string in SetupExample
* Use full semver v0.1.0 in Kotlin language support tags
* Remove Android setup steps, moving to new property (#45)
* Tutorial Kotlin agent (#46)
* Adding multi-tool-agent snippet and updating tutorial
* Fixing Go language order on tutorial page
* adding multi tool agent example to files to test
* Inline Kotlin get-started code sample
* Kotlin Multi agents snippets (#47)
* Multi-agent kotlin snippets
* Fixing docs tags in multiagent example
* Fix Kotlin language support tags, code samples, and google-gemini.md cleanup (#48)
* Add Kotlin v0.1.0 to language support tags across docs
* Fix MultiToolAgent.kt model string and argument style
* Update MultiAgentExample.kt to use gemini-flash-latest model string
* Fix google-gemini.md: add Kotlin sample, remove unsupported Java tabs
* Remove explicit apiKey from CallbackBasic.kt for consistency
* Standardize Gemini() constructor to use named args in all snippets
* Remove adk-samples directory (moved to google/adk-samples#1969)
* Remove adk-samples directory (moved to google/adk-samples#1969) (#49)
* Update API reference docs for ADK Kotlin 0.1.0 (#50)
* Remove adk-samples directory (moved to google/adk-samples#1969)
* Update API reference docs for ADK Kotlin 0.1.0
* Remove kotlin lycheeignore config (#51)
* Remove adk-samples directory (moved to google/adk-samples#1969)
* Remove Kotlin .lycheeignore config links
---------
Co-authored-by: Toni Klopfenstein <2359976+ToniCorinne@users.noreply.github.com>
Co-authored-by: Jolanda Verhoef <JolandaVerhoef@users.noreply.github.com>
* Rename asp.md to agents-cli.md and update redirects
- Renamed docs/deploy/agent-runtime/asp.md to agents-cli.md
- Updated navigation reference in mkdocs.yml
- Added redirect rule: agent-runtime/asp.md → agents-cli.md
- Updated existing redirect: agent-engine/asp.md → agents-cli.md
The 'asp' name no longer makes sense as a page name now that we're
referencing Agent Starter Pack / agents-cli directly.
Note: This applies on top of PR #1673 which renamed:
- 'agent-engine' directory → 'agent-runtime'
- 'Agent Engine' product → 'Agent Runtime'
* Complete migration from Agent Starter Pack to agents-cli
This commit completes the migration from "Agent Starter Pack (ASP)"
terminology to "agents-cli" across documentation and updates references
to align with the new Agent Platform tooling.
Changes:
- Updated docs/deploy/agent-runtime/agents-cli.md: Replaced all "Agent
Starter Pack" and "ASP" references with "agents-cli", updated commands
from 'uvx agent-starter-pack enhance --adk -d agent_engine' to
'agents-cli scaffold enhance --deployment-target agent_engine', and
updated all documentation links to point to google.github.io/agents-cli/
- Updated docs/tutorials/coding-with-ai.md: Replaced "ADK Dev Skills"
section with "agents-cli" section, changed installation from
'npx skills add google/adk-docs/skills -y -g' to
'uvx google-agents-cli setup', updated skill names table to new
agents-cli skill names, and added CLI commands table
- Updated docs/deploy/agent-runtime/index.md: Changed "Agent Starter Pack
deployment" to "agents-cli deployment" and updated reference from
"The Agent Starter Pack (ASP)" to "agents-cli in Agent Platform"
- Deleted docs/skills/ directory: Skills have been migrated to the
agents-cli repository
* Fix agents-cli deployment instructions to use correct CLI commands
Replace incorrect make command references with agents-cli deploy and agents-cli infra single-project. Update deployment workflow to reflect actual agents-cli usage.
* Update navigation to use agents-cli instead of Agent Starter Pack
Replace "Agent Starter Pack" with "agents-cli" in the navigation menu. Redirects from old ASP URLs are already in place.
* Restore docs/skills/index.md - Agent Skills documentation
This file documents the Agent Skills feature (agentskills.io specification),
not ADK Dev Skills. It was mistakenly deleted in the ASP → agents-cli migration.
Agent Skills are a general ADK feature where agents can use modular,
self-contained units of functionality based on the Agent Skill specification.
* Fix terminology: Agent Engine runtime → Agent Runtime runtime
Update deployment path description to use consistent "Agent Runtime runtime"
terminology instead of "Agent Engine runtime".
* Fix broken agents-cli documentation links
Replace broken links to /guide/ (which 404s) with correct links to main
documentation page. The /guide/ URL is a directory listing that doesn't
exist in the agents-cli docs structure.
Changes:
- Line 31: "Development guide" link → "Guide" pointing to main docs
- Line 221: "Development guide" link → "agents-cli documentation" pointing to main docs
Both now correctly point to https://google.github.io/agents-cli/
* Delete ADK Dev Skills directory - migrated to agents-cli
Remove the entire skills/ directory containing ADK Dev Skills. These
skills have been migrated to the agents-cli repository and are now
distributed as part of the agents-cli package.
Users should now install skills via:
uvx google-agents-cli setup
Instead of the old method:
npx skills add google/adk-docs/skills -y -g
Deleted skills (now available in agents-cli):
- adk-dev-guide → google-agents-cli-workflow
- adk-cheatsheet → google-agents-cli-adk-code
- adk-eval-guide → google-agents-cli-eval
- adk-deploy-guide → google-agents-cli-deploy
- adk-observability-guide → google-agents-cli-observability
- adk-scaffold → google-agents-cli-scaffold
Total: 19 files removed across 6 skill directories
* Remove skills CI checks
---------
Co-authored-by: Kristopher Overholt <koverholt@google.com>
* Replace google.github.io/adk-docs URLs and /adk-docs/ paths with adk.dev
Migrate all hardcoded documentation references to use the new custom
domain. Update root-relative links to remove the /adk-docs/ subpath
prefix since the site will be served from the root of adk.dev.
* Additional fixes
* Auto-generate Python REST API reference docs from FastAPI OpenAPI spec
* Fix link and llmstxt config
* Generate REST API docs with web=False
* Use simpler BaseLayout for generated REST API docs
- Remove sync-docs-index.yaml workflow that was failing due to branch
protection rules requiring PRs
- Delete local docs-index.md copy from skills/adk-cheatsheet/references
- Update skill references to use curl against the live hosted llms.txt
* feat: add A2A guardrails and correct import reference to coding skills
- Forbid writing A2A code from scratch in adk-scaffold Critical Rules
- Add A2A example to adk-scaffold Examples section
- Add A2A Protocol section to Python cheatsheet with correct import paths
* fix: mark a2a as optional import prefix in snippet validator
* fix: also check error message for optional dep detection in validator
* fix: use case-insensitive error string match for optional dep detection
* ci: add skills validation workflows and auto-sync
* fix: address PR review feedback for CI workflows
- Fix skills-check: replace uv with actions/setup-python to avoid
PEP 668 externally-managed-environment error on Ubuntu runners
- Move sync-docs-index out of build-docs.yaml into its own workflow
triggered on push to main, keeping build-docs as a read-only PR check
- Eliminate recursive trigger loop risk from auto-commit on PR branches
---------
Co-authored-by: Joe Fernandez <joefernandez@users.noreply.github.com>
* fix: change the tool name from ADK Bidi-streaming to ADK Gemini Live API Toolkit
fix: change the tool name from ADK Bidi-streaming to ADK Gemini Live API Toolkit
* fix: Rename "Bidi-streaming" to "Gemini Live API Toolkit" in nav, landing page, quickstart, and feature matrix
Updates mkdocs.yml navigation, streaming landing page card titles/links, quickstart cross-reference, and feature matrix entries.
* docs: update source references for ADK v1.26.0
Update all ADK source code references to point to the v1.26.0 commit
with corrected line numbers for drifted references.
---------
Co-authored-by: Joe Fernandez <joefernandez@users.noreply.github.com>
* Added pr checks and regression test code
* Added github workflows and go.mod/go.sum
* Added comments to files_to_test.txt
* Moved check_go_snippets.sh
* Fixed issues with workflows
* Removed unneeded workflow
* Revert bad change
* Added runner tests
* Added README
* refactor(go-snippets): Unify Go module structure and dynamically update ADK dependency
Consolidate all Go snippet module dependencies to a single file located at . This simplifies dependency management and ensures consistent versions across all Go examples.
Update Usage: tools/go-snippets/runner.sh <build|run> [file1 file2 ...] to dynamically fetch the latest module () before running any builds or tests. This ensures that PR and regression checks always validate against the most recent ADK release, preventing outdated dependency issues.
Address breaking changes in by removing the initialization from , which is no longer available.
Cleaned up extraneous and files from subdirectories within , as well as the unused file.
* feat(go-snippets): Reinforce strict `files_to_test.txt` adherence
Reverts previous attempts to infer Go snippet dependencies and clarifies the strict testing model.
- **`runner.sh`**: Restores `find_snippet_line` to rely on exact substring matching of changed files within `files_to_test.txt` lines. Adds `go get` exit code check.
- **`tools/go-snippets/README.md`**: Adds "Understanding the Test Runner" section detailing `files_to_test.txt` adherence, multi-file `package main` requirements, and `_test.go` file handling.
- **`runner_test.sh`**: Adds `test_find_snippet_line_multi_file_match` to verify correct behavior for multi-file snippets listed on a single line.
---------
Co-authored-by: ivanmkc <ivanmkc@google.com>
* feat: Add workflow to run Go program and create PR
Introduces a GitHub Actions workflow that checks out two repositories, sets up Go, installs dependencies, runs a Go program, and creates a pull request with generated documentation updates.
* fix: Update workflow name and trigger
Renamed the workflow to 'Feature Matrix Creator' and changed the trigger from push on main to manual workflow_dispatch.
* feat: Add feature-matrix tool for ADK feature extraction
Introduces a new tool under tools/feature-matrix to generate a feature support matrix for ADK runtimes by analyzing documentation. Includes Go implementation (main.go), prompt and starter markdown files, and Go module dependencies.
* feat: Update feature matrix workflow to use local tool
Removes checkout of the adk-docs-features repo and updates steps to use the local tools/feature-matrix directory for dependency installation and program execution. Simplifies the workflow by eliminating unnecessary repository cloning and file movement.
* fix: Update feature matrix prompt and matrix content
Revised the prompt to use 'Unsupported' instead of 'Planned' for features not supported, clarified disclaimer placement, and updated instructions for matrix ordering. Updated start.md to move the disclaimer and feature matrix to the top, reflect new terminology, and provide a more accurate and current feature support matrix.