diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 33a544717..2d45ad2eb 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "1.14.0"
+ ".": "1.15.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c75fae9fa..991fedc06 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,61 @@
# Changelog
+## [1.15.0](https://github.com/google/adk-java/compare/v1.14.0...v1.15.0) (2026-11-15)
+
+
+### Features
+
+* add FunctionNode, a workflow step with typed Java ports ([d627147](https://github.com/google/adk-java/commit/d627147b0ee620119cb2293776ad8acf0d7c7b65))
+* add TypeReference ports and a build-time port check to FunctionNode ([01f899f](https://github.com/google/adk-java/commit/01f899fb84ae76bb618b8272c3ce5fcad63ff37e))
+* check workflow edges by assignability ([a0cc1dc](https://github.com/google/adk-java/commit/a0cc1dcd0ba2d2337124d5f009860cf6a48f172b))
+* **classifiers:** add ClassifierNode for workflow routing ([61e0eb8](https://github.com/google/adk-java/commit/61e0eb80f4b7bcdabb21637141d7936d3e4053e3))
+* **classifiers:** add LlmClassifier backed by BaseLlm ([f3e1cea](https://github.com/google/adk-java/commit/f3e1ceadf17943caa66d1be4aa41e54ae0234bd2))
+* **classifiers:** add the experimental Classifier interface and its question and answer types ([739c231](https://github.com/google/adk-java/commit/739c2315b2b07cf389ca048cbbbc4d2c8f94d603))
+* **classifiers:** read and write questions and answers as JSON ([ef5f798](https://github.com/google/adk-java/commit/ef5f798dc46d7a6eaec4e02e7f9774af72b0c438))
+* **dev:** serve workflow graph images ([677557b](https://github.com/google/adk-java/commit/677557b536df515bb160aef94fecc289173936cd))
+* infer schemas for FunctionNode ports ([020c95c](https://github.com/google/adk-java/commit/020c95ccf35506abca8700a32a7e61fb40a20ca7))
+* let models report whether they take an output schema with tools ([5ce839b](https://github.com/google/adk-java/commit/5ce839b44c6860cefcd1b689d682326df1142bd8))
+* **mcp:** add opt-in `CallToolResultMapper` for tool results ([4dfe0b5](https://github.com/google/adk-java/commit/4dfe0b57fe2a5548cc9a49d1e06e87ad8b85713e))
+* **models:** bring Claude to parity with ADK Python ([62003c1](https://github.com/google/adk-java/commit/62003c129466658d40316728b0bbb4b98578b1b5))
+* **tokt:** carry transcriptions and turnComplete across the interop ([30edd99](https://github.com/google/adk-java/commit/30edd998914c6412276d1b9c4b72dcdfb9f97976))
+* **tokt:** convert speech and transcription configs ([ab34617](https://github.com/google/adk-java/commit/ab34617775820fc67dcec423711fe8674353e23b))
+* **tokt:** run agents through the ADK Java runner's runLive ([3582f1a](https://github.com/google/adk-java/commit/3582f1a688eff82aeff5fec2eb2191a7acb0cd11))
+* **tokt:** send blobs and run a held session through runLive ([1f1537d](https://github.com/google/adk-java/commit/1f1537dc8c8662b9c4081b5eed40cba5e4851a76))
+* **tokt:** stream a Flowable FunctionTool in a live run ([42b2f9c](https://github.com/google/adk-java/commit/42b2f9c3258fbdb197eee3c4edc8f539052467a0))
+* **workflow:** add JoinNode.create for a join that needs only a name ([d100738](https://github.com/google/adk-java/commit/d100738a62cf5ebf631ba9a6c288406cd999eb79))
+* **workflow:** ask the user to approve a FunctionNode run ([1b11290](https://github.com/google/adk-java/commit/1b112908408a0a1219a40cbb86264db58478e835))
+* **workflow:** interrupt a canceled FunctionNode's body ([3c07372](https://github.com/google/adk-java/commit/3c07372b08c2dd62a6e6106acc322416031998cc))
+
+
+### Bug Fixes
+
+* **agents:** stop saving a transfer target's reply to the parent's outputKey ([abb86a7](https://github.com/google/adk-java/commit/abb86a742bed1a3e2628ae38c3b25be2e8f73508))
+* aggregate live text chunks and skip partial events in runLive ([9435377](https://github.com/google/adk-java/commit/94353776710149cdb2d88922df4f79dccbf92165))
+* count events after the last model response toward the compaction threshold ([587d252](https://github.com/google/adk-java/commit/587d2525c307bedebe847e01ad463a353881bb7d))
+* **dev:** listen on 127.0.0.1 by default in AdkWebServer.main() and start() ([464cf48](https://github.com/google/adk-java/commit/464cf487f62038b9bdb567296c810f27bc354644))
+* **flows:** run onModelErrorCallback when a model throws synchronously ([e5cd285](https://github.com/google/adk-java/commit/e5cd285c76d81595b003e0b5360b1ca2c081abc8))
+* keep whole numbers in streamed function call arguments as integers ([be4984e](https://github.com/google/adk-java/commit/be4984ed2e15bb9795cc0cc6d538048f7b3cd146))
+* **langchain4j:** end a streamed turn with one response that holds the whole answer ([8a9b6d0](https://github.com/google/adk-java/commit/8a9b6d034237476ec5549d9d123196dc7f7564f6))
+* let a sub-agent transfer back to its parent in a resumed invocation ([7fb0a3b](https://github.com/google/adk-java/commit/7fb0a3b3e2aa0aaa4b7f0c0f50656e991dcc6c4a))
+* **live:** answer a replayed history that ends in a user turn ([f688c80](https://github.com/google/adk-java/commit/f688c80a57ebb3352bcfcec8b7ea2d8edcb75bfa))
+* **plugins:** make BQAA GCS uploads create-only so transient errors retry ([6a497da](https://github.com/google/adk-java/commit/6a497dac6d94b97a3345e9c347a8409acddde717))
+* **plugins:** prevent BQAA offload data loss and preserve binary MIME ([94b5bac](https://github.com/google/adk-java/commit/94b5bacdb1c037ab162ffb88abee570ade8dfdec))
+* show an agent the user's answer to another agent's call ([658faba](https://github.com/google/adk-java/commit/658fabaaa2d020160dab59fc8a64a81f63628e3c))
+* **spring-ai:** report cached prompt tokens in usage metadata ([a4182a5](https://github.com/google/adk-java/commit/a4182a544a28363162ca052c07c02b0f1ca1dfdb))
+* **tokt:** merge a Java plugin's replacement onto the original, as ADK Python does ([0bb7f4a](https://github.com/google/adk-java/commit/0bb7f4acfa84848722108547c08d2a97bfc4450d))
+* **tools:** keep the null of a required nullable property in `set_model_response` ([e868293](https://github.com/google/adk-java/commit/e8682932d8d0815103c02ea295b25abec35f9e5f))
+* validate free-form schemas instead of crashing ([ad4ab50](https://github.com/google/adk-java/commit/ad4ab50c741d7ec1a45d6cbf2d60647c06422c0e))
+* **workflow:** pause a tool node when its tool asks for confirmation ([f985064](https://github.com/google/adk-java/commit/f98506455b16436261c0fe8d17b939c7bf1bd387))
+
+
+### Documentation
+
+* **examples:** add a classifier node workflow sample ([87468e2](https://github.com/google/adk-java/commit/87468e2d241409c356373b0482c1784839722b18))
+* **examples:** add a workflows module with five samples that call no model ([5217ce8](https://github.com/google/adk-java/commit/5217ce85231834315a6c8de5d4068587807dae48))
+* **examples:** add research and order-processing workflow samples ([a968088](https://github.com/google/adk-java/commit/a9680883acdf1a2bd25050bf7dd1eaa66b9c6100))
+* **examples:** add retry, returns and route workflow samples ([a77e5dc](https://github.com/google/adk-java/commit/a77e5dcc647ee86861dd8825ee53150365f3889c))
+* **examples:** add workflow samples that pause for human input ([51bc06c](https://github.com/google/adk-java/commit/51bc06c8eadd9a80ecad15caae2c0afa7ba2f88d))
+
## [1.14.0](https://github.com/google/adk-java/compare/v1.13.0...v1.14.0) (2026-11-02)
diff --git a/README.md b/README.md
index d73de6d36..ce2929606 100644
--- a/README.md
+++ b/README.md
@@ -50,13 +50,13 @@ If you're using Maven, add the following to your dependencies:
com.google.adk
google-adk
- 1.14.0
+ 1.15.0
com.google.adk
google-adk-dev
- 1.14.0
+ 1.15.0
```
diff --git a/a2a/pom.xml b/a2a/pom.xml
index 359a395f1..679ec9795 100644
--- a/a2a/pom.xml
+++ b/a2a/pom.xml
@@ -5,7 +5,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
google-adk-a2a
diff --git a/contrib/firestore-session-service/README.md b/contrib/firestore-session-service/README.md
index a9eeb3b61..4e971b78b 100644
--- a/contrib/firestore-session-service/README.md
+++ b/contrib/firestore-session-service/README.md
@@ -16,13 +16,13 @@ If you're using Maven, add the following to your dependencies:
com.google.adk
google-adk
- 1.14.0
+ 1.15.0
com.google.adk
google-adk-dev
- 1.14.0
+ 1.15.0
```
@@ -33,9 +33,9 @@ If you're using Maven, add the following to your dependencies:
```gradle
dependencies {
// ADK Core
- implementation 'com.google.adk:google-adk:1.14.0'
+ implementation 'com.google.adk:google-adk:1.15.0'
// Firestore Session Service
- implementation 'com.google.adk:google-adk-firestore-session-service:1.14.0'
+ implementation 'com.google.adk:google-adk-firestore-session-service:1.15.0'
}
```
diff --git a/contrib/firestore-session-service/pom.xml b/contrib/firestore-session-service/pom.xml
index 86f1eb4dd..78bef3397 100644
--- a/contrib/firestore-session-service/pom.xml
+++ b/contrib/firestore-session-service/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
../../pom.xml
diff --git a/contrib/langchain4j/pom.xml b/contrib/langchain4j/pom.xml
index 417e22419..b7394c045 100644
--- a/contrib/langchain4j/pom.xml
+++ b/contrib/langchain4j/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
../../pom.xml
diff --git a/contrib/planners/pom.xml b/contrib/planners/pom.xml
index 0d3b436a3..aeae194e2 100644
--- a/contrib/planners/pom.xml
+++ b/contrib/planners/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
../../pom.xml
diff --git a/contrib/spring-ai/pom.xml b/contrib/spring-ai/pom.xml
index 7174edc6c..000efb802 100644
--- a/contrib/spring-ai/pom.xml
+++ b/contrib/spring-ai/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
../../pom.xml
diff --git a/core/pom.xml b/core/pom.xml
index 672f3e934..22e8702cb 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
google-adk
diff --git a/core/src/main/java/com/google/adk/Version.java b/core/src/main/java/com/google/adk/Version.java
index cba91efd0..0d9249be0 100644
--- a/core/src/main/java/com/google/adk/Version.java
+++ b/core/src/main/java/com/google/adk/Version.java
@@ -22,7 +22,7 @@
*/
public final class Version {
// Don't touch this, release-please should keep it up to date.
- public static final String JAVA_ADK_VERSION = "1.14.0"; // x-release-please-released-version
+ public static final String JAVA_ADK_VERSION = "1.15.0"; // x-release-please-released-version
private Version() {}
}
diff --git a/dev/pom.xml b/dev/pom.xml
index f273c41ce..6564bf70f 100644
--- a/dev/pom.xml
+++ b/dev/pom.xml
@@ -18,7 +18,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
google-adk-dev
diff --git a/examples/a2a_basic/pom.xml b/examples/a2a_basic/pom.xml
index 47ec36571..ad390007e 100644
--- a/examples/a2a_basic/pom.xml
+++ b/examples/a2a_basic/pom.xml
@@ -5,7 +5,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/a2a_server/pom.xml b/examples/a2a_server/pom.xml
index 0e5401d35..f75b62161 100644
--- a/examples/a2a_server/pom.xml
+++ b/examples/a2a_server/pom.xml
@@ -5,7 +5,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/configagent/pom.xml b/examples/configagent/pom.xml
index 34ecd5319..6be022c7b 100644
--- a/examples/configagent/pom.xml
+++ b/examples/configagent/pom.xml
@@ -5,7 +5,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/contextcaching/pom.xml b/examples/contextcaching/pom.xml
index 0a9ddfcab..db0b9c207 100644
--- a/examples/contextcaching/pom.xml
+++ b/examples/contextcaching/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/helloworld/pom.xml b/examples/helloworld/pom.xml
index 231ff2b83..fc6ea2066 100644
--- a/examples/helloworld/pom.xml
+++ b/examples/helloworld/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/mcpfilesystem/pom.xml b/examples/mcpfilesystem/pom.xml
index e4b4b9f4b..a8ff7be09 100644
--- a/examples/mcpfilesystem/pom.xml
+++ b/examples/mcpfilesystem/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/mcpfullresult/pom.xml b/examples/mcpfullresult/pom.xml
index 2256cf8fb..32f0f5d12 100644
--- a/examples/mcpfullresult/pom.xml
+++ b/examples/mcpfullresult/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/pom.xml b/examples/pom.xml
index b6bdb9c72..2831abf2e 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/spring_chat/pom.xml b/examples/spring_chat/pom.xml
index 6fb470862..80e37654a 100644
--- a/examples/spring_chat/pom.xml
+++ b/examples/spring_chat/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/spring_chat_advanced/pom.xml b/examples/spring_chat_advanced/pom.xml
index 5b21794fd..31a5843ee 100644
--- a/examples/spring_chat_advanced/pom.xml
+++ b/examples/spring_chat_advanced/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/examples/workflows/pom.xml b/examples/workflows/pom.xml
index 7c16c808e..67de296d4 100644
--- a/examples/workflows/pom.xml
+++ b/examples/workflows/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-examples
- 1.14.1-SNAPSHOT
+ 1.15.0
..
diff --git a/maven_plugin/examples/custom_tools/pom.xml b/maven_plugin/examples/custom_tools/pom.xml
index a64645c41..ca303b32a 100644
--- a/maven_plugin/examples/custom_tools/pom.xml
+++ b/maven_plugin/examples/custom_tools/pom.xml
@@ -4,7 +4,7 @@
com.example
custom-tools-example
- 1.14.1-SNAPSHOT
+ 1.15.0
jar
ADK Custom Tools Example
diff --git a/maven_plugin/examples/simple-agent/pom.xml b/maven_plugin/examples/simple-agent/pom.xml
index 031e68168..2ae1fefed 100644
--- a/maven_plugin/examples/simple-agent/pom.xml
+++ b/maven_plugin/examples/simple-agent/pom.xml
@@ -4,7 +4,7 @@
com.example
simple-adk-agent
- 1.14.1-SNAPSHOT
+ 1.15.0
jar
Simple ADK Agent Example
diff --git a/maven_plugin/pom.xml b/maven_plugin/pom.xml
index 7a788307e..185437c0f 100644
--- a/maven_plugin/pom.xml
+++ b/maven_plugin/pom.xml
@@ -5,7 +5,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
../pom.xml
diff --git a/pom.xml b/pom.xml
index 78672a8f2..7c63247ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
pom
Google Agent Development Kit Maven Parent POM
diff --git a/tokt/pom.xml b/tokt/pom.xml
index 8b784e96d..96f5467fe 100644
--- a/tokt/pom.xml
+++ b/tokt/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
google-adk-tokt
diff --git a/tutorials/city-time-weather/pom.xml b/tutorials/city-time-weather/pom.xml
index 498b6ae38..f9ba314a2 100644
--- a/tutorials/city-time-weather/pom.xml
+++ b/tutorials/city-time-weather/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
../../pom.xml
diff --git a/tutorials/live-audio-single-agent/pom.xml b/tutorials/live-audio-single-agent/pom.xml
index 069efc818..556ce610f 100644
--- a/tutorials/live-audio-single-agent/pom.xml
+++ b/tutorials/live-audio-single-agent/pom.xml
@@ -20,7 +20,7 @@
com.google.adk
google-adk-parent
- 1.14.1-SNAPSHOT
+ 1.15.0
../../pom.xml