{
  "version": "0.1",
  "status": "supported",
  "errors": {
    "versionSelection": [
      "version-mismatch"
    ],
    "common": [
      "invalid-argument",
      "platform-unavailable",
      "internal",
      "protocol-error",
      "transport-error"
    ]
  },
  "limits": [
    "runtime.maxQueuedEvents"
  ],
  "modules": [
    {
      "slug": "canvas",
      "label": "canvas",
      "family": "呈现",
      "summary": "2D 绘制、软件像素帧与文本度量",
      "limits": [
        "canvas.maxBatchOperations",
        "canvas.maxBatchBytes",
        "canvas.maxFrameBytes",
        "canvas.maxTextItems",
        "canvas.callsPerMinute"
      ],
      "members": [
        {
          "slug": "getInfo",
          "label": "getInfo()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:canvas.getInfo",
          "tier": "green",
          "errors": [
            "denied",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "draw",
          "label": "draw()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:canvas.draw",
          "tier": "green",
          "errors": [
            "denied",
            "not-found",
            "invalid-operation",
            "resource-denied",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "present",
          "label": "present()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:canvas.present",
          "tier": "green",
          "errors": [
            "denied",
            "not-found",
            "invalid-frame",
            "stale-frame",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "measureText",
          "label": "measureText()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:canvas.measureText",
          "tier": "green",
          "errors": [
            "denied",
            "not-found",
            "stale-handle",
            "resource-denied",
            "invalid-text",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "frame",
          "label": "frame event",
          "kind": "event",
          "source": "passive"
        },
        {
          "slug": "resize",
          "label": "resize event",
          "kind": "event",
          "source": "passive"
        }
      ]
    },
    {
      "slug": "asset",
      "label": "asset",
      "family": "呈现",
      "summary": "包内资源读取与 WOFF2 字体注册",
      "limits": [
        "asset.maxReadBytes",
        "asset.maxFontBytes",
        "asset.maxLoadedFonts",
        "asset.callsPerMinute"
      ],
      "members": [
        {
          "slug": "read",
          "label": "read()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:asset.read",
          "tier": "green",
          "errors": [
            "denied",
            "not-found",
            "invalid-offset",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "loadFont",
          "label": "loadFont()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:asset.loadFont",
          "tier": "green",
          "errors": [
            "denied",
            "not-found",
            "invalid-format",
            "unsupported-format",
            "limit-exceeded"
          ],
          "policy": {}
        }
      ]
    },
    {
      "slug": "playback",
      "label": "playback",
      "family": "呈现",
      "summary": "有界 f32 PCM 音频输出",
      "limits": [
        "playback.maxStreams",
        "playback.maxQueuedFrames",
        "playback.maxWriteFrames",
        "playback.writesPerSecond"
      ],
      "members": [
        {
          "slug": "open",
          "label": "open()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:playback.open",
          "tier": "yellow",
          "errors": [
            "denied",
            "activation-required",
            "device-unavailable",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "out",
                "peer": "user-device",
                "mediation": "user-mediated"
              }
            ],
            "effects": [
              "physical-output"
            ],
            "auth": {
              "activation": "gesture",
              "grant": "session"
            }
          }
        },
        {
          "slug": "write",
          "label": "write()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "playback.open"
          ],
          "tier": "yellow",
          "errors": [
            "stale-handle",
            "resource-denied",
            "invalid-format",
            "busy",
            "device-unavailable",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "out",
                "peer": "user-device",
                "mediation": "structural"
              }
            ],
            "effects": [
              "physical-output"
            ]
          }
        },
        {
          "slug": "stop",
          "label": "stop()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "playback.open"
          ],
          "tier": "yellow",
          "errors": [
            "stale-handle",
            "resource-denied"
          ],
          "policy": {
            "effects": [
              "physical-output"
            ]
          }
        },
        {
          "slug": "ready",
          "label": "ready event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "playback.open"
          ]
        },
        {
          "slug": "ended",
          "label": "ended event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "playback.open"
          ]
        }
      ]
    },
    {
      "slug": "input",
      "label": "input",
      "family": "输入",
      "summary": "指针、键盘、滚轮与焦点",
      "limits": [
        "input.maxEventsPerSecond",
        "input.maxCoalescedPointerMoves"
      ],
      "members": [
        {
          "slug": "focus",
          "label": "focus()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:input.focus",
          "tier": "green",
          "errors": [
            "denied",
            "not-found",
            "not-visible",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "pointer",
          "label": "pointer event",
          "kind": "event",
          "source": "passive"
        },
        {
          "slug": "key",
          "label": "key event",
          "kind": "event",
          "source": "passive"
        },
        {
          "slug": "wheel",
          "label": "wheel event",
          "kind": "event",
          "source": "passive"
        },
        {
          "slug": "focusChange",
          "label": "focusChange event",
          "kind": "event",
          "source": "passive"
        }
      ]
    },
    {
      "slug": "ime",
      "label": "ime",
      "family": "输入",
      "summary": "系统输入法合成会话",
      "limits": [
        "ime.maxSessions",
        "ime.maxTextCodeUnits",
        "ime.maxCharacterBounds",
        "ime.updatesPerSecond"
      ],
      "members": [
        {
          "slug": "openSession",
          "label": "openSession()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:ime.openSession",
          "tier": "green",
          "errors": [
            "denied",
            "not-focused",
            "invalid-range",
            "session-exists",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "in",
                "peer": "none",
                "mediation": "structural",
                "provenance": "app-context"
              },
              {
                "flow": "out",
                "peer": "none",
                "mediation": "structural"
              }
            ]
          }
        },
        {
          "slug": "updateState",
          "label": "updateState()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "ime.openSession"
          ],
          "tier": "green",
          "errors": [
            "stale-handle",
            "resource-denied",
            "stale-state",
            "invalid-range",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "updateGeometry",
          "label": "updateGeometry()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "ime.openSession"
          ],
          "tier": "green",
          "errors": [
            "stale-handle",
            "resource-denied",
            "stale-state",
            "invalid-geometry",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "closeSession",
          "label": "closeSession()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "ime.openSession"
          ],
          "tier": "green",
          "errors": [
            "stale-handle",
            "resource-denied"
          ],
          "policy": {}
        },
        {
          "slug": "textUpdate",
          "label": "textUpdate event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "ime.openSession"
          ]
        },
        {
          "slug": "composition",
          "label": "composition event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "ime.openSession"
          ]
        },
        {
          "slug": "formatUpdate",
          "label": "formatUpdate event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "ime.openSession"
          ]
        },
        {
          "slug": "characterBoundsRequest",
          "label": "characterBoundsRequest event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "ime.openSession"
          ]
        },
        {
          "slug": "ended",
          "label": "ended event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "ime.openSession"
          ]
        }
      ]
    },
    {
      "slug": "capture",
      "label": "capture",
      "family": "输入",
      "summary": "摄像头与麦克风采集",
      "limits": [
        "capture.maxStreams",
        "capture.maxFrameBytes",
        "capture.maxAudioFramesPerRead",
        "capture.readsPerSecond"
      ],
      "members": [
        {
          "slug": "requestCamera",
          "label": "requestCamera()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:capture.requestCamera",
          "tier": "yellow",
          "cancellable": true,
          "errors": [
            "denied",
            "activation-required",
            "device-unavailable",
            "cancelled",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "in",
                "peer": "user-device",
                "mediation": "user-mediated",
                "provenance": "external-resource"
              }
            ],
            "effects": [
              "privacy-capture"
            ],
            "auth": {
              "activation": "gesture",
              "consent": "system-prompt",
              "grant": "session"
            }
          }
        },
        {
          "slug": "requestMic",
          "label": "requestMic()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:capture.requestMic",
          "tier": "yellow",
          "cancellable": true,
          "errors": [
            "denied",
            "activation-required",
            "device-unavailable",
            "cancelled",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "in",
                "peer": "user-device",
                "mediation": "user-mediated",
                "provenance": "external-resource"
              }
            ],
            "effects": [
              "privacy-capture"
            ],
            "auth": {
              "activation": "gesture",
              "consent": "system-prompt",
              "grant": "session"
            }
          }
        },
        {
          "slug": "frame",
          "label": "frame()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "capture.requestCamera"
          ],
          "tier": "yellow",
          "cancellable": true,
          "errors": [
            "stale-handle",
            "resource-denied",
            "invalid-sequence",
            "sink-too-small",
            "device-unavailable",
            "busy",
            "cancelled",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "in",
                "peer": "user-device",
                "mediation": "structural",
                "provenance": "external-resource"
              }
            ],
            "effects": [
              "privacy-capture"
            ]
          }
        },
        {
          "slug": "readAudio",
          "label": "readAudio()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "capture.requestMic"
          ],
          "tier": "yellow",
          "cancellable": true,
          "errors": [
            "stale-handle",
            "resource-denied",
            "sink-too-small",
            "device-unavailable",
            "busy",
            "cancelled",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "in",
                "peer": "user-device",
                "mediation": "structural",
                "provenance": "external-resource"
              }
            ],
            "effects": [
              "privacy-capture"
            ]
          }
        },
        {
          "slug": "stop",
          "label": "stop()",
          "kind": "method",
          "authorization": "handle-derived",
          "derivedFrom": [
            "capture.requestCamera",
            "capture.requestMic"
          ],
          "tier": "yellow",
          "errors": [
            "stale-handle",
            "resource-denied"
          ],
          "policy": {
            "effects": [
              "privacy-capture"
            ]
          }
        },
        {
          "slug": "ended",
          "label": "ended event",
          "kind": "event",
          "source": "handle",
          "sourceMethods": [
            "capture.requestCamera",
            "capture.requestMic"
          ]
        }
      ]
    },
    {
      "slug": "store",
      "label": "store",
      "family": "数据",
      "summary": "当前设备上的应用作用域持久化 KV",
      "limits": [
        "store.maxKeyBytes",
        "store.maxValueBytes",
        "store.maxKeys",
        "store.maxTotalBytes",
        "store.maxPageItems",
        "store.maxListSnapshots",
        "store.listSnapshotIdleMs",
        "store.maxDeletePrefixItems",
        "store.writesPerMinute"
      ],
      "members": [
        {
          "slug": "get",
          "label": "get()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:store.get",
          "tier": "green",
          "errors": [
            "denied",
            "invalid-key",
            "sink-too-small",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "put",
          "label": "put()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:store.put",
          "tier": "green",
          "errors": [
            "denied",
            "invalid-key",
            "conflict",
            "quota-exceeded",
            "version-exhausted",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "delete",
          "label": "delete()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:store.delete",
          "tier": "green",
          "errors": [
            "denied",
            "invalid-key",
            "conflict",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "list",
          "label": "list()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:store.list",
          "tier": "green",
          "errors": [
            "denied",
            "invalid-key",
            "invalid-cursor",
            "cursor-expired",
            "limit-exceeded"
          ],
          "policy": {}
        },
        {
          "slug": "deletePrefix",
          "label": "deletePrefix()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:store.deletePrefix",
          "tier": "green",
          "errors": [
            "denied",
            "invalid-key",
            "limit-exceeded"
          ],
          "policy": {}
        }
      ]
    },
    {
      "slug": "clipboard",
      "label": "clipboard",
      "family": "数据",
      "summary": "可信用户操作中的系统剪贴板文本读写",
      "limits": [
        "clipboard.maxTextBytes",
        "clipboard.readsPerMinute",
        "clipboard.writesPerMinute"
      ],
      "members": [
        {
          "slug": "readText",
          "label": "readText()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:clipboard.readText",
          "tier": "lime",
          "cancellable": true,
          "errors": [
            "denied",
            "activation-required",
            "cancelled",
            "invalid-data",
            "sink-too-small",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "in",
                "peer": "user-device",
                "mediation": "user-mediated",
                "provenance": "external-resource"
              }
            ],
            "auth": {
              "activation": "gesture",
              "grant": "once"
            }
          }
        },
        {
          "slug": "writeText",
          "label": "writeText()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:clipboard.writeText",
          "tier": "green",
          "cancellable": true,
          "errors": [
            "denied",
            "activation-required",
            "cancelled",
            "invalid-data",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "out",
                "peer": "user-device",
                "mediation": "user-mediated"
              }
            ],
            "auth": {
              "activation": "gesture"
            }
          }
        }
      ]
    },
    {
      "slug": "env",
      "label": "env",
      "family": "平台集成",
      "summary": "封闭字段的粗化宿主环境快照",
      "limits": [
        "env.snapshotsPerMinute",
        "env.changesPerMinute"
      ],
      "members": [
        {
          "slug": "snapshot",
          "label": "snapshot()",
          "kind": "method",
          "authorization": "declared",
          "capability": "host:env.snapshot",
          "tier": "green",
          "errors": [
            "denied",
            "unavailable",
            "limit-exceeded"
          ],
          "policy": {
            "channels": [
              {
                "flow": "in",
                "peer": "platform",
                "mediation": "structural",
                "provenance": "app-context"
              }
            ]
          }
        },
        {
          "slug": "change",
          "label": "change event",
          "kind": "event",
          "source": "passive"
        }
      ]
    }
  ],
  "guides": [
    {
      "slug": "getting-started",
      "label": "开始调用 Host API"
    },
    {
      "slug": "interactive-canvas",
      "label": "构建交互式绘图应用"
    },
    {
      "slug": "text-editor",
      "label": "构建自绘文本编辑器"
    },
    {
      "slug": "media-session",
      "label": "管理媒体采集与播放"
    },
    {
      "slug": "data-and-sync",
      "label": "组织本地数据与同步"
    }
  ]
}
