INSERT INTO ias_upgrade_logs ( version, released_at, title, description, changes, modules ) VALUES ( '0.2.12', '2026-07-07T00:00:00+08:00', '修复 React 页面路由与静态资源托管安全问题', '修复 SPA 静态资源路径安全、动态内容页路由、HTML 邮件展示和上下文模拟器查询参数问题,并保持 ias-http 只负责 API 与静态资源托管。', '[ "修复 React SPA 静态资源托管的路径安全问题,改用 tower-http 静态文件服务,避免手写路径拼接读取 web/dist 之外的文件。", "React 新增动态内容页路由 /web/{page_type}/{slug} 与 /mail/{slug},通过 /v1/web/... API 拉取数据并渲染,保持 ias-http 只负责 API 与静态资源托管的边界。", "邮件详情页恢复 HTML 邮件的沙箱 iframe 渲染,纯文本邮件继续按文本展示。", "修复上下文组装模拟器提交表单后首次查询仍使用旧 URL 参数的问题。", "邮件详情 API 在自动标记已读成功后,会在响应中同步返回 seen=true。", "无数据库结构变化;ias-http 升级至 0.1.7,ias-mail 升级至 0.1.15,ias-service 升级至 0.1.9。" ]'::jsonb, '{ "ias-common": "0.1.0", "ias-ai": "0.1.2", "ias-wechat": "0.1.0", "ias-context": "0.1.1", "ias-http": "0.1.7", "ias-mail": "0.1.15", "ias-service": "0.1.9", "ias-main": "0.2.12" }'::jsonb ) ON CONFLICT (version) DO UPDATE SET released_at = EXCLUDED.released_at, title = EXCLUDED.title, description = EXCLUDED.description, changes = EXCLUDED.changes, modules = EXCLUDED.modules; UPDATE ias_upgrade_logs SET title = 'HTTP 页面职责迁移到 React SPA', description = 'HTTP 模块保留 JSON API 与静态资源托管,页面渲染职责迁移到 React 前端。', changes = '[ "HTTP 页面职责迁移到 React SPA:ias-http 保留 /v1/updates、/v1/web/... 等 JSON API,页面渲染由 web/ 前端负责。", "新增 React 前端工程,提供更新日志、邮件、工具、配置等页面入口。", "ias-http 删除旧的服务端 HTML shell 与字符串拼接页面渲染代码,新增 React 静态资源托管入口。" ]'::jsonb WHERE version = '0.2.9'; UPDATE ias_upgrade_logs SET changes = '[ "新增上下文组装模拟器页面(/context),支持按 scope(channel + account_id + from_user_id)查询。", "页面展示:活跃会话详情及消息列表、组装后的系统上下文预览、历史会话表、长期记忆、会话摘要(上次会话/近一周)和可用工具列表。", "导航栏新增「上下文」入口链接。", "ias-service 新增 context_simulator 和 context_simulator_data 模块,升级至 0.1.8。", "React 导航栏新增上下文入口;ias-http 升级至 0.1.6。", "无数据库结构变化。" ]'::jsonb WHERE version = '0.2.11';