HGhub 开发者HPP 1.0 草案

HGhub 插件协议(HPP)1.0 · 草案

状态:重构基线草案。实现按本文档推进;P0 同步产出类型定义、虚构示例与假宿主,验证核心闭环后冻结 1.0。

Windows 开发版的已实现范围、待办与验证命令见 实现进度。

1. 定位

HGhub 是一个通用视频查看器:电影、剧集、番剧、综艺、短剧、直播,用同一套界面呈现。 它本身不包含任何内容来源——找什么、从哪里取、怎么解析,全部由用户自行导入的 JS 插件提供。

HPP(HGhub Plugin Protocol)定义插件与宿主之间的约定:插件文件长什么样、怎么导入、 在什么环境里运行、能调用什么、要实现什么。

2. 责任边界

宿主只承担与自身稳定性相关的事:插件在独立的 JS 引擎里运行,接触不到文件系统和应用内部接口; 插件脚本的死循环与内存超限由宿主中断处理,不阻塞界面与其他插件;不承诺隔离原生引擎自身的进程级故障(见 03)。

3. 目标

# 目标 落点
G1 核心零内置:宿主代码、文档、测试中不出现任何上游的域名、接口、密钥、解析逻辑 全部
G2 易于分发:交付物为单个 .js 文件,可直接导入或经列表批量导入,不依赖中心服务 01
G3 五端运行时一致:Windows / macOS / Linux / Android / iOS 使用相同的 JS 与宿主 API 语义;媒体解码、可选特性按设备探测 02、09
G4 结构化的数据:所有数据有类型、有校验,不用分隔符拼字符串传结构 05
G5 能力充分、按需实现:覆盖影视、短剧与直播的内容获取与播放;界面按能力显隐,允许纯点播源和纯直播源 06
G6 可演进:协议有版本、有特性探测,新增能力不破坏旧插件 07

4. 非目标

5. 设计原则

  1. 宿主拥有界面,插件拥有数据。 插件按固定形状返回数据,宿主决定如何呈现;能力缺失时界面自动收起对应入口。 需要用户输入或操作时,插件声明表单,宿主渲染在插件页里(见 06 §15)。
  2. 一个文件,一个插件。 数据源或解析器各自交付为一个自包含 .js 文件。
  3. 只在被调用时运行。 插件没有后台;宿主不调用,插件就不执行。
  4. 本地优先。 收藏、历史、进度由宿主本地保存,不登录也能用;云端同步是插件的可选能力。
  5. 宽进严出。 宿主对插件返回的数据做形状校验与容错,单条坏数据不拖垮整页。

6. 架构

界面(WebView)
  React:首页 / 分类 / 搜索 / 详情 / 播放器 / 片库 / 插件管理
  不含任何数据源知识
      │ IPC:通用命令(plugin_call、library_*、settings_* …)
      │ 本地媒体会话地址(应用协议或本地 HTTP,按平台实现)
      ▼
宿主核心(Rust)
  ├─ 插件管理器     导入 · 初始化/能力发现 · 更新检查 · 启停 · 移除
  ├─ 调用调度器     返回值校验 · 超时 · 取消
  ├─ 插件运行时     每插件独立运行时、内存预算与执行调度,通过 hg.* 与宿主交互
  ├─ 网络层         HTTP 客户端 · Cookie · 限速 · 缓存
  ├─ 媒体会话与代理  资源归属 · 解析链 · HLS 改写 · Range · 刷新 · 字节变换
  └─ 存储           插件键值存储 · 本地片库
      ▼
上游站点与 CDN

7. 术语

术语 含义
宿主 HGhub 应用本身,协议的实现方
插件 一个 .js 文件,对应一个数据源或解析器
插件列表 一个 manifest.json,列出若干插件文件,用于批量导入
能力 插件实现的一组相关方法,如 search、comments
特性 宿主的可选功能,插件可探测,如 webview
可传递值 能在宿主与插件之间传递的值:JSON 值与 Uint8Array
媒体会话 宿主管理的资源引用、提供者、请求环境及播放刷新信息,不是插件后台任务

中文里"线路"一词有三种不同含义,本协议分别命名,不混用:

本协议用语 英文 含义
站点线路 endpoint 同一上游的不同入口域名(主站、备用站、镜像)
播放列表 playlist 同一部作品的多套分集列表(不同片源、配音、正片/花絮)
播放线路 server 同一集的多个取流服务器

8. 文档地图

文档 内容 状态
01 插件文件与导入 文件结构、元信息、manifest.json、导入与更新 草案
02 运行时 引擎与环境、调用模型、生命周期、错误模型、返回值校验 草案
03 宿主规则 隔离、网络、限速、隐私 草案
04 宿主 API hg.* 各模块的接口 草案
05 内容模型 媒体条目、分集、播放、流、字幕轨的数据形状 草案
06 能力模块 插件的能力接口与宿主界面映射、聚合搜索与换源 草案
07 生态与演进 版本兼容、对标对照、客户端基线与路线图 草案
08 宿主界面 各页面的变更:首页、分类、搜索、插件页、设置页 草案
09 媒体传输 资源归属、解析器合并、代理、范围请求、刷新与后台播放 草案

9. 关键决策摘要

决策 选择 主要理由
插件形态 单个 .js 文件,导出 meta 与工厂函数 分发与导入不依赖构建环境;元信息结构化,可带设置项
分发 直接导入 .js,或经 manifest.json 批量导入;支持本地文件与 URL 不依赖任何中心服务;社区自行托管
信任模型 不签名、不审核、不设权限确认 插件由社区制作、用户自选,宿主不做担保
运行时 每插件独立的引擎运行时与执行调度 JS/API 语义跨端一致;与界面隔离;可设超时与内存上限
宿主接口 以参数 hg 注入工厂函数 作者可在 Node 里用假的 hg 做单元测试
网络 统一经 hg.http 引擎本身没有网络能力;限速与缓存能统一实现
界面 插件只返回数据;需要用户输入时声明表单,由宿主渲染 体验一致;维护者专注界面
跨插件协作 宿主中转有类型的数据:数据源 → 解析器 影视源大量共用同一批视频托管商,解析逻辑值得复用
数据 强类型、结构化 可诊断、可演进

10. 规范用语

本协议中的必须、不得、应当、可以分别对应 RFC 2119 的 MUST、MUST NOT、SHOULD、MAY。未加粗的同词按日常含义理解。