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

VulcanCode 套件 OpenVulcan/dsh-vulcancode

DeepSeek Harness
OpenVulcan5 天前有提交已提供中文文档扫描:含敏感能力

为对话加上自动审批、长期记忆与界面主题

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add OpenVulcan/dsh-vulcancode
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 5 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 67 处,展示前 60 条)
  • 发起网络请求
    packages/dsh-decision-guard/src/index.ts:435
    result = await approval.request({
  • 读取本地文件
    packages/dsh-vulcan-answers/src/prompt.ts:31
    const read = (file: string) => readFileSync(new URL(`../assets/prompts/${file}`, import.meta.url), 'utf8').trim()
  • 执行外部命令来自配置/变量
    packages/dsh-vulcan-luaskills/src/engine.ts:37
    this.worker = fork(fileURLToPath(new URL('./worker.js', import.meta.url)), [pathToFileURL(sdkEntry).href], {
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/engine.ts:98
    return this.request('installRuntime', params)
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/engine.ts:102
    return this.request('start', params)
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/engine.ts:106
    return this.request('entries')
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/engine.ts:110
    return this.request('help')
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/engine.ts:114
    return this.request('helpDetail', { skillId, ...flow === undefined ? {} : { flow } })
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/engine.ts:118
    return this.request('call', { name, args, context })
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/hub.ts:79
    const response = await fetch(url, { signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), headers: { accept: 'application/json' } })
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/runtime.ts:198
    const marker = JSON.parse(readFileSync(this.marker, 'utf8')) as Partial<Marker>
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/runtime.ts:200
    if (!existsSync(this.sdkEntry()) || !existsSync(this.runtimeRoot)) return undefined
  • 删除本地文件
    packages/dsh-vulcan-luaskills/src/runtime.ts:238
    await rm(this.marker, { force: true })
  • 删除本地文件递归
    packages/dsh-vulcan-luaskills/src/runtime.ts:240
    await rm(folder, { recursive: true, force: true, maxRetries: 3 })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/runtime.ts:276
    await writeFile(this.marker, `${JSON.stringify(marker, null, 2)}\n`, 'utf8')
  • 删除本地文件递归
    packages/dsh-vulcan-luaskills/src/runtime.ts:277
    await rm(this.scratch, { recursive: true, force: true })
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/runtime.ts:297
    for (const name of await readdir(tmpdir())) {
  • 删除本地文件递归
    packages/dsh-vulcan-luaskills/src/runtime.ts:299
    await rm(path.join(tmpdir(), name), { recursive: true, force: true, maxRetries: 3 })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:37
    mkdirSync(path.dirname(path.join(source, 'package', name)), { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:38
    writeFileSync(path.join(source, 'package', name), text)
  • 执行外部命令固定命令
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:41
    execFileSync('tar', ['-czf', '../pkg.tgz', 'package'], { cwd: source })
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:42
    return readFileSync(path.join(folder, 'pkg.tgz'))
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:62
    mkdirSync(path.dirname(stale), { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:63
    writeFileSync(stale, '')
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:72
    assert.equal(readFileSync(path.join(packageDir(nodeModules, '@x/y'), 'lib', 'index.js'), 'utf8'), 'export {}')
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:73
    assert.equal(existsSync(stale), false)
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.test.ts:93
    assert.equal(existsSync(packageDir(nodeModules, 'p')), false)
  • 发起网络请求
    packages/dsh-vulcan-luaskills/src/sdk-install.ts:32
    const response = await fetch(url, { signal })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.ts:82
    await mkdir(scratch, { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.ts:87
    await writeFile(path.join(scratch, file), bytes)
  • 删除本地文件递归
    packages/dsh-vulcan-luaskills/src/sdk-install.ts:96
    await rm(target, { recursive: true, force: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/sdk-install.ts:97
    await mkdir(target, { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/settings.test.ts:45
    writeFileSync(file, '{"vmPool": 1}')
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/settings.test.ts:49
    assert.equal(readFileSync(file, 'utf8'), '{"vmPool": 1}')
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/settings.ts:157
    raw = readFileSync(file, 'utf8')
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/settings.ts:171
    mkdirSync(path.dirname(file), { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/settings.ts:173
    writeFileSync(temporary, `${JSON.stringify(settings, null, 2)}\n`, 'utf8')
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/settings.ts:174
    renameSync(temporary, file)
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/skills.test.ts:26
    mkdirSync(path.join(root, folder, id), { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/skills.test.ts:27
    writeFileSync(path.join(root, folder, id, 'skill.yaml'), yaml)
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/skills.test.ts:31
    mkdirSync(path.join(root, 'user_skills', 'not-a-skill'), { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/skills.test.ts:32
    mkdirSync(path.join(root, 'state', 'installs'), { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/skills.test.ts:33
    mkdirSync(path.join(root, 'state', 'skills', 'disabled'), { recursive: true })
  • 写入本地文件
    packages/dsh-vulcan-luaskills/src/skills.test.ts:34
    writeFileSync(path.join(root, 'state', 'installs', 'vulcan-codekit.yaml'), 'source:\n source_type: github\n locator: LuaSkills/vulcan-codekit\n')
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/skills.ts:53
    if (!existsSync(folder)) continue
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/skills.ts:54
    for (const entry of readdirSync(folder, { withFileTypes: true })) {
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/skills.ts:57
    if (!existsSync(manifest)) continue
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/skills.ts:58
    const fields = topLevelScalars(readFileSync(manifest, 'utf8'))
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/skills.ts:60
    const source = existsSync(record) ? installSource(readFileSync(record, 'utf8')) : undefined
  • 读取本地文件
    packages/dsh-vulcan-luaskills/src/skills.ts:60
    const source = existsSync(record) ? installSource(readFileSync(record, 'utf8')) : undefined
  • 读取本地文件
    packages/dsh-vulcan-memory/src/index.ts:56
    const guide = readFileSync(path.join(ASSETS, 'markdown-memory-guide.md'), 'utf8')
  • 读取本地文件
    packages/dsh-vulcan-memory/src/index.ts:57
    const skill = parseSkill(readFileSync(path.join(ASSETS, SKILL_NAME, 'SKILL.md'), 'utf8'))
  • 读取本地文件
    packages/dsh-vulcan-memory/src/inject.test.ts:59
    const skill = parseSkill(readFileSync(path.join(assets, 'memory-curator', 'SKILL.md'), 'utf8'))
  • 写入本地文件
    packages/dsh-vulcan-memory/src/page.test.ts:65
    mkdirSync(current, { recursive: true })
  • 读取本地文件
    packages/dsh-vulcan-memory/src/settings.ts:41
    text = readFileSync(file, 'utf8')
  • 读取本地文件
    packages/dsh-vulcan-style/src/browser.test.support.ts:18
    const source = readFileSync(new URL(`../build/client/${file}.js`, import.meta.url), 'utf8')
  • 读取本地文件
    packages/dsh-vulcan-style/src/index.test.ts:9
    const read = (path: string): string => readFileSync(new URL(path, import.meta.url), 'utf8')
  • 发起网络请求
    packages/openvulcan-account/src/account.ts:363
    const response = await fetch(url, {
  • 发起网络请求
    packages/vulcan-decision/src/download.ts:73
    const response = await fetch(url, {
  • 执行外部命令来自配置/变量
    packages/vulcan-decision/src/hardware.ts:230
    const result = spawnSync(command, args, { encoding: 'utf8', timeout: PROBE_TIMEOUT_MS, windowsHide: true, stdio: ['ignore', 'pipe', 'ignore'] })
扫描于 2026/11/4(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-vulcancode 把 VulcanCode 的体验带进 DeepSeek Harness(dsh) 关于项目 dsh-vulcancode 是 DeepSeek Harness(dsh)的一组社区插件,安装一个包即可得到 VulcanCode 的几项核心能力。 适配 dsh 0.2.1-rc.2 及以上、0.3.0 以下: dsh plugin add @openvulcan/dsh-vulcancode 本项目与 DeepSeek 无关联,dsh 是 DeepSeek 的产品。 | 组成 | 作用 | | OpenVulcan 账号 | 登录一次,套件内各插件共用;凭据保存在 dsh 的凭据存储中。设置位于「设置 › OpenVulcan 账号」 | | 自动审批(Vulcan Decision) | 每次工具调用前由专用判定模型判断放行、需确认或拦下;未放行的可交复核 LLM,再询问你或拒绝 | | 交互式回答 | 模型可以用 VulcanCode 的 ui-* 组件作答,在对话中渲染;启用后默认开启,可按会话关闭 | | LuaSkills | 技能以工具形式提供给 AI,默认技能 codekit(代码导航);运行库约 190 MB,在「设置 › LuaSkills」中按需安装,装好即自动接入。
展开完整文档(README 剩余 1 节)
dsh-vulcancode

把 VulcanCode 的体验带进 DeepSeek Harness(dsh)

关于项目

dsh-vulcancode 是 DeepSeek Harness(dsh)的一组社区插件,安装一个包即可得到 VulcanCode 的几项核心能力。
适配 dsh 0.2.1-rc.2 及以上、0.3.0 以下:

dsh plugin add @openvulcan/dsh-vulcancode

本项目与 DeepSeek 无关联,dsh 是 DeepSeek 的产品。

| 组成 | 作用 |
| OpenVulcan 账号 | 登录一次,套件内各插件共用;凭据保存在 dsh 的凭据存储中。设置位于「设置 › OpenVulcan 账号」 |
| 自动审批(Vulcan Decision) | 每次工具调用前由专用判定模型判断放行、需确认或拦下;未放行的可交复核 LLM,再询问你或拒绝 |
| 交互式回答 | 模型可以用 VulcanCode 的 ui-* 组件作答,在对话中渲染;启用后默认开启,可按会话关闭 |
| LuaSkills | 技能以工具形式提供给 AI,默认技能 codekit(代码导航);运行库约 190 MB,在「设置 › LuaSkills」中按需安装,装好即自动接入。侧栏的 LuaSkills 页面管理已装技能并连接 LuaSkills Hub |
| Vulcan 界面风格 | VulcanCode 的主题、直角与配色 |
| 长期记忆 | VulcanCode 的 Markdown 长期记忆:AI 用 memory_outline、memory_search、memory_write 维护用户画像、空间记忆与项目记忆,每次会话开始时注入一份快照。侧栏的「长期记忆」页面可编辑、调整注入预算,并导入导出 |

我们承诺:云端命令判定模型永久免费提供。(2026 年 10 月 27 日)

使用

1. 安装后重启 dsh,打开「设置 › OpenVulcan 账号」,选择国际站或中国站登录。
2. 打开「设置 › 自动审批」,在权限选择器中选择“自动审查”,或把接入方式改为“独立开关”。不登录也可以改用本机模型判定。
3. 需要 LuaSkills 时,打开「设置 › LuaSkills」点击安装运行库,进度显示在页面上,完成后技能工具自动出现。
4. 交互式回答、界面风格和长期记忆安装即生效,可在各自的设置或侧栏页面中调整。

自动审批的边界

- 它防的是 AI 执行命令时的失误,不防 AI 刻意绕过(例如先写一个脚本再运行它)。
- 任何错误都不会被当作放行;无人值守的会话从不询问你,复核未放行即拒绝。
- 自动审批只降低事故概率,不保证拒绝一切风险;请同时使用沙箱、Git 与备份。

包结构

| 包 | 说明 |
| @openvulcan/dsh-vulcancode | 套件本体,dsh 安装的唯一入口,其余包都打包在内 |
| @openvulcan/dsh-vulcan-account | OpenVulcan 账号插件,向其他插件提供 openvulcanAccount 服务 |
| @openvulcan/dsh-decision-guard | 自动审批插件 |
| @openvulcan/dsh-vulcan-answers | 交互式回答插件 |
| @openvulcan/dsh-vulcan-luaskills | LuaSkills 插件:运行库安装、技能工具、VM 设置与 Hub |
| @openvulcan/dsh-vulcan-style | 界面风格插件 |
| @openvulcan/dsh-vulcan-memory | 长期记忆插件:记忆工具、会话快照注入、memory-curator 技能与记忆页面 |
| @openvulcan/vulcan-decision | 判定引擎与命令行 vulcan-decision |
| @openvulcan/openvulcan-account | OpenVulcan 账号库:登录、刷新与凭据存储接口 |

开发

pnpm install
pnpm run build
pnpm run test
pnpm run pack:dsh # 生成 dist/openvulcan-dsh-vulcancode-<版本>.tgz

本地安装打包结果:dsh plugin add ./dist/openvulcan-dsh-vulcancode-<版本>.tgz。

致谢

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

许可

MIT
预览分享卡片长什么样 ↓OpenVulcan/dsh-vulcancode
分享 · DeepSeek Harness Hub
OpenVulcan/dsh-vulcancode

为对话加上自动审批、长期记忆与界面主题

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部