Skip to content

ISkyPro 2.0.0-preview.3

Pre-release
Pre-release

Choose a tag to compare

@Zephdyn Zephdyn released this 08 Jul 07:35

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,包内保留 ISkyPro Unix 可执行权限、启用 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-jsonrpc transport、JSON-RPC 2.0 长度帧、初始化握手、typed + raw 事件和 messageReference
  • sdk: 新增 ISkyPro.PluginSdk.V2 C# 原型接口与 EchoPluginV2 示例,覆盖 typed 字段、rawPayload、延迟回复、非消息类 SDK 方法和日志。
  • sdk: 新增 Python / Node.js Plugin SDK v2 最小包和 stdio-jsonrpc 跨语言样例,封装 Content-Length framing、initialize、事件 ACK、invokelog.write 和被动文本回复。
  • sdk: 新增 Go Plugin SDK v2 最小 module 和 samples/stdio-go-plugin,封装 stdio-jsonrpc framing、initialize、事件 ACK、context.ContextInvokeLogWriteReplyText
  • 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-jsonrpc JSON-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.writeusers.getCurrentBot 和 catalog 方法前会校验 token、pluginId 归属、manifest 权限和 catalog defaultEnabled 状态;unsafe.rawOpenApi 默认继续由全局风险开关拒绝。
  • modern-plugin: stdio-jsonrpc 插件现在可接收 events.message JSON-RPC 事件;Main 会将 ModernPluginMessageEvent 映射为 Plugin SDK v2 event envelope,并将 PluginSdkV2EventAck 映射回分发结果。
  • modern-plugin: stdio-jsonrpc runtime 现在可处理插件主动发起的 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.exemessage.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 .download partial files and clears consumed or leftover packages, one-time installer scripts, and staging directories after successful installs and on application startup, preventing data/updates from accumulating one package per version.
  • about: Automatic installation supports Linux .tar.gz / .tgz main application packages; the Linux update script preserves user directories, replaces WebUI assets, and restarts ISkyPro.
  • 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.html plus 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.ps1 and .\iskypro.ps1 package -MainRuntime linux-x64 now produce ISkyPro-<version>-linux-x64.tar.gz, preserve the Unix executable bit for ISkyPro, 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-jsonrpc transport, JSON-RPC 2.0 length framing, initialize handshake, typed + raw events, and messageReference.
  • sdk: Added ISkyPro.PluginSdk.V2 C# prototype interfaces and EchoPluginV2, 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-jsonrpc cross-language samples that wrap Content-Length framing, initialize, event ACK, invoke, log.write, and passive text replies.
  • sdk: Added a Go Plugin SDK v2 minimal module and samples/stdio-go-plugin, wrapping stdio-jsonrpc framing, initialize, event ACK, context.Context, Invoke, LogWrite, and ReplyText.
  • 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 as stopped, invalid manifests appear as invalidManifest with 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-jsonrpc JSON-RPC client and managed process start path; user-triggered start now launches the manifest command, sends iskypro.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-jsonrpc plugins; stop sends plugin.stop, kills the process tree after a short timeout, and user stop/disable/shutdown exits do not trigger automatic restart.
  • modern-plugin: Unexpected stdio-jsonrpc exits now enter restartPending and 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.rawOpenApi remains rejected by the global risk switch by default.
  • modern-plugin: stdio-jsonrpc plugins now receive events.message JSON-RPC events; Main maps ModernPluginMessageEvent to a Plugin SDK v2 event envelope and maps PluginSdkV2EventAck back into dispatch results.
  • modern-plugin: The stdio-jsonrpc runtime 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.write plugin 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.pageUrl remains limited to loopback HTTP URLs.
  • modern-plugin: The Modern plugins tab now includes local zip upload installation for stdio-jsonrpc plugins, 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.rawOpenApi remains 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 the message.dll compatibility layer remain Windows-package only.
  • modern-plugin: HTTP modern plugin controls currently provide registry-level enable, disable, remove, and state refresh behavior; stdio-jsonrpc static 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.md with 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.md with the Plugin SDK v2 protocol, event model, permission model, SDK method naming, and language coverage status.
  • docs: Updated docs/designs/pluginhost-message-dispatch.md with 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.png below 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.