v0.2.0
Session State & Storage
- Added scope-routed session state handling for
app:,user:, andtemp:keys. SessionService::create_session(state: Some(_))now partitions state by scope automatically.Session.statenow exposes a merged overlay of app, user, and session state.InMemorySessionServicenow includes dedicated:app_stateuser_state
stores.
SqlSessionServicenow includes:app_statetableuser_statetable
for both PostgreSQL and SQLite backends.
- Added new public helper:
State::partition_by_scope(&delta)
Auth Resume & Function Calls
- Added deterministic auth-resume flow after OAuth/credential consent.
- Gemini function calls without IDs now receive synthesized stable IDs:
adk-fc-<uuid> AuthPreprocessornow rejects empty or missingfunction_call_idvalues for:adk_request_credential
OpenAPI Tooling
- Expanded OpenAPI REST tool support for:
- request bodies
- parameter styles
- security scheme binding
- richer spec parsing
- operation parameter resolution
Concurrency & State Consistency Fixes
- Fixed TOCTOU race in in-memory
app_slot()/user_slot(). - Fixed concurrent state-write clobbering in PostgreSQL and SQLite backends.
- Added state merge locking using:
SELECT ... FOR UPDATE(Postgres)BEGIN IMMEDIATE(SQLite)
- Fixed app/user scope leakage across sessions.
- Fixed Gemini auth-resume failures caused by missing function-call IDs.
- Fixed multiple runner/agent flow ordering and persistence issues.
Database Changes
Added new tables:
app_state(app_name, key, value)
user_state(app_name, user_id, key, value)Updated:
0001_init.sqlfor SQLite0001_init.sqlfor PostgreSQL
Cargo Features
No changes to storage backend feature flags:
sqlitepostgres