v0.1首个版本化设计基线查看版本范围
Developer

Host API v0.1

状态:设计基线。本文定义 v0.1 的正式范围;独立的版本协商闭环尚待实现,因此当前运行时不得仅凭已有方法名宣称符合 v0.1。

阅读方式

本页只负责版本级约定和模块索引。每个 Host API 模块都有独立文档,方法、事件、应用场景和用法示例以模块文档为准。

示例统一使用逻辑 JS 绑定对象 host

const host = await appist.host({ apiVersion: '0.1' });

这行代码描述目标调用形态,不表示当前 SDK 已提供同名入口。原生 WASM 示例使用 C 风格伪代码表达同一逻辑契约;ptrlen 和线协议编码只属于具体绑定,不属于 Host API 语义。

正式模块

v0.1 收录 12 个 L1 模块:

模块 典型场景 参考文档
呈现 canvas 2D 绘制、软件像素帧、文本度量 canvas
呈现 asset 读取包内资源、注册包内字体 asset
呈现 playback 播放应用生成的 PCM 音频 playback
输入 input 指针、键盘、滚轮和焦点 input
输入 ime 系统输入法和合成文本 ime
输入 capture 摄像头帧和麦克风采样 capture
数据 store 应用作用域持久化 KV store
数据 clipboard 系统剪贴板读写 clipboard
网络 net 经平台代理的有界请求—响应 net
身份 identity 登录状态和平台托管登录流程 identity
平台集成 env 粗化环境快照和变化通知 env
平台集成 print 把文档交给系统打印界面 print

八族只是分析工具,不要求首版覆盖每一族。不在上表中的现有方法不构成 v0.1 承诺;候选能力见非正式提议

版本声明与协商

应用必须声明所需 Host API 版本:

{
  "apiVersion": "0.1"
}

v0.1 宿主必须:

  1. /_keel/capabilities.json 公布 apiVersion: "0.1" 和实际方法集合;
  2. 发布时校验应用请求的版本;
  3. 启动前再次匹配;
  4. 不支持时在 guest 执行前以 version-mismatch 失败;
  5. 不允许以“部分方法碰巧存在”的方式继续运行。

apiVersion 与应用版本、contractVersion、二进制线协议版本和运行时构建哈希相互独立。

兼容性

  • v0.1 内可以增加可忽略的返回字段,但 guest 不得依赖未知字段被保留。
  • 新增模块、方法、必填参数或新的失败前提进入后续版本。
  • 删除方法、改变参数含义、收紧既有合法输入或改变可观察副作用属于不兼容变化。
  • 安全修复可以拒绝原本就违反预算、schema 或权限要求的调用。
  • 0.x 不承诺 1.0 级长期稳定,但承诺版本内语义稳定。

共享类型

Bytes       有明确上限的小块字节
ByteSource  大块输入;JS 绑定 Uint8Array,原生 guest 绑定已校验内存区域
ByteSink    大块输出;返回 written / required / eof
Event       经始终存在的类型化事件传输送达
Handle<Resource, Rights, Provenance, Lifetime>

句柄是不透明值。每次使用都必须验证资源类型、权限、来源和有效期;宿主主动失效句柄时发送终止事件。v0.1 不允许把一个模块产生的无类型 token 交给另一模块绕过权限判断。

错误、取消与预算

失败统一使用:

HostError {
  capability: string
  code: string
  retryable: boolean
  data?: bounded-value
}
  • 用户关闭系统选择或确认界面返回空值,不抛错。
  • 权限拒绝使用 denied,版本冲突使用 version-mismatch,预算超限使用 limit-exceeded
  • 非瞬时调用接受取消信号;取消不得留下不可达句柄。
  • 每个方法执行单次上限、guest 活跃总量上限和时间窗速率上限。

模块文档会列出特有错误和预算维度;具体数值由 v0.1 宿主配置公布。

L0 运行时原语

L0 不参与 capability 声明与信任定档:

原语 语义
log(level, ByteSource) 有长度、速率和控制字符过滤的诊断日志
host_call 发起一次类型化 Host API 调用
send_batch 批量提交运行时消息
typed event transport 将 L1 事件送入 guest;不承载资源授权

nowrandom 尚未完成 v0.1 所需的实现和验证,不属于本版本。

明确不提供

v0.1 故意不提供原始 DOM、Canvas/WebGL/WebGPU context、任意 URL 资源加载、像素读回、屏幕捕获、任意文件路径、原始 socket、WebRTC、P2P、bearer token、全局用户 ID、email、动态代码加载或任意 guest 着色器。

scene、数据库、codec、聊天会话等可在 guest 实现的领域模型属于 L2。缺席是 v0.1 安全契约的一部分,不能作为“遗漏”在补丁版本中加入。

与当前实现的关系

  • 当前各模块普遍使用的 version: "1" 是契约描述版本,不是 Host API v0.1。
  • 当前 mediaaudiotext 等旧名仍需迁移到 captureplaybackime
  • 当前 identity.currentbilling.*ai.chatanalytics.track 不在 v0.1。
  • 当前 asset.decodeBytes({fileToken}) 组合路径必须先完成安全整改。
  • 当前两类 guest 的事件通路必须收敛到统一的类型化事件传输。

宿主只有在名称、逻辑签名、版本握手、策略和行为全部符合本版本文档时,才可以公布 apiVersion: "0.1"

Host API 版本与分层概览Host API v0.1版本非正式提议提议canvas API呈现canvas.getInfo()方法canvas.draw()方法canvas.present()方法canvas.measureText()方法canvas.frame event事件canvas.resize event事件asset API呈现asset.read()方法asset.loadFont()方法playback API呈现playback.open()方法playback.write()方法playback.stop()方法playback.ready event事件playback.ended event事件input API输入input.focus()方法input.pointer event事件input.key event事件input.wheel event事件ime API输入ime.openSession()方法ime.updateState()方法ime.updateGeometry()方法ime.closeSession()方法ime.textUpdate event事件ime.composition event事件ime.formatUpdate event事件ime.characterBoundsRequest event事件capture API输入capture.requestCamera()方法capture.requestMic()方法capture.frame()方法capture.readAudio()方法capture.stop()方法capture.ended event事件store API数据store.get()方法store.put()方法store.delete()方法store.list()方法store.deletePrefix()方法clipboard API数据clipboard.readText()方法clipboard.writeText()方法clipboard.readImage()方法clipboard.writeImage()方法net API网络net.fetch()方法identity API身份identity.status()方法identity.login()方法identity.logout()方法env API平台集成env.snapshot()方法env.change event事件print API平台集成print.open()方法开始调用 Host API指南构建交互式绘图应用指南构建自绘文本编辑器指南管理媒体采集与播放指南组织本地数据与同步指南