Apr 8, 2026
6 commits | Theme: Streaming chat, project sync, iOS stability
Changes
New Features
Streaming Chat Endpoint (c826279)
- New
/ml/chat/streamSSE endpoint indev/ml/gateway/chat.py - Multiplexes responses from Gemini API and on-prem Ollama (via model proxy)
- Each SSE event tagged with
{"provider": "gemini", "delta": "...", "done": false} - Clients can demux and render multiple provider responses in parallel
- Added Bruno tests for the chat API
Project Sync Endpoint (7d21cde)
- New
POST /v1/sync-projecton the data service - Fetches full project tree (tasks, subtasks, items, specialties) from Supabase
- Generates markdown with YAML frontmatter following LocationModels convention
- Saves as
projects/{slug}.mdasset in location SQLite DB + S3 blob - Backend
list_assetsnow supportsprojectId="all"for cross-project discovery - Extracted shared modules:
core/supabase_queries.py,core/markdown_gen.py,core/location.py - Refactored ML scraper to use shared query functions
Planning Context in Sync (4002ee3)
- Project markdown now includes a "Planning Context" section
- Embeds Gemini-generated clarifying questions and user answers from
ai_metadata - Gives on-site agents full visibility into the refinement conversation
Bug Fixes
Deduplicate list_assets (f35c4c1)
- When
projectId="all", uses SQL window function to return only the most recent asset per uniquefile_name - Prevents iOS DataSyncService from downloading duplicate copies (e.g.,
manifest.mdappearing 3x under different project IDs) - Fixes memory exhaustion and app crashes on iOS
Bruno Test Cleanup (1d154c4)
- Chunked upload test now completes full flow: init -> upload chunk (final=true) -> verify -> delete
- Data Bridge test deletes test-photo.jpg after download
- Reduced chunked test from 10MB to 1KB (1 chunk) for speed
- Eliminates orphaned assets that caused 500 errors on missing S3 blobs
Testing
Bruno Environments (34ecddb)
- All environments (dev, beta, jh, main, cc, fl, rk) now use the same real Supabase test IDs
- Tests are reproducible across all environments