npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@srgay/cursor-extension

v1.0.18

Published

本机 Cursor workbench 增强:MAX Mode 守护、MCP Follow-up 面板、输入法回车修复、AskQuestion 自动提交(支持随 Cursor 启动持久加载,或 CDP 临时注入)。

Readme

Cursor Extension

一组本机 Cursor workbench 增强脚本,包含四部分:

  1. MAX Mode 守护:保持 MAX Mode 关闭,并在彩色 MAX 标记出现且聊天框有内容时阻止发送。
  2. MCP Follow-up 面板:在 Cursor 聊天框上方注入一个 MCP 反馈面板,连接 mcp-feedback-enhanced 的 WebSocket,让你直接在 Cursor 里回复 interactive_feedback,支持端口自动扫描/自定义,启动时默认匹配当前窗口端口,也可手动选择任意端口(选定后自动重读项目信息并重载状态)。
  3. 输入法回车修复:修复用中文输入法(拼音/注音等)组字时,按回车上屏候选词会被 Cursor 误当成「提交」的问题(含自带的 AskQuestion「Other」输入框)。
  4. AskQuestion 自动提交:在 Cursor 自带 AskQuestion 工具条上增加倒计时、暂停/启动按钮和左下角齿轮设置入口,配置后自动填入原生 Other 并提交。

致谢

感谢 LINUX DO 社区的交流氛围与灵感支持。

安装与使用(npx)

无需克隆仓库,直接用 npx 运行(需 Node.js ≥ 20):

# 持久安装:patch Cursor 的 workbench.html,随 Cursor 启动自动加载四个脚本(推荐)
npx @srgay/cursor-extension install

# 查看可安装模块
npx @srgay/cursor-extension install --list

# 只安装指定模块(可多选;支持空格或逗号分隔)
npx @srgay/cursor-extension install followup ime
npx @srgay/cursor-extension install max,ask

# 还原安装
npx @srgay/cursor-extension uninstall

# CDP 临时注入(需先用调试端口启动 Cursor;重启 Cursor 后失效)
npx @srgay/cursor-extension inject            # 注入全部四个
npx @srgay/cursor-extension inject followup   # 只注入某一个:max | followup | ime | ask | all

# 备用:用命令配置 Cursor 自带 AskQuestion 自动提交(也可直接在原始 AskQuestion 卡片的齿轮设置里改)
npx @srgay/cursor-extension ask-question enable "继续" --delay-s 600
npx @srgay/cursor-extension ask-question status
npx @srgay/cursor-extension ask-question disable

# 查看帮助
npx @srgay/cursor-extension help
  • install 后需完整退出并重新打开 Cursor 才生效。
  • Cursor 更新可能覆盖 workbench.html,功能失效时重新执行 install
  • install 不带模块名时默认安装全部模块;指定模块时是增量安装,不会自动移除已安装的其它模块。
  • 可安装模块:maxfollowupimeask
  • 自定义 Cursor 安装目录:设置环境变量 CURSOR_WORKBENCH_DIR
  • inject / ask-question 自定义调试端口:设置环境变量 CURSOR_DEBUG_PORT(默认 9222)。
  • MCP 面板配置读写所用的 python 命令:默认按平台自动探测(python / py / python3),可用环境变量 CURSOR_MCP_PYTHON 强制指定(某些 Windows 环境用得上)。

说明:下文「推荐方式 / 备用方式」里的 npm run patchnpm run inject 等是本仓库源码开发用法;最终用户用上面的 npx 命令即可,二者等价。

功能:MAX Mode 守护

  • 检测彩色 MAX badge。
  • 点击 badge 打开模型菜单。
  • 只在菜单里的精确 MAX Mode 行是 aria-checked="true" 时点击关闭。
  • 如果彩色 MAX 存在且聊天框有内容,显示 50px 红色渐变边框。
  • 同一条件下禁用 .send-with-mode 发送控件,并拦截点击发送和回车发送。
  • 脚本加载成功后,在 Cursor 右下角短暂显示 Cursor Extension loaded

推荐方式:随 Cursor 启动加载

Patch Cursor 的 workbench.html,让四个脚本(MAX Mode 守护MCP Follow-up 面板输入法回车修复AskQuestion 自动提交)都随 Cursor 启动自动加载,无需调试端口、无需每次手动注入

npm run patch

