openchamber-openwith:一键换软件打开项目

0 阅读5分钟

在 OpenChamber 里跟 AI 聊完需求,想切到 VS Code 里改两行代码,得先最小化窗口、翻到访达、找到项目文件夹再拖进编辑器——这套动作每天都要来上几遍。开源扩展 openchamber-openwith 把它压缩成侧栏里的一次点击:面板列出你机器上装过的编辑器、终端和文件管理器,点谁,当前项目就在谁里面打开。AI 聊天和代码编辑之间,本来就不该有一道手动的门。

「打开方式」面板:已安装的软件彩色显示并排在前面,未安装的显示灰色

🎨 装没装的软件,一眼就分清

面板把它认识的软件全部铺开:本机检测到的保留品牌色排在前面,未安装的置灰垫后,只点得到的才有效,顶部显示可用数量。截图这台机器亮着的是 VS Code、Sublime Text、iTerm2、终端和文件管理器;装了新软件点「刷新」立即重检。

检测逻辑按平台来:macOS 扫 /Applications、/System/Applications、~/Applications 等目录下的 .app 包,同时查 PATH 上的命令;Windows 和 Linux 直接用 where / which。所以哪怕编辑器装在了非常规位置,只要它的 code 这类命令行启动器在 PATH 上,照样会被认出来。

支持的清单以 macOS 最全:VS Code、Cursor、Zed、Sublime Text、TextMate、Antigravity、Xcode、Android Studio、终端、iTerm2、Ghostty、Warp,外加 Finder。Windows 上是 VS Code、Cursor、Zed、Sublime Text、PowerShell、资源管理器,其中 VS Code 和 Cursor 的启动器是 .cmd 批处理文件,服务会经 cmd 运行并转义目录——批处理不能直接当进程启动,这是 Windows 上真实会踩的坑;Linux 上是编辑器加文件管理器。

⚙️ iframe 起不了进程,它就自己带一个本地服务

侧栏面板跑在沙箱 iframe 里,而「用软件打开项目」的本质是启动一个进程——iframe 两样都干不了:起不了进程,也看不到文件系统和 PATH。openchamber-openwith 的解法是自带一个本地 Node 服务(contributes.service),用户批准后由宿主拉起,面板只通过 serviceRequest 跟它说话。

工作原理:面板 → 宿主 → 本地服务 → 启动所选软件

链路是:面板 → 宿主 → 127.0.0.1:port 上的服务 → open -a "VS Code" <项目目录>。服务只监听回环地址,每个请求都要带宿主下发的 OPENCHAMBER_SERVICE_TOKEN,校验不过一律 401。接口一共三个:GET /health 就绪探测、GET /apps 返回每个软件的安装状态(结果缓存一小段时间,?refresh=1 立即重检)、POST /open 只接受清单内的软件、把目录规范化为绝对路径后启动它。软件清单 src/apps.ts 是纯数据,面板用它的名字和图标画界面,服务用它的 macApp / command 决定怎么检测和启动,两边不会各说各话。

一个容易被糊弄过去的细节它处理得很实在:macOS 上编辑器优先走自带命令行(code、cursor、zed、subl),因为 open -a 在无界面的服务进程里常常只返回成功却没真正把窗口带到前台;命令行会把目录交给已运行的实例并前置窗口。子进程启动后就脱离服务,服务不会等你一直开着的编辑器;启动器退出码非 0 时,stderr 会原样返回面板,失败就是失败,不会弹一个「已打开」的假成功。把「打开」这件小事做到不糊弄,比多列十个功能更难得。

🔍 权限写在明处,出了问题有日志可查

装扩展时的权限弹窗会列出本地服务和它打算运行的命令:open、各软件的启动命令、which / where 查找,Windows 上还有 cmd。扩展只要 service 这一项能力,不读会话数据,不碰项目文件,也不往项目里写任何东西。同时弹窗也说明白了另一面:服务以你的完整用户权限运行,没有操作系统沙箱——这正是它能启动你本机软件的原因。

权限与日志:权限弹窗列出将运行的命令,service.log 记录每次启动

打开失败了怎么办?服务把每一步写进 ~/.config/openchamber-openwith/logs/service.log(10 MB 滚动、留 3 份备份):检测到了哪些软件、/open 收到了什么参数、实际 spawn 了哪条命令、退出码是多少,全在。事后排查不用猜。

📦 安装与已知限制

「设置 → 扩展」里粘贴以下地址之一,点添加,再在权限弹窗中点「允许并启用」:

  • 最新打包 zip(始终指向最新构建): https://github.com/open-tecmz/openchamber-openwith/releases/latest/download/openchamber-openwith-latest.zip
  • release 分支 git 地址(可随版本号更新自动升级): https://github.com/open-tecmz/openchamber-openwith.git#release

需要 OpenChamber 2.0.0+,网页版桌面版都行。面板跟随 OpenChamber 语言,内置英文、简体中文、繁體中文;contributes.page 还能把同一面板全屏打开。

限制也如实列一下:OpenChamber 进程重启后服务不会自动起,面板会先显示「连接中」,第一次交互把它带回来;检测是尽力而为的扫描,装在非常规位置且 PATH 上没有命令的软件可能被判为未安装;各平台清单不同,macOS 最全;扩展不支持 VS Code 与移动端。

Apache-2.0 开源,仓库在 GitHub open-tecmz/openchamber-openwith。这个扩展也发布在 open.tecmz.com,想看更多这类开源小工具,可以常去逛逛。

你平时用哪个编辑器收尾?

跟 AI 对完话之后,你最常把项目丢进哪个软件里改?VS Code、Cursor 还是 Zed?评论区晒一下你的组合。好的工具不抢戏,它只是让你少弯一次腰。