让智能体通过命令行驱动本地视频工作站
32.8/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add TanPowasd/Vmotion-DSH该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(node_version · 2026/10/29) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 12 处,展示前 12 条)
- 读取本地文件lib/skill.js:41
const { meta } = parseSkillFile(readFileSync(SKILL_FILE, 'utf8')) - 读取本地文件lib/skill.js:66
const text = await readFile(SKILL_FILE, { encoding: 'utf8', signal: options.signal }) - 读取本地文件lib/tools.js:177
try { info = await stat(dir) } catch { throw new Error(`project directory not found: ${dir}`) } - 读取本地文件lib/tools.js:179
if (!existsSync(join(dir, 'project.vmotion.json'))) throw new Error(`not a Vmotion project (no project.vmotion.json): ${dir}. Create one by writing th - 写入本地文件lib/tools.js:230
await mkdir(isDir ? path : dirname(path), { recursive: true }) - 读取本地文件lib/tools.js:266
else checks.push({ name, ok: existsSync(path), detail: existsSync(path) ? path : `missing: ${path}` }) - 读取本地文件lib/tools.js:273
checks.push({ name: 'VMOTION_RUNTIME', ok: existsSync(font), detail: existsSync(font) ? `${runtime} (CJK fonts found)` : `${runtime} has no fonts/Noto - 写入本地文件lib/tools.js:407
await mkdir(/ (png|jpe?g|webp)$/i.test(out) ? dirname(out) : out, { recursive: true }) - 读取本地文件lib/run-cli.js:85
if (isAbsolute(name) || name.includes('/') || name.includes('\\')) return existsSync(name) ? name : undefined - 读取本地文件lib/run-cli.js:91
try { if (statSync(candidate).isFile()) return candidate } catch { } - 执行外部命令来自配置/变量lib/run-cli.js:130
const child = spawn(plan.file, plan.argv, { - 执行外部命令固定命令lib/run-cli.js:161
if (process.platform === 'win32') spawnSync('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-tools@deepseek-ai/dsh-skill给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
开源 Vmotion。你在界面里直接编辑,外部 AI 通过文件、命令行或 MCP 操作同一个本地项目。
README
由 DeepSeek 最新模型翻译生成vmotion-dsh
让 DeepSeek Harness(DSH) 的智能体驱动本地视频工作站 Vmotion 的插件包(DSH 术语叫 bundle)。
- 主要能力 1:Vmotion 智能体技能。 把 Vmotion 仓库里的 skills/vmotion(SKILL.md + references + starter 示例)通过 DSH 的技能机制(ctx.skills.registerProvider,bundled 来源)交给模型。技能的核心规则不变:先改工程文件,其次用命令行,MCP 最后。
- 主要能力 2:8 个包装 vmotion 命令行的工具。 固定 argv(POSIX 下不经 shell)、参数 schema 校验、可配置超时、取消时连同子进程(native core / FFmpeg)整组终止、命令行路径可配置。
- 不做的事: 工具不编辑工程文件(编辑交给智能体自带的文件工具);默认不接 MCP(见文末可选做法)。
目标版本
| 项目 | 值 |
| 依据的 DSH 源码 | deepseek-ai/deepseek-harness master @ 22ddee3792402c3e70ec5f86a63c3e3e895a2f60(2026-10-23,“Merge pull request #7075”)。
展开完整文档(README 剩余 1 节)
vmotion-dsh
让 DeepSeek Harness(DSH) 的智能体驱动本地视频工作站 Vmotion 的插件包(DSH 术语叫 bundle)。
- 主要能力 1:Vmotion 智能体技能。 把 Vmotion 仓库里的 skills/vmotion(SKILL.md + references + starter 示例)通过 DSH 的技能机制(ctx.skills.registerProvider,bundled 来源)交给模型。技能的核心规则不变:先改工程文件,其次用命令行,MCP 最后。
- 主要能力 2:8 个包装 vmotion 命令行的工具。 固定 argv(POSIX 下不经 shell)、参数 schema 校验、可配置超时、取消时连同子进程(native core / FFmpeg)整组终止、命令行路径可配置。
- 不做的事: 工具不编辑工程文件(编辑交给智能体自带的文件工具);默认不接 MCP(见文末可选做法)。
目标版本
| 项目 | 值 |
| 依据的 DSH 源码 | deepseek-ai/deepseek-harness master @ 22ddee3792402c3e70ec5f86a63c3e3e895a2f60(2026-10-23,“Merge pull request #7075”)。格式依据:docs/user/develop/basic/{index,tool,config,publish}.md、docs/cookbook/adding-a-tool.md、docs/subsystems/skills.md、packages/experimental/skill-badge、packages/experimental/badge-skill-bundle、packages/mcp/mcp-client/README.md |
| 实测运行的 DSH | npm @deepseek-ai/dsh@0.2.1-rc.3(Node 24.22.1,Linux arm64)。注意:master 的 package 版本号也是 0.2.1-rc.3,但比 dsh-v0.2.1-rc.3 标签多约 1400 个提交(工具执行器被拆成独立插件等);插件作者面(defineTool、ctx.tools.register、ctx.skills.registerProvider、bundle/profile 清单)在两者之间一致 |
| engines.dsh | >=0.2.1-rc.3 <0.3.0 |
| Vmotion | 仓库 origin/main @ 41906d1(技能内容来源;命令行用该提交本地构建实测) |
文件结构
vmotion-dsh/
├── package.json # "dsh": { "bundle": { "patch": "./cordis.patch.yml" } },engines.dsh,peerDependencies ├── cordis.patch.yml # 插入两行:vmotion-skill(vmotion-dsh/skill)与 vmotion-tools(vmotion-dsh/tools) ├── index.js # 程序化入口,重新导出两个插件 ├── lib/skill.js # 技能 provider(inject: ['skills']) ├── lib/tools.js # 8 个工具 + Config(inject: ['tools'],可选使用 workingDirectory) ├── lib/run-cli.js # 子进程:超时、取消、进程组终止、输出上限、环境变量脱敏 ├── assets/skills/vmotion # 改编自 Vmotion skills/vmotion(Apache-2.0,见 NOTICE) ├── examples/mcp.patch.example.yml # 可选:用 dsh-mcp-client 挂 Vmotion MCP(非主路径) ├── scripts/boot-probe.mjs # 无 LLM 的真实启动探针 ├── tests/ # node:test;unit(假 CLI)+ integration(真 CLI,需 VMOTION_CLI) ├── test-results/ # 本沙箱的实测证据(测试日志、启动探针、dump-config 摘录) └── VERIFICATION.md # 验证记录、发现的问题、未验证项
两个插件分成两行,是为了缺少某个服务(例如某个组合没有 skills)时另一个仍能加载。纯 JavaScript(带 JSDoc 类型)、无构建步骤,所以从 git 安装也不需要 prepare/allowBuilds。
安装
前提:Node ≥ 24.9、pnpm 在 PATH 上、已装 dsh(npm i -g @deepseek-ai/dsh)。
1. 装进一个 profile(第一次会以 @deepseek-ai/dsh-base 初始化该 profile)
dsh plugin --profile <profile> add link:/绝对路径/vmotion-dsh
pnpm 会警告“linked 包的 peerDependencies 不从目标 node_modules 解析”——这是预期的:
DSH 的 profile 解析会用运行中安装自带的 @deepseek-ai/* 副本满足 peer。
2. 告诉工具 vmotion CLI 在哪里:编辑 $DSH_HOME/profiles/<profile>/cordis.patch.yml
- id: vmotion-tools
config:
任选其一:
command: [vmotion] # 全局 bin
command: [node, /opt/vmotion/dist/cli/index.mjs] # 源码构建
command: ['C:\Vmotion\vmotion.cmd'] # Windows 便携版(未在本仓库验证)yaml
env:
VMOTION_RUNTIME: /opt/vmotion/runtime # 源码运行时中文字体目录(含 fonts/NotoSansSC-.otf)
VMOTION_NATIVE / VMOTION_FFMPEG / VMOTION_FFPROBE 按需
注意:patch 会整体替换该行的 config,要把需要的键都写全。
sh
3. 不启动就检查组合结果与配置 schema(官方检查手段)
dsh --profile <profile> --dump-config # 应出现 "# == vmotion-dsh" 层
dsh --profile <profile> --dump-config-schema # x-cordis.complete 应为 true;vmotion-tools 为 status "schema"
4. 正常使用
dsh --profile <profile> # 或用 web / tui 等 profile 安装:dsh plugin --profile web add link:...
卸载:dsh plugin --profile <profile> remove vmotion-dsh(同时移除依赖与层)。
master 上没有 dsh plugin check 子命令(dsh plugin 把参数原样转给 pnpm);上面的 --dump-config / --dump-config-schema 是官方文档给出的不启动检查方式。
工具列表
所有工具:project/output 可写相对路径(相对会话工作目录;无会话时相对进程 cwd),返回绝对路径。返回值是统一的规范 JSON:{ ok, exitCode, argv, cwd, durationMs, result, stderr?, outputTruncated? },result 为 CLI 输出的 JSON。
| 工具 | 运行的 CLI | 说明 |
| vmotion_doctor | vmotion --version + 环境探测 | CLI 是否可启动、版本、VMOTION_NATIVE/VMOTION_RUNTIME 字体/FFmpeg 是否找得到。CLI 不存在时返回 ok:false(不报错),便于排障 |
| vmotion_context | vmotion context | 场景/序列 id、时长、组件、文件 sha256、诊断;可选 scene/sequence/offset/limit |
| vmotion_validate | vmotion validate --json | 退出码 2(工程无效)是正常结果:ok:false、result.diagnostics |
| vmotion_frame | vmotion frame | 渲染单帧 PNG;width/height 必须成对;默认输出 <project>/exports/dsh/frame-<n>.png |
| vmotion_sample | vmotion sample | 1–12 帧拼成一张联系表 PNG |
| vmotion_image_export | vmotion image export | 静态图工程导出 png/jpeg/webp,scale/quality/transparent/trim |
| vmotion_render | vmotion render | 导出 mp4/png 序列/wav;start/end/width/height/encoder/codec/resume;退出码 3(任务未完成)是正常结果 ok:false |
| vmotion_encoders | vmotion encoders | 实测哪些 H.264/HEVC/AV1 编码器可用;CLI 需要加载一个工程(读取其导出设置),所以要传 project |
错误语义(遵循 DSH execute() 约定):参数非法、工程目录不存在/不是 Vmotion 工程、CLI 找不到、CLI 退出码 1(带 {"error":{code,message}})、超时、取消 → 工具错误(isError);validate 的 2、render 的 3 → 成功结果里的 ok:false。
配置(vmotion-tools 行)
| 键 | 默认 | 说明 |
| command | ["vmotion"] | 启动 CLI 的 argv 前缀(至少 1 项) |
| env | {} | 额外环境变量,合并在“脱敏后的环境”之上 |
| timeoutMs | 180000 | doctor/context/validate/frame/sample 的期限 |
| renderTimeoutMs | 3600000 | render、image export、encoders 的期限 |
| maxOutputBytes | 8 MiB | 每个输出流的捕获上限 |
| maxResultChars | 20000 | 给模型看的 JSON 文本上限(超出截断并提示) |
| killGraceMs | 3000 | 取消/超时时 SIGTERM → SIGKILL 的宽限 |
| disabledTools | [] | 不注册的工具名 |
环境变量脱敏:与 dsh-mcp-client stdio 相同规则,名字匹配 /KEY|PASSWORD|SECRET|TOKEN/i 的环境变量和所有 DSH_ 不会传给 vmotion,除非在 env 里显式配置。
vmotion-skill 行没有配置项(导出了空的 Config,让配置工具显示 schema 而不是“未知字段”)。
测试 sh
单元测试(无需 Vmotion):用已安装 DSH 的真实 tools/skills 注册表 + 假 CLI
npm test
加上真实 CLI 集成测试(启动 starter 工程,渲染帧/联系表/短 MP4/静态图,取消渲染)
VMOTION_CLI='["node","/path/vmotion/dist/cli/index.mjs"]' \
VMOTION_NATIVE=/path/vmotion-core VMOTION_RUNTIME=/path/runtime npm test
测试通过 tests/support/dsh-hooks.mjs 把 @deepseek-ai/* 解析到已安装的 DSH(模拟 DSH 给 linked bundle 提供 peer 的方式);安装位置从 PATH 上的 dsh 推出,或用 DSH_INSTALL_DIR 指定。整个测试不调用任何模型、不用任何 API key。
无 LLM 的真实启动探针: sh
boot-probe.patch.yml 里写绝对路径:
- insert:
- id: vmotion-boot-probe
name: '/绝对路径/vmotion-dsh/scripts/boot-probe.mjs'
VMOTION_PROBE_PROJECT=/path/to/project VMOTION_PROBE_OUT=/tmp/probe.json \
dsh --profile <profile> --patch ./boot-probe.patch.yml
探针在真实启动的组合里列出技能与工具,经真实工具管线运行 vmotion_doctor、vmotion_validate、vmotion_frame,写出 JSON 后退出。
可选:通过 MCP 挂 Vmotion(不是主路径)
只有文件编辑 + CLI 做不到时才用(例如需要连到正在运行的 Vmotion 应用的实时状态)。见 examples/mcp.patch.example.yml:用 DSH 官方的 @deepseek-ai/dsh-mcp-client,transport: stdio,command/args 指向 vmotion mcp --project <dir> --tools compact。这会给模型增加一批 MCP 工具与较大的上下文,技能里仍要求 MCP 最后使用。
已知问题(Linux,Vmotion 41906d1): vmotion mcp 退出后会留下 /tmp/vmotion-<hash>.sock,而 dsh-mcp-client 先起探测进程再起服务进程,服务进程因此 EADDRINUSE 失败。详见 VERIFICATION.md。示例配置能通过 dsh-mcp-client 的 Config 校验。
未验证 / 不确定的点
见 VERIFICATION.md(含:Windows 未验证、master 源码运行时未实跑、无真实模型回合、MCP 已知问题、几个格式上的不确定点)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
TanPowasd/Vmotion-DSH
让智能体通过命令行驱动本地视频工作站
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目