前言¶
在 RuStore 上更新 Android 应用,通常要在控制台里反复操作:建版本草稿、传 AAB/APK、补图标和截图、选发布方式、送审、必要时手动上线。若你已经在用 DeepSeek Harness(DSH)做智能体或自动化流水线,更希望这些步骤能通过对话或脚本调用官方 Publishing API 完成,而不是每次切浏览器。下面介绍社区插件 dsh-rustore(维护者 YurinKonstantin,分类为联网工具),它把 RuStore 发布链路封装成 DSH 工具,并附带独立 MCP 服务器与 rustore 技能文档。
这是什么¶
dsh-rustore 面向 RuStore Publishing API:在 DSH 中注册 22 个 rustore_* 工具,覆盖草稿、上传、发布设置、 moderation 与版本归档等操作;同一套能力也可作为 stdio MCP 服务器(无额外外部依赖)接到 Cursor、Claude Desktop、自研 Agent,或在 DSH 里通过 @deepseek-ai/dsh-mcp-client 挂载。
仓库:https://github.com/YurinKonstantin/dsh-rustore
社区目录页:https://www.skillhub.cn/plugins/YurinKonstantin/dsh-rustore(独立站点,与 DeepSeek / 幻方无官方从属关系)。
当前 package 版本为 0.3.1,许可证 MIT。
核心功能¶
插件侧工具与 README 中表格一致,主要包括:
- 应用与版本查询:
rustore_apps_list、rustore_app_versions、rustore_version_info、rustore_version_status。 - 草稿生命周期:
rustore_draft_create、rustore_draft_update、rustore_draft_delete(删除不可恢复)。 - 素材上传:
rustore_upload_aab/rustore_upload_apk、512×512 图标rustore_upload_icon、截图上传 / 列表 / 删除(API v2)。 - 发布与审核:
rustore_publish_settings(INSTANTLY / DELAYED / MANUAL)、rustore_send_to_moderation(优先级 0…5)、rustore_manual_publish、rustore_version_archive。 - 辅助:
rustore_categories_list、rustore_app_tags、设置与鉴权rustore_settings_get/rustore_settings_set/rustore_auth_check。
卡片字段长度、截图数量等约束,以及推荐发布顺序,写在仓库内技能文件 skills/rustore/SKILL.md;API 参数摘要见 docs/rustore-api-reference.md。
RuStore 的 JWE 令牌有效期为 900 秒,由 keyId 与私钥签发。插件在配置里保存密钥,自行签发并在过期前约一分钟刷新;工具返回中对密钥做了脱敏。
安装与启用¶
从 GitHub 安装到 DSH profile¶
官方命令如下(将 <profile> 换成你的 profile 名):
dsh plugin --profile <profile> add github:YurinKonstantin/dsh-rustore
安装后插件会通过 cordis.patch.yml 写入 profile;bundle 内也提供现成片段,插件管理器安装 bundle 时会合并。
通过 DSH 插件市场索引¶
DSH 读取用户自行添加的市场索引。本插件索引 URL 为:
https://raw.githubusercontent.com/YurinKonstantin/dsh-rustore/main/market.json
在 Settings → Plugins → Discover → 添加索引 中填入,或在配置的 plugin-market.indexes 里加入该 URL。索引版本绑定具体 commit,便于可重复安装。
配置 RuStore 密钥¶
在 RuStore 控制台:公司(个人开发者则为 开发者)→ API RuStore → 创建密钥 → 勾选应用与发布相关方法 → 生成后复制 Base64 私钥(仅展示一次)与表格中的 keyId。
图形界面(推荐)¶
Plugins 侧栏 → 包 RuStore → rustore → 设置。可填 keyId、私钥(密码框;留空表示不修改)、可选 JWE 与 API 地址;支持 保存、检查授权、删除密钥。值写入 %USERPROFILE%\.dsh\rustore.json(权限 0600),立即生效。「检查授权」会签发令牌并读取应用列表数量。
Profile 配置示例¶
- id: rustore
name: dsh-rustore
config:
token: ""
keyId: "354751"
privateKey: ""
privateKeyRef: RUSTORE_PRIVATE_KEY
apiBase: https://public-api-m.rustore.ru
mirrorBase: https://public-api.rustore.ru
authUrl: https://public-api-m.rustore.ru/public/auth/
timeoutMs: 120000
settingsFile: ""
配置优先级:插件 config → DSH credentials 中的 RUSTORE_PRIVATE_KEY → 环境变量 RUSTORE_* → ~/.dsh/rustore.json。也可用 rustore_settings_set 从对话写入同一文件。
验证:rustore_settings_get(授权模式)或 rustore_auth_check(签发令牌并列出应用)。
典型用法¶
在 DSH 对话中驱动发布¶
经过上面的密钥配置后,可按 SKILL 中的顺序调用工具,例如:列出可访问应用 → 创建或更新草稿 → 上传 AAB/APK 与图标、截图 → rustore_publish_settings → rustore_send_to_moderation;审核通过后按需 rustore_manual_publish。
具体字段与错误处理以 skills/rustore/SKILL.md 为准,此处不重复枚举。
独立 MCP 服务器(不依赖 DSH 插件运行时)¶
在 shell 中设置环境变量并启动:
$env:RUSTORE_KEY_ID = "354751"
$env:RUSTORE_PRIVATE_KEY = "MIIEvgIBADANBgkq..."
node mcp/server.mjs
传输为 stdio、逐行 JSON-RPC。在 DSH 中可挂载为:
- id: rustore-mcp
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: rustore
transport: stdio
command: node
args: ['<路径>/dsh-rustore/mcp/server.mjs']
env:
RUSTORE_KEY_ID: ''
RUSTORE_PRIVATE_KEY: ''
failOnStartupError: true
工具在 DSH 中显示为 mcp__rustore__<名称>。
适用场景与注意¶
适合:已在 RuStore 注册应用、希望用 Agent 或 CI 辅助完成版本草稿、包体与商店素材上传、送审与发布控制的 Android 开发者或发布运维。
限制(README 明确说明):
- Publishing API 只操作已有应用的版本;应用本体、开发者联系方式、隐私政策、测试账号、TV 图标等仍须在 RuStore 网页控制台维护。
- 官方 API 分布在
public-api.rustore.ru与public-api-m.rustore.ru;客户端在 404 时会自动尝试镜像主机。
安全:插件以当前 DSH 进程权限运行,会向 RuStore 公网 API 发起请求。安装前请阅读源码与 MIT 许可证,确认密钥存放方式(rustore.json、credentials、环境变量)符合你的安全策略;勿在日志或对话中粘贴完整私钥。
仓库自带 39 个单元测试(node --test test/),覆盖鉴权、MCP 协议与插件注册等,默认不访问真实网络。
结尾¶
dsh-rustore 把 RuStore 发布 API 收成 DSH 可调用工具集,并可选 standalone MCP,适合把「上架 RuStore」纳入 Harness 工作流。详情与更新以 GitHub README 为准: