auto-save 2026-05-26 08:38 (~6)
This commit is contained in:
@@ -536,7 +536,7 @@
|
||||
<tr>
|
||||
<td>生产站点</td>
|
||||
<td><code>https://marketing.skg.com</code></td>
|
||||
<td>公司域名已解析到 VPS <code>76.13.31.179</code>。线上由既有 Coolify / Traefik 负责 HTTPS 入口,项目 <code>web</code> 容器用 Nginx 承载静态前端;登录后根路径直接进入 Vue / Vite 个人生成画布,<code>/canvas/</code> 只作为旧链接兼容跳转到根路径。<code>/login/</code>、<code>/_next/</code>、<code>/assets/</code>、<code>/skg-logo-black.svg</code>、<code>/oasis-source/</code> 为公开登录页资源,未登录访问工作台跳转 <code>/login/</code>。登录页优先走飞书免登录,回调为 <code>/api/auth/feishu/callback</code>;账号密码保留为备用入口。<code>/api/</code> 通过 <code>auth_request</code> 校验 FastAPI 会话 Cookie 后再反代,后端按 Cookie 里的用户身份隔离 <code>Job</code> 和 <code>AgentRun</code> 数据。</td>
|
||||
<td>公司域名已解析到 VPS <code>76.13.31.179</code>。线上由既有 Coolify / Traefik 负责 HTTPS 入口,项目 <code>web</code> 容器用 Nginx 承载静态前端;登录后根路径直接进入 Vue / Vite 个人生成画布,<code>/canvas/</code> 只作为旧链接兼容跳转到根路径。<code>/login/</code>、<code>/_next/</code>、<code>/assets/</code>、<code>/skg-logo-black.svg</code>、<code>/oasis-source/</code> 为公开登录页资源,未登录访问工作台跳转 <code>/login/</code>。登录页只允许飞书免登录,回调为 <code>/api/auth/feishu/callback</code>;生产通过 <code>PASSWORD_AUTH_ENABLED=false</code> 停用账号密码入口。<code>/api/</code> 通过 <code>auth_request</code> 校验 FastAPI 会话 Cookie 后再反代,后端按 Cookie 里的用户身份隔离 <code>Job</code> 和 <code>AgentRun</code> 数据。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>画布构建</td>
|
||||
@@ -622,7 +622,7 @@
|
||||
<tr><td><code>AdRecreationBoard</code> 主题切换</td><td>左侧中段 65px 胶囊工具条上方图标组里有 <code>Sun</code> / <code>Moon</code> 图标按钮,切换 <code>skg-board-theme--light</code> 类名,并把选择写入 <code>localStorage["skg-board-theme"]</code>。暗色仍是默认模式;明亮模式只改变工作台外观,不改变任务、素材、分镜、模型调用或接口数据。</td></tr>
|
||||
<tr><td><code>SourceReferenceBuildPanel</code></td><td>旧的“相似主体 / 主体模板”大面板代码仍保留在文件里,方便以后恢复模板库复用、入库命名和自定义视图选择;但当前源视频工作区主路径已经由 <code>SourceSubjectPipeline</code> 承接,不再在页面下方渲染这块,避免和“参考帧池 → 转换层 → 主体元素”重复。</td></tr>
|
||||
<tr><td><code>web/components/media-asset-tile.tsx</code></td><td>项目内媒体素材缩略图基底组件:图片、视频、抽帧、产品图、相似主体图、首尾帧和视频候选默认从这里获得统一交互。组件负责缩略图显示、顶层固定浮层 hover 放大、删除按钮、下载/重新生成等操作按钮、忙碌遮罩、图片/视频共用预览,以及按场景启用原生视频播放 controls,避免每个新板块重复手写不同的媒体交互。hover 预览支持 <code>previewPlacement</code> 和 <code>previewMaxWidth</code>,视频候选可让操作按钮常显,保证下载入口不是隐藏语义;参考帧池用左侧紧凑预览避免遮住转换层;画面胶片是例外:为了保持胶片原位浏览,不使用额外弹出预览,只让胶片缩略图自己在轨道内放大。</td></tr>
|
||||
<tr><td><code>web/app/login/page.tsx</code></td><td>生产登录页:先读取 <code>/api/auth/config</code>,飞书 OAuth 配好时显示“飞书免登录”主按钮,账号密码表单保留为备用入口;如果 <code>feishu_enabled=true</code> 且浏览器 UA 命中飞书 / Lark 客户端,会在登录页自动跳转 <code>/api/auth/feishu/start</code>,让飞书客户端内打开应用时不需要再点一次按钮;登录成功后由后端设置 HttpOnly 会话 Cookie。当前只在原版 Digital Oasis 动态背景上叠加一个组合登录框,桌面端左侧是动态角色,右侧是图标化登录区;面板左上角只展示官网 SKG 字标,不再并列中文系统名。</td></tr>
|
||||
<tr><td><code>web/app/login/page.tsx</code></td><td>生产登录页:先读取 <code>/api/auth/config</code>,飞书 OAuth 配好时显示“飞书免登录”主按钮;只有后端返回 <code>password_enabled=true</code> 时才展示账号密码表单。当前生产 <code>PASSWORD_AUTH_ENABLED=false</code>,所以普通浏览器也只显示飞书入口;如果 <code>feishu_enabled=true</code> 且浏览器 UA 命中飞书 / Lark 客户端,会在登录页自动跳转 <code>/api/auth/feishu/start</code>,让飞书客户端内打开应用时不需要再点一次按钮;登录成功后由后端设置 HttpOnly 会话 Cookie。当前只在原版 Digital Oasis 动态背景上叠加一个组合登录框,桌面端左侧是动态角色,右侧是图标化登录区;面板左上角只展示官网 SKG 字标,不再并列中文系统名。</td></tr>
|
||||
<tr><td><code>web/app/login/layout.tsx</code></td><td>登录路由专属 layout:覆盖全站默认网页标题和描述为空,避免 <code>/login</code> 继承工作台 metadata 后在页面源码里继续出现登录界面文字以外的文案。</td></tr>
|
||||
<tr><td><code>web/components/login/oasis-canvas.tsx</code></td><td>登录页全屏动态视觉层:用 iframe 直接承载下载包 <code>web/public/oasis-source/index.html</code> 的原 WebGPU / Three.js 草场源码;父级登录页只覆盖自己的文案和表单,并在捕获阶段把全局鼠标坐标同时用原生事件和 <code>postMessage</code> 转发给 iframe,避免登录面板或输入框遮挡时草地失去鼠标响应。</td></tr>
|
||||
<tr><td><code>web/public/oasis-source/index.html</code></td><td>从下载包 <code>remix-3d-website-the-digital-o</code> 复制来的原始视觉源码。嵌入登录页时会隐藏 demo 站自己的导航、文字和设置面板,保留原多段滚动背景变化、WebGPU 草场、景深、风动和鼠标交互源码;末端阶段保留,只禁用原 footer 出现时把 canvas 上移的逻辑,避免底部露黑边。</td></tr>
|
||||
@@ -1078,7 +1078,7 @@ ProductRefStateItem {
|
||||
<tr><th>功能</th><th>接口</th><th>前端调用</th><th>说明</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>网页登录 / 飞书免登录</td><td><code>GET /auth/config</code>、<code>GET /auth/feishu/start</code>、<code>GET /auth/feishu/callback</code>、<code>POST /auth/login</code>、<code>GET /auth/check</code>、<code>GET /auth/me</code>、<code>POST /auth/logout</code></td><td><code>web/app/login/page.tsx</code>、Nginx <code>auth_request</code></td><td>登录页先读 <code>/api/auth/config</code> 判断是否显示飞书按钮;飞书客户端内且 <code>feishu_enabled=true</code> 时前端自动跳转授权入口,普通浏览器保留手动按钮和备用账号。飞书 OAuth 成功后后端用 open_id / union_id / email 生成多用户会话并设置 HttpOnly Cookie。账号密码登录保留为备用方式。生产 Nginx 对工作台和 <code>/api/</code> 调 <code>/auth/check</code> 做统一校验,未登录页面跳 <code>/login/?next=$request_uri</code>,API 返回 JSON 401。</td></tr>
|
||||
<tr><td>网页登录 / 飞书免登录</td><td><code>GET /auth/config</code>、<code>GET /auth/feishu/start</code>、<code>GET /auth/feishu/callback</code>、<code>POST /auth/login</code>、<code>GET /auth/check</code>、<code>GET /auth/me</code>、<code>POST /auth/logout</code></td><td><code>web/app/login/page.tsx</code>、Nginx <code>auth_request</code></td><td>登录页先读 <code>/api/auth/config</code> 判断是否显示飞书按钮和密码表单;飞书客户端内且 <code>feishu_enabled=true</code> 时前端自动跳转授权入口,普通浏览器保留手动飞书按钮。飞书 OAuth 成功后后端用 open_id / union_id / email 生成多用户会话并设置 HttpOnly Cookie。当前生产 <code>PASSWORD_AUTH_ENABLED=false</code>,因此 <code>password_enabled=false</code>,账号密码表单不展示,<code>POST /auth/login</code> 返回未配置。生产 Nginx 对工作台和 <code>/api/</code> 调 <code>/auth/check</code> 做统一校验,未登录页面跳 <code>/login/?next=$request_uri</code>,API 返回 JSON 401。</td></tr>
|
||||
<tr><td>运行配置 / 模型标注</td><td><code>GET /health</code></td><td><code>getRuntimeHealth</code>、<code>ModelTrace</code></td><td>返回 <code>database</code> 健康状态和 <code>models</code>:ASR、<code>asr_language</code>(默认 <code>auto</code>,表示中文/英文/多语言自动识别)、<code>asr_base_url</code>、<code>asr_remote_enabled</code>、<code>asr_local_fallback_enabled</code>、<code>asr_audio_fallback_enabled</code>、<code>faster_whisper</code>、本机 ASR、ASR fallback、翻译、GPT 改写、GPT 画面理解、产品视角识别 <code>product_view</code>、主图像模型 <code>gpt-image-2</code>、图片故障兜底 <code>image_fallbacks</code>、图片尺寸 <code>image_size_options</code>、短时熔断状态 <code>image_circuit</code>、主体 6 视图模型链路、Azure OpenAI TTS、视频别名、视频画幅 <code>video_size_options</code>、真实可用视频时长 <code>video_duration_options</code>、单条最大秒数 <code>video_max_duration_seconds</code> 和 Seedance 服务商。当前 <code>REWRITE_MODEL</code>、<code>AUDIO_REWRITE_MODEL</code> 和 <code>VISION_MODEL</code> 默认使用 <code>gpt-4o</code>;如果旧环境变量仍写 <code>gemini-*</code>,后端会归一化回 <code>GPT_TEXT_MODEL</code> / <code>REWRITE_MODEL</code>。语音只走 Azure OpenAI TTS,<code>models.voice_tts_paths</code> 会回传当前尝试的语音路径,方便区分路径错误和语音服务不可用。前端所有当前主路径里会调用模型的按钮旁显示模型名,点击弹出小窗口查看模型链路和输入输出逻辑;不返回 API Key、数据库密码或敏感凭证。</td></tr>
|
||||
<tr><td>历史列表</td><td><code>GET /jobs</code></td><td><code>listJobs</code></td><td>当前登录用户可见 job 精简列表(id/url/status/thumbnail/mtime/owner…),按 state.json mtime 倒序。前端 URL 无 <code>?job=</code> 时拉它回填本人历史;带 <code>limit</code> 可截断。开启数据隔离时,飞书用户只看到自己的任务,历史无 owner 的旧任务只对备用账号可见。</td></tr>
|
||||
<tr><td>创建任务</td><td><code>POST /jobs</code></td><td><code>createJob</code></td><td>提交 TK 链接,后台开始下载;后端会把当前登录用户写入 <code>Job.owner_*</code>,后续详情、素材文件、删除和生成接口都通过统一中间件校验归属。下载阶段默认不带 cookies;生产环境必须显式保持 <code>YTDLP_COOKIES_FILE=</code> 和 <code>YTDLP_COOKIES_FROM_BROWSER=</code> 为空,避免容器内误读被打进镜像的开发 <code>api/.env</code>。</td></tr>
|
||||
@@ -1241,6 +1241,18 @@ ProductRefStateItem {
|
||||
<h2>变更记录</h2>
|
||||
<p>这个记录不是 git log 的替代品。它记录“产品理解发生了什么变化、影响了哪些源码、你以后描述需求时该怎么说”。后续每次改功能都要补一条。</p>
|
||||
<div class="changelog">
|
||||
<article class="change">
|
||||
<header>
|
||||
<h3>2026-05-26 · 生产登录改为仅飞书</h3>
|
||||
<span class="tag amber">Auth</span>
|
||||
<span class="tag blue">Ops</span>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p><strong>问题:</strong>飞书接入后继续保留共享密码入口,后续成员容易误用旧密码账号,导致新内容继续落到 <code>password:skg</code>,和飞书个人身份沉淀混在一起。</p>
|
||||
<p><strong>改动:</strong><code>api/main.py</code> 新增 <code>PASSWORD_AUTH_ENABLED</code> 总开关;生产设为 <code>false</code> 后,<code>/auth/config</code> 返回 <code>password_enabled=false</code>,登录页不再展示账号密码表单,<code>/auth/login</code> 不再可用,旧密码 Cookie 会在校验时失效。<code>WEB_AUTH_SESSION_SECRET</code> 仍保留用于飞书会话签名,旧备用账号配置只作为应急恢复材料,不作为当前入口。</p>
|
||||
<p><strong>影响:</strong>新成员只能通过飞书登录,后续新建任务和画布都会绑定真实飞书 owner。旧 <code>password:skg</code> 数据不会自动归属到任何飞书用户,后续应通过公司可见/认领/管理员迁移处理。</p>
|
||||
</div>
|
||||
</article>
|
||||
<article class="change">
|
||||
<header>
|
||||
<h3>2026-05-26 · 接入 Postgres 做公司内部沉淀</h3>
|
||||
|
||||
Reference in New Issue
Block a user