feat: execute gateway session SSE
This commit is contained in:
+22
-10
@@ -26,17 +26,17 @@ Complete the Android/client contract pivot before implementing backend behavior.
|
||||
|
||||
## Beta path — upstream-connected MVP
|
||||
|
||||
- [ ] **B3 — Direct gateway session contract and durable chat state**
|
||||
- Fetch/list/search/select/create sessions through repository contracts after upstream session routes are verified.
|
||||
- Restore selected session and protect against duplicate sends / lost drafts.
|
||||
- Verification: fake-repository UI tests; direct gateway compatibility checks where available.
|
||||
- Foundation verified 2026-07-24: repository search contract and fake implementation, capability-negotiated session list/create/get/delete request mapping, durable selected-session/draft/pending-send storage, and duplicate-send reducer/UI protection.
|
||||
- Still blocked: official upstream docs do not document a session-search endpoint or query schema, and no live gateway compatibility exercise is available in this sandbox. Keep B3 unchecked until search and real gateway behavior are verified.
|
||||
- [ ] **B4c — Wire gateway SSE into durable chat sends**
|
||||
- Add one send coordinator that reserves the selected-session send, executes the capability-built stream request asynchronously, and publishes reducer state without reselecting the route mid-call.
|
||||
- Clear only the matching durable pending-send reservation on terminal completion or failure; preserve duplicate-send protection and current draft/session restoration behavior.
|
||||
- Verification: deterministic coordinator tests for success, gateway failure, transport failure, and stale request IDs; full cached Android Kotlin/JUnit verification.
|
||||
|
||||
- **Queued after B3 — B4: Direct gateway streaming, reconnects, and resilient long-running work**
|
||||
- Stream event reducer: final response/token deltas first; tool lifecycle, session events, artifacts, cancel, and reconnect/backoff only where upstream capability is verified.
|
||||
- Preserve partial output and make recovery obvious and safe.
|
||||
- Verification: deterministic fake stream tests and real direct gateway exercise.
|
||||
## Externally blocked
|
||||
|
||||
- **B3 — Direct gateway session contract and durable chat state**
|
||||
- Foundation verified 2026-07-24: repository search contract and fake implementation, capability-gated session list/create/get/delete mapping, durable selected-session/draft/pending-send storage, and duplicate-send reducer/UI protection.
|
||||
- Not complete: official upstream documentation still provides no session-search HTTP contract, and the configured local API server was not listening for a live compatibility exercise on 2026-07-24.
|
||||
- Unblock evidence is maintained in `docs/BLOCKERS.md`; do not mark B3 complete until documented search and real gateway behavior are verified.
|
||||
|
||||
- **Queued — B5: Tool, artifact, and output experience**
|
||||
- Compact tool cards with lifecycle/status, expandable output, copy/share/save affordances.
|
||||
@@ -71,6 +71,18 @@ Complete the Android/client contract pivot before implementing backend behavior.
|
||||
|
||||
_Move finished items here with date, commit, and verification. Keep this section factual; do not claim unverified work._
|
||||
|
||||
- [x] **B4b — Execute session SSE through the Android repository** — 2026-07-24, commit `feat: execute gateway session SSE`.
|
||||
- Added a thin OkHttp repository that executes the capability-built session stream request and parses SSE frames into the existing decoder and lease-bound reducer.
|
||||
- Kept the route generation, request URL, session ID, endpoint, and event gate immutable for the full call; transport/protocol failure invalidates and fails only that original lease.
|
||||
- Kept gateway `error` events separate from transport failure and excluded reconnect, cancellation, tool/artifact handling, and UI integration.
|
||||
- Verification: focused cached Kotlin compilation and direct JUnit execution passed 15 reducer, stream-contract, and fake HTTP/SSE repository tests; Android Gradle build attempt and final checks are recorded in `CHANGELOG.md`.
|
||||
|
||||
- [x] **B4a — Capability-gated direct streaming foundation** — 2026-07-24, commit `feat: add gateway streaming foundation`.
|
||||
- Added capability-derived session SSE request construction using the advertised `POST` method and `{session_id}` path only.
|
||||
- Bound each stream to an immutable route generation and session ID, decoded documented core lifecycle/delta/final events, and gated structured tool events on `tool_progress_events`.
|
||||
- Made final assistant responses authoritative over accumulated deltas and ignored events from a different session lease.
|
||||
- Verification: focused cached Kotlin compilation plus direct JUnit execution passed 12 reducer/stream contract tests; full checks recorded in `CHANGELOG.md`.
|
||||
|
||||
- [x] **B2 — Direct gateway connection, authentication, and local-first routing UX** — 2026-07-24, commit `e5cc27e` (`feat: add local-first gateway routing`).
|
||||
- Added one logical profile with optional Local HTTPS, required Remote HTTPS, Android-keystore-protected bearer/no-auth configuration, and active Local/Remote diagnostics.
|
||||
- Added bounded redirect-disabled `GET /health` probes followed by bearer-authenticated `GET /v1/models`, deterministic Local preference/Remote fallback, and immutable request leases.
|
||||
|
||||
Reference in New Issue
Block a user