What's Changed
- fix: pin a fetched agent card's interface URL(s) to the origin it was fetched from by @prasanna8585 in #1418
- feat(session/database): add NewSessionServiceFromDB constructor by @nuthalapativarun in #724
- fix(openaimodel): support optional function call output IDs by @ktsoator in #1449
- fix(workflow): normalize unordered set keywords in schema comparison by @winklemad in #1138
- fix: prevent saving non-text events to state by @tanghaowillow in #1061
- fix: resolve 'TODO: last event is not final' error in streaming mode … by @mahendrarathore1742 in #638
- chore(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.1 in /plugin/agentanalytics in the go_modules group across 1 directory by @dependabot[bot] in #1468
- ci: Release automation with release-please by @wojtas000 in #1398
- fix(remoteagent/v2): run after-callbacks on aggregated artifact events by @PratikDhanave in #1206
- docs(agent): explain why runAfterAgentCallbacks does not end the invocation by @jjsasha63 in #1461
- fix(mcptoolset): allow valid empty text tool responses (#1352) by @chill-czar in #1353
- fix(cmd/launcher/web): initialize telemetry before starting HTTP server (#1350) by @chill-czar in #1351
- fix(workflow): make ParallelWorker fail-fast actually stop new dispatch under maxConcurrency by @AmirF194 in #1239
- fix(openaimodel): preserve caller-owned JSON schemas by @ktsoator in #1451
- fix(mcptoolset): report non-text-only tool results instead of dropping them by @jjsasha63 in #1473
- fix: agenttool SkipSummarization terminates parent agent loop by @rsd-darshan in #908
- ci: run the Go workflow on every pull request by @wolo-lab in #1445
- fix(session): report a missing session as session.ErrNotFound by @jjsasha63 in #1458
- fix(adkrest): serve the endpoints the ADK web UI actually calls by @jjsasha63 in #1459
- fix(launcher/web): default the artifact and memory services, and serve the UI correctly by @jjsasha63 in #1460
- ci: ask for a linked issue or a description on new PRs by @jjsasha63 in #1480
- ci: automate v1 backports from the v1-needed label by @baptmont in #1327
- docs: ask the two PR-template questions that catch the most defects by @karolpiotrowicz in #1506
- docs(examples): update launcher documentation by @ktsoator in #1496
- fix(runner): stop nil event loops after cancellation by @wmh123wmh1 in #1479
- fix(llmagent): resolve agent mode per placement instead of mutating the shared agent by @wolo-lab in #1267
- fix(workflow): suppress retries while draining by @cruvie in #1512
- chore(deps): bump the go-minor-patch group with 12 updates by @dependabot[bot] in #1517
- fix(auth): keep the consent URI out of ConsentRequiredError's message by @wolo-lab in #1519
- fix(openaimodel): preserve refusals and completed stream content by @ktsoator in #1467
- docs: state the pre-PR checks that reviews keep catching by @karolpiotrowicz in #1492
- fix(memory): rank and limit search results with non-ASCII substring matching by @ktsoator in #1528
- fix(model/openaimodel): correct finish reason, logprobs and tool calls when a stream ends by @hanorik in #1373
- fix(backport): stop re-posting the conflict comment on every run by @baptmont in #1530
- fix(mcptoolset): render non-text unstructured tool results by @ktsoator in #1401
- fix: ignore stale function responses by @gustafvh in #766
- fix(model/openaimodel): surface server-side response failures by @hanorik in #1359
- fix(model/openaimodel): account for every generation config field by @hanorik in #1392
- docs: fix contributing links in PR template by @keeltrace in #1545
- fix: validate deploy CLI values embedded in generated Dockerfile content by @herdiyana256 in #1240
- docs: add a self-review gate and the conventions reviews keep repeating by @wolo-lab in #1558
- fix(session): snapshot events under read lock in database and vertexa… by @lucky798213 in #1559
- fix(examples): validate generated image responses by @ktsoator in #1478
- fix(auth/gcp): keep caller identifiers out of service error text by @wolo-lab in #1520
- feat(adkrest): add authentication and authorization to the REST API by @kdroste-google in #1561
- fix(llminternal): keep a late tool completion as the final content by @jjsasha63 in #1428
- test(adkrest/models): add EventActions field mapping coverage by @nuthalapativarun in #726
- test(adkrest): add RunLiveHandler WebSocket integration coverage by @wmh123wmh1 in #1453
- fix(agentanalytics): drain the aborted write stream to recover the append status by @Trainingcqy in #1318
- fix(artifact/gcsartifact): return the gs:// form as CanonicalURI by @baptmont in #1563
- cleanup: update Loader documentation and add interface checks by @hyangah in #651
- chore(version): bump the tagged version constant to 2.4.0 by @wolo-lab in #1570
New Contributors
- @tanghaowillow made their first contribution in #1061
- @mahendrarathore1742 made their first contribution in #638
- @AmirF194 made their first contribution in #1239
- @rsd-darshan made their first contribution in #908
- @wmh123wmh1 made their first contribution in #1479
- @cruvie made their first contribution in #1512
- @keeltrace made their first contribution in #1545
- @herdiyana256 made their first contribution in #1240
- @lucky798213 made their first contribution in #1559
Full Changelog: v2.3.0...v2.4.0