ISkyPro 2.0.0-preview.3
Pre-release
Pre-release
ISkyPro 2.0.0-preview.3
中文更新日志
2.0.0-preview.3 - 2026-07-08
✨ Features
- about: 更新下载流程新增可见进度,显示状态、文件名、已下载大小、总大小和百分比;总大小未知时显示不确定进度。
- about: 自动安装现在先完成 WebUI 可见下载,再触发安装接口;下载失败或取消时不会继续进入安装步骤。
- about: 确认安装后不再保留遮挡进度条的弹窗,下载进度卡片新增取消按钮,可直接终止正在进行的更新下载。
- about: 更新缓存清理补齐,取消下载会删除
.download半成品,安装成功和程序启动时会清理已使用或历史遗留的更新包、一次性脚本和 staging 目录,避免data/updates按版本长期堆积。 - about: 自动安装支持 Linux
.tar.gz/.tgz主程序包,Linux 更新脚本会保留用户目录、替换 WebUI 并重启ISkyPro。 - about: 关于页新增 GitHub 仓库入口,保留文档、Release 和更新日志入口。
- webui: 侧边栏版本徽标和关于页当前版本改为读取后端运行时版本,临时测试版本或更新重启后不再依赖 WebUI 内置 changelog 版本。
- webui: 自动打开 WebUI 时会携带当前程序版本参数,
index.html和更新接口响应设置为 no-cache/no-store,避免更新重启后首屏继续使用旧版前端缓存。 - package: 新增 Linux x64 发布流程,
scripts/publish-linux.ps1和.\iskypro.ps1 package -MainRuntime linux-x64会产出ISkyPro-<version>-linux-x64.tar.gz,包内保留ISkyProUnix 可执行权限、启用 invariant globalization,并排除 Windows 旧插件宿主和服务脚本。 - plugins: 插件页新增“旧插件 / 新插件”选项卡、数量徽标和选择记忆;首次打开时优先显示插件数量更多的一类。
- plugins: 新插件页展示 Plugin SDK v2 插件的协议版本、transport、权限、命令数量、Bot 绑定、队列指标、最近错误、HTTP 注册和日志入口。
- gateway: WebSocket 业务事件接收与插件分发、QQBot HTTP 发送解耦,网关读取循环不会再等待慢插件或慢发送链路。
- gateway: 新增业务事件队列和 outbound 发送队列指标,包括排队、处理中、完成、丢弃、失败、限流和最近错误。
- runtime: 非 Windows 运行时改用本地 AES-GCM 密钥保护 WebUI token、Bot Secret 等运行时凭据,密钥位于
data/iskypro.runtime.key并会随用户数据保留。
🧩 Plugin Development
- sdk: 新增 Plugin SDK v2 协议草案,覆盖静态 manifest、
stdio-jsonrpctransport、JSON-RPC 2.0 长度帧、初始化握手、typed + raw 事件和messageReference。 - sdk: 新增
ISkyPro.PluginSdk.V2C# 原型接口与EchoPluginV2示例,覆盖 typed 字段、rawPayload、延迟回复、非消息类 SDK 方法和日志。 - sdk: 新增 Python / Node.js Plugin SDK v2 最小包和
stdio-jsonrpc跨语言样例,封装Content-Lengthframing、initialize、事件 ACK、invoke、log.write和被动文本回复。 - sdk: 新增 Go Plugin SDK v2 最小 module 和
samples/stdio-go-plugin,封装stdio-jsonrpcframing、initialize、事件 ACK、context.Context、Invoke、LogWrite和ReplyText。 - sdk: 新增 QQBot API catalog stub 生成器,可从
qqbot-api.catalog.json生成 C#、Python、Node.js 和 Go SDK method stubs,并用测试校验生成输出与 catalog 同步。 - qqbot-api: 新增 QQBot API v2 方法目录和规范 OpenAPI client 原型,核心覆盖消息、媒体、用户、群、频道、成员和权限接口。
- modern-plugin: 现代插件调度新增 observer / command / filter 模式、快速 ACK、插件专属有界队列、命令路由、过滤器超时和分发指标。
- modern-plugin: Main 新增
plugins-v2/*/manifest.json静态发现;有效 Plugin SDK v2 包会以stopped状态进入 API 快照,无效 manifest 会以invalidManifest和校验错误暴露,扫描阶段不会执行未知进程。 - modern-plugin: 新插件快照新增 stdio 运行时状态字段,包括 state、processId、startedAt、lastExitAt、exitCode、crashCount、nextRestartAt、permissions、settingsAvailability 和 packageDirectory。
- modern-plugin: 新增
stdio-jsonrpcJSON-RPC client 和受管进程启动路径;用户触发 start 时会按 manifest 启动插件、发送iskypro.initialize、校验 pluginId/protocol/encoding/capabilities,并把成功握手的进程绑定为运行中 client。 - modern-plugin: stdout 现在作为严格协议通道处理,普通 stdout 日志会被判定为协议污染并拒绝启动;stderr 已按行采集到框架插件日志。
- modern-plugin:
stdio-jsonrpc插件新增真实 stop/restart/shutdown lifecycle;stop 会发送plugin.stop,短超时未退出时 kill 进程树,用户 stop/disable/shutdown 不会触发自动重启。 - modern-plugin:
stdio-jsonrpc插件异常退出会进入restartPending,复用旧插件崩溃窗口、延迟和连续崩溃禁用阈值;到期后台服务会自动重新启动并重新执行 initialize。 - modern-plugin: 新增 Plugin SDK v2 runtime token 服务;token 绑定 pluginId、instanceId 和进程生命周期,通过 initialize 传入插件,stop、crash 和 restart 会使旧 token 失效并重新签发。
- modern-plugin: 新增 SDK API dispatcher,调用
log.write、users.getCurrentBot和 catalog 方法前会校验 token、pluginId 归属、manifest 权限和 catalog defaultEnabled 状态;unsafe.rawOpenApi默认继续由全局风险开关拒绝。 - modern-plugin:
stdio-jsonrpc插件现在可接收events.messageJSON-RPC 事件;Main 会将ModernPluginMessageEvent映射为 Plugin SDK v2 event envelope,并将PluginSdkV2EventAck映射回分发结果。 - modern-plugin:
stdio-jsonrpcruntime 现在可处理插件主动发起的 SDK API JSON-RPC request / notification,复用 runtime token、manifest 权限和 API catalog dispatcher。 - modern-plugin: 事件 ACK 超时、进程退出时的 pending request 和插件拒绝 ACK 会更新 timeout/failure 指标;stderr 与
log.write插件日志加入 4096 字符截断,避免异常日志撑爆记录。 - modern-plugin: Plugin SDK v2 新增 settings schema API 和 WebUI 自动表单,支持 string、number、boolean、select、path、secret 字段,配置保存到插件隔离目录,secret 字段不回显且留空保存会保留旧值。
- modern-plugin: 新插件页现在展示真实 stdio runtime 状态、PID、exit code、超时指标和 settings 入口;
settings.pageUrl继续只允许 loopback HTTP URL。 - modern-plugin: 新插件页新增本地 zip 上传安装入口,支持覆盖已安装的
stdio-jsonrpc插件、安装后启动、安装后扫描刷新,并在后端拒绝路径穿越、无效 manifest、非 stdio transport 和运行中更新。 - modern-plugin:
unsafe.rawOpenApi作为默认关闭的实验入口保留,需要显式权限。
♻️ Compatibility
- legacy-plugin: 旧 DLL 插件的顺序分发、返回值拦截、x86 PluginHost 隔离和拖拽排序不受新插件分栏影响。
- linux: Linux preview 包支持主程序、WebUI、QQBot 网关和 Plugin SDK v2 新插件;旧 DLL 插件、
isky.exe和message.dll兼容层仍仅支持 Windows 包。 - modern-plugin: HTTP 现代插件控制端点目前提供注册表级启用、禁用、移除和状态刷新;
stdio-jsonrpc静态发现、zip 安装、启动、停止、重启、崩溃恢复、token 鉴权、SDK API 权限校验、事件投递、日志观测、settings schema、Python / Node.js / Go 最小 SDK 和生成器已接入,Java 等 SDK 与稳定 API 命名冻结仍属于后续工作。
📝 Docs
- docs: 更新
docs/reference/update-check.md,记录下载任务进度接口、状态字段和 WebUI 下载/安装衔接。 - docs: 更新 Wiki 快速开始、FAQ 和 SDK 下载页面,补充 Linux preview 包启动、systemd 长期运行、Linux 自动更新和旧插件 Windows-only 边界。
- docs: 更新
docs/reference/new-plugin-sdk.md,记录 Plugin SDK v2 协议、事件模型、权限模型、SDK 方法命名和语言覆盖状态。 - docs: 更新
docs/designs/pluginhost-message-dispatch.md,记录新旧插件分发模型、网关业务队列和现代插件队列差异。 - docs: Wiki 新增快速开始、QQBot 事件配置、Webhook 与反向代理、插件 SDK、FAQ、SDK 下载和 preview.3 changelog 页面,支持中英文 i18n 站点;首页新增 GitHub 仓库入口。
- docs: Wiki 首页
/assets/yuki.png压缩到 256 KB 以下,并保持原路径。 - release: 新增通用版本发布提示词,覆盖主程序 Windows / Linux 包、SDK 包、Wiki Release 上传和发布后校验流程。
English Changelog
2.0.0-preview.3 - 2026-07-08
✨ Features
- about: Update downloads now show visible progress with status, file name, downloaded bytes, total bytes, and percent; unknown total size uses an indeterminate progress state.
- about: Automatic installation now completes the visible WebUI download before calling the install endpoint; failed or cancelled downloads no longer continue into installation.
- about: The install confirmation dialog now closes after confirmation instead of covering the progress bar, and the progress card includes a cancel button for an in-progress update download.
- about: Update cache cleanup now removes cancelled
.downloadpartial files and clears consumed or leftover packages, one-time installer scripts, and staging directories after successful installs and on application startup, preventingdata/updatesfrom accumulating one package per version. - about: Automatic installation supports Linux
.tar.gz/.tgzmain application packages; the Linux update script preserves user directories, replaces WebUI assets, and restartsISkyPro. - about: The About page now links to the GitHub repository while keeping the docs, Release, and changelog links.
- webui: The sidebar version badge and About current-version field now read the backend runtime version, so temporary test versions and post-update restarts no longer depend on the WebUI-bundled changelog version.
- webui: Automatically opened WebUI URLs now include the current application version, and
index.htmlplus update API responses use no-cache/no-store headers to avoid showing stale frontend assets after an update restart. - package: Added the Linux x64 publishing flow;
scripts/publish-linux.ps1and.\iskypro.ps1 package -MainRuntime linux-x64now produceISkyPro-<version>-linux-x64.tar.gz, preserve the Unix executable bit forISkyPro, enable invariant globalization, and exclude the Windows legacy plugin host and service scripts. - plugins: Added Legacy / Modern plugin tabs with count badges and remembered selection; the first load chooses the larger plugin set.
- plugins: The Modern plugins tab shows Plugin SDK v2 protocol version, transport, permissions, command count, bot binding, queue metrics, recent errors, HTTP registration, and log entry points.
- gateway: WebSocket business-event receive is decoupled from plugin dispatch and QQBot HTTP sends, so the gateway read loop no longer waits on slow plugins or slow sends.
- gateway: Added business-event queue and outbound-send queue metrics for queued, in-flight, completed, dropped, failed, rate-limited, and last-error states.
- runtime: Non-Windows runtimes now protect WebUI tokens, Bot Secrets, and other runtime credentials with a local AES-GCM key stored at
data/iskypro.runtime.key, which is preserved with user data.
🧩 Plugin Development
- sdk: Added the Plugin SDK v2 protocol draft covering static manifests,
stdio-jsonrpctransport, JSON-RPC 2.0 length framing, initialize handshake, typed + raw events, andmessageReference. - sdk: Added
ISkyPro.PluginSdk.V2C# prototype interfaces andEchoPluginV2, covering typed fields,rawPayload, delayed replies, a non-message SDK method, and plugin logging. - sdk: Added Python / Node.js Plugin SDK v2 minimal packages and
stdio-jsonrpccross-language samples that wrapContent-Lengthframing, initialize, event ACK,invoke,log.write, and passive text replies. - sdk: Added a Go Plugin SDK v2 minimal module and
samples/stdio-go-plugin, wrappingstdio-jsonrpcframing, initialize, event ACK,context.Context,Invoke,LogWrite, andReplyText. - sdk: Added a QQBot API catalog stub generator that emits C#, Python, Node.js, and Go SDK method stubs from
qqbot-api.catalog.json, with tests that verify generated output stays in sync with the catalog. - qqbot-api: Added a QQBot API v2 method catalog and normalized OpenAPI client prototype covering core message, media, user, group, channel, member, and permission endpoints.
- modern-plugin: Modern plugin dispatch now supports observer / command / filter modes, fast ACK, per-plugin bounded queues, command routing, filter timeout, and dispatch metrics.
- modern-plugin: Main now statically discovers
plugins-v2/*/manifest.json; valid Plugin SDK v2 packages appear in API snapshots asstopped, invalid manifests appear asinvalidManifestwith validation errors, and discovery does not execute unknown processes. - modern-plugin: Modern plugin snapshots now include stdio runtime status fields such as state, processId, startedAt, lastExitAt, exitCode, crashCount, nextRestartAt, permissions, settingsAvailability, and packageDirectory.
- modern-plugin: Added a
stdio-jsonrpcJSON-RPC client and managed process start path; user-triggered start now launches the manifest command, sendsiskypro.initialize, validates pluginId/protocol/encoding/capabilities, and binds the successful process as a running client. - modern-plugin: stdout is now treated as a strict protocol channel, so ordinary stdout logs are rejected as protocol pollution; stderr is collected line by line into framework plugin logs.
- modern-plugin: Added real stop/restart/shutdown lifecycle for
stdio-jsonrpcplugins; stop sendsplugin.stop, kills the process tree after a short timeout, and user stop/disable/shutdown exits do not trigger automatic restart. - modern-plugin: Unexpected
stdio-jsonrpcexits now enterrestartPendingand reuse the legacy plugin crash window, delay, and consecutive-crash disable thresholds; a due-restart background service starts the plugin and reruns initialize. - modern-plugin: Added a Plugin SDK v2 runtime token service; tokens are bound to pluginId, instanceId, and process lifetime, delivered through initialize, and invalidated on stop, crash, and restart before issuing a new token.
- modern-plugin: Added an SDK API dispatcher that validates token, pluginId ownership, manifest permissions, and catalog defaultEnabled state before
log.write,users.getCurrentBot, and catalog methods;unsafe.rawOpenApiremains rejected by the global risk switch by default. - modern-plugin:
stdio-jsonrpcplugins now receiveevents.messageJSON-RPC events; Main mapsModernPluginMessageEventto a Plugin SDK v2 event envelope and mapsPluginSdkV2EventAckback into dispatch results. - modern-plugin: The
stdio-jsonrpcruntime now handles plugin-originated SDK API JSON-RPC requests / notifications, reusing runtime tokens, manifest permissions, and the API catalog dispatcher. - modern-plugin: Event ACK timeouts, pending requests during process exit, and plugin-rejected ACKs now update timeout/failure metrics; stderr and
log.writeplugin logs are truncated to 4096 characters. - modern-plugin: Added Plugin SDK v2 settings schema APIs and a WebUI auto form for string, number, boolean, select, path, and secret fields; config is saved in the plugin-isolated config directory, secret values are not echoed, and blank secret saves preserve the previous value.
- modern-plugin: The Modern plugins tab now shows real stdio runtime state, PID, exit code, timeout metrics, and settings entry points;
settings.pageUrlremains limited to loopback HTTP URLs. - modern-plugin: The Modern plugins tab now includes local zip upload installation for
stdio-jsonrpcplugins, with overwrite, start-after-install, post-install scan refresh, and backend rejection for path traversal, invalid manifests, non-stdio transports, and updates while running. - modern-plugin:
unsafe.rawOpenApiremains available only as a disabled-by-default experimental entry that requires explicit permission.
♻️ Compatibility
- legacy-plugin: Legacy DLL plugin ordered dispatch, return-value interception, x86 PluginHost isolation, and drag sorting are unaffected by the new plugin tabs.
- linux: Linux preview packages support the main process, WebUI, QQBot gateway, and Plugin SDK v2 modern plugins; legacy DLL plugins,
isky.exe, and themessage.dllcompatibility layer remain Windows-package only. - modern-plugin: HTTP modern plugin controls currently provide registry-level enable, disable, remove, and state refresh behavior;
stdio-jsonrpcstatic discovery, zip install, start, stop, restart, crash recovery, token auth, SDK API permission checks, event delivery, log observability, settings schema, Python / Node.js / Go minimal SDKs, and generators are wired, while Java SDKs and stable API naming remain future work.
📝 Docs
- docs: Updated
docs/reference/update-check.mdwith download task progress endpoints, status fields, and WebUI download/install flow. - docs: Updated Wiki quick start, FAQ, and SDK download pages with Linux preview package startup, systemd long-running deployment, Linux auto-update behavior, and the Windows-only boundary for legacy plugins.
- docs: Updated
docs/reference/new-plugin-sdk.mdwith the Plugin SDK v2 protocol, event model, permission model, SDK method naming, and language coverage status. - docs: Updated
docs/designs/pluginhost-message-dispatch.mdwith the legacy/modern dispatch model, gateway business queue, and modern plugin queue differences. - docs: The Wiki now includes quick start, QQBot event setup, Webhook and reverse proxy, Plugin SDK, FAQ, SDK downloads, and preview.3 changelog pages, with Chinese/English i18n support; the homepage now links to GitHub.
- docs: Compressed the Wiki homepage
/assets/yuki.pngbelow 256 KB while keeping the same path. - release: Added a reusable version-release prompt covering Windows / Linux application packages, SDK packages, Wiki Release upload, and post-release verification.