启航插件标准 v1(QPS v1)

开发者只写启航标准,平台在构建期适配 DSH 内核。DSH 升级由平台重建产物,插件代码不修改、用户不重装。

版本 v1.0 适用客户端 1.2+ 适配内核 DSH 0.2.x 起 2026-10-30

1文档定位

这份文档定义开发者面向启航 Code 写插件时唯一需要遵守的接口,不描述 DSH 内部机制。

核心承诺:开发者只依赖《启航插件标准 v1》。DSH 内核升级由平台构建服务和运行时 Shim 消化,插件代码不修改、用户不重装。

插件不得直接 import @deepseek-ai/*,不得访问 DSH Cordis 内部对象,不得依赖 DSH 的 React slot 或内部类名。所有能力通过启航 SDK 的稳定契约提供。

2与旧标准的区别

维度旧标准 v1.0-draftQPS v1
开发者依赖@qicode/plugin-sdk@qihang/plugin-sdk
插件包npm .tgz,手动复制到 profile.qhp 标准包,平台按内核版本构建
内核升级运行时兼容垫片构建期生成目标内核产物 + 薄 Shim
Bundle未区分显式区分普通插件 / Bundle
UI 接入声明式 slot 映射稳定 Panel 契约(iframe/沙箱)
License无明确身份Bearer forum_token
旧版 tgz + npm_name 只作为测试数据,不进入 QPS v1 兼容范围。旧插件需要按 QPS v1 重写或重新构建。

3架构:构建期适配 + 薄 Shim

开发者代码
  │  @qihang/plugin-sdk
  ▼
启航标准包 (.qhp)
  │  manifest + dist + assets
  ▼
平台构建服务
  │  按 DSH 版本编译
  ├─ DSH 0.2.x 产物
  ├─ DSH 0.3.x 产物
  └─ 兼容性 / 权限 / 签名
  ▼
启航Code 客户端
  │  下载匹配当前内核的产物
  ▼
Qihang Runtime Shim
  │  auth / license / config / panel / log
  ▼
DSH 内核(Cordis / bundle / patch)
  • 不是在运行时把启航 API 逐条翻译成 Cordis;
  • 而是在构建期生成目标内核的产物,运行时只保留薄桥接;
  • DSH 升级时,平台更新编译器/Shim,并批量重建已上架插件;
  • 开发者只在 QPS 大版本升级时评估迁移。

4插件类型

类型说明典型场景内核耦合
tool注册一个 Agent 工具对账、抓取、计算、调用业务 API低
command注册 / 命令或提示词模板生成周报、固定工作流低
panel注册一个可视化面板订单看板、插件配置页中
server客户端只做 UI,逻辑在服务端付费插件、行业数据最低

v1 开放 tool、command、panel、server。service 和 bundle 先内部使用,稳定后再开放。

5包结构与 Manifest

my-plugin/
├─ qihang.plugin.json      # 启航清单(唯一入口)
├─ package.json            # npm 构建信息
├─ src/
│  ├─ host.ts
│  └─ client.ts            # 可选
├─ assets/icon.png
├─ README.md
└─ dist/
   ├─ host.js
   └─ client.js

发布包扩展名 .qhp(本质是 zip)。包内必须有 qihang.plugin.json,平台只认这个清单。

{
  "schemaVersion": 1,
  "id": "com.blokeai.douyin-order",
  "name": "抖音订单同步",
  "version": "1.0.0",
  "description": "同步抖音订单、对账、异常订单提醒。",
  "author": { "name": "齐合智汇", "uid": 1, "url": "https://blokeai.com" },
  "license": "MIT",
  "icon": "assets/icon.png",
  "type": ["tool", "panel"],
  "entry": { "host": "dist/host.js", "client": "dist/client.js" },
  "qihang": { "apiVersion": "1", "minAppVersion": "1.2.0" },
  "permissions": ["network:https://api.blokeai.com", "fs:workspace:read"],
  "config": { "schema": { "type": "object", "properties": {} } },
  "pricing": { "type": "monthly", "price": 9, "trialCalls": 20, "licenseRequired": true }
}
字段必填说明
schemaVersion是v1 固定为 1
id是反向域名,全局唯一,官方保留 com.blokeai.*
name / version是展示名 / SemVer
type是tool / command / panel / server
entry.hosttool/command/server 必填Host 侧入口
entry.clientpanel 必填浏览器侧入口
qihang.apiVersion是启航 SDK 主版本
qihang.minAppVersion是最低客户端版本
permissions是权限声明,安装时展示
config.schema否JSON Schema,客户端自动生成设置页
pricing否免费/包月/试用/license

6SDK API

import { definePlugin } from '@qihang/plugin-sdk'

export default definePlugin({
  manifest: './qihang.plugin.json',
  async setup(ctx) {
    ctx.tools.register({
      name: 'douyin_order_sync',
      description: '同步抖音订单',
      input: {
        type: 'object',
        properties: { shopId: { type: 'string' } },
        required: ['shopId']
      },
      async run(input) {
        const res = await ctx.http.post('https://api.blokeai.com/plugin/douyin/orders', {
          shopId: input.shopId
        })
        return { content: [{ type: 'text', text: `同步 ${res.count} 条订单` }] }
      }
    })
  }
})
能力说明
ctx.tools.register注册 Agent 工具
ctx.commands.register注册 / 命令
ctx.panels.register注册面板(与 client 侧通信)
ctx.config.get()读取用户配置
ctx.auth.user()当前登录用户(uid/username/vip)
ctx.license.check()校验试用/订阅,返回 license
ctx.http受权限限制的 HTTP 客户端
ctx.fs受权限限制的文件访问
ctx.storage插件私有 KV(本地)
ctx.log结构化日志
ctx.i18n中英文文案
不允许直接 require('electron')、Node 原生模块、DSH Cordis 内部对象、未声明的网络域名或文件路径。

7Panel 契约

UI 插件不直接依赖 DSH React slot,使用稳定 Panel 契约:

ctx.panels.register({
  id: 'order-dashboard',
  title: '订单看板',
  mount(element, api) {
    element.innerHTML = '<div id="app"></div>'
    api.callHost('sync', { shopId: '123' })
  }
})

Host 与 Panel 通过结构化 postMessage 通信;平台负责 iframe 沙箱、CSP、主题变量、生命周期和 DSH slot 桥接。

8构建与分发

npm create qihang-plugin@latest
cd my-plugin
npm run dev        # 本地加载到启航Code
npm run build      # 生成 .qhp
npm run validate   # 校验 manifest/权限/兼容
开发者上传 .qhp
  → 平台校验 manifest/权限/签名
  → 平台按 DSH 版本生成产物
  → 写入兼容矩阵
  → 上架/审核
  → 客户端下载匹配产物 → 安装 → 重载 Host
内核升级时:DSH 升级 → 平台更新编译器/Shim → 批量重建已上架插件 → 客户端自动下载新产物。开发者不需要改代码。

9兼容策略

版本策略
QPS v1稳定支持 12–18 个月
小版本向后兼容,开发者无感
大版本提前 6 个月公告 + 迁移工具
DSH 内核升级平台重建产物,不要求开发者跟
无法隐藏的破坏性变更通过 capabilities 协商 + 降级提示
QPS启航CodeDSH状态
1.01.2.x0.2.1-rc.3支持
1.01.2.x0.2.2支持
1.01.3.x0.3.x平台重建后支持
2.02.x0.4.x迁移

10权限与安全

"permissions": [
  "network:https://api.blokeai.com",
  "fs:workspace:read",
  "fs:workspace:write",
  "clipboard:write",
  "shell:openExternal"
]
  • 安装前展示权限,未声明直接拒绝;
  • 高风险权限(文件写入 / shell / child_process)需二次确认;
  • .qhp 包签名 + 平台审核 + 静态扫描;
  • 插件只能拿 license token,不拿用户密码/上游主 Key;
  • 网络域名白名单,日志脱敏。

11License 与付费

身份使用 Bearer,不再使用隐藏 Cookie:

POST /api/plugin-license.php
Authorization: Bearer <forum_token>
Content-Type: application/json

{ "action": "issue", "agent_id": 305, "device_id": "..." }
{
  "ok": true,
  "license": "lic_...",
  "type": "trial",
  "trial_remaining": 12,
  "expires_at": "2026-11-30T00:00:00+08:00",
  "signature": "..."
}
  • 免费插件跳过 license;
  • 试用原子扣减;订阅校验有效期;
  • 客户端缓存 24h,过期必须联网;
  • 插件调用服务端 API 时带 license;
  • 服务端校验签名/用户/设备/到期/次数。

12旧版插件说明

旧版 tgz + npm_name 只作为测试数据,不进入 QPS v1 兼容范围。旧包不迁移,新插件按 QPS v1 重写/重新构建。

如果你有旧插件,迁移步骤:

  1. 新建 qihang.plugin.json;
  2. 把工具逻辑改为 definePlugin + ctx.tools.register;
  3. 把 UI 改为 Panel 契约;
  4. 声明权限与 pricing;
  5. 用 npm run validate / npm run build 生成 .qhp。

13里程碑

阶段交付物验收标准
P0QPS v1 manifest schema + SDK 类型 + 样例Schema 可校验,示例可构建
P1官方插件页新增「启航插件」Tab列表、详情、权限确认、一键安装
P2构建服务 + 兼容矩阵按 DSH 版本生成产物
P3Bearer license + 试用/订阅付费插件可签发/校验
P4Panel 沙箱 + 服务端型插件付费插件核心逻辑上服务端

14变更记录

版本日期内容
v1.0-draft2026-10-22初稿:三层架构、manifest、扩展点、宿主服务、权限、现状盘点
v1.02026-10-30升级为 QPS v1:构建期适配、.qhp、Bundle 区分、Panel 契约、Bearer license、旧包退出兼容