Patch 行为:

  • 默认注入 <script src="./cursor-max-mode-guard.js"><script src="./cursor-mcp-followup.js"><script src="./cursor-ime-enter-fix.js"><script src="./cursor-ask-question-auto-submit.js">workbench.html;指定模块安装时只注入对应脚本(各自带注释标记,便于幂等与回退)。
  • cursor-mcp-followup.js 拷入 workbench 目录时,按当前系统替换其中的路径/命令占位符:配置路径 ~/.config/mcp-feedback-enhanced/ui_settings.json(Windows 为 C:/Users/<你>/.config/...,统一用正斜杠),以及读取命令(Mac/Linux 用 cat、Windows 用 python -X utf8 读取)与写入用的 python 命令名(面板借 WS run_command 读写该文件,实现常用提示词与自动提交配置的查看/编辑)。
  • AskQuestion 自动提交会在原始 AskQuestion 工具条上增加倒计时、暂停/启动按钮和左下角齿轮设置入口;配置保存在 Cursor workbench 页面的全局 localStorage(key: srgay.cursor-extension.ask-question-auto-submit.v1),不依赖 MCP 服务端或端口连接。
  • 同步更新 Cursor product.json 里的 workbench.html checksum,避免 Cursor 把这次修改识别为安装损坏。
  • macOS 下 patch 会修改 .app 包内资源并使原签名校验不再完整;脚本会自动移除 /Applications/Cursor.appcom.apple.quarantine,避免 Gatekeeper 把已修改的本机应用提示为“已损坏”。

注意:占位符在 patch 时按当前用户主目录与操作系统写死。若更换用户/主目录或操作系统,重新执行 npm run patch

然后完整退出 Cursor,再重新打开 Cursor。

恢复:

npm run unpatch

Cursor 更新后可能会覆盖 workbench.html,如果功能失效,重新执行 npm run patch

默认路径:

  • macOS: /Applications/Cursor.app/Contents/Resources/app/out/vs/code/electron-sandbox/workbench
  • Windows: 优先自动探测 %LOCALAPPDATA%\Programs\Cursor\resources\app\out\vs\code\electron-sandbox\workbench
  • Windows: 如果用户目录不存在,会尝试 C:\Program Files\cursor\resources\app\out\vs\code\electron-sandbox\workbench

如果 Cursor 安装在其它目录,可以手动指定:

CURSOR_WORKBENCH_DIR="/path/to/workbench" npm run patch

Windows PowerShell:

$env:CURSOR_WORKBENCH_DIR="C:\Path\To\Cursor\resources\app\out\vs\code\electron-sandbox\workbench"
npm run patch

如果 Windows 报 EPERM: operation not permitted,说明 Cursor 安装在 C:\Program Files 等受保护目录。请用管理员身份打开 PowerShell 后重新执行:

npm run patch

备用方式:临时注入

临时注入适合调试脚本,不推荐作为日常使用方式。它需要用调试端口启动 Cursor:

open -na /Applications/Cursor.app --args --remote-debugging-port=9222

然后在本项目根目录执行:

npm run inject

功能:AskQuestion 自动提交

给 Cursor 自带 AskQuestion 工具设置一个全局消息。任何会话里出现 AskQuestion 卡片时,脚本会在该卡片自己的 Other 输入框里填入消息,并点击原生 Continue 按钮。

  • 原始 UI 改造:不新建独立管理页;脚本只在原始 AskQuestion 工具条左下角增加齿轮设置入口,并在旁边显示倒计时和暂停/启动按钮。点击齿轮后在同一张卡片内展开设置。
  • Agent Window:除原始 AskQuestion DOM 外,还识别 Agent Window 的 ui-tray Questions 卡片;卡片 footer 左下角同样有齿轮设置入口、倒计时和暂停/启动按钮。安装补丁也保留 background composer AskQuestion interaction query 插桩作兜底。两种路径都使用同一份全局配置延迟提交 Other
  • 全局配置:配置保存在 workbench localStorage,所有 composer 会话共享同一条自动提交消息。
  • 倒计时可见:启用且本轮已排期时,齿轮旁边会显示 提交 m:ss 倒计时。
  • 会话隔离:运行状态按每个 AskQuestion toolbar / Agent Window Questions tray 独立计时和提交;用户在某个卡片上先键入、选择选项、点 Other、点 Skip/Continue 时,只取消该卡片本轮自动提交,不影响其它会话。单纯点卡片背景、标题、暂停/启动按钮或打开齿轮设置不会取消其它卡片倒计时。
  • 暂停/启动:倒计时旁边的 暂停 只暂停当前卡片并保留剩余时间;卡片进入暂停后,同一位置会变成 启动,点击后从剩余时间继续倒计时。如果这个卡片本来没有排过倒计时,显式启动才会按当前全局配置从头排期;如果是因为已有输入而暂停,显式启动会允许本卡继续自动填入 Other
  • 不改工具参数:不修改 AskQuestion 入参;普通 Composer 和 Agent Window UI 模式都模拟原生 Other 选择、输入和 Continue 点击,Agent interaction query 兜底模式走 Cursor 自己的 AskQuestion interaction response。

配置(原始 UI 优先)

安装或注入脚本后,当 Cursor 自带 AskQuestion 卡片出现时,Skip / Continue 所在工具条左侧会出现齿轮按钮、倒计时和暂停/启动按钮。点击齿轮后可在原始卡片内设置:

  • 启用自动提交
  • 自动提交内容
  • 延迟(s)
  • 有输入时跳过

没有把这组设置直接写进 Cursor Settings:本项目是 workbench 注入脚本,不是 Cursor 官方扩展;Cursor Settings 的配置注册表在内部 bundle 里,强行 patch 版本耦合太高。现在的齿轮入口放在原始 AskQuestion UI 内,配置仍然是全局持久化的。

备用脚本化配置命令通过 CDP 写入 Cursor workbench,因此需要先用调试端口启动 Cursor:

open -na /Applications/Cursor.app --args --remote-debugging-port=9222

npx @srgay/cursor-extension ask-question enable "继续" --delay-s 600
npx @srgay/cursor-extension ask-question status
npx @srgay/cursor-extension ask-question disable

也可以在 Cursor DevTools/CDP 里直接调用:

window.__cursorAskQuestionAutoSubmit.enableSeconds("继续", 600)
window.__cursorAskQuestionAutoSubmit.disable()
window.__cursorAskQuestionAutoSubmit.status()

参数:

  • message:自动填入 Other 的消息。
  • delay-s / delaySeconds:AskQuestion 出现后等待多少秒提交,默认 600 秒。内部仍兼容旧的 delayMs 存储和 --delay-ms 参数。
  • respectUserInput:默认 true,如果问题卡片已有用户输入或选择,则跳过本轮自动提交。

MCP Follow-up 面板

