登录 Devin 后即可在会话中联网搜索与语义检索代码
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add gongstudent/dsh-devin-search-next该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · search
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 26 处,展示前 21 条)
- 发起网络请求lib/client.js:259
pending = fetch(path, requestInit) - 写入剪贴板lib/client.js:785
function writeClipboard(value) { - 写入剪贴板lib/client.js:790
navigator.clipboard.writeText(value).then(resolve, function () { fallback() }) - 写入剪贴板lib/client.js:1215
writeClipboard(url).then(function () { - 读取本地文件lib/store.js:49
text = await readFile(file, 'utf8') - 写入本地文件lib/store.js:64
await mkdir(dirname(file), { recursive: true }) - 写入本地文件lib/store.js:67
await writeFile(temp, body, secret ? { encoding: 'utf8', mode: 0o600 } : { encoding: 'utf8' }) - 写入本地文件lib/store.js:71
await chmod(temp, 0o600) - 写入本地文件lib/store.js:76
await rename(temp, file) - 写入本地文件lib/store.js:79
await chmod(file, 0o600) - 删除本地文件lib/store.js:126
await unlink(sessionFile) - 读取本地文件lib/legacy-import.js:148
await readFile(marker, 'utf8') - 写入本地文件lib/legacy-import.js:159
await mkdir(dirname(marker), { recursive: true }) - 写入本地文件lib/legacy-import.js:160
await writeFile(marker, `${JSON.stringify({ outcome, at: new Date().toISOString() })}\n`, 'utf8') - 读取本地文件lib/legacy-import.js:179
text = await readFile(file, 'utf8') - 读取本地文件lib/core/local.js:81
const host = await realpath(cwd); - 读取本地文件lib/core/local.js:84
const root = await realpath(folder); - 读取本地文件lib/core/local.js:85
if (!contains(host, root) || !(await lstat(root)).isDirectory() || forbidden(relative(host, root))) return fail('path', 'Search folder must be inside - 读取本地文件lib/core/local.js:107
const info = await lstat(current); - 读取本地文件lib/core/local.js:110
if (await realpath(path) !== path || await realpath(this.root) !== this.root) return fail('path', 'Workspace path changed or escaped.'); - 读取本地文件lib/core/local.js:124
const now = await lstat(path);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 插件:Devin 登录 + Devin 版 web_search / code_search。零运行时依赖、零 @deepseek-ai import、无版本闸门,DSH 升级不再整行消失。
README
由 DeepSeek 最新模型翻译生成dsh-devin-search-next
DeepSeek Harness(DSH)插件:登录一次 Devin,就能在会话里使用 Devin 提供的 web_search 和只读语义 code_search。
这是 dsh-devin-search 的抗版本漂移重写版:功能对齐,但不依赖任何 DSH 包、不锁版本、客户端不碰官方内部组件。目标是「DSH 升级后它还能自己起来」。
1. 为什么重写(旧版为什么会消失)
旧版 dsh-devin-search@0.2.9 在 DSH 升级后整行插件消失,不是报错,而是没有任何输出。
根因在 DSH 的 bundle 兼容性闸门(dsh-app-boot 的 loadProfileDirectory):版本声明不满足时,该 bundle 的整个 patch 层被丢弃,只记在 skippedBundles 里、不打印任何日志。旧版把一串 @deepseek-ai/dsh- 写成精确版本白名单 (最高 0.2.1-rc.2),本机已是 0.2.1-rc.3,于是被静默摘除。
展开完整文档(README 剩余 1 节)
dsh-devin-search-next
DeepSeek Harness(DSH)插件:登录一次 Devin,就能在会话里使用 Devin 提供的 web_search 和只读语义 code_search。
这是 dsh-devin-search 的抗版本漂移重写版:功能对齐,但不依赖任何 DSH 包、不锁版本、客户端不碰官方内部组件。目标是「DSH 升级后它还能自己起来」。
1. 为什么重写(旧版为什么会消失)
旧版 dsh-devin-search@0.2.9 在 DSH 升级后整行插件消失,不是报错,而是没有任何输出。
根因在 DSH 的 bundle 兼容性闸门(dsh-app-boot 的 loadProfileDirectory):版本声明不满足时,该 bundle 的整个 patch 层被丢弃,只记在 skippedBundles 里、不打印任何日志。旧版把一串 @deepseek-ai/dsh- 写成精确版本白名单 (最高 0.2.1-rc.2),本机已是 0.2.1-rc.3,于是被静默摘除。
除版本闸门外,旧版还有三处会随版本漂移的耦合:
| 耦合点 | 后果 |
| 运行时 import { defineTool } from '@deepseek-ai/dsh-tools'、credentialKey、Schema(schemastery) | 包改名/改导出即整个插件起不来 |
| Client import { Switch } from '@deepseek-ai/dsh-client-ui-primitives' | 官方内部组件,无兼容承诺 |
| Client 依赖 ctx.configForms / ctx.uiConversation 服务 | 这两个 Client 服务在当前版本已不存在,inject 不满足 → 客户端根本不 apply |
| 往 conversation.chat.node 塞自定义 key | 该 slot 的 key 域是固定枚举,非法 key 被拒绝 |
新版对应的四条硬规则:
1. 零 DSH 运行时 import:Host 只用 Node 内建模块,Client 只 require('react'); dependencies / peerDependencies 全空,不声明 engines.dsh,因此不会被版本闸门摘除。
2. 不导出 Config:DSH 要求 Config 是真正的 Schemastery 实例(身份校验),那是运行时依赖;两个开关改存插件自己的设置文件。
3. 能力逐个探测、逐个降级:服务拿不到就少一个功能,绝不从 apply 里抛出。
4. 只依赖语义稳定的扩展点:ctx.get(name) 查服务、ctx.inject([...]) 等就绪、 ctx.slots.inject/register 占位;不用 configForms、uiConversation、官方内部组件。
2. 安装
从 GitHub 安装(推荐):
插件 → 添加插件 → 输入 github:gongstudent/dsh-devin-search-next
或命令行:
指定 profile,直接装 GitHub 仓库
dsh plugin --profile desktop add "github:gongstudent/dsh-devin-search-next"
本地开发:装当前目录(link 安装,改代码后重启生效)
dsh plugin --profile desktop add "$(pwd)"
也可以在插件页选择「本地目录」并指向本仓库的克隆路径。
装好后重启应用(新版 bundle 需要新进程加载 JS 模块)。确认三件事:
1. 插件页出现 Devin 搜索,标题/描述/图标来自 locale/.json 与 icon.svg;
2. 设置 → 插件 → Devin 搜索 里能看到登录状态与两个开关;
3. 聊天里输入 /devin-status 有返回。
本包与旧包 dsh-devin-search 不要同时启用:两者都注册 id 为 devin 的搜索 provider,后注册者会被拒绝。先停用旧包再启用本包。
3. 使用
登录
| 命令 | 作用 |
| /devin-login | 生成授权链接;在浏览器登录后把一次性授权码粘贴到聊天里的登录卡片(不要贴进对话正文) |
| /devin-login local | 同一台机器:监听 127.0.0.1:59653 自动接收回调 |
| /devin-status | 查看登录状态与到期时间(脱敏) |
| /devin-logout | 取消在途登录并删除本地会话 |
| /devin-cancel | 只取消在途登录 |
凭据保存在 $DSH_HOME/devin-search/session.json(POSIX 0600,原子写入), 不经过 DSH 的 credentials 服务,也不写入任何会话日志或模型上下文。
从旧版升级时会一次性导入旧插件留在 $DSH_HOME/.credentials.yaml 里的 devin-search/session 授权:只读旧文件、只接受未过期且格式正确的记录,并写 $DSH_HOME/devin-search/legacy-import.json 作为一次性标记——所以 /devin-logout 之后重启不会被旧记录重新登录。导入成功通常就不必重新登录;失败则照常走一次 /devin-login。
两个开关
| 开关 | 关闭后的效果 |
| web_search | web_search 被 guard 拒绝并返回可操作提示;Devin provider 仍在注册表里 |
| code_search | code_search 工具从注册表移除(模型看不到,省 token) |
改法三选一:设置页开关;/devin-settings web off、/devin-settings code off;删除 $DSH_HOME/devin-search/settings.json 回落到默认开。
优先级:设置文件 > 内置默认(均为开)。设置文件是运行期自己写的,所以重启后保留。
4. 结构
lib/index.js apply():装配下面四块;任何一块失败只告警 lib/session.js Devin 会话状态机(PKCE 登录、后台兑换、取消/登出/吊销) lib/store.js 自有凭据与设置存储(原子写、0600) lib/settings.js 两个开关 + 订阅 lib/legacy-import.js 一次性导入旧插件的 DSH 凭据记录(带 legacy-import.json 标记) lib/adapter-commands.js /devin-* 命令 lib/adapter-web.js web_search provider(结构体 {id, available, search}) lib/adapter-tools.js code_search 工具(原生 JSON Schema)+ web_search guard lib/adapter-api.js /api/devin/* 浏览器通路(connection.fetch.register) lib/core/.js 纯逻辑:oauth/protobuf/protocol/completion/code-search/local/gitignore lib/client.js 浏览器半边(__ModuleLoader__ 懒工厂,0 个 @deepseek-ai 依赖)
lib/core/.js 是从 dsh-devin-search 的 TypeScript 实现机械转换来的(node:module 的
stripTypeScriptTypes(..., { mode: 'transform' }),逻辑逐字一致,已随仓库提交、不需要重新生成);
唯一的替换是把 npm ignore 包换成自带的 lib/core/gitignore.js。
5. 兼容性
| 项目 | 要求 |
| Node | ≥ 20(AbortSignal.any、Response、fetch) |
| DSH | 0.2.x 系;设计上不感知具体版本。服务缺失/改名时按下列顺序降级 |
| 运行时依赖 | 无 |
| 浏览器半边 | react + react/jsx-runtime(来自 DSH 模块表),其余全自写 |
降级顺序:
| 缺少的东西 | 结果 |
| connection 服务 | 卡片只显示静态状态;命令、工具、provider 正常 |
| tools 服务 | 没有 code_search 与 guard,其余正常 |
| web 服务 | 不注册 provider,web_search 回到内置实现 |
| commands 服务 | 只剩工具与界面,无 /devin- |
| 任何 slot key 不存在 | 该卡片不出现,其他卡片不受影响 |
6. 数据边界
code_search 会把检索问题与经筛选的代码片段发送到 Devin/Windsurf 云端;请确保对相应代码资产有上传授权。本地只读沙箱规则(照旧):工作区为绝对根边界、不跟随符号链接、执行 .gitignore、硬性跳过 .git/node_modules/.env/密钥类文件、拒绝非 UTF-8 与二进制、单次检索 6 轮命令 / 90 秒 / 输出 192 KiB 上限,且只能执行结构化的只读命令。
7. 自检
清单/patch/locale/图标/导入图/语法
node scripts/check.mjs
全部单测(离线,43 项:core 移植等价性 + Host 适配 + 浏览器半边)
node --test
CI 在 Node 20 / 22 / 24 上跑同样两条命令。
8. 排错
| 现象 | 检查 |
| 插件页没有这一行 | profile 的 package.json bundles 是否包含它;是否被版本闸门摘除(本包无版本声明,正常不会) |
| 设置页没有 Devin 搜索 | 浏览器控制台看 [devin-search] 警告;确认 slot settings.section 仍存在 |
| 登录卡片不刷新 | /api/devin/* 路由没挂上(需要 connection 服务);用 /devin-status 兜底 |
| web_search 报 WEB_PROVIDER_AMBIGUOUS | 补丁里 web.searchProvider 未生效(行被改名),在用户 patch 层自行指定 devin |
| code_search 报路径错误 | fs.processPathFromHostPath 缺失时回退恒等映射;确认 search_folder_absolute_uri 在工作区内 |
9. License
MIT,见 LICENSE 与 NOTICE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
gongstudent/dsh-devin-search-next
登录 Devin 后即可在会话中联网搜索与语义检索代码
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,032已汉化DSH
72.1
智能体记忆系统MemTensor/MemOS
MemOS 2.0 Stardust星尘
★ 12,195已汉化DSH
71.2
跨代理记忆库zilliztech/memsearch
跨平台语义记忆,专为 AI 编程智能体打造。
★ 2,799已汉化DSH
70.9
技能语料库EverMind-AI/SkillCorpus
SkillCorpus 能给你什么
★ 694已汉化DSH
69.7
代码图谱记忆syncable-dev/memtrace-public
你的智能体值得拥有结构化记忆。
★ 509已汉化MCP
67.9
AnySearch 搜索插件anysearch-team/anysearch-dsh
AnySearch 网页搜索服务商,为 DeepSeek Harness(DSH)提供高级搜索工具
★ 457已汉化DSH
66.6