message / docs /plugin-authoring.md
dot
Deliver native DSH market and authenticated cloud MCP with HF deployment
1140c43
|
Raw History Blame Contribute Delete
2.48 kB
# 发布可信 DSH bundle
## 兼容契约
市场只接受独立 npm `.tgz`,包含一个 `package/package.json` 和声明的 `dsh.bundle.patch` 文件。必须声明 `@deepseek-ai/dsh-tools: 0.2.0-rc.2` peer,其他 DSH peers 同版本;依赖必须固定完整 semver,不允许 URL/git/file 来源、范围、bundled node_modules 或覆盖解析配置。
包名/版本/原始 SHA256 标识一个不可变制品。同内容重传幂等;同名同版本不同内容拒绝,发布新内容必须递增版本。归档不接受路径穿越、链接、设备、稀疏文件、重复路径、隐藏尾部或安装脚本。上传最大32MiB,展开最大64MiB,单文件16MiB,条目最多4096。
模块导入应无副作用。工具、监听器和后台任务在 Cordis `apply` 生命周期中创建,并提供清理函数;静态配置 schema 收集会导入声明,但不会调用 apply。请声明可投影的 `Config`,复杂原生约束必须在 worker 启动时可靠失败。
## 独立打包
```bash
npm pack ./plugins/text-tools --ignore-scripts --pack-destination /tmp
```
在 Web“插件目录”上传归档并确认已审查代码。安装进入可写 profile,不把插件源码编译进消费者、不重建宿主。初始样例 `message_text_uppercase` 支持 `{ "prefix": "自定义:" }` 配置,重启后生效。
## 凭据
例如作者声明 Config 的 `apiKey` 为字符串,运营者保存:
```json
{"apiKey":{"$env":"SERVICE_API_KEY"}}
```
实际值只由服务器运营者提供;变量名需在该 profile 的 `MESSAGE_PLUGIN_ENV_ALLOWLIST_JSON` 中,禁止控制面、PATH、NODE_OPTIONS 等执行控制变量。不要把真实值写进归档、配置、描述、日志或工具输出。未获允许或缺失的引用使启动失败。
## 工具输出
V1 导出最终策略后的文本内容;结构化 JSON 应由工具的 output.render 转为文本。DSH 图片/文件是受管理 attachment 引用,当前不会自动转换为 MCP image/audio/resource 或读取服务器附件路径。扩展附件适配需专门实现内容解析、大小/权限及生命周期验证,不能序列化 raw value。旧媒体插件尚未迁为原生 bundle。
## 信任边界
校验和证明内容一致,不证明代码安全。插件在宿主进程中执行;本市场不支持安装不可信公共代码或把 profile 当租户沙箱。安装依赖脚本被禁用,本版没有一键批准脚本或绕过版本兼容的界面。