Skip to content

About

Margin: inline annotation threads for ChatGPT, with highlights and independent follow-up conversations.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

10 Commits

Folders and files

Repository files navigation

Margin · ChatGPT 旁注

Chrome / Edge 扩展,当前版本 0.2.7。

选中文字 → 浮窗追问 → 通过当前 ChatGPT 网页会话发送 → 回答完成后收进原文旁注。 默认不调用 API,无需密钥或本机服务,沿用网页账号和当前模型的使用限制,并不提供额外或无限额度。

安装与更新

  1. Chrome 打开 chrome://extensions;Edge 打开 edge://extensions。
  2. 开启开发者模式,加载本仓库的 extension 文件夹。
  3. 每次更新后先重新加载扩展,再刷新 ChatGPT,面板顶部应显示 0.2.7。
  4. 在已保存聊天中选中文字,点击追问,或按 Alt + Shift + M。支持普通地址 /c/聊天ID 和项目、自定义 GPT 地址 /g/…/c/聊天ID;同一聊天使用相同的旁注记录。

网页模式

  • 默认模式。旧设置没有 mode 字段时,也会切换到网页模式。
  • 浮窗输入问题,点击发送(Ctrl / Cmd + Enter)。主输入框已有草稿或正在生成其他回答时拒绝发送,不覆盖草稿。
  • 追问带唯一标记、原文和本条旁注最近 12 条历史,通过网页输入框提交。主聊天上下文仍由 ChatGPT 管理。
  • 生成时保留原始消息可见;确认对应回答完成且文字稳定后保存并折叠,留下「已收进旁注」入口。
  • 页面没有可识别的完成信号时,可在网页回答完成后点击「回答已完成,手动收进旁注」。关联不明确时不会强行折叠。
  • 点击高亮回看;点击主聊天里的折叠入口可展开/收起原始问答。
  • 拖动浮窗标题栏移动窗口,拖动右下角 ◢ 调整宽高;旁注按钮也可拖动。位置、尺寸自动保存,刷新后恢复。
  • 重新打开聊天时恢复高亮与折叠;历史消息未加载时需先滚动加载。生成中刷新恢复等待,不会自动重发。
  • 超过 10 分钟停止等待,可主动「结束等待」保留网页消息。发送失败时检查主输入框,不要重复提交。
  • 切换回答分支或重新生成导致答案改变时,不折叠新答案。旁注保留此前快照。
  • 删除旁注解除对应折叠,只删本地记录,不删 ChatGPT 服务器消息。

边界与数据

网页追问实际存在于主聊天,会影响后续上下文。禁用扩展后刷新或在没有扩展的客户端打开,会看到全部原始消息。折叠只是展示行为。

仅操作网页 DOM,不调用非公开端点,不读取登录 Cookie。网页结构变化可能影响正文、消息容器、输入框及完成检测;不确定时停止自动发送/折叠。一次聊天只允许一个旁注等待回答。暂不支持多个标签页同时操作同一聊天、临时聊天、分享页、附件理解、Markdown/公式渲染、云同步。

数据保存在 chrome.storage.local。卸载前可导出 JSON 备份(暂无导入界面)。当前高亮为黄色,记录预留 color 字段,颜色选择界面后续添加。

可选模式

在扩展设置选择「网页会话」「演示」或「独立 API」。演示模式返回固定内容,不调用 AI。API 模式另外计费,问答只保存在旁注内。

API 模式需要 Node.js 22+,复制 .env.example 为 .env,填写 OPENAI_API_KEY 和 OPENAI_MODEL,运行 npm start,把显示的配对码填入设置。MARGIN_TOKEN 可设置固定配对码。密钥只在本机服务使用。API 上下文仅包含选区、所在正文前后各最多 3500 字和旁注历史,不继承 ChatGPT 记忆或附件。

测试

无需 npm install。运行 npm test 验证原文定位、API 错误、存储、网页请求串行化、重复完成和取消后的迟到响应。

运行 node demo/serve.mjs:

测试页运行相同 UI、后台和适配代码,只模拟浏览器存储和 ChatGPT 服务。模拟通过不等于真实 ChatGPT 网页联调完成。实际账号额度和网页兼容性需要安装后验证。

版本

  • 0.2.7:识别 data-content-search-unit-key,处理没有作者标记的用户问题与回答共用 turn 的布局;保存位置、尺寸时捕获扩展重载产生的同步异常,提示刷新页面。真实页面收录效果仍待验证。
  • 0.2.6:以唯一追踪标记关联问题,避免全文渲染差异导致匹配失败;提供「收录选中的回答文字」备用入口,只保存用户明确选择的文字。未确认对应关系时保留网页原始消息可见。真实页面自动关联效果仍需验证。
  • 0.2.5:发送按钮限定在当前输入框附近识别,支持中英文发送标签,最长等待 5 秒;草稿变化、聊天切换或已手动发送时停止自动点击;失败时输出附近按钮诊断。模拟回归通过,真实网页按钮适配仍需验证。
  • 0.2.4:按钮和浮窗可拖动、右下角缩放并保存位置;取消/超时后可手动收录网页回答,无需重发;细化收录状态提示并扩展完成/停止按钮识别。实际页面的自动收录兼容性仍需验证。
  • 0.2.3:根据用户提供的页面结构支持 data-turn-key、data-content-search-turn-key 和 data-chatgpt-selection-message-id;去除嵌套容器重复,拆分同一容器内的问答。结构回归通过,实际网页端到端发送仍待验证。
  • 0.2.2:扩展发送诊断,输出正文祖先容器结构;发送前检查失败时自动显示。此版本尚未解决缺少消息容器标记的页面适配,需要真实 DOM 诊断。
  • 0.2.1:修复项目、自定义 GPT 聊天路径识别,并同步修正发送前校验与聊天切换检测。
  • 0.2.0:网页会话、折叠恢复、窗口缩放保存,颜色字段预留。
  • 0.1.3:MarkdownRoot-* 正文识别。
  • 0.1.2:诊断入口、焦点修复。
  • 0.1.1:多正文区块、选区事件与快捷键。

About

Margin: inline annotation threads for ChatGPT, with highlights and independent follow-up conversations.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages