dsh-rustore:在 DSH 里走 RuStore 发布 API

前言

在 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 中表格一致,主要包括:

  1. 应用与版本查询:rustore_apps_list、rustore_app_versions、rustore_version_info、rustore_version_status。
  2. 草稿生命周期:rustore_draft_create、rustore_draft_update、rustore_draft_delete(删除不可恢复)。
  3. 素材上传:rustore_upload_aab / rustore_upload_apk、512×512 图标 rustore_upload_icon、截图上传 / 列表 / 删除(API v2)。
  4. 发布与审核:rustore_publish_settings(INSTANTLY / DELAYED / MANUAL)、rustore_send_to_moderation(优先级 0…5)、rustore_manual_publish、rustore_version_archive。
  5. 辅助: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 为准:

羽毛球分组比赛记分
小程序二维码

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

小夜