笔记本热重载工具

一个VS Code扩展,用于在外部修改.ipynb文件时自动重新加载Jupyter笔记本,保留滚动位置并仅更新更改的单元格。

  • by kdkyum
  • JavaScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 kdkyum/notebook-hot-reload

使用说明

笔记本热重新加载

在VS代码中自动重新加载Jupyter笔记本 .ipynb 文件在外部被修改。

我为什么建造这个

我用 克劳德代码 带着一个 Jupyter MCP服务器 让人工智能代理为我编写和执行笔记本单元格。问题是: VS Code的笔记本编辑器从不反映外部更改每次Claude添加单元格或运行代码时,我都必须切换选项卡并返回查看结果。

我调查了为什么VS Code Copilot没有这个问题。答案是:Copilot是一个VS Code扩展,可以直接访问内部 NotebookEdit API外部工具,如Claude Code、Cursor代理或MCP服务器,只能写入 .ipynb 磁盘上的文件——VS Code的笔记本编辑器会忽略已打开笔记本的磁盘更改。 File: Revert File 也不起作用;如果笔记本没有脏,那就不行了。

唯一触发重新加载的是从笔记本选项卡切换回来。这是因为当编辑器重新获得焦点时,VS Code会检查文件的mtime。但没有API可以通过编程方式触发此操作。

因此,我构建了这个扩展。它民意调查开放时间 .ipynb 文件,当检测到更改时,从磁盘读取文件并使用以下命令应用差异 NotebookEdit.replaceCells() -与Copilot内部使用的API相同。只有更改的单元格会被替换,因此您的滚动位置会被保留。

这也是必要的,因为我的HPC集群使用GPFS,其中 inotify 事件不会传播,使 vscode.workspace.createFileSystemWatcher 没用。投票是唯一可靠的方法。

特性

  • 轮询打开的笔记本以进行磁盘更改(可配置间隔)
  • 基于差异的更新——只触摸修改/添加/删除的单元格
  • 保留滚动位置——不替换未更改的单元格
  • 处理代码单元格、标记单元格、输出(文本、图像、错误)和执行计数
  • 适用于任何文件系统(否 inotify 依赖性)
  • 适用于远程SSH、WSL和容器

安装

搜索 “笔记本热重新加载” 在VS代码扩展中,或:

ext install kdkyum.notebook-hot-reload

设置

设置 默认值 说明
notebookHotReload.enabled true 启用/禁用热重新加载
notebookHotReload.pollingInterval 1500 轮询间隔(毫秒)(500-10000)

运作原理

  1. 当Jupyter记事本打开时,扩展每隔1.5秒轮询一次文件的修改时间
  2. 当检测到变化时,它会读取 .ipynb 来自磁盘的JSON
  3. 它将当前内存单元与新单元进行比较(比较源、种类、执行计数、输出计数)
  4. 仅通过以下方式替换更改后的范围 WorkspaceEdit + NotebookEdit.replaceCells()
  5. 编辑前后未更改的单元格保持不变(保留滚动位置)

用例

  • 克劳德代码+Jupyter MCP:当AI代理编辑和执行单元格时,实时查看笔记本电脑的变化
  • 光标/风帆+MCP:外部代理修改立即出现在VS代码中
  • HPC/远程SSH:适用于并行文件系统(GPFS、NFS、Lustre),其中 inotify 不可用
  • 脚本和自动化:任何在VS代码之外修改笔记本的工作流程

许可证

麻省理工学院