feat(webagent): 行号块整块滚动 / mobile 统计精简 / 图片上传 - #86
Merged
Conversation
- diff/codelines 行号块改为容器整块横向滚动:.dl width:max-content + min-width:100%,
行号列 sticky 钉左(diff 双列 ln.a/ln.b),add/del 行号背景用双层渐变保持行 tint
- mobile (<=640px) 统计行精简:隐藏 model/in/out/cc,ctx 短文案 "32.2K · 16%",
turn "5轮·5req",进度条 44px,整行不溢出;desktop 文案不变
- POST /upload:图片落盘 <session_dir>/images/{n}.png(从 events 路径派生,
create_new 原子占名防并发撞号,8MB→413,非 POST→405,无 session→409),
返回 {placeholder:"[Image #n]"};agent 侧零改动,expand_image_placeholders 照常展开
- 前端 📎按钮 / 粘贴 / 拖拽三入口,上传中转圈+hint 提示,光标处插入 [Image #N] ,
失败显示错误行
lloydzhou
commented
Aug 21, 2026
lloydzhou
commented
Aug 21, 2026
| .diff .dl.del .txt { color: var(--label-primary); } | ||
| .diff .dl.del .ln { background: | ||
| linear-gradient(rgba(242,90,90,.12), rgba(242,90,90,.12)), var(--code-block); } | ||
| .diff .dl.hunk { background: var(--hover); } |
Owner
Author
There was a problem hiding this comment.
bug(视觉,需修):hunk 行(@@ ... @@ 头)行身背景是 var(--hover),但左侧两个 sticky 行号列被通用规则 .diff .ln { background: var(--code-block) }(246 行)覆盖成 code-block 色——hunk 行左缘约 7ch 宽会出现一条与行身不同的色带,滚动时更明显。需要补一条:\n\ncss\n.diff .dl.hunk .ln { background: var(--hover); }\n\n\nmeta 行(---/+++)无行号文字且行身无背景色,与 code-block 同色系,不受影响。
lloydzhou
commented
Aug 21, 2026
lloydzhou
commented
Aug 21, 2026
| ta.addEventListener('drop', function (e) { | ||
| e.preventDefault(); | ||
| var files = e.dataTransfer && e.dataTransfer.files; | ||
| if (files && files.length) uploadImage(files[0]); |
Owner
Author
There was a problem hiding this comment.
nit(交互,后续增强):两个可改进点——\n\n1. 多文件只取 files[0],其余静默忽略。用户一次拖 3 张图只传 1 张且无提示,建议要么循环逐个上传,要么在 hint 里提示 '一次一张'。\n2. dragover/drop 只绑在输入框上,拖到页面其它区域浏览器会默认打开图片(离开页面)。建议 document 级再拦一层 dragover/drop preventDefault。
lloydzhou
commented
Aug 21, 2026
lloydzhou
commented
Aug 21, 2026
lloydzhou
left a comment
Owner
Author
There was a problem hiding this comment.
Self-Review 结论:COMMENT(2 处已修复,其余为 nit/确认)
逐行过了一遍 diff(+242/-22,webagent/src/index.html + server.rs),共留 5 条 inline comment:
🔴 已修复(见 fix commit d3ac40b)
- hunk 行 sticky 行号背景色不一致(index.html:259)——hunk 行身
var(--hover),左侧两个 sticky 行号列被通用.ln规则覆盖成code-block色,行首出现约 7ch 的异色带。已补.diff .dl.hunk .ln { background: var(--hover) }。 - 上传 IO 失败连接静默断(server.rs:147)——
handle_upload抛 Err 时被外层let _ =吞掉,客户端 fetch 只能拿到 ERR_EMPTY_RESPONSE。create/write 失败路径已兜底 500 + 具体 error 信息,前端 errorrow 可展示。
🟡 nit / 后续增强(不阻塞)
.ln.b的calc(3.5ch + 10px)与 grid 列宽3.5ch 3.5ch双处硬编码,改列宽需同步(建议后续抽 CSS 变量)。- 前端多文件只取
files[0]静默忽略其余;dragover/drop只绑输入框,拖到页面其它区域浏览器会默认打开图片——建议后续 document 级拦截。
✅ 确认无误
- 起始序号
read_dir().count()计全部条目(非仅 .png),混入 .DS_Store 会跳号但无正确性影响;create_new原子占名 + 冲突递增的并发方案干净,无需全局锁。
其它检查项(无问题)
- 请求体前缀:/upload 是独立 HTTP 端点,不经过 LLM 请求构建路径,无 KV cache 影响
- agent 零改动:占位符展开仍走
expand_image_placeholders,bash/go/rust/c 四版本无 diff - compact / 事件回放:
merge_replay不触碰;images/ 目录不在 events.jsonl 内,不影响回放截断 - 回归:fix commit 后重跑 check_features 23/23、check_ui 24/24 全绿
border-box 下 grid item 宽=track 宽(padding 含在内),.ln.b 偏移应为 3.5ch 而非 calc(3.5ch+10px),多算 10px 导致两列行号间漏缝、滚动时字符 透出。顺带按 review 建议抽 --diff-ln 变量,消除列宽/偏移双处硬编码。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
webagent 三项体验改进,仅动
webagent/crate,agent 侧(bash/go/rust/c)零改动。1. 行号块整块横向滚动
问题:Edit diff / Write·Read 行号块里每行
.txt自带overflow-x: auto,超宽时逐行各自滚动(行与行错位),行号还会被滚走。方案:
.diff/.codelines容器承担overflow-x: auto;行.dl改width: max-content; min-width: 100%,删.txt的行内滚动position: sticky钉在左缘:diff 双行号列.ln.a { left: 0 }、.ln.b { left: calc(3.5ch + 10px) }(第二列偏移 = 第一列 track 宽 + padding,与 grid 列定义保持同步)linear-gradient(行tint色), var(--code-block)双层背景,滚动时遮住穿透的内容且行色一致;light 主题同步2. mobile 统计行精简
问题:≤640px 视口下统计行(
model · 上下文 x/200K · 输入… · 输出… · 对话… · 压缩…)塞不下,被overflow: hidden截断看不全。方案:
hudSeg输出段加data-k(model/ctx/in/out/turn/cc);ctx 与 turn 段渲染hud-full/hud-short双文案@media (max-width: 640px):隐藏 model / in / out / cc 段;ctx 显示短文案32.2K · 16%(+44px 进度条);turn 显示5轮·5req3. 图片上传(对齐 CLI
[Image #N]机制)目标:手机浏览器贴图给 agent,与 CLI 剪贴板粘贴
[Image #N]同一通路,agent 零改动(expand_image_placeholders照常展开为<attached-images>绝对路径映射)。服务端
POST /upload:events.jsonl路径派生(<session_dir>/images/),复用现有EventsPath状态,零新增参数,--session/--continue/动态 session_start 三种来源自动跟随create_new原子占名 + 冲突自动递增,并发上传不撞名(起始号对齐agent_image_next_name:现有 png 数 + 1){"placeholder":"[Image #n]","path":...};限制:>8MB→413、非 POST→405、session 未建立→409前端三入口:📎 按钮(file picker)、输入框粘贴、拖拽。上传中回形针转圈 + hint 文案提示;成功在光标处插入
[Image #N];失败显示既有 errorrow。前端限制image/png|jpeg|webp+ 8MB 预检。验证
截图
feat-mobile-stats.png(见 comment)feat-desktop-diff.png(见 comment)