From 4b6533281e73a612a35e31ae40e99885dacfb8e2 Mon Sep 17 00:00:00 2001 From: Hermes Team Date: Tue, 1 Sep 2026 01:26:08 +0700 Subject: [PATCH] =?UTF-8?q?fix(web):=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BE=D1=82=D0=B4=D0=B0=D0=B2=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D1=81=D1=8C=20=D0=B1=D0=B5=D0=B7=20=D0=B7=D0=B0=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D1=82=D0=B0=20=D0=BA=D1=8D=D1=88=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A48 и A49 добавили workspace.js, workflow.js и workflow.css, но заголовки Cache-Control им не прописали. Проверено запросом к серверу владельца: у /, /app.js и /style.css стоит no-cache, must-revalidate, а у /workspace.js и /workflow.js заголовков кэша нет вовсе. Из-за этого браузер держал старые файлы после обновления сборки, и владелец видел прежний интерфейс при новом номере сборки — та самая поломка, ради которой запрет кэша когда-то вводился для app.js. Перечисление файлов сделано общим списком, чтобы следующий добавленный файл не оказался снова без заголовков. 609 passed, ruff clean. Co-Authored-By: Claude Opus 5 --- src/antigravity_provider/router/web/server.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/antigravity_provider/router/web/server.py b/src/antigravity_provider/router/web/server.py index 6cb6f94..3e2d5ca 100644 --- a/src/antigravity_provider/router/web/server.py +++ b/src/antigravity_provider/router/web/server.py @@ -507,6 +507,23 @@ if _STATIC_DIR.is_dir(): headers=_NO_CACHE, ) + # A48 и A49 добавили новые файлы клиента, а заголовки кэширования им не + # прописали: браузер держал их сколько угодно. Владелец обновлял сборку и + # видел прежний интерфейс — ровно та поломка, ради которой запрет кэша + # вводился для app.js. Перечисление сделано общим, чтобы следующий + # добавленный файл не оказался снова без заголовков. + for _client_script in ("workspace.js", "workflow.js", "workflow.css"): + + def _make_route(name: str): + media = "text/css" if name.endswith(".css") else "application/javascript" + + def _serve(): + return FileResponse(str(_STATIC_DIR / name), media_type=media, headers=_NO_CACHE) + + return _serve + + app.get("/" + _client_script)(_make_route(_client_script)) + @app.get("/snapshot.example.json") def _fixture(): return FileResponse(str(_STATIC_DIR / "snapshot.example.json"), media_type="application/json")