0eeefe88d6
fix(generation): count upload + deduped asset images against 9-image cap
...
Build and Deploy / build-and-deploy (push) Successful in 13m54s
参考图 9 张上限改为「上传图 + 去重后的素材库引用图」合并计数,
同一张素材图 @ 多次按 1 张算。旧逻辑只算上传图、@ 素材完全不计入,
导致可 9 张上传 + 无限 @ 素材超标。
- assetMentions.ts: 抽出 collectAssetMentionStats,新增按 assetId 去重的 imageAssetIds
- inputBar.ts: addReferences / _validateAndAddImages 并入素材去重数卡 9 张
- PromptInput.tsx: insertAssetMention 补 image 分支,已 @ 过的同一素材放行
- views.py: 上限校验移到循环后用 image_n(seen_urls 已去重)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 14:12:32 +08:00
seaislee1209
a842f87812
feat(users): 超管+团管可改用户名 — 内联编辑 + 5 步权限矩阵
...
后端:
- AdminAuditLog 新增 user_username_update 操作类型 (0015 migration)
- admin_user_username_update_view (PATCH /admin/users/<id>/username, 仅超管, admin 账号不可改)
- team_member_username_update_view (PATCH /team/members/<id>/username, 团管, 同 reset-password 5 步矩阵: 同团/拒自己/拒admin/拒主管/副管不改副管)
- 长度按 UTF-8 字节计 3-20 字节 (≈ 3-20 英文字符 或 1-6 中文字符)
前端:
- adminApi.updateUserUsername + teamApi.updateMemberUsername
- UsersPage 用户名 cell 内联「改名」按钮 (admin 行隐藏)
- TeamMembersPage 用户名 cell 内联「改名」按钮 (canEditUsernameFor 守卫)
- 按现有 TeamsPage inline edit 模板 (inline-flex + whiteSpace:nowrap)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:43:35 +08:00
seaislee1209
e55a6665f2
test+docs(notification): announcement-integration-smoke.mjs 10/10 + plan 归档 + 完成报告
...
新建 web/test/announcement-integration-smoke.mjs 10 项 E2E:
- 空内容 400 / HTML 发送 200 / fan-out 数 = User 总数
- tudou 拿到未读 / 浏览器自动强弹 modal / 关闭标已读 / 再开不弹
- 消息中心 [公告] chip + HTML 渲染 / 无 console.error
跑通基线对比:
- vitest 71 fail / 162 pass (0 新增回归)
- v2-smoke 25/25 + modal-interaction 8/8 + v0.20.1-smoke 11/11
- 新 announcement-integration-smoke 10/10
归档 plan 文件 docs/todo/通知公告整合.md(v2,本次实施的源 plan)。
写完成报告 docs/todo/通知公告整合-完成报告.md(改动文件清单 + 3 commit hash + 测试结果 + 关键设计决策 + 边缘 case 处理)。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 16:04:43 +08:00
seaislee1209
2289ce7d30
docs(v0.20.1): 批次开发计划 + 完成报告 + changelog 归档
...
- 新增 docs/todo/v0.20.1-批次开发计划.md(本次实施的源 plan,7 批次拆解)
- 新增 docs/todo/v0.20.1-完成报告.md(改动总览/批次详情/测试结果/风险记录)
- docs/changelog.md 顶部追加 v0.20.1 条目(commit hash 对应,验收结果总结)
7 批次全部本地完成,等用户授权后 push 到 dev:
A e86e3d4 主管理员撤销 bug
B 72f351d 视频封面帧前端
C 6ee5c8f api_prompt + 调试折叠区
D c53144b 站内通知系统
G ed67a27 团管重置密码
H 11c1cdf reEdit prompt 丢失
I 6b13cff Safari 自适应根因
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 18:40:28 +08:00
seaislee1209
f8a39d55c7
feat(theme): 浅色主题 V2 — 玻璃质感重做 + LandingPage 浅色化 + 双语言系统
...
Phase A: index.css 完全重写 [data-theme="light"] block
- 玻璃方向修正: bg-card 从 rgba(0,0,0,0.05) 黑透明 → 双 token 拆分
--color-bg-card: #ffffff 实体白 (admin 卡)
--color-bg-glass: rgba(255,255,255,0.65) 透明白玻璃 (sidebar/modal/banner)
- Aurora 浅色不再 display:none, 改 pastel 紫蓝桃 0.20-0.32 alpha
- Inset highlight 方向反转: 浅色用 rgba(255,255,255,0.50) 白高光 (玻璃顶边标志)
- Backdrop-filter 五档标准: --bf-glass-sm/md/lg/xl (12-40px + saturate 140-180%)
- Multi-layer shadow: --shadow-card-light (2 stops) + --shadow-glass-light (3 stops + inset)
- 暖调 chip: --color-chip-warm-* GitBook 公告风格
- 文字主色: #171823 微紫 → #171717 Vercel Black
Phase B: LandingPage + AuroraCanvas 浅色化
- 移除 LandingPage 的 data-theme="dark" 强制 (V1 的回避)
- LandingPage.module.css 21 处颜色全 var 化
- AuroraCanvas: 订阅 useThemeStore, 新 LIGHT_ORBS 数组 pastel 紫蓝桃,
vignette 浅色用白色, grain opacity 减半
Phase C: 13 个玻璃面升级 (3 sub-agent 并行)
- Modal 类 (Login/ForceChange/VideoDetail.infoPanel/RecordDetail/AssetLibrary/
Announcement/Confirm/TeamsPage.detailModal): 接入 bg-modal-glass +
bf-glass-lg/xl + shadow-glass-light (含 inset highlight)
- Bar/Dropdown/Toast (AnnouncementBanner/Toast/Dropdown/Select/DatePicker):
bg-glass-strong + bf-glass-md + inset-highlight
- Sidebar + 生成页 (Sidebar/PromptInput/GenerationCard): glass + 顶边白高光
- AnnouncementBanner 写双套独立 [data-theme] 规则 (CSS gradient 内不能 var alpha)
Phase D: admin 实体卡 multi-layer shadow (13 处, 1 sub-agent)
- DashboardPage / TeamsPage / UsersPage / RecordsPage / AdminAssetsPage /
LoginRecordsPage / AuditLogsPage / ProfilePage / SettingsPage
的 .statCard / .tableWrapper / .chartWrapper / .accordionItem 等
加 var(--shadow-card-light) 双层柔阴影
AdminLayout 修复 (V1 漏的):
- .layout 改 transparent, 让 AmbientBackground pastel aurora 在主区透出
- .sidebar 加 bf-glass-md + inset highlight + 立体阴影
LoginModal / ForceChangePassword 残留 mint 清理:
- submitBtn bg/border/color 用 mint-accent var, 字重 500→600 + 字距 0.04em
- input:focus border 用 var(--color-mint-accent)
- 加 bf-glass-sm + inset highlight
验证:
- TS 编译过
- vitest 71 fail / 162 pass 与 V1 基线完全一致, 无新增回归
- 24 张 V2 截图位于 docs/screenshots/v2/ (本地, .gitignore 排除 png)
完成报告: docs/todo/亮色主题切换V2-完成报告.md
V2 plan: docs/todo/亮色主题切换V2.md
视觉对齐稿: docs/todo/showcase.html
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 19:46:55 +08:00
seaislee1209
f0f47e8368
feat(theme): 亮色主题切换完整实现 — dark/light 双套 var + Sidebar 切换 + 浅色色板
...
Stage 1 (var 化, 350 处): 425 处硬编码颜色 → CSS var, 涉及 49 个 tsx/css module 文件,
按 hot files (DashboardPage/TeamDashboardPage/RecordDetailModal/ReferenceList) →
Modal/Asset/Profile/Login → 生成页家族/管理后台/公共 UI 三波 8 个 sub-agent 并行处理。
index.css :root 加 ~70 个新 var (modal/text 层级/状态色 bg 变体/chart/mention pill 等)。
Stage 2 (双套 var): :root 保留 DARK 默认值, [data-theme="light"] 覆盖 ~95 个 token。
浅色色板按 Vercel Geist (#fafafa / #171717 / shadow-border) + Linear Light surface 分层规范,
主色 #6c63ff → #5048cc 加深 18% 满足 WCAG AA。aurora 极光在 light 下 display:none。
Stage 3 (切换机制): 新建 store/theme.ts (Zustand + localStorage 持久化),
Sidebar 加月亮/太阳 SVG 切换按钮 (位于头像上方),
DashboardPage/TeamDashboardPage/ProfilePage 的 ECharts 配 key={theme} 强制重渲染。
Stage 4 (微调): LandingPage 强制 data-theme="dark" 保持品牌识别 (登录流程一直深色),
sidebar bg / card bg / border 在浅色下加深 0.02 提升轮廓辨识度。
Stage 5 (验证): Playwright 头无浏览器自动登录 admin + screenshot_user, 截深/浅各 12 个页面 = 24 张
到 docs/screenshots/ (本地档, .gitignore 排除 png 不入库)。
vitest 71fail/162pass 与改造前基线完全一致, 无新增回归。
完成报告: docs/todo/亮色主题切换-完成报告.md
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 11:10:35 +08:00
seaislee1209
3da801d6e6
docs: 亮色主题切换开发计划 (P3, AI 自主完成预备)
...
5 个 Stage 分阶段推进:
- Stage 1: 109 处 inline hex/rgba 颜色替换为 var(--color-*)
- Stage 2: :root 拆 [data-theme="dark/light"] 两套, 浅色色板抄 Linear/Vercel
- Stage 3: themeStore + 切换按钮 + localStorage 持久化
- Stage 4: 浅色色板调试 + 半透明色反相 / ECharts 重渲染 / AuroraCanvas 处理
- Stage 5: vitest + Playwright 本地无头浏览器深/浅截图回归
预期 AI 连续工时 7-9 小时, 人工 3.5-5 天。
关键发现: 项目未实际使用 Arco (CLAUDE.md 写错), 颜色高度集中
(Top 4 文件占 75%, Top 10 颜色占 60%+ 已有对应 var)。
待用户启动 /loop 后 AI 自主完成, 完成时输出截图 + 完成报告。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:43:26 +08:00
seaislee1209
f2dc8d4713
feat: v0.19.1 素材组删除改用一次性 DeleteAssetGroup + 幂等清本地
...
Build and Deploy / build-and-deploy (push) Successful in 11m59s
之前 DELETE /api/v1/assets/groups/<id> 的做法是循环调 DeleteAsset 再
删本地记录,现在火山开放了 DeleteAssetGroup(文档明确级联删除组内所有
Asset),改为一次调用,原子、快、无半成功。
变更
- backend/utils/assets_client.py:
- ApiInfo 注册 DeleteAssetGroup
- 新增 delete_asset_group(group_id)
- backend/apps/generation/views.py:
- asset_group_detail_view DELETE 分支改为一次 delete_asset_group
- 加幂等保护: 火山返回 NotFound.group_id 时继续清本地, 修复场景为
用户在火山控制台手删素材组后本地 DB 出现孤儿, 再在前端点一次
"删除素材组"即可清掉本地残留
测试 (airlabs-test)
- assets_client 4 项 PASS: 创建 → 删除 → 验证 gone → 重删返回
NotFound.group_id → 纯假 id 同样 NotFound.group_id
- view 层 2 场景 PASS:
- A 火山+本地都在 → 都清空
- B 火山侧已手删, 本地还在 → 本地也能清
文档整理
- docs/API文档/about-Asset-素材组相关/ 新增 8 个火山最新 Asset API 文档
(CreateAsset/Group, List*, Get*, Update*, Delete*), 原"使用指南"移入
该目录归档
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 21:09:19 +08:00
seaislee1209
17fc3e5652
feat: 所有任务展示/列表/导出补「分辨率」字段 — 1080P 可见性完善
...
Build and Deploy / build-and-deploy (push) Successful in 5m18s
v0.19.0 上线 1080P 后,多处展示只有"比例"没有"分辨率",用户和财务看到
费用差异却不知道是因为分辨率不同。本次补齐:
- VideoDetailModal 视频详情信息栏:模式·模型·时长·比例·【分辨率】·tokens·费用
- RecordDetailModal 消费记录详情弹窗:基本信息加「分辨率」字段
- RecordsPage 超管消费记录 CSV 导出:比例列后加「分辨率」列
- TeamRecordsPage 团管消费记录 CSV 导出:同上
- ProfilePage 个人中心记录列表:右侧费用旁加分辨率小标签(仅当有值)
- types/index.ts: AdminRecord 加 resolution?: Resolution 字段
后端 API 之前已返回 resolution(v0.19.0 的 5 处手工序列化已覆盖 L1751
admin_records / L1815 team_records / L2704 profile_records / L2837/2919
内容资产),前端只需接住展示即可。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:08:06 +08:00
seaislee1209
624e12ae46
docs: v0.18.3 文档整理 + 新火山 API 文档 + changelog
...
Build and Deploy / build-and-deploy (push) Successful in 5m38s
- 新增 4 个火山官方 API 文档(Seedance 2.0 1080P / seedance 模型价格 /
seedance 2.0 系列教程 / 创建视频生成任务API)
- 归档 6 个过期文档到 docs/archive/(旧 Seedance API 邀测版 /
旧 Assets API 邀测版 / celery 轮询修复 / design-review / prd / test-report)
- 新增 docs/todo/ 目录(提示词 AI 优化功能待办)
- changelog.md 补 v0.18.3 条目
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 18:03:49 +08:00
seaislee1209
dafdc8983f
fix: v0.18.3 版权报错友好提示 + 图片删除即梦式连续重命名
...
Bug 1: 版权限制错误友好提示
- ERROR_MESSAGES 加 OutputVideoSensitiveContentDetected.PolicyViolation 映射
- 漫威等知名 IP 触发的版权拦截不再显示英文 raw error
Bug 2: 图片删除后同类型引用连续重命名(即梦逻辑)
- inputBar.ts::removeReference 重写:删除后同类型剩余引用按顺序 1/2/3 连续编号
- 用 DOMParser 同步更新 editorHtml 里对应 data-ref-id 的 @mention span textContent
- 缩略图区和提示词栏同步刷新,避免"两个图片2"命名冲突
验证
- 11 个 Vitest 单元测试覆盖图片/视频/音频删除、空 editorHtml、无 @mention、
连续快速删除等边界场景
- 3 个 Playwright E2E 真实浏览器验证:上传 3 张图 → 删中间 → 再上传 → 编号不冲突
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 18:03:36 +08:00
41115faa16
add md
Build and Deploy / build-and-deploy (push) Successful in 5m19s
2026-04-13 20:47:43 +08:00
61bcb9576f
add git guide
Build and Deploy / build-and-deploy (push) Successful in 3m55s
2026-04-04 18:26:05 +08:00
seaislee1209
ee7cdec9e3
add docs
Build and Deploy / build-and-deploy (push) Successful in 5s
2026-04-04 13:27:13 +08:00
43228d255e
fix celery
2026-04-04 10:15:23 +08:00
seaislee1209
3cdeb55367
chore: 移除误创建的 docs 文件(正确位置在仓库外 AirDrama 根目录)
...
Build and Deploy / build-and-deploy (push) Successful in 4m7s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:34:51 +08:00
seaislee1209
b219c01ea7
docs: 更新版本管理和项目总览(v0.14.1)
...
Build and Deploy / build-and-deploy (push) Successful in 4m47s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:28:20 +08:00
a389495ee7
add change host
Build and Deploy / build-and-deploy (push) Successful in 2m21s
2026-03-20 16:25:22 +08:00
seaislee1209
be656900c0
feat: v0.9.7 登录风控第二期 — IP归属地解析 + 异常检测(R1-R5) + 飞书告警 + 自动封禁
...
Build and Deploy / build-and-deploy (push) Successful in 2m13s
- IP138 在线 API + ip2region 离线库双通道归属地解析,60 秒熔断降级
- 5 条异常检测规则:地区不对/不可能旅行/频繁登录/团队遍地开花/海外IP太杂
- 飞书 interactive 卡片告警(红色严重/橙色警告),含辅助指标
- R2 自动封禁用户、R4 自动封禁团队,封禁即踢下线
- 系统设置页全局配置 + 团队详情页独立阈值覆盖
- 安全日志页面 + 管理员修改密码入口
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 00:02:56 +08:00
9d810eb62a
add git action
Build and Deploy / build-and-deploy (push) Successful in 3m36s
2026-03-18 17:34:00 +08:00
seaislee1209
e5273540e9
feat: v0.9.0~v0.9.1 — 5层极光首页 + 登录弹窗 + 播放器修复
...
Build and Deploy / build-and-deploy (push) Failing after 2m0s
- 全新 Landing Page:Canvas 极光动画(5色光球 + additive blending + blur 融合)
- 暗角/胶片颗粒/渐变遮罩 4 层视觉架构
- 鼠标推动光球交互(lerp 缓动)+ 呼吸效果
- 登录弹窗(磨砂玻璃 backdrop-filter blur)替代独立登录页
- Air Spark 全屏毛玻璃弹窗 + 音乐彩蛋(SVG 音波 + BGM)
- 品牌名 AIRFLOW STUDIO / AI VISUAL NARRATIVE + Space Grotesk 字体
- 路由重构:/ → LandingPage, /login → 自动弹登录框
- 自适应视频播放器比例修复(读取 videoWidth/videoHeight)
- adaptive 英文显示改为中文「自适应」
- 首页音乐泄漏修复(组件卸载时 pause+reset)
- 登录弹窗添加「目前仅限受邀创作者体验」提示
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 05:40:41 +08:00
seaislee1209
d9a12af078
fix: v0.8.5 安全加固 — CRITICAL/HIGH 漏洞修复
...
- C1/C2: 移除 settings.py 中硬编码的数据库密码和 SECRET_KEY 默认值
- K8s: DB_PASSWORD/DB_HOST/DB_USER/DJANGO_SECRET_KEY 改为 secretKeyRef
- H1: DEBUG 默认值从 True 改为 False
- H2: 登录接口添加 ScopedRateThrottle (5/min),全局限流 (anon 30/min, user 120/min)
- H4: Django Admin 仅在 DEBUG=True 时注册
- H6: PromptInput innerHTML 使用 DOMPurify 消毒防止 XSS
- H7: ALLOWED_HOSTS 从 "*" 收紧为实际域名
- H9: Nginx 添加安全响应头 + server_tokens off
- M1: 密码策略加强 (min 8 + CommonPassword + NumericPassword)
- M5: Django 生产环境安全头配置
- L1: 登录接口改为 POST-only
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:08:50 +08:00
seaislee1209
85f76d8543
feat: v0.8.2~v0.8.4 — 管理后台 UI 修复 + 团队详情重构 + 审计日志系统
...
v0.8.2: DatePicker/Select 暗色主题、公告跑马灯、Toast 全局化、失败原因 tooltip
v0.8.3: 团队详情抽屉→弹窗重构 + 修改秒数池功能 + member_count 修复
v0.8.4: AdminAuditLog 模型 + 12 处管理操作埋点 + 日志查询页面(/admin/logs)
审计日志覆盖所有管理员 mutation 操作(充值、修改额度、创建/禁用用户等),
记录操作人、变更前后值、IP 地址,支持按操作类型/操作人/日期筛选。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 01:18:44 +08:00
seaislee1209
f803a1ba71
feat: v0.8.1 — Seedance API 友好错误提示 + 前端 Mock 数据清理
...
- 新增 SeedanceAPIError 异常类 + ERROR_MESSAGES 错误码中文映射
- views.py 异常处理区分 SeedanceAPIError,存储友好错误信息
- 移除 DEV 环境 7 个 mock 任务,消除 404 轮询错误
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:31:14 +08:00
seaislee1209
32f0ee58f4
feat: v0.8.0 — Seedance API 全流程修复 + TOS 视频持久化
...
- 新增音频引用传递给 Seedance API
- 视频生成完成后自动持久化到 TOS(永久 CDN URL)
- 移除 ARK_API_KEY 硬编码默认值
- 前端渐进式轮询(10s/30s/60s)替代固定 3 分钟
- TOS 桶切换到 airdrama-media (cn-beijing)
- K8s Secret 注入 TOS 密钥,CI/CD 同步更新
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:26:27 +08:00
c1f29cbf85
feat: integrate Seedance API key via K8s Secret and auto-create admin user
...
Build and Deploy / build-and-deploy (push) Successful in 3m46s
- CI/CD creates K8s Secret from Gitea Secrets (ARK_API_KEY not in code)
- Backend deployment reads ARK_API_KEY from secretKeyRef
- Enable SEEDANCE_ENABLED=true in production
- Auto-create admin superuser on container startup if not exists
- Update CLAUDE.md and agent-auto memory docs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 00:41:22 +08:00
ffe92f7b15
Initial commit: 即梦视频生成平台
...
- web/: React + Vite + TypeScript 前端
- backend/: Django + DRF + SimpleJWT 后端
- prototype/: HTML 设计原型
- docs/: PRD 和设计评审文档
- test: 单元测试 + E2E 极限测试
2026-03-13 09:59:33 +08:00