AutoSaveChat 聊天输入框内容自动保存和恢复
为 VS Code 聊天(GitHub Copilot Chat)输入框提供零操作的完整草稿保护:自动实时保存你未发送的内容(文字 + 粘贴的截图 + 文件附件),重开窗口 / 切换项目 / 切换会话后自动完整恢复(切换后约 1~2 秒还原——恢复需要一点点时间,不是瞬间完成),不需要任何按键、点击或确认。
- 自动保存:后台监视 VS Code 自己的聊天会话存储,打字、贴图、挂文件的每一刻都会被转存到独立保险箱(按项目 + 会话分桶,同一项目内多个会话互不覆盖);崩溃、重载、关机都不丢(最多丢最近约 1 秒的输入)。
- 自动恢复:打开 VS Code 或切换项目后,若聊天输入框为空且上次离开时有未发送草稿,自动把文字 + 附件原样放回到对应会话的输入框——约 1~2 秒后出现(不是瞬间完成;不会自动发送)。
- 按会话隔离:同一项目里的不同聊天会话,草稿各自保存、互不覆盖(回到哪个会话,草稿就回哪个会话);项目整体移动 / 改名视为新项目。
- 绝不打扰:输入框已有内容时绝不覆盖;只有"输入框为空"才回填;附件直接放回输入框,不占用、不影响你的剪贴板。
- 手动兜底:原有快捷键快照 / 历史快照 / 剪贴板保存等命令全部保留。
工作原理(为什么能"零操作")
VS Code 的聊天会把未发送的输入状态(草稿文字 + 附件)实时写进工作区存储下的会话文件:
%APPDATA%\Code\User\workspaceStorage\<工作区哈希>\chatSessions\<会话>.jsonl
扩展用文件监视(fs.watch + 5 秒兜底轮询)盯着这些文件,解析新增记录即可拿到:
| 内容 |
形式 |
| 文字草稿 |
纯文本 |
| 粘贴的图片 |
完整 base64 数据(解码即原图) |
| 文件附件 |
磁盘路径(备份时另存一份副本) |
随后立即转存到独立保险箱(不依赖 VS Code 内部存储):
%APPDATA%\AutoSaveChat\drafts\<项目名>-<短哈希>\sessions\<会话>.json ← 每个会话各自的草稿(文字 + 附件清单)
%APPDATA%\AutoSaveChat\drafts\<项目名>-<短哈希>\attachments\ ← 图片与文件副本(多会话共享、按内容去重)
恢复流程(窗口打开 / 切换项目后约 1~2 秒开始,全程自动):
- 只读检查聊天输入框是否存在且为空(Windows UI Automation 一次性查询,无常驻进程);
- 文字:通过 VS Code 官方命令放回输入框;
- 图片 / 文件:直接作为附件放回输入框——输入框中的剪贴板内容(如粘贴的截图)还原后会变成相同内容的临时文件,避免还原影响剪贴板(全程不占用、不修改系统剪贴板)。
多重保险:窗口必须在前台、聊天输入框必须存在且为空——任一不满足就等下一轮重试,绝不覆盖。
行为规则
| 场景 |
行为 |
| 离开时输入框里有未发送草稿(文字 / 附件) |
下次打开该项目窗口后自动回填到对应会话(约 1~2 秒后出现) |
| 离开前已发送或清空输入框 |
下次不恢复(离开时本来就是空的) |
| 打开窗口时输入框已有内容 |
绝不覆盖(VS Code 原生恢复的、或你已开始输入的都算) |
| 同一项目多个会话 / 多窗口 |
每个会话一份草稿、互不覆盖(同一会话多处打开时共用该会话的一份,最后写入生效) |
| 空窗口(没有打开文件夹) |
草稿同样按会话划分,共用"无项目"草稿桶 |
| 恢复时窗口不在前台 |
等你切回 VS Code 后再恢复;超过 5 分钟放弃本次(草稿保留,下次再试) |
| 聊天面板一直没打开 |
不强行打开面板;面板打开后会自动回填(限窗口打开后 5 分钟内) |
附件恢复能力
| 附件类型 |
能否恢复 |
说明 |
| 粘贴的截图 / 图片 |
✅ 完整恢复 |
备份的是原图数据;还原后是相同内容的临时文件(附件) |
| 拖入 / 引用的文件 |
✅ 恢复引用 |
文件仍在磁盘(或备份副本仍在)即可;文件已删除 / 移动时跳过并记录日志 |
| 其它类型 |
⚠️ 尽力 |
会保留记录;无法自动重建时不影响文字与其它附件 |
设置
| 设置项 |
默认 |
说明 |
autoSaveChat.autoCapture |
true |
自动监视会话存储、实时保存草稿 |
autoSaveChat.autoRestore |
true |
打开窗口 / 切换项目后自动回填草稿 |
autoSaveChat.restoreAttachments |
true |
回填时恢复附件(图片 / 文件直接附加到输入框,不占用剪贴板) |
autoSaveChat.notifyOnStartup |
true |
手动快照的启动提醒(自动回填生效时不会打扰) |
autoSaveChat.maxSnapshots |
20 |
手动快照数量上限(1–100) |
autoSaveChat.snapshotBeforeRestore |
true |
手动回填快照前,先捕获当前输入框内容 |
手动兜底命令(原有能力,保留)
| 场景 |
操作 |
| 捕获当前输入框快照 |
Ctrl+Alt+S(可在 键盘快捷方式 中自定义) |
| 回填最新手动快照 |
Ctrl+Alt+R 或点击状态栏 |
| 从历史快照中选择一条回填 |
命令面板 → AutoSaveChat: 查看历史快照并回填… |
| 剪贴板方式保存(兜底) |
命令面板 → AutoSaveChat: 从剪贴板保存快照(先手动 Ctrl+A / Ctrl+C) |
| 清除全部快照 |
命令面板 → AutoSaveChat: 清除全部快照…(有确认框) |
平台支持
| 平台 |
自动保存 / 自动恢复 |
说明 |
| Windows |
✅ 完整(含附件恢复) |
使用系统自带 Windows PowerShell,无任何额外安装 |
| 其它平台 |
手动模式 |
自动功能暂不启用;手动命令全部可用 |
数据与隐私
- 读取范围:仅 VS Code 聊天会话文件 + 恢复前对聊天输入框的一次只读检查;不读取其它窗口或应用。
- 数据只存本机:草稿与附件备份位于
%APPDATA%\AutoSaveChat\drafts\,卸载扩展也不会被删除。
- 还原附件不占用、不修改系统剪贴板:输入框中的剪贴板内容会以相同内容的临时文件形式还原(附件)。
- 不修改 VS Code 的任何设置;不需要开启"屏幕阅读器优化"模式,两者互不影响。
开发与安装
npm install # 安装依赖
npm run compile # 编译(或 npm run watch)
- 调试:在本项目中按
F5 启动"扩展开发主机"窗口试用。
- 打包安装(推荐日常使用):
npx @vscode/vsce package # 生成 autosave-chat-<版本>.vsix
code --install-extension autosave-chat-<版本>.vsix
故障排查
| 现象 |
处理 |
| 没有自动恢复 |
查看输出面板 AutoSaveChat 日志;确认设置开启、窗口在前台;检查 %APPDATA%\AutoSaveChat\drafts\ 里是否有草稿 |
| 附件没恢复 |
查看输出面板 AutoSaveChat 日志(文件已删除 / 移动、或回填命令失败等);文字部分不受影响 |
| 想临时关闭自动功能 |
设置 autoSaveChat.autoCapture=false、autoSaveChat.autoRestore=false |
| 非 Windows 平台 |
自动功能仅支持 Windows;其它平台使用手动命令 |
已知限制
- 依赖 VS Code 内部会话存储格式(官方没有对应 API)。已做防御性解析;若将来 VS Code 大版本变更格式,自动保存可能失效(日志会有提示),需更新扩展适配。
- VS Code 写盘存在极小时差,崩溃最多可能丢失最近约 1 秒的输入,恢复时切换会话约 1 秒后恢复输入框内容。
- 文件类附件恢复依赖文件仍在磁盘(或备份副本仍在)。
- 自动恢复的触发窗口为"聊天面板打开后 5 分钟内";若聊天面板长时间未打开,本次不恢复(草稿保留,下次再试)。
| |