diff --git a/app/api/routes/device_ws.py b/app/api/routes/device_ws.py index 6b6510c..709eb90 100644 --- a/app/api/routes/device_ws.py +++ b/app/api/routes/device_ws.py @@ -598,9 +598,9 @@ async def _handle_index_session_start( frame: dict, ) -> None: """Register a new folder index session. No response sent — client is declaring intent.""" - session_id: str = frame.get("sessionId") or frame.get("session_id", "") + session_id: str = frame.get("sessionId") or frame.get("session_id") or "" project_id: str | None = frame.get("projectId") or frame.get("project_id") - total: int = int(frame.get("totalFiles", 0)) + total: int = int(frame.get("totalFiles") or frame.get("total_files") or 0) if not session_id: logger.warning("device_ws: index_session_start missing sessionId user=%s", user_id) @@ -624,7 +624,7 @@ async def _handle_index_session_cancel( frame: dict, ) -> None: """Mark a session as cancelled and emit index_session_done(cancelled).""" - session_id: str = frame.get("sessionId") or frame.get("session_id", "") + session_id: str = frame.get("sessionId") or frame.get("session_id") or "" session = _index_sessions.get(session_id) if session: session["cancelled"] = True @@ -654,7 +654,7 @@ async def _handle_index_file_batch( from app.billing.tier_manager import tier_manager # noqa: PLC0415 from app.billing.quota import add_token_usage # noqa: PLC0415 - session_id: str = frame.get("sessionId") or frame.get("session_id", "") + session_id: str = frame.get("sessionId") or frame.get("session_id") or "" files: list[dict] = frame.get("files", []) session = _index_sessions.get(session_id) @@ -670,11 +670,12 @@ async def _handle_index_file_batch( if session.get("cancelled"): return - rel_path: str = file_info.get("relPath", "") - kind: str = file_info.get("kind", "text") - content: str = file_info.get("content", "") - ext: str = file_info.get("ext", "") - mime: str = file_info.get("mime", "application/octet-stream") + # Electron's toSnakeCase converts payload keys, so accept both forms. + rel_path: str = file_info.get("relPath") or file_info.get("rel_path") or "" + kind: str = file_info.get("kind") or "text" + content: str = file_info.get("content") or "" + ext: str = file_info.get("ext") or "" + mime: str = file_info.get("mime") or "application/octet-stream" name: str = rel_path.split("/")[-1] or rel_path try: