真实运行截图 · 停靠在 ChatGPT 对话旁自动读取当前对话 · 整条 / 问答 / 划词选材
(左侧色条区分你与 AI;侧边栏自动去除 Markdown 标记,阅读干净)
全部预设一览(用途 / 密度 / 文风 / 结构 / 格式 + 附加要求) · 预览确定性编译出的完整提示词(保留原始 Markdown,绝不自动发送)
Context Distiller 解决的不是「让插件自己总结对话」,而是「在把材料交给 AI 之前,让你掌握 控制权」。它在长对话与最终生成之间,加了一层轻量、可见、确定性的输入编译过程——不与模型竞争, 也不重复提供算力,只做一件事:把你挑好的材料 + 预设 Prompt,按固定结构拼成一段纯文本消息。
插件准备输入,用户确认输入,用户自己的 AI 生成结果。
设计上刻意低调、融入 ChatGPT:中性配色、极简控件、不喧宾夺主。
| 负责 | 不负责 |
|---|---|
| 读取当前 ChatGPT 对话并标准化 | 调用 AI / 模型 API |
| 多粒度选材(整条 / 问答 / 划词) | 保存历史项目或长期片段库 |
| 侧边栏临时编组、排序、备注 | 生成 PDF / Word / Markdown 文件 |
| 预设 Prompt → 固定顺序编译纯文本 | 自动发送消息 |
| 复制 / 回填输入框 | 服务器、账号、云同步 |
默认下,关闭或刷新侧边栏后本次整理的材料会丢失——这是主动的产品取舍(避免演变成笔记库)。 需要的话可以打开底部的**「记住本次整理」开关(默认关闭):本次对话与整理会快照到本地**、下次打开 原样恢复,只存本地、绝不外传、关闭即清除。另外,标记「长期」的自定义模块名与自定义要求也会保留 (存本地配置,不含对话内容)。详见 隐私说明。
- 对话读取(完整):通过页面世界从 ChatGPT 自己的后端接口拉取整条对话(同源、用你现有登录态、
不外传),超长对话也能一次读全——不受它「虚拟化只挂载一屏」的限制;只取当前分支、跳过模型的思考与
「思考预告」,每轮就是干净的问答。挂载 DOM 为回退。打开侧边栏即自动读取,无需手动点「读取」;
侧边栏显示时自动去除 Markdown 标记(
##、**、>等),阅读干净,编译给 AI 的原文保留。 - 多粒度选材:整条消息、问答组合、或在消息里划词即时提取片段(划词时可顺手写条注释)。
- 消息标记 📌:读的时候点 📌 标记要紧的那条并写批注,顶部
📌 N可切「只看已标记」; 标记会编译进独立的【标记】段,排在分组材料之后。 - 在对话里定位:点消息的 #编号(工作区片段则点准星),左侧 ChatGPT 自动滚到并高亮那条。 纯本地滚动——不发任何请求、不触碰账号;被 ChatGPT 虚拟化掉的消息会自动搜寻加载出来。
- 便签:顶栏一个只属于你的批注本,跨会话保留,永远不进编译输出(与会编译的「消息标记」相反)。
- 临时编组:默认「框架 / 正文 / 补充 / 复盘 / 关键语句」五模块,可排序、备注、增删、就地改正文; 顶部常驻选择器随时切换「加入目标」并新建模块(可选「本次 / 长期」)。
- 预设 Prompt:输出用途 / 知识密度 / 文风 / 输出结构 / 输出格式(单选;输出格式含 纯文本 · Markdown · HTML · PDF 排版)+ 附加要求(多选,过长可折叠),每个按钮只映射一段 作者维护、带版本的 Prompt,插件内不做任何 AI 加工;附加要求支持用户自定义 (命名、增删改,可选长期保留)。输出格式只是「让 AI 用该格式作答」的指令,插件本身不产出文件。
- 内置提示词库:自定义要求可从离线精选库「从库导入」(总结提炼 / 分析审视 / 改写润色 / 结构化 / 迁移交接),导入后可改名再改内容;部分改编自 Fabric(MIT, 见 docs/THIRD_PARTY.md)。全离线,导入不发任何网络请求。
- 确定性编译:纯函数按固定顺序拼接,相同输入永远得到相同输出;特殊字符与代码原样透传。
- 交回原对话:完整预览 → 复制或回填 ChatGPT 输入框,绝不自动发送。
- 跟随与主题:跟着 ChatGPT 滚动高亮当前消息;面板明暗自动跟随 ChatGPT,统一青灰蓝配色。
- 中英双语:顶栏 中 / EN 一键切换,选择长期保留。切的不只是界面——编译出来的提示词也跟着换:
基础指令、每个预设 Prompt、内置提示词库、默认模块名都是分别写过的英文(不是机器翻译),
段落括号与备注也随之改写(
【框架】→[Frame],(备注:…)→(note: …))。 你自己写的东西永远不翻译:自定义要求、片段备注、标记批注、你命名的模块、便签,都原样编译。
打开 ChatGPT 长对话
│ 插件读取并标准化当前对话
选择整条消息 / 问答组合 / 划词片段
│ 进入侧边栏临时工作区
分组、排序、加备注
│ 点底部预设按钮
基础 Prompt + 预设 Prompt + 用户材料
│ 确定性拼接
一段完整纯文本消息
│ 复制 或 填入输入框
你检查后自行发送 → 你自己的 AI 完成最终生成
架构细节见 docs/ARCHITECTURE.md。
| 层级 | 方案 |
|---|---|
| 扩展标准 | Manifest V3 |
| 工程框架 | WXT |
| 语言 / 界面 | TypeScript · React 19 |
| 浏览器能力 | Chrome Side Panel API |
| 网页接入 | Content Script(隔离世界)+ Main World 注入脚本 |
| 单元测试 | Vitest |
pnpm install # 安装依赖(自动 wxt prepare 生成类型)
pnpm dev # 开发模式:自动打开带扩展的 Chrome,热更新
pnpm build # 生产构建 → .output/chrome-mv3
pnpm zip # 打包 → .output/*.zip(上架用,流程见 docs/STORE.md)
pnpm test # 单元测试
pnpm typecheck # 类型检查环境要求:Node.js ≥ 20、pnpm ≥ 9、Chrome / Edge(支持 Side Panel API)。
pnpm build- 打开
chrome://extensions(Edge 为edge://extensions),开启「开发者模式」 - 「加载已解压的扩展程序」→ 选择
.output/chrome-mv3 - 打开一个 chatgpt.com 对话,点工具栏图标打开侧边栏
完整用法见 docs/USAGE.md。
context-distiller/
├─ entrypoints/ # 扩展入口(WXT 约定)
│ ├─ background.ts # Service Worker
│ ├─ chatgpt.content.ts # Content Script(隔离世界)
│ ├─ chatgpt-main-world.ts# Main World Bridge(读页面内部数据)
│ └─ sidepanel/ # React 侧边栏
├─ lib/ # 与浏览器无关的核心(可单测)
│ ├─ core/ # 数据模型 · 预设库 · Prompt 编译器 ★
│ ├─ i18n/ # 中英对照表 · 语言解析(界面 + 编译文本)
│ ├─ platform/ # 平台适配器 · 标准化器
│ └─ messaging/ # 三跳通信协议
└─ docs/ # 架构 / 隐私 / 使用
★ = 产品的确定性核心,被单元测试锁定。
pnpm test单元测试覆盖确定性核心:Prompt 编译器(确定性、固定顺序、附加要求按库内顺序、空材料、 特殊字符透传、未知预设跳过,以及英文模式下同样成立)、标准化器(角色识别、去空、去重), 以及双语对照表——中英两张表必须键完全一致、占位符完全一致,英文串里不许残留中文, 每条内置预设与提示词库条目必须有英文孪生,漏翻会直接让构建失败,而不是悄悄发出去。 依赖真实 ChatGPT DOM 的部分在浏览器中手动 / Playwright 验证,清单见 docs/USAGE.md。
最小权限、最小留存。只在 chatgpt.com / chat.openai.com 运行,只处理当前对话页数据, 不读取账号密码或 Cookie,不上传服务器。对话内容与选中材料只在内存里、绝不落盘; 本地存储仅用于你主动标记「长期」的自定义模块 / 要求(配置,不含对话)。详见 docs/PRIVACY.md。
- MVP ✅ ChatGPT 读取、多粒度选材、临时编组、预设编译、复制与回填
- 1.1 ✅ 后端接口读全长对话、消息标记、对话内定位、便签、内置提示词库、主题跟随
- 1.2 ✅ 中英双语(界面 + 编译出的提示词),顶栏一键切换
- 后续 ◻ Claude / Gemini 适配、快捷键、更多经过验证的预设
每个版本的变更见 CHANGELOG.md。