在 Cursor 聊天输入框上方注入一个 MCP 反馈面板,连接 mcp-feedback-enhanced 的 WebSocket(ws://127.0.0.1:{port}/ws),让你直接在 Cursor 内回复 interactive_feedback 调用,无需切到独立的 WebUI。

功能

  • 注入到聊天框上方,样式贴合 Cursor 原生输入框。
  • Agent Window 最低档支持:同时识别普通 .composer-bar、Agent Window 主输入区(.agent-panel-followup-input)与 .ui-tray 挂载点;焦点在哪类容器内就挂到哪类容器,无焦点时可见 Agent Window 优先(主输入区前或 tray footer 前)。提交仍走 mcp-feedback-enhanced WebSocket 的 submit_feedback,用于回复 MCP interactive_feedback 会话;不等同于 Cursor 原生 active-run 追加用户消息。
  • 自动扫描端口 8765–8769,识别正在监听的 MCP 服务(连得上或返回 4004 无 session 即视为活跃)。
  • 端口下拉(自定义浮层菜单):点开下拉即扫描一次——先显示「扫描中…」,扫完用最新结果填充并展示可用端口;点选一次即生效(自定义菜单不依赖原生 <select>,不打断、不闪),末尾提供「自定义端口…」可手动输入任意端口。点空白处或按 Esc 关闭菜单。
  • 菜单每项显示「状态 · 项目名」(如 Port 8766 · waiting · my-project)便于区分;触发按钮收起时只显示「Port X · 状态」以贴合宽度,避免与右侧项目名重复。
  • 放大镜按钮可随时重新扫描(全量扫描并自动连上本窗口端口)。
  • 默认匹配当前窗口端口(不再限制只能连本窗口):每个 Cursor 窗口会起一个独立的 mcp-feedback 实例。面板从 Cursor 原生 window.vscode 取当前窗口工作区路径,再借 run_command 读取每个端口所在实例的 WORKSPACE_FOLDER_PATHS(窗口真实工作区,由 Cursor 注入、不受 AI 传入的 project_directory 影响),启动/重扫时默认优先选中与当前窗口工作区相等的端口;读不到时退用 CURSOR_WORKSPACE_LABEL(项目名)做次级匹配。你也可以手动选择任意端口(含别的窗口/常驻实例)——选定后面板会重读该端口的项目信息(env 工作区/会话/状态)并重载状态,项目名以 env 工作区为准显示。本窗口端口尚未出现时降频重扫等待,出现后自动连上;取不到工作区(多根工作区/空窗口)时回退默认选择。
  • 持续保持为 WebSocket「最后连接」(每 3 秒重连 + 输入框聚焦时重连),确保始终能收到当前会话并成功提交反馈。
  • 底部「常用提示词」下拉:一键把 ui_settings.json 里的提示词追加到输入框;旁边刷新按钮可重新拉取配置。
  • 齿轮按钮展开配置抽屉
    • 常用提示词增删改(写回 ui_settings.json,删除带二次确认)。
    • 自动提交配置:启用开关、超时(秒)、选择提示词,状态实时回显。
    • 自动提交运行时:仅在「等待反馈」时倒计时,输入框右侧显示 自动提交 m:ss 小标签;到点自动以所选提示词发送(走与手动一致的重连抢占)。用户输入/手动插入提示词/手动发送/点击倒计时/会话离开等待态,本轮即取消自动提交。
  • 配置读写均借现有 WebSocket 的 run_command 完成(Mac/Linux 读用 cat,Windows 读用 python -X utf8;写入两平台都用 python base64 解码落盘),不依赖本地文件系统访问或 CORS。服务端以 shell=False + shlex.split 执行命令,故 Windows 路径统一用正斜杠以规避转义。

加载方式

  • 推荐:随 Cursor 启动加载(持久,不依赖调试端口)。执行 npm run patch 后完整重启 Cursor 即可,详见上文「推荐方式」。
  • 备用:CDP 临时注入(适合调试脚本,重启 Cursor 后失效)。先用调试端口启动 Cursor:
open -na /Applications/Cursor.app --args --remote-debugging-port=9222

然后在本项目根目录执行:

npm run inject:followup

CDP 注入是临时的,重启 Cursor 后需要重新执行install-cursor-mcp-followup.mjs 会在注入时按平台替换路径/命令占位符(详见 src/shared/mcp-settings.mjs)。

端口扫描与自定义

  • 面板安装时自动扫描一次 8765–8769
  • 按窗口默认选端口(可手动覆盖):扫描时借 run_command 读取每个端口实例的 WORKSPACE_FOLDER_PATHS启动/重扫默认优先选中与当前窗口工作区相等的端口(次级用 CURSOR_WORKSPACE_LABEL 项目名)。这样「在 A 窗口让 AI 改 B 项目代码」(会话 project_directory 变成 B)时默认仍连回 A 窗口自己的端口;但不再限制只能连本窗口端口——你可以手动选择任意端口,选定后面板会重读该端口的项目信息(env 工作区/会话/状态)并重载状态。
  • 扫描时机:只在「面板启动时」和「每次点开端口下拉时」各扫一次,不做后台轮询扫描;连上本窗口端口后只发心跳维持 WebSocket「最后连接」。本窗口端口暂未出现时,点开下拉重扫即可发现并连上。
  • 点击放大镜按钮可手动重扫(全量扫描并自动连上本窗口端口)。
  • 在端口下拉里选择「自定义端口…」,就地输入端口号回车即可连接;输入框失焦或按 Esc 会回退到第一个可用端口。

查看状态

在 Cursor DevTools/CDP 里执行:

window.__cursorMcpFollowup.status()

返回挂载状态、挂载类型(mountKind: composer / agent-window / agent-tray)、当前连接端口、会话信息、扫描结果(foundPorts)、各端口项目名/状态等。

手动操作

window.__cursorMcpFollowup.scan()         // 重新扫描端口
window.__cursorMcpFollowup.reconnect()    // 重连当前选中端口
window.__cursorMcpFollowup.remount()      // 重新挂载面板到聊天框上方
window.__cursorMcpFollowup.toggleConfig() // 展开/收起配置抽屉
window.__cursorMcpFollowup.uninstall()    // 卸载面板

可调参数

脚本顶部 config 可调整:

  • scanStart / scanCount:扫描起始端口与数量(默认从 8765 起、共 5 个,即 8765–8769)。
  • probeTimeoutMs:单端口探测超时(默认 2500 ms;含一次 run_command 读取窗口工作区的往返)。
  • reconnectMs:WebSocket 存活探测间隔(默认 8000 ms;不做周期性重连)。

排障

  • 面板没出现:确认 Cursor 用 --remote-debugging-port=9222 启动且聊天侧边栏已打开;可执行 window.__cursorMcpFollowup.remount()
  • 一直显示 Offline:对应端口当前没有活跃的 MCP 会话;点放大镜重扫,或确认 mcp-feedback-enhanced 已在该端口监听。
  • 收不到会话 / 提交无效:面板靠定期重连抢占「最后连接」;若 Cursor 自带 WebUI 同时连着,聚焦输入框会触发立即重连抢回当前会话。

功能:输入法回车修复

修复用中文输入法(拼音/注音等)**组字时按回车上屏候选词被误当成「提交」**的问题。典型场景是 Cursor 自带的 AskQuestion「Other / 其他」自定义输入框textarea.composer-questionnaire-toolbar-freeform-input)。

