Skip to content

About

选材、编组、编译成一段纯文本 · Select, group and compile ChatGPT context into one plain-text prompt. Bilingual, local-only, never auto-sends.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Repository files navigation

Context Distiller

Context Distiller

一个运行在 AI 对话页面旁边的临时「选材 + Prompt 编译」工作台

在你把材料交给 AI 之前,把材料的选择权、组织权和生成指令的控制权交回给你。

中文 · English

Manifest V3 WXT React TypeScript Vitest License Privacy

Context Distiller 停靠在真实 ChatGPT 对话旁,读取当前对话并选材

真实运行截图 · 停靠在 ChatGPT 对话旁自动读取当前对话 · 整条 / 问答 / 划词选材
(左侧色条区分你与 AI;侧边栏自动去除 Markdown 标记,阅读干净)



预设 Prompt 全景:用途 / 密度 / 文风 / 结构 / 格式 + 附加要求     预览「确定性编译」出的完整提示词

全部预设一览(用途 / 密度 / 文风 / 结构 / 格式 + 附加要求)  ·  预览确定性编译出的完整提示词(保留原始 Markdown,绝不自动发送)


这是什么

Context Distiller 解决的不是「让插件自己总结对话」,而是「在把材料交给 AI 之前,让你掌握 控制权」。它在长对话与最终生成之间,加了一层轻量、可见、确定性的输入编译过程——不与模型竞争, 也不重复提供算力,只做一件事:把你挑好的材料 + 预设 Prompt,按固定结构拼成一段纯文本消息。

插件准备输入,用户确认输入,用户自己的 AI 生成结果。

设计上刻意低调、融入 ChatGPT:中性配色、极简控件、不喧宾夺主。

产品边界(MVP)

负责 不负责
读取当前 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)。

手动加载

  1. pnpm build
  2. 打开 chrome://extensions(Edge 为 edge://extensions),开启「开发者模式」
  3. 「加载已解压的扩展程序」→ 选择 .output/chrome-mv3
  4. 打开一个 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。

许可

MIT

About

选材、编组、编译成一段纯文本 · Select, group and compile ChatGPT context into one plain-text prompt. Bilingual, local-only, never auto-sends.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages