dsh-plugin-python: Adding Model-Callable Python Tools to DSH

前言

在 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 方式统一启停的团队工作流。

注意:

  1. 工具以当前 DSH 进程权限在主机上 spawn Python;安装前应阅读 GitHub 仓库 源码与 MIT 许可证(package.json),确认沙箱策略与 danger-full-access 是否符合你的安全要求。
  2. 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本文事实以仓库 README 与 package.json 为准。
  3. 改动插件实现后若行为未更新,按 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye