sjhmars/dsh-plugins--plugins-editor-launcher ↗★ 0
@sjhmars/editor-launcher
Pick an installed editor from the Session header and open session file links with it, on Web and Desktop
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:sjhmars/dsh-plugins#2360fa269829d2f034f4e7734820482091d8e46b&path:plugins/editor-launcher说明文档
阅读完整 README ↗@sjhmars/editor-launcher
在 Session 头部(Session log 按钮左侧)加一个编辑器选择器:列出本机已安装的编辑器,选中即记为默认;之后点击会话中模型 Read/Edit/Write 输出的文件路径链接,就会用你选的编辑器打开该文件(Web 端)。
Adds an editor picker to the Session header (left of the Session-log button): it lists the editors installed on this machine, and the one you choose is remembered as the default. After that, clicking the file-path links the model produced in Read/Edit/Write tool rows opens those files with your chosen editor (Web).
工作原理 / How it works
- Host half(
src/index.ts)暴露一个 Typert Remote 服务EditorLauncherService(editorLauncher/listEditors、editorLauncher/openWith)。Gateway 的 SRC 声明路径自动发现它,无需生成 descriptors。 - Browser half(
src/client/):- 通过
conversation.session.header.utilities槽位注册选择器胶囊(order: -1,位于 Session log 左侧)。 - 在
document捕获阶段拦截[data-tool]工具行里无aria-expanded的路径链接点击,改用所选编辑器打开;编辑器缺失或启动失败时回退系统默认应用。 - 偏好(默认编辑器 id)存于
localStorage['dsh.editor-launcher.preferred']。
- 通过
- Web 与桌面共用同一条
/api+ Typert Gateway 链路(createSharedFetchHandler),因此两端零特判。
安装 / Install
从 npm 安装到 web profile:
dsh plugin --profile web add @sjhmars/editor-launcher
重启 dsh web 即可。Session log 左侧会出现"用编辑器打开"胶囊;点击会话中的 Read/Edit/Write 文件链接即用所选编辑器打开。
构建 / Build
插件的 @deepseek-ai/* 是 peerDependencies(运行时由 harness 安装树提供),类型解析走 tsconfig.json 的 paths(指向 ../deepseek-harness 各包的 lib/types)。构建使用 repo 的 tsc / tsdown(两者都在 H:\deepseek-harness\node_modules\.bin 下):
# 方式一(推荐,针对本仓库 checkout)
cd H:\deepseek-harness
node node_modules\typescript\bin\tsc -p ..\dsh-plugin\tsconfig.json # 产出 lib/types
node node_modules\tsdown\dist\run.mjs --config ..\dsh-plugin\tsdown.config.ts # 产出 lib/index.js + lib/client.js
# 方式二(在插件目录独立构建:先让 pnpm 装好 devDeps;peer 缺失可忽略)
cd H:\dsh-plugin
pnpm install
pnpm run build
lib/client.js 是浏览器 bundle(CJS + window.__ModuleLoader__.load 包装,externals 为平台模块),由 harness 的 client-modules 按 exports["./client"] 服务;lib/index.js 是 Node 半部,由 Loader 按包入口加载。
注意:若桌面客户端正从
H:\deepseek-harness运行,node_modules/.pnpm/electron@*的文件会被锁定,完整pnpm install会因 electron 而失败。此时先用pnpm install --offline --filter '!...@deepseek-ai/dsh-desktop-app'完成其余依赖,或在关闭客户端后再跑完整安装。插件自身构建不受影响。
支持的编辑器 / Detected editors
VS Code / VS Code Insiders、Cursor、Sublime Text、Notepad++、Neovim、Vim,以及 macOS 的 open -a 应用。检测方式:where/which(PATH)+ 各平台常见安装路径。
已知限制 / Known Limitations
- 编辑器候选清单内置在 Host 代码中,暂不支持用户配置额外编辑器(
extraEditors留作后续)。 - 点击拦截依赖
ToolRow的 DOM 结构([data-tool]行 + 无aria-expanded的路径按钮);若产品侧改动该结构,需同步更新src/client/index.ts的识别逻辑。 - 未设置默认编辑器时点击不拦截(保持系统默认应用行为)。