前言¶
在 DeepSeek Harness(DSH)里,模型常常需要跑一段 Python:算数、读表、改 Office 文档、把 stdout 当结果回传。若只靠 Shell 拼命令,解释器版本、依赖和编码容易和宿主不一致;若每次让用户本机装一套环境,又会拖慢会话启动。
下面介绍社区插件 dsh-plugin-python(维护者 jcy0chenyuan0):向 DSH 注册名为 python 的工具,用 Harness 自带的 Python 运行时执行代码,README 写明「无需安装任何东西」指的是模型侧不必再单独装解释器——首次部署插件目录时仍需按文档跑安装脚本并 install_bundle。
这是什么¶
dsh-plugin-python 是可安装的 DSH profile bundle(package.json 中 dsh.bundle 声明 patch 层)。Host 侧入口为 lib/python.js,在 Cordis 里注册模型面向的 python 工具。
分类在 SkillHub 目录中为「模型推理」;仓库简介为:DSH plugin: a model-facing python tool using the Harness bundled Python runtime.
捆绑运行时(资料记载):Python 3.12.14,并附带 numpy 2.3.5、pandas 3.0.1、python-docx、python-pptx、openpyxl、Pillow、lxml、XlsxWriter 等,便于在会话里直接做数据处理与文档类任务。
核心功能¶
README 用表格归纳了工具行为,下列能力均在资料中标注为已实现:
| 能力 | 说明 |
|---|---|
| 执行代码并返回 stdout | 正常结束带 [exit code: 0] |
| 中文 / UTF-8 | 强制 PYTHONUTF8=1 与 PYTHONIOENCODING=utf-8(Windows 捆绑解释器默认 locale 为 gbk,不设环境变量时中文易乱码) |
| 非零退出与 stderr | 失败时 [exit code: 1] 并分离 traceback |
args / stdin |
对应 sys.argv[1:]、sys.stdin |
workdir |
相对路径按会话工作区解析;越界 ../ 会被拒绝 |
files 多文件 |
可写辅助模块与数据,支持 import helpers、Path(__file__).parent |
timeoutMs |
超时终止,示例文案 [timed out after 1500 ms] |
| 临时目录 | 异常路径也会清理,不泄漏 |
| 路径拦截 | files / workdir 中的 ../ 越界会被拒绝 |
设计侧要点(摘自 README):插件模块零宿主 npm 依赖(仅用 Node 内置模块),直接向 ctx.tools.register 传原始 JSON Schema 定义;每次调用走 ctx.sandboxPolicy.resolve,非 danger-full-access 时用沙箱 confine 再 spawn,无沙箱提供者时 fail closed。
离线测试脚本 .tooling/test-python-plugin.mjs 对打桩 ctx 与真实子进程共 9/9 项通过;线上验证记录中多文件调用曾返回 [exit code: 0] 及预期 stdout。
安装与启用¶
1、生成 patch 配置¶
首次在本插件目录执行安装脚本(按平台二选一,脚本会根据当前目录生成 cordis.patch.yml,已 .gitignore,不写死盘符):
powershell -ExecutionPolicy Bypass -File .\install.ps1
macOS / Linux:
node install.mjs
仅检查环境、不自动安装时(Windows):
powershell -ExecutionPolicy Bypass -File .\install.ps1 -CheckOnly
安装脚本默认静默补全缺失环境;插件加载时还会在后台跑 bootstrap.ps1 -AutoInstall -Quiet(6 小时内不重复),不阻塞 DSH 启动——资料提示首次装完若工具不可用,可重试一次。
Python 来源优先级(资料原文):优先 DSH 捆绑运行时(dsh-runtimes\*\dependencies\python\python.exe);没有则 Windows 上可 winget install Python.Python.3.12 --scope user。也可设环境变量 DSH_PYTHON 或配置项 pythonPath 指向 Python 3.11+。关闭自动安装:patch 的 config 里 autoInstall: false,或 DSH_BOOTSTRAP=0。
2、作为 bundle 装入 profile¶
本包需在 GUI「设置 → 插件」中可见、可整体启停,安装命令为:
plugin_manager install_bundle file:<本目录的绝对路径>
装完后 profile 的 package.json 会出现 dsh.profile.bundles 与 dependencies 中的 dsh-plugin-python 条目。卸载:GUI 插件页移除,或 plugin_manager remove_bundle dsh-plugin-python。
机制说明(README):pnpm 会把包复制到 <profile>/node_modules/dsh-plugin-python,而 cordis.patch.yml 挂载的是工作区绝对路径的 lib/python.js——改插件 JS 一般重启 DSH 即可;若改了 patch 挂载参数,需重新 install_bundle。改代码后 ESM 按 URL 缓存,运行中的 fiber 可能仍用旧实现;资料给出的热替换做法是换新的 loader 条目 id 并停用旧 id(现用 id 为 plugin-python-4)。
工具参数与配置¶
调用参数¶
| 参数 | 必填 | 说明 |
|---|---|---|
code |
是 | 要执行的 Python 源码(写入 main.py) |
description |
是 | 5–10 词动作描述(UI 展示) |
files |
否 | [{ path, content }],写入运行目录 |
workdir |
否 | 进程 cwd,默认会话工作区;相对路径按工作区解析 |
args |
否 | 追加命令行参数 |
stdin |
否 | 管道输入文本 |
timeoutMs |
否 | 超时毫秒数 |
注意:进程工作目录是会话工作区,不是脚本所在临时目录;读 files 里的数据应用 Path(__file__).parent;要把产物留在工作区应直接写工作区路径。
插件 config 条目¶
| 键 | 默认 | 含义 |
|---|---|---|
pythonPath |
自动 | 解释器路径;默认按 runtime.json 找捆绑运行时 |
cwd |
会话工作区 | 默认工作目录 |
timeoutMs |
120000 |
默认超时 |
graceMs |
3000 |
终止宽限期 |
maxOutputBytes |
200000 |
单流收集上限,超出落盘并给出 spillPath |
keepScript |
false |
为 true 时保留临时脚本并回报 scriptPath |
典型用法(模型视角)¶
模型通过已注册的 python 工具提交 code 与 description;需要多文件时附带 files,例如辅助模块 helpers.py 与同目录数据文件,在 main.py 里 import helpers 并用 Path(__file__).parent 读数据。需要 CLI 风格输入时使用 args 或 stdin;长时间任务可调 timeoutMs(未传则用 config 默认 120000 ms)。
README 未给出完整 JSON 调用示例,但线上验证记录提到:files 多文件场景下 stdout 曾出现 live after move: moved-to-python_hk / data: k,v | x,1 等形式,说明多文件 import 与数据读取路径在真机环境中可用。
适用场景与注意¶
适合:需要在 DSH 会话里让模型执行 Python、且希望尽量对齐 Harness 捆绑运行时与常见数据/Office 库的场景;希望插件出现在 GUI 插件页、以 bundle 方式统一启停的团队工作流。
注意:
- 工具以当前 DSH 进程权限在主机上 spawn Python;安装前应阅读 GitHub 仓库 源码与 MIT 许可证(
package.json),确认沙箱策略与danger-full-access是否符合你的安全要求。 - 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本文事实以仓库 README 与
package.json为准。 - 改动插件实现后若行为未更新,按 README「三个实测坑」③ 处理:重启 DSH,或新 loader id + 停用旧条目。
结尾¶
dsh-plugin-python 把「在 Harness 里跑 Python」收成单一模型工具:捆绑运行时、UTF-8、超时、多文件、workdir 边界与沙箱 fail closed 均在文档中有对应说明。若要安装或提 issue,可从目录页与仓库入手:
- 目录页:https://www.skillhub.cn/plugins/jcy0chenyuan0/dsh-plugin-python
- GitHub:https://github.com/jcy0chenyuan0/dsh-plugin-python