第五节 会话

会话(Session)是一次连贯的对话上下文。

5.1 持久化

AVL Code 会把每一条消息持续追加到本地,断电、关机、重启都不会丢。每条消息都有时间戳与作者标识;工具调用、计划修改、审批结果也会以独立卡片形式记录,整条会话可作为完整的工程审计材料。

5.2 会话操作

  • 新建:会话标签栏 → 新建,或快捷键 ⌘N / Ctrl+N。同一个工作区内最多只保留一条空白草稿:反复点 +、按 ⌘N、发 /new 都复用同一条,未发出第一条消息前不会进侧栏,避免堆出一串"新会话 1 / 2 / 3 …"幽灵草稿。
  • 切换:点击标签页,或在微信里 /s <短id>,或在 命令面板(Cmd+K) 里搜会话标题。
  • 重命名:标签页右键 → 重命名。
  • 智能命名:未被手动改过名的会话,收到第一条 AI 回复后会自动让 LLM 起一个简短标题(默认开启,可在 设置 → 上下文 关掉);手动改过名的会话永久豁免,不再被自动覆盖。重命名对话框里也有「智能命名」按钮,可随时点一下重新建议。
  • 归档:标签页右键 → 归档。归档后从主列表消失,可在 会话档案 里恢复。
  • 导出 / 分享:标签页右键 → 分享,可保存截图、保存 HTML、复制为 Markdown;「导出会话 (.zsession)」则把整条会话打包成可迁移的归档文件。导出的 HTML 与界面显示一致:跟随极简密度档(灰阶细行 + 同类调用合并计数,失败照常计入)、子代理以卡片呈现、用户消息气泡按来源分色。
  • 复制为新会话:以本会话为起点新建分支,原会话不变。

右键即可唤起菜单:会话条目与上方两处标题栏的 ⋯ 菜单都可用鼠标右键直接唤起,不必瞄准 ⋯ 按钮;菜单贴近窗口底部时不再被裁切,右键也不会连带选中条目文字。

5.2.1 用户消息时间戳

自己发出的消息左侧有一个时间戳标签,点击在三种格式间循环:

格式 例
相对时间 刚才、3 分钟前
会话内偏移 +1m23s(相对首条消息)
绝对时间 14:32

不同会话各自记忆,互不影响。

5.3 消息组成

一条对话由若干"消息卡片"组成:

  • 用户消息
  • 助手回复(流式渲染,可中途打断)
  • 工具调用(可折叠卡片,包含入参摘要、耗时、结果)
  • 计划 / 待办更新(结构化展示,可独立修改)

5.3.1 代码块:语法高亮 + 一键复制

