Commit History
Yesterday
-
houtai xintiao jiang pin dao 50s, fangkuan zaixian chuangkou dao 120s
xiaolongmrpresence xintiao shi wei yi "qie dao houtai ye zhao da" de quanju lunxun, xian shang shi ce dan zhe yi xiang jiu you 300+ req/s, er rongqi zhi you 2 ge gongxiang vCPU。 - qian tai: 25s (bu bian, hu ying bu shou ying xiang) - hou tai: 50s (jiang yi ban) - fuwu duan zaixian chuang kou: 60s -> 120s 50s x 2 = 100s < 120s, lian diu liang ci xintiao reng suan zaixian, bi yuan lai de 25s/60s geng bu rongyi wu pan li xian。 qie hui qian tai shi li ke bu yi ci, zaixian renshu dangchang bian zhun。 zhen ji: artifacts/_visibility_gate_test.py 10/10; tsc / eslint jun lv。9340872 -
降低线上轮询压力:后台标签页暂停轮询、关闭 access log
xiaolongmr线上容器(cpu-basic,2 共享 vCPU)实测 1841 req/s,超出承载数倍, 导致连返回静态 JS 都要 55 秒。日志拆解后,热点全是自家前端的全局轮询接口: /auth/session 375/s /api/chat-room/unread 359/s /api/chat-room/direct-conversations 350/s /api/presence/ping 334/s /api/announcements 106/s 四项改动(均不改变任何功能,用户感知不到差别): 1) Dockerfile 去掉 --access-log 实测 access log 占日志体积一半(约 285 KB/s、1800 行/秒),容器只有 2 核,每条请求都多一次格式化 + write 系统调用。注意 main.py 末尾的 uvicorn.run(access_log=False) 在线上不会执行(CLI 启动),所以必须改这里。 2) use-chat-room-unread:只在页面可见时轮询 这个 hook 挂在全局导航,每个标签页都在跑,含切到后台/被遗忘的标签页。 后台没人看角标,请求却照打。切回页面时立刻补拉一次。 3) announcements-popover:同样只在可见时轮询 该组件在顶栏挂了 2 份(移动端/桌面端各一),每个标签页跑两份。 4) use-auth-guard:权限兜底同步 5s → 30s 原本是 force 校验(绕过本地缓存直打服务端),是全站最重接口、占请求 20%。 权限和登录态不会 5 秒一变;focus / visibilitychange 仍会立刻强制校验一次, 真实感知比 30 秒更灵敏。 presence 心跳保持后台上报(约 25s)不变 —— 那是「在线人数」要统计后台标签页的 有意设计,属功能行为,未改动。 真机验证(artifacts/_visibility_gate_test.py)10/10 通过: 可见时 unread / direct-conversations…d188720
2 days ago
-
聊天室未读角标:改成红色圆形气泡,并把私聊未读一并计入
xiaolongmr1) 样式:顶部「聊天室」导航项的未读提示原来是纯文字红色数字, 改成微信/QQ 那种红色圆形气泡(rose-500 底 + 白字 + rounded-full)。 用 min-w-4 + px-1 让个位数是正圆、两位数自然撑成胶囊, 避免固定 size-4 时 "99+" 溢出;补 aria-label 标注未读条数。 2) 计数:原来只算公共大厅未读,私聊未读拿不到。 useChatRoomUnread 改为 大厅未读 + 所有私聊未读之和, 两个请求并发发(Promise.all),传私聊已读位置整表给服务端做差集。 真实机验证 9/9 通过(含「造 2 条私聊 → 角标 +2,读掉后回落 2」), 回归 _chatroom_unread_test / _pin_test / _api_e2e 共 49 项全过。d24ebec -
聊天室:头像回退微信头像、复用画图页输入框、撤回删除、布局收口
xiaolongmr头像 - 根因是聊天室与 presence 只读 identity["avatar_url"],而微信登录用户的头像 存在 wechat_avatar 里,于是恒为空、界面只显示首字占位(签到页能显示是因为 它两个字段都读)。新增 presence_service.resolve_avatar_url 统一口径: 先 avatar_url,再回退 wechat_avatar,与顶栏 / 画图页 / 批量页 / 签到页一致。 - 在线列表、消息落库、summary.me 三处都改走这个函数。 输入框 - 底部输入框改用画图页同一套 @/components/prompt-composer 部件 (Surface / Textarea / Toolbar / SubmitButton),外形与画图页完全一致。 - @ 唤出面板通过 suggestions 传入,键盘拦截走 onKeyDownCapture (返回 true 表示面板已消费该按键),粘贴图片仍走 onPaste。 撤回与删除 - 软删除:新增 deleted_ts / deleted_by 两列,不做物理删。消息 id 是前端翻页 游标,物理删会留下空洞、导致增量轮询的序列错乱。 - 已删消息的正文与图片在服务端就抹空(不能只靠前端不渲染,否则直接读接口 仍能拿到内容)。前端显示「你/某人撤回了一条消息」或「管理员删除了一条消息」。 - 权限在服务端强制:作者本人 2 分钟内可撤回(RECALL_WINDOW_SECS=120), 管理员可删任意消息。前端按钮只按同一规则决定是否渲染,不作为权限依据。 - 新增 DELETE /api/chat-room/messages/{id}。 - mergeMessages 支持就地更新:撤回后 id 不变而内容变了,若只做「去重后追加」, 轮询拉回的已删状态会被旧数据挡住,界面永远不会更新。 布局 - 输入框区去掉「所有登录用户可见,请勿发送隐私信息」。 - 左上角侧栏头部由「在线用户 + 计数 + 搜索框」改为单个「公告聊天室」标题。 - section 高度由 min-h 改为固定 h:AppShell 内层本身是 min-h-screen 加 pt-[5.25rem],section 再叠 min-h 会与之相…5b477d8 -
新增聊天室页面:登录用户群聊
xiaolongmr- 后端:services/chat_room_service.py(SQLite 只追加存储,经镜像 runtime_file 持久化)+ api/chat_room.py(消息增删查 / 汇总接口,均需登录) - 前端:/chat-room 页面,3s 轮询增量拉取、乐观发送、回车发送、500 字上限、自动滚底、日期分隔与角色徽章 - 导航:三套角色导航均插入「聊天室」(对话之后),含一次性迁移e61d03a -
撤回提示词编辑器「图N 引用参考图」与 @ 唤出缩略图功能
xiaolongmr该功能几轮修复后仍无法稳定使用(@ 选图后立刻用输入法打字时空格丢失、 缩略图与光标行为异常),按用户要求整体撤掉,输入框恢复为普通 textarea。 - prompt-composer.tsx 回到 1b90ec42(功能引入前)的 textarea 版本, 移除 contentEditable chip 编辑器、序列化/光标偏移换算、@ 候选菜单、 缩略图渲染与自动补空格等全部相关代码 - 画图页 / 批量生图页 / 聊天页 / 产品图页 4 个调用方同步移除 referenceTokens 传参与 PromptComposerEditorHandle 类型标注 - 移除画图页的「写『图1』『图片1』或按 @ 都能引用参考图」提示文案 tsc 与 eslint 均通过。ce96411
3 days ago
-
提示词编辑器对齐 infinite-canvas 的 chip 输入架构,修「@选图/手打标签后空格丢失」
xiaolongmr换掉「每次输入都重建 DOM」的做法,迁移 infinite-canvas 的核心机制: - 输入时只在「DOM 序列化结果 != 目标字符串」才重建 DOM 并按字符串偏移还原光标, 普通打字(含 IME 组字)完全不碰 DOM,输入法不再被冲掉 - 空格以 DOM 为准:chip 集合相同但 DOM 缺空格时(如「的」顶掉空格的那次输入) 也会重建,杜绝「空格只在字符串里、界面看不到」的脱节 - @ 选中插入后光标落进空格文本节点内部(原先悬在节点边界,caret 矩形是 0x0) - domPointAtOffset 落 chip 边界时优先落进相邻文本节点内部,不再悬空 - 迁移 infinite-canvas 的原子删除:keydown 拦截紧贴 chip 的退格/Delete 并 preventDefault 后整块删除,避免与浏览器原生删除重复执行 真机验证(agent-browser 真实按键):@选图后立刻打字、手打标签、逐字输入、 中文混排、chip 原子边界(左右键/退格/Delete)、双 chip 相邻删除共 14 例全过。11d4116 -
提示词引用参考图:同时支持「图片1」写法
xiaolongmr用户要求除「图1」外也认「图片1」。实现为同义别名,命中任一都渲染同一张缩略图, 插入提示词时仍写主标签「图1」,不改变既有输出。 - PromptReferenceToken 新增可选 aliases;referenceIndexByLabel 与 referenceLabels 都把 label + aliases 一起收录,referenceLabels 继续按长度倒序。 倒序很关键:「图片12」必须先于「图片1」匹配,否则会被拆成「图片1」+「2」。 - 两个 image-composer(画图页 / 批量页)都传 aliases: [`图片${index + 1}`]。 - mentionCandidates 的搜索串也拼上别名,「@图片」能筛出候选。 - 缩略图角标的取号正则放宽成 /^@?图(?:片)?/,否则「图片1」会显示成「片1」。 验证: - 断言 artifacts/prompt-refs/verify-alias.mjs,23 条全绿:两种写法命中同一张图、 混用不串、越界 图片9 不命中、图片12 优先于图片1、别名在退格/左右键/补空格 四条路径上与主标签完全等价。另回归 verify-cursor.mjs 18 条仍全绿。 - 特别确认「图片1」里的「图1」子串不会被当成独立标签误匹配 (图1 要求「图」紧跟「1」,图片1 中不成立)。 - 真机 artifacts/prompt-refs/alias-check.sh,7 用例全绿:图片1/图片2 各渲染对应 缩略图、与图1 混用正确、越界图片9 不渲染、caret=4 按← 一下跳到 1、 退格整块删成「用 换」、@图片 能筛出候选、@ 回车仍插入「图1」。98186ab -
提示词引用参考图:「图N」在键盘上当成一个单位,左右键一下跨过
xiaolongmr用户反馈:参考项目里缩略图是一个字符,左右移动光标和删除都只需一下。 查 infinite-canvas 源码确认:它的 canvas-prompt-chip-input.tsx 用的是 contentEditable + contentEditable="false" 的真实 DOM chip,天然是原子节点; 而 canvas-resource-mention-textarea.tsx(textarea 版)和我们一样, 是靠 keydown 拦截模拟原子性。我们是纯 textarea,补齐这部分键盘行为。 - 新增 referenceLabelRangeAt():找出光标贴着的标签区间 [start, end)。 start 算上可选的 @ 前缀,光标停在 @ 前面时也能整块跨过去。 - 左右方向键:光标贴着标签尾部按 ← 跳到开头,贴着开头按 → 跳到尾部之后; 从标签中间按 ← 也会一下跳到开头。Shift+方向键保留选区扩展。 带 alt/ctrl/meta 修饰时不拦截(留给词级跳转)。普通文本行为不变。 - 顺带修退格的两个 bug: · 原来要求标签前面必须是行首或空格,「用图1」退格会只删掉「1」留下「用图」。 改成只要求标签结尾紧贴光标。 · 向前删的正则 ^(@?)(label) 匹配不到光标在 @ 前面时的 @,会留下孤零零的 「@」;改成 ^((?:@)?label) 一并吃掉。 - 验证: · 逻辑断言 artifacts/prompt-refs/verify-cursor.mjs,18 条全绿 (含图12 不被图1 抢匹配、@ 前缀、普通文本不误伤)。 · 真机 artifacts/prompt-refs/cursor-check.sh,7 个用例全绿: caret=3 按← → 1;caret=1 按→ → 3;caret=2 按← → 1; 退格/Delete 均整块删成「用 换」;「用图1」无空格也整块删; 普通文本按← 仍是 4→3。c98bf24 -
提示词引用参考图:@ 随手可唤出 + 手打「图N」自动补空格
xiaolongmr- @ 候选菜单改成光标前有 @ 就唤出,不再要求前面是空格或行首。 参考项目 infinite-canvas 用的是 (^|\s)@,这里放宽成 @([^\s@]*)$, 「把@」「中间@」都能直接唤出,插入位置仍按 @ 的起点算。 - 手动打完「图N」后自动补一个空格,跟 @ 选中插入的「图N 」一致, 接着写文字不会和标签粘在一起。 · 参考图 ≥10 张时「图1」可能是「图12」的前缀,此时等用户打完数字再补, 避免把「图12」拆成「图1 2」。 · 标签后面已经紧跟汉字(如「图2的」)时在标签与汉字之间插入,不影响语义。 · 越界编号(图9 而只有 2 张图)不补空格,保持纯文本。 · 组字期间(isComposing)不插空格,避免打断 IME 的拼音串。 - 真机验证 artifacts/prompt-refs/at-check.sh: 把@ / 中间@ / @ / 已有文字后面@ 四种都能唤出候选; 用图1 → 用图1 ;用图2的 → 用图2 的;用图9 不动;@城市 只剩图2。e510d0d -
画图页提示词支持「图N」引用参考图:输入框内直接显示缩略图、可点开大图、可用 @ 唤出候选
xiaolongmr- PromptComposerTextarea 新增 referenceTokens:高亮层把命中的「图1」「图2」原地画成缩略图。 外层 inline-block 用 visibility:hidden 的文字占位、内层绝对定位铺满那一格,所以缩略图 不改变文本流里的宽高,多行混排时光标也不会错位(复用 $技能 已有的镜像层机制)。 - 缩略图可点击看大图(复用 ImageLightbox);mousedown 阻止默认行为,点击不抢输入框焦点与光标。 - 新增 @ 唤出候选:输入 @ 后在光标处弹出列表(缩略图 + 图N + 文件名),上下键选择、 回车插入、Esc 或点击外部关闭;光标坐标用镜像 div 量算,菜单会按空间自动向上翻。 - 退格 / 删除把「图N」按整体删掉(含可选的 @ 和尾随空格),不会删一半留下孤零零的「图」。 - 输入法组字期间临时关掉高亮层:高亮生效时 textarea 文字是透明的,不关掉中文打字会看不见。 - mention 与选中项的真值放在 ref:textarea 光标一动 React 会补发 onSelect, 只认 state 会让键盘选中的项在与按键同一批事件里被打回第一项。 - 画图页与批量生图页的输入框都接上了(批量页是画图页的副本,保持同步)。0d06d34 -
新增批量生图页:画图页副本 + 多条目编辑器 + 并发 10 一起生成
xiaolongmr- web/src/app/batch/:整页复制画图页(page.tsx + 5 个组件),批量能力只做在副本上, 不动画图页本身 - 输入卡工具条新增「批量」入口(batch-toggle),点开后同一张卡原地展开为多行编辑器: 每行一条提示词,行内独立选参考图(不选 = 纯文生图)、独立张数、按需覆盖参数; 右侧显示「预计 X 积分 / N 条 · 共 M 张 · 同时 10 条」 - 队列由「会话级串行」改为「条目级并发池」:单条执行逻辑抽成 executeTurn, runConversationQueue 改为调度器,按 BATCH_TURN_CONCURRENCY(10) 同时拉起多条; 单条提交时只拉起一个 worker,行为与改造前一致 - 额度预检仍按总张数走原有逻辑;提交后清空编辑器并退出批量模式,结果排进同一会话消息流 - 导航:config.py 默认导航 + top-nav 图标加「批量生图」;app-shell 让 /batch 复用画图页布局 - 并发数先硬编码为 10,后台配置项留待后续d7f06c8 -
撤回批量生图功能(48b1e94a)
xiaolongmr用户决定暂不加该功能,代码回到 48b1e94a 之前的状态: - image-composer.tsx / page.tsx / prompt-composer.tsx 完全还原, 不再有「批量」入口、多行编辑器与 handleBatchSubmit - 保留 docs/批量生图-方案.md(设计文档,不影响构建与运行)1b90ec4 -
画图页新增批量生图:一个入口 + 原地展开的多行编辑器
xiaolongmr- image-composer: 工具条新增「批量」入口,同一张输入卡原地展开为多行 提示词编辑器(行号 / 行内张数 stepper / @@N 语法 / # 注释 / 回车新增 行 / 粘贴多行自动拆分 / 逐行解析状态点);批量态复用现有参数 chip, 右侧显示「预计 X 积分 + N 行 · 共 M 张 · 忽略 K 行」,提交后自动收起 回单张模式,不新增页面或页签 - page: handleBatchSubmit 按总张数做积分/号池预检后,每行展开为一个 queued turn 交给现有会话队列顺序执行,结果沿用现有消息流渲染 - prompt-composer: SubmitButton 支持 testId,便于真机验证48b1e94 -
前端撤销存量用户的昵称留空处理,弹窗留空只针对新注册用户
xiaolongmr- 撤回 nicknameDraftValue:老用户打开个人资料弹窗仍预填现有昵称(名字与展示均不动) - image/page.tsx、top-nav.tsx 恢复为 profile.name || "" 原逻辑 - 只保留后端新注册分支留空 + _normalize_item 空名豁免(新用户弹窗天然为空) - 空名展示兜底(dashboard Top 榜、卡密兑换人)仅影响新注册的空名用户315e369 -
微信新注册用户不再预置「微信用户 xxxx」内置昵称
xiaolongmr- auth_service: 新注册微信用户 name 留空;_normalize_item 对带 wechat_openid 的记录保留空名,避免被兜底成内置默认名 - 前端昵称弹窗初始值改为留空(新增 nicknameDraftValue),存量 临时名用户也不会再被预填 - dashboard Top 榜、卡密兑换人展示补空名兜底722b35a -
在线人数改为全站心跳:覆盖所有页面 + 关闭页面立即下线
xiaolongmr2c2d0e1 -
积分消耗统计:用量流水表 + 看板筛选/趋势/模型明细/Top 用户
xiaolongmr5b273a6 -
官网来源取证 + 生图终局判定 + 对话卡片渲染
xiaolongmr- 官网来源取证:每张结果图可生成 chatgpt.com 官方匿名分享链接自证「确实是官网出的图」; 出图即固化(独立线程,不占积分/额度/并发槽),到期按保留时长自动回收并隐藏上游会话 - 生图失败判定:识别内容策略拒绝(is_error 终局文本)不再白等到超时;同一张图按 id 去重, 修 n=1 出两张重复图;失败卡片补「ChatGPT 官网原话」与「查看官网」 - 提示词比例追加:默认开启,仅用户主动选比例时追加(智能比例不受影响) - 对话渲染:app_block 裸 JSON 转 html 围栏、官网 DIL 卡片/问卷降级渲染、多题勾选统一作答、 思考摘要不展示 - 内容审核:良性复合词白名单(灵感爆炸/色彩爆炸/爆炸头等),修设计海报误拦 测试:全量 888 passed / 20 failed(与基线一致,零新增);tsc、eslint、next build 均干净2aabbd0
7 days ago
-
对话 复制编辑和暂停
xiaolongmr464179c
10 days ago
-
1
xiaolongmr6daa87a
15 days ago
-
优化
xiaolongmr4f03ac7
17 days ago
-
测试
xiaolongmr263e0b9
19 days ago
-
添加chat
xiaolongmr6fed19c -
添加编辑
xiaolongmr638cad0
-
优化
xiaolongmrd77c01e
-
优化
xiaolongmrc78ff81
-
优惠
xiaolongmrd44a83b
-
优化1
xiaolongmr0780dc2 -
11
xiaolongmr8b65ca0 -
内部测试
xiaolongmra6e9d9d
-
迁移上游账号认证与管理能力
xiaolongmr3fb199a
-
Merge upstream v1.6.0 feature baseline
xiaolongmr2438892
-
整合功能更新并排除本地恢复产物
xiaolongmr2dc6fe4
-
页面优化
xiaolongmr459bba7
-
更新卡密
xiaolongmreaf2aba
-
添加 Free 号池死号清理和图片拖拽导入
xiaolongmr41fee80
-
Add configurable branding and login sessions
xiaolongmr519f85d
-
Update image UI and deployment settings
xiaolongmrf9a9d62
-
Fix image page fixed layout scrolling
xiaolongmre73f178 -
Use Fancybox for image lightbox
xiaolongmr264ce60
-
Add shared account pool controls
xiaolongmr07dd5b7
-
feat: add support for third-party apps settings and integrate infinite canvas feature
HouYunFeic4dd466
-
Add email code account import
xiaolongmrabe8ba7 -
Reduce announcement polling frequency
xiaolongmr9d93681 -
Improve image generation and auth responsiveness
xiaolongmrbbc8fdb
-
Improve frontend loading performance
xiaolongmrdbfb96e
-
Enhance shop credits and announcements
xiaolongmr954dc6b
-
Add announcements management
xiaolongmrf2888e4
-
Add shop access and persistent bucket support
xiaolongmra318da0