应用内下载 octagram 模型较慢时,设置页每个模型行提供「浏览器下载」直链, 下载后用「导入」选中 .gram 文件:后台复制进模型目录,与应用内下载走同一套 格式校验与原子落位,原文件不动。导入与下载共用单槽。 帮助页新增网络代理(跟随系统 / 直连 / 自定义 HTTP 代理),新增 [network] 配置段。云输入、模型下载、AI 联想、翻译、语音识别与润色、凭证测试统一经 NetworkProxy 选择代理,改动即时生效。WinHTTP 的「跟随系统」由 DEFAULT_PROXY 改为 AUTOMATIC_PROXY,真正读取用户的系统代理与 PAC。 契约新增 collocationModelImport 消息;旧设置宿主补上 openExternalUrl。
WebView messages
messages.json owns the message envelope, payload shape, and allowed sender windows.
Change it here, run python3 generate.py, and re-sync the copy under ui-html/ in the same
commit. The generated TypeScript union and embedded C++ schema must pass generate.py --check.
runtime.js and validator.h implement the documented schema subset and run the same
fixtures.json compatibility cases. The standalone CMake test requires Boost.JSON;
the input engine itself does not acquire that dependency.
New messages carry protocolVersion: 1. A missing version is accepted as legacy v1
for existing skins; an explicit unknown version, unknown message, invalid payload,
or message sent from the wrong window is rejected before dispatch. This is envelope
validation, not a replacement for domain checks such as dictionary key validation,
allowed configuration values, or the host's HTTPS URL policy.
ui-html/scripts/sync-contracts.py materializes these bindings into
ui-html/webview2/shared and checks byte equality; CI runs it with --check, which
now compares against this directory directly rather than against a pinned submodule.
Settings imports the typed serializer and checks incoming messages. Classic candidate,
toolbar and menu pages load the same runtime from the host's https://msime-contracts/
virtual mapping; packaging must include webview2/shared.
Server-to-page candidate rendering currently uses the existing view functions; this contract covers WebMessage actions and settings responses. Candidate view model ownership is documented separately from transport envelopes.