对话里的 fenced 代码块(```)渲染为带 header 的代码卡:

  • 语法高亮:基于 highlight.js(lib/common),按语言着色;未知语言走朴素转义,不影响呈现。
  • 语言标签:右上角显示该代码块的语言名(如 python / go / tsx)。
  • 「复制」按钮:右上角一键把整段代码复制到剪贴板,不用手动框选;成功时按钮短暂变成「✓ 已复制」反馈。
  • 行号 grid 保活:跨行 syntax span 内部按源行拆分后逐行配对,行号列与代码列始终对齐,不会因高亮而错位。

5.3.2 Mermaid 图:围栏代码直接画成图

AI 回复里标注为 mermaid 的围栏代码块会自动渲染成矢量图(流程图、时序图、状态图、甘特图等),不再只是一段看不懂的源码。

  • 渲染异步进行:先按普通代码块出现,图画好后就地升级为 SVG,长回复不会因为画图而卡住。
  • 语法有误时保留原始代码并给出错误提示,不会整块消失。
  • 图形内容同样经过净化处理后才插入页面。
  • 图 / 源码切换:图画好后,代码块标题栏右侧出现「图 | 源码」切换(与「复制」并列),随时回看源码;相同源码的图会一起切换。
  • 三套主题:标题栏的主题按钮点一下换一套,在「通用」(默认,跟随应用深浅色)→「黑白」→「期刊彩色」之间循环。期刊风格为白底、黑线黑字,彩色档用色盲友好配色,适合截图放进报告或打印。主题偏好对所有 Mermaid 图生效并在本机记住;设置页里没有这一项,只在图的标题栏上切换。
  • 导出 HTML 时这些按钮会自动隐藏。

5.3.3 图片输入:把截图直接丢给 AI

选用标记了「支持图片输入」的模型时,可以随消息一起发图片(界面截图、报错画面、流程图照片等),让 AI 直接"看"。

三种添加方式:

方式 操作
粘贴 在输入框里 {{kbd:Cmd+V}} / {{kbd:Ctrl+V}} 直接粘贴剪贴板里的图
拖放 把图片文件拖到输入框上,松手即加入(拖入时显示「松开以添加图片」提示)
「+」菜单 「添加图片到当前消息」(独立成组,说明写明「仅随本条消息发给模型」),弹出文件选择器

限制与处理:

  • 支持 PNG / JPEG / GIF / WebP;其它类型会明确拒绝。
  • 一条消息最多 6 张;单张处理后 ≤ 1536 KB,合计 ≤ 3 MB,超出会提示你缩小或减少张数。
  • 过大的图会自动等比缩放到长边 1568 像素;小体积 PNG(≤ 400 KB)原样保留以保住截图里文字的锐度,其余转为 JPEG。
  • 运行中不能附图发送 —— 等本轮结束再发。
  • 当前模型没有标记支持图片输入时会提示你切换模型,或去 设置 → 模型 → 服务提供方 里给该模型勾上「支持图片输入」。

发出去之后:

  • 你的消息气泡里图片显示为缩略图,点击可「查看原图」放大查看。
  • 图片只随发送它的那一轮出站:后续对话轮次不会反复把同一张图再发一遍,既省 token 也更准确。判定口径是「这一轮已经正常答复 + 你又有了新输入」才让图片退役,因此续跑 / 自动推进的轮次不会误丢图片。
  • 换到不支持图片的模型时,历史里的图片会被降级处理,不会把请求打挂。

已知支持图片输入的模型:内置模型表里已标注的包括 qwen-3.8-27b(实测通过)与澜砥 N2.7 系列;自己添加的服务提供方可在模型条目上手动勾选「支持图片输入」。

5.4 消息流控制

  • 助手运行中,输入框右侧的发送键变成 停止 按钮 — 按下会同步终止主助手与所有派生子任务,并取消本会话的会话内例行程序(见 §15.6.1)。
  • 中途如果你想到补充内容,直接按 Enter 入队(即时指导)— 默认在本轮自然结束后合并发出,不会打断当前回合;想让它更早生效,可在「待注入」条上点「优先」或「立刻处理」(见 §5.4.2)。
  • 助手输出的工具调用卡片可以单独点开 / 折叠 / 复制结果。
  • 输入框按 ↑ / ↓ 可回溯历史输入,执行过的 / 斜杠命令也纳入历史(以规范化的 /<名> <参数> 形式),便于再次取用或改写。
  • 每条消息左侧有「消息柄」,点开是这条消息的操作菜单:菜单头部显示这条消息的时间(绝对时间 + 相对时间两行,只读),下面是复制、复制选中的部分、编辑、重试、写入记忆宫殿、追加到结果草稿等动作。
  • 停止之后仍可编辑消息:中途按停止时,已经流式产生的那部分内容会落盘保留,不会变成"消息不存在"的幽灵记录,编辑 / 重试照常可用。
  • 服务繁忙时,消息流显示「服务繁忙,N 秒后自动继续」,可点「换个模型」或「停止等待」;子 Agent 面板和未在当前屏幕显示的会话也会保留等待提示。 主回合、子 Agent 和并行任务共享等待状态;4 路及以上任务错开启动,并行块显示「N 路等待服务恢复」。
  • 重试:本轮运行或等待自动重试时,消息菜单中的「重试」不可点;多次失败后自动重新开始本轮的倒计时会显示「第 n/3 次」,开始后原错误条收为「此前失败已自动重试」。 等待提示不作为回复转发到随行通讯或写入 zTUI 对话记录。

5.4.1 复述意图:开工前先跟你对一遍目标

为避免「一上来就跑偏」,AVL Code 会在会话的第一条消息上做一道轻量确认:AI 先复述一遍它理解的目标、说说打算怎么做(多 Agent 模式下还会给一份「先拆任务 → 并行派子 Agent → 交还你验收」的分阶段计划),等你点头再动手。该功能默认开启,可在 设置 → 智能体 → 自省 关闭(开关:复述意图)。

  • 确认就在消息流里完成,不是弹窗,样式和普通消息一致。
  • 默认 60 秒后自动开始;鼠标悬停在确认条上会暂停倒计时,给你足够时间看。
  • 确认条上有三个选择:
    • 确认开始 — 采纳 AI 的复述直接开干;
    • 修改 — 当场把复述改一改再发,目标和计划都能改;
    • 保留我的本意 — 不采纳 AI 的复述,直接用你最初那条消息继续。
  • 点「取消」会把你最初那条消息原样放回输入框,不会丢,便于你补充或重写后再发。
  • 只在该问的时候问:仅对你亲手输入的首条消息触发(自动 / 程序触发的不算),且只在这条开场消息比较短(30 字以内)或比较简单时才弹;写得够长够清楚(多行、带编号列表、或顿号 / 逗号等分隔符多于 3 个)就直接开干、不打扰。
  • 想对某条消息手动重新对一遍意图:在该消息的操作菜单选「分析意图并从这里重新开始」即可(无视上面的触发条件,强制复述一次并从这里重开);会先隐藏重启点之后的消息、把确认条放在其下方,便于你看清影响范围。
  • 选择统计:确认 / 修改 / 保留本意 / 超时自动开始 / 取消各自的次数与字数会被记录,在 设置 → 智能体 → 自省 以表格呈现,便于你回看这道确认到底帮没帮上忙。

5.4.2 即时指导:运行中插话

Agent 正在运行时,在输入框里输入并按 {{kbd:Enter}},这条消息不会打断当前回合,而是进入「待注入」队列(输入框提示文字为「即时指导:Enter 入队,本轮结束后整体注入…」),并以状态条「待注入 N」显示(形态见 §5.5.1)。

  • 什么时候入队:只看当前会话 —— 本会话的 Agent 正在运行(或随行通讯出站投递中)、本会话正在发送或生成时才入队;会话空闲时直接发送,其它会话正在压缩或发送也不影响当前会话。与正在发送的内容完全相同的重复发送会被忽略并提示。
  • 默认时机:本轮自然结束后,队列按入队顺序以空行合并为一条消息发出;会话一空闲就会及时送出,不会晚一整轮。切到别的会话期间队列保留,切回来照常送出。
  • 每条的按钮:
按钮 作用
优先 当前步骤结束后就送进 Agent(这批工具结果出来后、下一次请求模型之前),不等整轮结束;模型正在写最终回复时,写完后接着处理这一条
立刻处理 截停模型正在输出的内容并马上处理这一条:已输出的正文与思考过程保留,未写完的工具调用不执行;正在执行的工具不会被打断,等这批工具跑完再送达
移除(×) 丢弃这一条;只对尚未送出的条目显示
  • 「优先」可以再升级为「立刻处理」。送出后条目显示「已优先 · 当前步骤结束后处理」或「立刻处理中」,送达后自动出队;已送出的条目无法撤回。
  • 「全部清空」只丢弃尚未送出的条目。
  • 不会丢:此刻插不进去(例如会话没在运行)时,条目留在队列里,本轮结束后照常作为新一轮发出;本轮没能启动(手动停止、发送被取消或失败、重新生成失败等)时,排队的指导会退回输入框(排在已有草稿之前),并提示「已退回 N 条即时指导到输入框」。
  • 运行中不能附图发送,带图片的消息不入队,请等本轮结束再发。

5.4.3 标记消息:把要紧的几条收拢起来

在消息上右键(或点消息柄)选「标记消息」,再选一次即「取消标记」。已标记的消息左侧显示书签角标(角标只作指示,取消请走菜单或下面的状态条)。

本会话有标记时出现「标记 N」状态条(形态见 §5.5.1),按消息在会话中的先后列出全部标记:

动作 说明
点某一行 跳转定位到该消息;消息位于较早、尚未加载的位置时自动先加载,位于折叠的工具组内时自动展开
复制为 Markdown / 保存 HTML 只导出有正文的标记消息 —— 只有工具调用、思考过程或只附了图片的消息会被跳过;标记的消息全都没有正文时两个按钮置灰,悬停说明原因
导出 .zsession 打开与会话导出同款的确认框(含脱敏选项),把标记消息打包成会话文件;带工具调用的回复会连同对应的工具结果一并导出(标记的是工具结果时也会带上它所属的回复),会话名加后缀「(标记摘录)」
行尾书签按钮 取消这一条的标记
清空标记 取消本会话的全部标记,不删除消息
  • 标记随会话保存;复制为新会话与从某条消息开始新会话时标记一并保留(分支点之后的标记不带走)。消息被删除后,对应标记自动从清单中消失。
  • 尚未保存完的消息(如正在流式输出)暂时不能标记。

5.5 "正在生成"区块的视觉细节

  • 折叠思考:生成时向左平滑滚动显示最新内容,长内容左侧淡出;结束后显示开头摘要,极简模式仅显示「思考」。
  • Token 数变化加滚动动效:流式过来的 token 计数不再硬跳,约 0.4 秒平滑插值到目标值;变化期间数字短暂变品牌蓝并微微上抬。系统设置「减少动画」时自动跳变不抖。
  • 耗时按分级显示:60 秒以内仍是 5s / 12s 这样的简短表达;超过 1 分钟自动升级为 1m 30s;超过 1 小时升级为 2h 15m 30s。短任务零变化,只在长任务时升级单位。 生成页脚另列「其中等待 N 秒」;统计面板「限流/重试」可查看最近一次调用的重试次数、限流次数和等待秒数。
  • 上下文占用圆环按占用分档变色:显示当前上下文窗口占用比例的圆环会随占用分档变色 —— 达到 75% 变黄、达到 90% 变红,更醒目地提示已接近上下文上限(该续跑 / 折叠了)。

5.5.0 消息密度(正常 / 极简)

设置 → 通用 → 消息密度 提供两档(落盘字段 message_density,默认 detailed);Header 快捷菜单「显示」分组的「信息量」滑块可一键切换,无需进设置页:

档位 行为
正常(detailed,默认) 完整卡片 + 参数预览 / argsSummary,零回归
极简(compact) 无卡片、灰阶细行、最小 chrome;只压缩过程渲染,你的提问与 AI 的正文回复照常完整显示;不再压缩行高

极简档下,过程内容自动归并计数:

  • 连续工具调用结果合并成一行,带计数。
  • 多段思考 + 工具调用合并成 「思考 N 次 · 工具 M 个」(数量变化带 pop 动效)。
  • 还在执行、暂时没结果的工具调用合并成 「N 次工具调用尝试」。
  • 汇总行里如果有失败,用浅红色标出 — 不刺眼但看得见。

切换档位时滚动位置稳定、不抖动;旧的「收敛」档(collapsed)自动迁移到「极简」。

5.6 滚动与跟随

  • 生成期间默认自动跟随底部。
  • 一旦你向上滚动查看历史,「跳转底部」按钮出现 = 视为你主动滚走,自动跟随停止。
  • 生成中拖滚动条回看不再被钉住:AI 正在流式输出时,想往上拖动滚动条回看前文,过去常被自动跟随同帧拽回底部、像「拖不动」;现在主动上拖会同步松开自动跟随,让你正常上滚查看,需要时再回到底部继续跟最新输出。
  • 点击「跳转底部」或手动回到底部可恢复跟随;主动跳转和搜索结果平滑滚动,切回会话直接恢复位置。系统开启「减少动态效果」时,「跳转到最新消息」会直接到位。
  • 已堵住滚轮事件与流式 chunk 同帧的微秒级竞态,不会再被反复打断。
  • 整列表高频抖动修复:之前某些情况下消息列表会上下快速抖动 / 跳动 — 根因是个别消息的高度被反复重测。现在把已渲染过的高度缓存下来(包括高度为 0 的情况),列表不再来回弹跳,滚动更稳。
  • 「跳转底部」一次到位:之前要点好几次才能真正到底;现在改为持续校准直到内容高度(scrollHeight)稳定,一次就能稳稳停在底部,长会话首次打开也不会出现「按钮按了像没反应」的多点情况。
  • 快速重复点「发送」不再重发:加了同步的在途拦截,连点也只发一条。

5.6.2 长会话分页按需加载

打开很长的会话时先显示最近一段,往上滚动再分段加载更早的消息:

  • 滚到顶端继续上滚 → 自动加载上一页,多页加载时居中显示进度提示。 加载后原位显示,不播放滑动动画。
  • 底层做了行偏移索引(O(range) 不再 O(scan-from-line-1))+ 多页之间按帧让步 + 去重,长会话的首次打开与上下滚动明显更快、更跟手。
  • 会话目录的跳转对尚未加载进窗口的更早消息也能正确定位(自动先加载到该位置再滚过去)。
  • 超大消息默认不再"显示折叠":之前为了性能会把过长的单条消息折叠成摘要,现在默认完整展开,要折叠请到设置调整。

5.6.0 会话目录与一键跳转

会话标题左侧新增会话导航按钮(List 图标),鼠标点击展开一个目录 popover:

  • 列出本会话每条用户提问 — 每条取「首个非空行」作为标题,自动折叠多余空白,超长截到 120 字符(带 …)。
  • 点击某条 → 平滑滚动到该消息并关闭 popover。
  • 高亮当前所在条(纯灰阶,朴素专业风)— 按当前视口内可见的用户消息实时判定,滚动时跟随刷新,末条也能正确选中,不再总停在第一条。
  • 关闭方式:Esc / 点 popover 外 / 窗口 resize。
  • 虚拟化安全:按 data-message-id 定位(占位消息也带该属性且占正确高度),长会话也定位准确。
  • 仅在会话里有用户提问可跳转时才显示,空会话不出现。
  • 用浏览器 Popover API(popover=manual + top layer)渲染,不依赖 z-index,不会被弹窗 / 抽屉等遮挡。

5.5.1 会话状态条:随窗口宽度换形态

文件变更 / 记忆 / 待办 / 计划 / 目标 / 子任务 / 中断任务 / 待注入(即时指导,见 §5.4.2) / 标记(见 §5.4.3) / 例行(会话内例行程序,见 §15.6.1) / 结果草稿 / 附加资料 / 建议任务 / 自检门禁 等状态条会按窗口宽度自动选择呈现形态:

  • 窄屏 — 输入框上方横排:多条并列在输入框上方,宽度不够时自动换行(优先填满紧贴输入框的那行、再往上叠),各条间距收拢,非底行的标签还原成完整药丸,不再被挤出屏幕或相互遮挡。点开为向上弹出的浮层。
  • 宽屏 — 消息区右上的纵向状态栈:窗口够宽时,这些条目改为在消息区右上纵向排列,不再占用输入框上方的空间。点开为右侧堆叠抽屉:不加遮罩、不挤压正文,以整个状态栈为锚,切换不同条目时抽屉位置保持稳定,并会按两侧可用空间自动选择向左或向右展开。窗口特别宽时抽屉槽位固定预留,开合抽屉不会让正文左右跳动。

信息量设为「极简」时恒用输入框上方的横排形态。切换形态只改变位置,不改变正文宽度。

5.6.1 会话附加目录:让 AI 临时访问工作区之外的文件夹

输入框「+」菜单新增两项:

入口 权限
附加目录(只读) AI 可读取该目录下文件、列举、搜索;不能修改
附加目录(读写) 在只读基础上额外允许写 / 删 / 创建

典型用法:让 AI 参考另一个项目的代码、把产出写到指定目录、跨工程协作等。

附加前有确认对话框,明确说明授予的是只读还是读写权限;附加后出现 「附加路径」条(窄屏在输入框上方、宽屏在消息区右上,见 §5.5.1),展示当前会话的附加目录,可随时移除。确认框里按 {{kbd:Enter}} 不会误触按钮 —— 得自己点确认。

可选作用域:只给这个会话,还是整个工作区共用:确认对话框里可以选这次附加的生效范围。

作用域 含义
仅本会话(默认) 只有当前会话能用到这个目录 / 文件,其它会话看不见
项目工作区共享 同一工作区下的其它会话也能用到,省得每个会话各附加一遍

远程工作区:SSH 工作区里挑选附加路径会打开远端文件选择器(走 SFTP 浏览远端目录树),选定后即时推送到远端沙箱生效。

子代理也能读到:派出去的子任务会在创建时继承父会话当时的附加清单,不必在子任务里重新附加一次(此前子代理读不到父会话附加的路径)。

作用域与安全:

  • 作用域为「仅本会话」时,附加只对当前会话生效,其它会话不受影响。
  • 随会话保存,重启后依然有效(后台自动重新生效,无需重新附加)。
  • 放宽的只有文件读写口径(读 / 写 / 搜索 / 列举),其余安全策略不变。
  • 附加目录下的搜索结果用绝对路径标注,来源一目了然。
  • 会话身份由系统在调用链里注入,AI 自己无法伪造身份去冒用别的会话的附加权限。

统一的「附加资料」入口:会话附加的目录 / 文件与工作区的样本 / 附件已合并到同一个「附加资料」条统一管理,附加进度等状态实时可感知。两类语义清晰、各自处置:会话附加的项移除只是解挂、不删原文件;工作区样本 / 附件的删除走行内二次确认,不易误删。文件有变更会自动刷新(AI 改完文件后无需手动重载),目录按多层树状呈现看得更清楚,并自动忽略 macOS 的特殊文件(如 .DS_Store、__MACOSX/ 等)。本地工作区文件加入附加资料时状态显示为「已就绪」(不再用「上传 / 已上传」误导本地文件)——「上传」只留给真正外发的场景(如提交反馈、上传检测);范围(scope)徽标也改为可读性更好的靛蓝配色。

5.7 消息内链接与文件路径可点

AI 回复里的链接和文件路径现在都能点:

  • 工作区内的文件路径 → 点开后可「预览」,或「在文件夹中显示」用系统文件管理器(Finder / 资源管理器)定位并选中该文件。
  • 外部链接 → 用默认浏览器打开。
  • 反引号内联代码里的路径(如 `src/main.go`)同样可点,与普通链接共用一套识别与定位逻辑;普通内联代码不受影响。
  • 代码引用可点跳转(接地证据可核对):AI 回答里引用的代码位置、以及工具结果里的「文件:行」现在都能点 — 带行号的工作区文件,点「预览」会打开源码预览并滚动到该行,不必自己去翻。这让 code.search / code.ask 等给出的 文件:行 证据「看得见、可核对」。
  • 点击后就地弹出轻量浮动小工具条(文件为「预览」「在文件夹中显示」「复制」,外部链接为「打开」「复制」),非模态 — 点别处 / 滚动 / 按 Esc 即关。
  • 工具条用浏览器 Popover API 渲染在顶层,从「关于」「发布说明」「更新」等弹窗里点链接也不会被遮挡。
  • 路径识别更精准:只把带常见扩展名的字符串(如 src/main.go、README.md)或约定文件名(Dockerfile、Makefile、go.mod 等)认作可点路径;纯目录、无扩展名 / 未知扩展名的片段(如 a/b、/etc/hosts)不再被误标为可点。渲染后还要确认文件确实存在、落在工作区或附加范围内,才真正变成可点。
  • 「文件名:行号」可点:main.go:42、a.ts:3:7、Dockerfile:3 这类写法点开即定位到该行;冒号前必须是认得的文件名,因此 example.com:8080 这类地址不会被误当成文件。
  • 能预览就能定位:工具条上的「预览」与「在文件夹中显示」走同一套路径解析 —— AI 写的相对路径、会话附加的文件、项目工作区级共享附加里的文件、最近使用但未打开的工作区里的文件,都能正确预览与定位。附加清单晚于消息加载、或事后新增 / 移除附加时,已显示消息里的路径会随之重新判断能否点击。
  • 远程工作区:SSH 工作区的文件不显示「在文件夹中显示」(本机没有这个文件);SSH 工作区附加的路径不提供预览、也不会被误读成本机的同名文件,工作区内的文件仍可预览。
  • 预览、另存、定位失败时,提示会附上具体原因。
  • 仅 AI 回复生效:你自己发的消息里链接 / 路径不再可点,避免误触;只有助手回复里的链接和路径才会被识别与提供工具条。
  • 安全:危险协议(非 http(s))链接被拦截不放行;文件定位有工作区纵深校验,不会越界到工作区外。

5.7.1 文件预览抽屉

消息流里点文件链接,弹出的工具条上有 「预览」 按钮,就地看内容不必切到编辑器。

  • 支持的文件类型远不止 Markdown:常见源码(Go / TypeScript / Python / Rust / Java / C·C++ / Ruby / PHP / Swift / Kotlin 等)、配置(YAML / TOML / JSON / INI / .env)、前端(HTML / CSS / Svelte / Vue / Astro)、脚本(sh / bash / ps1 / bat)、文本与数据(md / txt / csv / tsv / xml / sql / diff)、图片与常见二进制(png / jpg / svg / pdf / zip 等),以及 Dockerfile、Makefile、go.mod、.gitignore 这类没有扩展名的常见文件名。
  • 源码带语法高亮,与消息流里的代码块同一套配色;正文特别大时(超过约 256 KB)不再着色,但行号与定位照常可用。文件路径前会按格式显示对应图标,一眼分辨类型。
  • 二进制文件以十六进制转储呈现(十六进制 + 字符对照,最多 64 KiB),不再显示成乱码。远程工作区的二进制文件取不到原始字节,此时会明确说明而不是给出假内容。
  • 可预览的范围:先在工作区内查找,找不到再匹配当前会话附加的目录 / 文件 —— 附加进来的文件同样能预览。不能预览的路径不会显示「预览」按钮,避免点了没反应。
  • 呈现形态按窗口宽度自动选择:外侧空间足够时常驻为右侧侧栏(不收窄正文);空间不足时退回浮层抽屉(宽 min(820px, 94vw)、不加遮罩),此时正文靠左侧留白避让,同样不被收窄。
  • 在文件内查找:抽屉里可直接搜当前文件内容,命中处高亮,显示「第几处 / 共几处」,用「上一处 / 下一处」逐个跳转,可切换是否区分大小写。命中过多时只标出前若干处并给出提示。
  • 大小:预览正文上限 1 MiB(超出自动截断并标注),适合速览;要保全文请用「另存为」。
  • 「另存为」按钮(抽屉头部):调系统保存对话框,用 64 MiB 大上限读取源文件保全文,写到你指定的位置;取消等于无操作。
  • Markdown 文档里的链接:预览中的 Markdown 文档(.md / .mdx / .markdown)渲染成文档,其中的相对链接以该文档所在目录为基准;链接里的 #L10、#L10-L20 可定位到行,?参数 与百分号编码会被正确处理。
  • 代码块里单独一条文件路径(文件存在时)也能点开预览:渲染时异步校验该路径是否存在,存在才升级为可点,避免点到不存在的文件。

按 ↑ 在输入历史里回溯时,输入框左上角显示当前位置 N/N(最新 = 总数,最旧 = 1/N),不再"按了几次 ↑ 自己也不知道翻到哪了"。草稿态 / 空历史 / 越界一律不显示。

回溯到某条历史后直接键入或粘贴 → 自动离开历史态,改后内容当作最新草稿:之前在历史态修改会让人误以为"这条历史被改了",本版明确语义 — 编辑即新草稿,原历史不动;再按 ↑ 仍先把当前草稿存起来,编辑内容不丢。

5.9 跨端接管

如果你已经绑定了微信通道:

  • 手机上 /s <短id> 即可继续未完成的桌面会话。
  • 桌面端会话也可以接管手机端发起的会话。
  • 同一会话同时只允许一端"持有",另一端会自动同步显示。

详见第十九节「随行通讯」。