🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

编辑器位置引用 pandarayc/dsh-editor-context

DeepSeek 客户端
pandarayc11 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把编辑器里选中的代码行作为引用插入对话草稿

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/pandarayc/dsh-editor-context.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 14 处,展示前 14 条)
  • 读取本地文件
    lib/index.js:88
    const info = await stat(file);
  • 读取本地文件
    lib/index.js:97
    names = await readdir(dir);
  • 读取本地文件
    lib/index.js:107
    const info = await stat(candidate);
  • 发起网络请求
    lib/client.js:100
    const response = await fetch(ENDPOINT, { signal, cache: 'no-store', credentials: 'same-origin' });
  • 发起网络请求
    lib/client.js:379
    const response = await fetch(`${NEXT_ENDPOINT}?since=${String(since)}`, {
  • 发起网络请求
    lib/client.js:472
    const response = await fetch(EDITORS_ENDPOINT, {
  • 发起网络请求
    lib/client.js:493
    const response = await fetch(`${ENDPOINT}?pid=${encodeURIComponent(option.id)}`, {
  • 读取本地文件
    lib/state.js:43
    return parseWindowState(JSON.parse(await readFile(path, 'utf8')));
  • 写入本地文件
    lib/log.js:42
    ready ??= mkdir(dirname(file), { recursive: true }).catch(() => undefined);
  • 读取本地文件
    lib/log.js:46
    const info = await stat(file).catch(() => undefined);
  • 写入本地文件
    lib/log.js:47
    if (info !== undefined && info.size > MAX_BYTES) await writeFile(file, '', 'utf8');
  • 写入本地文件
    lib/log.js:49
    await appendFile(file, line, 'utf8');
  • 读取本地文件
    lib/registry.js:106
    names = await readdir(endpointsDir(stateDir));
  • 读取本地文件
    lib/registry.js:115
    raw = JSON.parse(await readFile(join(endpointsDir(stateDir), name), 'utf8'));
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-editor-context English · 把「你正在 Cursor / VS Code 里看的那几行」变成 DSH 输入框里的一张 chip。 在输入框打 @,选编辑器位置,chip 落进你的草稿。发出去,模型收到文件与行区间: @/data/project/qihuan/hallsrv/internal/logic/logic_purchase/limit.go#L146-L154 这就是全部功能。位置之所以进入对话,是因为你把它写进了自己的句子——没有任何东西在你背后注入——所以不需要编号去区分,不需要开关去关闭自动注入,也没有任何配置。 你自己打出来的引用,不需要这些。 前置 - DSH,跑 web profile(dsh web) - 编辑器半边:Editor Context,市场里的 pandarayc.editor-context-bridge (链接), 0.5.0 以上。它负责写 ~/.editor-context/windows/.json,并在 ~/.editor-context/endpoints/ 里公布本插件要拨的 WebSocket。
展开完整文档(README 剩余 1 节)
dsh-editor-context

English ·

把「你正在 Cursor / VS Code 里看的那几行」变成 DSH 输入框里的一张 chip。

在输入框打 @,选编辑器位置,chip 落进你的草稿。发出去,模型收到文件与行区间:

@/data/project/qihuan/hallsrv/internal/logic/logic_purchase/limit.go#L146-L154

这就是全部功能。位置之所以进入对话,是因为你把它写进了自己的句子——没有任何东西在你背后注入——所以不需要编号去区分,不需要开关去关闭自动注入,也没有任何配置。
你自己打出来的引用,不需要这些。

前置

- DSH,跑 web profile(dsh web)
- 编辑器半边:Editor Context,市场里的 pandarayc.editor-context-bridge (链接), 0.5.0 以上。它负责写 ~/.editor-context/windows/.json,并在 ~/.editor-context/endpoints/ 里公布本插件要拨的 WebSocket。

安装

dsh plugin --profile web add github:pandarayc/dsh-editor-context
或者用本地检出:
dsh plugin --profile web add /path/to/dsh-editor-context
然后重启 dsh-web —— 插件在进程启动时加载

包还没发到 npm,所以 dsh plugin --profile web add dsh-editor-context 现在解析不了;在发之前用上面的仓库形式。

用法

在输入框打 @,菜单里会多一组编辑器位置,只有一行——你现在在哪:

@
├─ 编辑器位置 │ limit.go:146-154 hallsrv/internal/logic/…/limit.go └─ reference src/… tests/… …

选中后 chip 落进草稿,是你句子的一个词:可以放在句子中间、可以改、可以删、可以不发——它就是普通的草稿文本。回放历史里它同样是 chip。

chip 显示的是短标签(limit.go:146-154),但模型收到的是完整 token:发送前每个引用都会经其属主的 codec 展开,所以模型拿到的是能直接打开的地址,不是一个标签。

| 你插入的 | 模型收到的 |
| @<绝对路径>#L146 | 光标停在第 146 行 |
| @<绝对路径>#L146-L154 | 选中了 146-154 行 |

模型拿到的是绝对路径:状态文件里的 relativePath 相对于编辑器工作区,和 agent 的工作目录通常不是一回事,read 打不开。

为什么用 #L:DSH 自带的文件规则把 @ 后面到空白之前的一切当作路径,所以 @path:12-34 会被它连冒号一起吞进路径,变成两条规则争同一段文本。# 不在那个语法里,这个 token 的归属因此是明确的;而 #L 又是模型从代码托管平台早就熟悉的行号写法。

从编辑器直接发,不用切窗口

同一个位置也可以在 Cursor / VS Code 里送出来:编辑器标题栏上的 Add to Bot。
点下去 chip 就出现在你的草稿里,所以你可以连着指三处,然后用一句话一起问。

Cursor:在 limit.go:146-154 上点 Add to Bot ↓ 扩展通过自己的 WebSocket 推一帧 delivery ↓ 本插件已经连着,同一 tick 收到 ↓ 你打开的标签页上挂着一个 parked 长轮询,它醒来并插入 DSH 输入框:[limit.go:146-154] ← 已在草稿里,未发送

扩展是 WebSocket 服务端,本插件是客户端。这个方向不是随便定的:Node 自带 WebSocket 客户端但不带服务端,所以需要依赖的那一半正好是住在 VSIX 里的扩展——这也是本插件至今一个依赖都没有的原因。

两跳都不是定时器。编辑器推送;插件的长轮询一直挂着,直到有东西要交给浏览器。空闲会话是一个打开的 socket 加一个挂起的响应,不是每秒一次请求。

投递里除了地址和行区间还带文本。投递是快照不是指针:指针在文件被编辑、移动、回滚的那一刻就失效了,然后 agent 在推理已经不存在的代码。

配置

- id: editor-context
name: dsh-editor-context
config:
stateDir: "~/.editor-context" # 编辑器扩展发布状态的目录 maxAgeSeconds: 3600 # 超过这个时间的读数视为过期 http: false # 关掉整个功能 httpPath: /editor-context/position

插件在 DSH 的 web server 上挂三条只读路由——GET /editor-context/position(当前读数)、 GET /editor-context/next(长轮询)、GET /editor-context/editors(连上了哪些编辑器窗口),浏览器半边靠它们拿读数。返回的是地址与行区间,不含文件内容。被扩展 excludeGlobs 排除的路径返回 404——排除规则不会泄露它本想藏起来的那个路径。

这些路由在 DSH 的 SPA 兜底之前匹配,因此不额外鉴权。它的定位是本机(默认如此); http: false 可以整个去掉。

排查

| 现象 | 查什么 |
| 打 @ 没有编辑器位置这一组 | cat ~/.editor-context/windows/.json——没有文件说明扩展没装或没激活 |
| 有这一行,但位置是旧的 | 读数超过了 maxAgeSeconds;在编辑器里动一下光标 |
| 某些文件里没有这一行 | 命中扩展侧的 editorContext.excludeGlobs。这是有意为之:连路径都不发布 |
| 完全没反应 | curl -s http://127.0.0.1:3080/editor-context/editors——没有行说明没有编辑器连上;refused 状态会写明原因 |

已知限制

- 路径含空格需要引号形式:@"a b.go"#L12。解析规则支持,候选列表目前还产不出这个形态。
- 点 chip 不会跳回编辑器。 编辑器扩展只写文件,没有反向通道。
- 排除规则在扩展侧配置,不在这里。插件自己没有任何规则,也不需要:它只能提供扩展愿意发布的东西。

目录

lib/state.js 位置文档:一套 schema,一个解析器 lib/registry.js host:哪些编辑器窗口在公布端点、在哪 lib/link.js host:每个窗口一个订阅者,按 registry 对账 lib/subscribe.js host:拨通某个编辑器窗口的 WebSocket 客户端 lib/deliveries.js host:那条 socket 与浏览器之间的队列 lib/http.js host:三条只读路由,纯函数、可单测 lib/index.js host:挂路由 + token 语法提示段 lib/client.js 浏览器:@ 候选源 + UserText 规则 + chip 组件 + 把编辑器送来的位置插进草稿的 intake

这是双面包:host 半边跑在 DSH 进程里,浏览器半边由 DSH 的 client module 系统按 dsh.client 声明喂给页面。浏览器半边是手写的、没有构建步骤,只 import 了 react;跨包一律走 cordis service(ctx.inputTriggers / ctx.uiConversation / ctx.slots)。

npm test # 82 passed

七个文件:test/editor-context.test.mjs(读取端、配置、apply 到底注册了什么)、 test/http.test.mjs(三条路由与浏览器载荷)、test/deliveries.test.mjs(队列)、 test/subscribe.test.mjs(socket 客户端,对着假 socket)、test/registry.test.mjs 与 test/link.test.mjs(发现与成员对账)、test/client.test.mjs(加载真实 bundle,用假的 window.__ModuleLoader__ 与 require,断言的是要发出去的字节)。

关于「为什么这个插件不可能往对话里塞东西」「它以前塞过什么」,以及客户端那三个容易踩的点:docs/internals.md。

License

MIT
预览分享卡片长什么样 ↓pandarayc/dsh-editor-context
分享 · DeepSeek Harness Hub
pandarayc/dsh-editor-context

把编辑器里选中的代码行作为引用插入对话草稿

这是你的仓库?认领条目

回到顶部