Skip to content

Spec: Host Descriptor(宿主自述文件)

状态:Draft v0.15(社区讨论稿,非官方标准) 产出物:schemas/host-descriptor.schema.json + fixtures

这份文件定义"宿主自述文件":每个兼容宿主(GUI / Web UI / TUI / 启动器)发布的一份机器可读 JSON,诚实回答"我是谁、我实际实现了哪些契约、以什么信任档位运行插件"。宿主维护者写它,协商器、市场和 CI 消费它。

1. 适用范围

本文规定 Host Descriptor 的逐字段语义与宿主的声明义务。以下内容不在本文:

2. 规范性定义

2.1 字段总览

字段类型必填含义
descriptorVersionstringDescriptor 结构版本,v0.15 必须等于 "0.15"
idstring稳定、带组织命名空间的宿主 ID(反向域名语法,规则同 manifest §3.4
executionobject执行环境与信任档位(§2.3)
capabilitiesarray实际实现的契约精确条目(§2.4)
apiVersionsobject各 facet 支持的 Host API 版本(§2.5)
platformsarray支持的平台标识(§2.6)

2.2 descriptorVersion

必须存在且等于 "0.15"。fixture:conformance/fixtures/host-descriptor/invalid/missing-descriptor-version.json

2.3 execution

必须包含两个字段:

字段v0.15 合法值含义
environment"node"插件 entrypoint 实际执行的运行时。v0.15 只规范 Node.js 宿主侧运行时
trustMode"trusted-in-process"信任档位。v0.15 唯一已定义的档位

出现其他值必须被拒绝。fixture:conformance/fixtures/host-descriptor/invalid/unknown-trust-mode.jsonconformance/fixtures/host-descriptor/invalid/unknown-environment.json。隔离执行档位(isolated)需要另行规定进程/realm 隔离、受控 IPC 等证据,归后续 RFC——在此之前任何宿主不得声称该档位。

trusted-in-process 的公示义务(必须):该档位下插件与宿主同进程运行,capability 声明服务于兼容判断、用户授权和事后审计,不构成安全边界——同进程受信代码在技术上可以绕过标准 API 直接调用系统接口。宿主必须在产品界面或文档中显著公示这一事实,不得把"插件声明过了"包装成"越权行为被拦住了"。(由 Host conformance 套件检查公示文本存在,见 conformance/suites/;表述边界另见 conformance.md。)

2.4 capabilities:只能声明实际实现的精确条目

  • 数组,每个元素必须{ "apiVersion", "kind" } 两个字段齐全的精确契约坐标,且该坐标必须registry/ 中的真实条目(或符合 x-org.example.* 规则的私有条目,规则见 VERSIONING.md)。fixture:conformance/fixtures/host-descriptor/invalid/capability-not-precise.json(缺 kind 等非精确写法)。
  • 宿主必须只声明自己实际实现并能保持语义的条目——不许声明"大概支持"。上游变化导致某项能力无法保持语义时,宿主必须把对应条目下线,不能用近似实现伪装兼容(fail closed)。由 Host conformance 套件对照真实行为断言(conformance/suites/)。
  • 缺失 capabilities 字段必须被拒绝。fixture:conformance/fixtures/host-descriptor/invalid/missing-capabilities.json

2.5 apiVersions

对象,key 为 facet 名,值为该 facet 支持的 Host API 版本数组,如 { "host": ["v1alpha1"] }。v0.15 只规范 host facet(见 facet-model.md)。协商时的匹配规则见 negotiation.md

2.6 platforms

字符串数组,元素为 <os>-<arch> 形式的平台标识,如 "darwin-arm64""win32-x64""linux-x64"。省略表示不限平台。

2.7 诚实声明的总原则

Descriptor 只报告宿主实际提供的运行时与信任档位;不得用 hostTypeisRemote 之类的字段代替执行位置、界面能力与授权方这三个独立维度(理由见 RFC 0002)。静态声明可能存在的界面类型,不会因此成为 activation 范围的能力。

3. 市场五态与不得互相升级

市场与启动器在安装前展示的兼容状态必须恰好区分以下五态:

状态含义来源
声明兼容静态协商通过协商 verdict compatible(见 negotiation.md
等待授权宿主支持,但敏感能力未获用户授权协商 verdict pending-authorization
已实测明确的宿主、系统、插件与测试套件组合跑通过一致性测试证据(见 conformance.md
不兼容required 契约或 API 范围无法满足协商 verdict rejected
未知信息不足,无法判定缺 manifest / Descriptor / registry 条目等

五态不得互相升级(必须):"声明兼容"永远不等于"已实测",更不等于"安全";任何界面不得把静态协商结果展示成实测证据或安全审核结论。由 Host conformance 与市场侧套件检查展示文案(conformance/suites/)。

默认交互应该展示但禁用不兼容插件并列出缺失的契约,而不是直接隐藏——直接隐藏会让跨设备或跨 profile 的插件看起来凭空消失。

4. 示例

json
{
  "descriptorVersion": "0.15",
  "id": "org.example.dsh-webui",
  "apiVersions": { "host": ["v1alpha1"] },
  "execution": {
    "environment": "node",
    "trustMode": "trusted-in-process"
  },
  "capabilities": [
    { "apiVersion": "commands.dsh/v1alpha1", "kind": "Command" },
    { "apiVersion": "storage.dsh/v1alpha1", "kind": "LocalStorage" },
    { "apiVersion": "messages.dsh/v1alpha1", "kind": "MessageObserver" }
  ],
  "platforms": ["darwin-arm64", "win32-x64", "linux-x64"]
}

(坐标与 ID 均为示意,以 Registry 定案为准。)

5. 错误与边界情况

情况规定行为抓住它的 fixture / 测试
descriptorVersion 或值非 "0.15"拒绝该 Descriptorinvalid/missing-descriptor-version.json
execution拒绝(信任档位必须显式公示)invalid/missing-execution.json
trustMode / environment 为未定义值拒绝invalid/unknown-trust-mode.jsoninvalid/unknown-environment.json
capabilities 元素不是精确坐标(缺字段)拒绝invalid/capability-not-precise.json
capabilities拒绝invalid/missing-capabilities.json
声明了未实际实现的条目一致性测试失败,不得宣称通过suites 行为对照断言
把 trusted-in-process 描述成沙箱违反公示义务,不得宣称通过 Host conformancesuites 公示检查

6. 对应 fixtures 清单

fixtures 由后续任务创建,路径约定如下:

  • conformance/fixtures/host-descriptor/valid/minimal.json
  • conformance/fixtures/host-descriptor/valid/full.json
  • conformance/fixtures/host-descriptor/invalid/missing-descriptor-version.json
  • conformance/fixtures/host-descriptor/invalid/missing-execution.json
  • conformance/fixtures/host-descriptor/invalid/missing-capabilities.json
  • conformance/fixtures/host-descriptor/invalid/capability-not-precise.json
  • conformance/fixtures/host-descriptor/invalid/unknown-trust-mode.json
  • conformance/fixtures/host-descriptor/invalid/unknown-environment.json

7. 变更记录

版本变更
v0.15首版成稿。capabilities 从名称-版本映射改为 registry 精确坐标条目;trustMode 收敛为唯一已定义档位 trusted-in-process 并落实公示义务;市场五态规则定稿于此。源自 v0.1 设计稿 §3.1 交付物 2 与原则 ③④。

社区 Draft,非 dsh 官方标准 | MIT License