原理:在 window 捕获阶段最早拦截「组字进行中的回车」(依据 isComposing / keyCode 229 / compositionstart~end 跟踪),stopImmediatePropagation 阻止其到达应用级回车提交处理器;不调用 preventDefault,保证输入法正常上屏。组字结束后回车一切照旧;代码编辑器(Monaco)自行处理组字,已跳过避免误伤。

加载方式

  • 推荐:随 Cursor 启动加载,执行 npm run patch 后重启 Cursor(见上文「推荐方式」)。
  • 备用:CDP 临时注入(重启失效):
open -na /Applications/Cursor.app --args --remote-debugging-port=9222
npm run inject:ime

查看状态 / 卸载

window.__cursorImeEnterFix.status()    // 含 guardedCount(已拦截次数)/ lastGuardedTarget(最近被拦输入框)
window.__cursorImeEnterFix.uninstall() // 卸载

目录

按功能分组,每个功能自成一夹,共享工具单独放在 src/shared/

  • src/max-mode-guard/ — MAX Mode 守护
    • cursor-max-mode-guard.js: 注入到 Cursor workbench 页面的守护脚本。
    • install-cursor-max-mode-guard.mjs: 通过 CDP 临时注入 MAX Mode 守护脚本。
  • src/mcp-followup/ — MCP Follow-up 面板
    • cursor-mcp-followup.js: MCP Follow-up 面板注入脚本。
    • install-cursor-mcp-followup.mjs: 通过 CDP 临时注入 MCP Follow-up 面板。
  • src/ime-enter-fix/ — 输入法回车修复
    • cursor-ime-enter-fix.js: 输入法组字回车修复脚本(全局生效)。
    • install-cursor-ime-enter-fix.mjs: 通过 CDP 临时注入输入法回车修复。
  • src/ask-question-auto-submit/ — Cursor 自带 AskQuestion 自动提交
    • cursor-ask-question-auto-submit.js: 在原始 AskQuestion 工具条注入倒计时、暂停/启动和齿轮设置;普通 Composer 和 Agent Window Questions 卡自动填写 Other 并点击原生提交,也能响应 AskQuestion interaction query。
    • install-cursor-ask-question-auto-submit.mjs: 通过 CDP 临时注入 AskQuestion 自动提交。
    • configure-cursor-ask-question-auto-submit.mjs: 通过 CDP 写入/查看全局自动提交配置。
  • src/shared/ — 共享工具
    • cursor-workbench-paths.mjs: macOS/Windows workbench 路径解析。
    • mcp-settings.mjs: 按平台生成 MCP 面板的配置路径与读/写命令(探测 python,Windows 用正斜杠)。
    • patch-cursor-workbench.mjs: patch Cursor 的 workbench.html(注入全部四个脚本)。
    • unpatch-cursor-workbench.mjs: 恢复 patch。

查看状态(MAX Mode 守护)

在 Cursor DevTools/CDP 里执行:

window.__cursorMaxModeGuard.status()

页面内卸载(MAX Mode 守护)

window.__cursorMaxModeGuard.uninstall()

校验

npm run check