Skip to content

Releases: Infinifar/AzureQL

AzureQL v2.3.7

Choose a tag to compare

@github-actions github-actions released this 31 Oct 07:52

AzureQL v2.3.7 — What’s Changed / 更新内容

中文

客户端版本:AzureQL 2.3.7 · 服务端适配目标:青龙 2.24.0

  • 依赖管理: 补充 Python 包名、Git URL、requirements 文件和 pyproject.toml 的使用说明。删除依赖时,根据来源提示是否会卸载实际软件包;批量删除增加确认。
  • 任务规则: 修复编辑已有 @daily、@hourly 等宏时规则被清空的问题,并保留一次性任务已有的时间参数。青龙拒绝主规则或附加规则时,编辑弹窗显示相应提示并保留输入。
  • 附加规则保护: 读取、编辑、保存和备份时保留附加规则中的额外字段,包括嵌套对象和数组;修改或删除规则时,字段跟随对应条目。MCP 无法安全匹配已有额外字段时会拒绝替换并提示在应用内编辑。

验证状态: 相关模块单元测试及 Debug 构建已通过。青龙 2.24.0 实际服务端和手机验收仍待进行;请在升级后重点检查登录、任务规则与日志、脚本、依赖、订阅及备份恢复。

支持 Android 12 及以上。当前版本面向青龙 2.24.0,不保留旧版服务端兼容分支。

English

Client version: AzureQL 2.3.7 · Target server: QingLong 2.24.0

  • Dependencies: Added guidance for Python packages, Git URLs, requirements files, and pyproject.toml. Delete confirmations explain whether installed packages are removed; batch deletion now requires confirmation.
  • Task schedules: Fixed existing macros such as @daily and @hourly being cleared in the editor and preserved existing one-time task parameters. Server validation errors are shown in the editor without discarding input.
  • Additional schedule protection: Extra fields, including nested objects and arrays, are preserved when tasks are read, edited, saved, or backed up. Metadata stays with the corresponding entry. MCP rejects replacement when its string-only list cannot safely preserve existing extra fields and directs users to edit in the app.

Validation: Relevant module unit tests and the Debug build passed. Testing against a live QingLong 2.24.0 server and on a device remains pending; please check login, task schedules and logs, scripts, dependencies, subscriptions, and backup/restore after upgrading.

Requires Android 12 or later. This version targets QingLong 2.24.0 and does not maintain compatibility branches for older server versions.

Third-party software / 第三方组件

See THIRD_PARTY_NOTICES.md for third-party licenses. 第三方组件许可证详见 第三方组件声明。

Full Changelog: v2.3.6...v2.3.7

AzureQL v2.3.6

Choose a tag to compare

@github-actions github-actions released this 18 Oct 09:24

AzureQL v2.3.6 — What’s Changed / 更新内容

中文

客户端版本:AzureQL 2.3.6

服务端基线:青龙 2.23.0

脚本历史版本

  • 脚本页可查看最近 20 个历史版本,对比内容并恢复指定版本。
  • 恢复前会校验当前内容哈希;服务端内容已变更时阻止覆盖,本地存在未保存修改时也不会直接恢复。
  • 普通 UTF-8 脚本保存会纳入服务端历史;超过 1 MiB 的脚本使用带哈希校验的原子保存,并明确提示本次不生成历史版本。

青龙 2.23.0 适配

  • 系统日志使用 2.23.0 的有界 limit 请求,任务和订阅日志使用官方 offset/nextOffset/total/truncated 游标;旧版路由和客户端虚拟游标已移除。
  • 任务和订阅编辑页补充 node-cron 宏、日期与星期的 OR 语义,以及按服务端时区处理夏令时的说明。
  • 客户端现仅面向青龙 2.23.0,不再保留旧服务端兼容分支。

构建工具链

  • 升级至 Android Gradle Plugin 9.4.1、Kotlin 2.4.21、KSP 2.3.12 和 Gradle 9.7.1。
  • GitHub Actions 已验证 Debug 构建、单元测试、Android Lint 与 Compose UI 测试编译;正式 APK 在发布流水线中签名并校验。

本版本的青龙 2.23.0 真实服务端与实机验收将在下载正式 APK 后进行。

English

Client version: AzureQL 2.3.6

Server baseline: QingLong 2.23.0

Script version history

  • Browse the latest 20 script versions, compare their contents, and restore a selected version.
  • Restore requests verify the current content hash to prevent overwriting concurrent changes. Restoring is also blocked while unsaved local edits exist.
  • Regular UTF-8 script saves participate in server-side history. Scripts larger than 1 MiB use an atomic hash-checked save and clearly report that no history entry was created.

QingLong 2.23.0 support

  • System logs use the bounded 2.23.0 limit request, while task and subscription logs use the official offset/nextOffset/total/truncated cursor contract. Legacy routes and client-generated cursors have been removed.
  • Task and subscription editors document node-cron macros, OR semantics for day-of-month and day-of-week, and daylight-saving behavior based on the server time zone.
  • The client now targets QingLong 2.23.0 only and no longer carries compatibility branches for older server releases.

Build toolchain

  • Updated to Android Gradle Plugin 9.4.1, Kotlin 2.4.21, KSP 2.3.12, and Gradle 9.7.1.
  • GitHub Actions validates the Debug build, unit tests, Android Lint, and Compose UI test compilation. The release pipeline signs and verifies the production APK.

Live QingLong 2.23.0 server and device acceptance testing will follow using the downloadable production APK.

Third-party software / 第三方组件

Third-party components remain under their respective upstream licenses. See THIRD_PARTY_NOTICES.md.

第三方组件继续适用各自的上游许可证,详见 THIRD_PARTY_NOTICES.md。

Full Changelog: v2.3.5...v2.3.6

AzureQL v2.3.5

Choose a tag to compare

@github-actions github-actions released this 10 Oct 02:51

AzureQL v2.3.5 — What’s Changed / 更新内容

中文

客户端版本:AzureQL 2.3.5

服务端兼容目标:青龙 2.22

功能:支持青龙服务端版本 2.22

  • 配置文件详情接口迁移到 v2.22.0 的 /api/configs/detail?path=...,避免继续调用已经废弃的旧路径。
  • 认证请求收到 HTTP 401 时只清除失效 Token,继续保留用户授权保存的密码、Client Secret 与 mTLS 证书材料,便于重新认证。
  • 修改密码或 2FA 状态成功后主动使旧会话失效,避免继续使用服务端已经撤销的 Token。
  • 备份恢复健康检查现在可识别 HTTP 503,并显示调度服务暂不可用的明确提示。

日志可靠性

  • 通用日志读取适配 v2.22.0 的有界 offset、limit 与 tail 响应。
  • 任务从运行态进入终态后,会继续按游标排空全部剩余日志分页,避免遗漏最后几页或重复追加完成信息。
  • 长系统日志滚动和正文顶部下拉刷新已在 Android 16 真机上通过验证,刷新期间不会误唤起输入法。

首页与通知渠道

  • 首页“今日成功”和“今日失败”现可查看对应任务、命令、执行次数及已删除状态。
  • 通知设置加入青龙 v2.22.0 的 WPUSH 渠道字段,支持 API Key、Channel 与 Topic 广播编码;敏感字段继续默认遮罩且不落盘。

验证与兼容性

  • 全项目 53 个测试套件、300 项单元测试全部通过,Android Lint 与 Debug APK 构建成功。
  • 已在 Motorola XT2551-3(Android 16 / API 36)连接青龙 v2.22.0 完成覆盖安装、会话保留、首页明细、已完成任务日志和系统日志冒烟;未发现新增崩溃或 ANR。
  • WPUSH 真实发送、会改变认证状态的 401/密码/2FA 场景,以及恢复期间 HTTP 503 仍需在具备专用凭据或测试实例时验证。
  • 支持 Android 12(API 31)及以上;本版本重点适配青龙 v2.22.0,并继续保留既有兼容路径。

English

Client version: AzureQL 2.3.5

Server compatibility target: QingLong 2.22

Feature: QingLong server 2.22 support

  • Migrated config-file detail requests to the v2.22.0 /api/configs/detail?path=... endpoint instead of the retired legacy path.
  • An HTTP 401 on an authenticated request now clears only the expired token while retaining user-authorized saved passwords, client secrets, and mTLS certificate material for re-authentication.
  • Successful password or 2FA changes explicitly invalidate the previous session so a server-revoked token is never reused.
  • Backup-restore health checks now recognize HTTP 503 and present an actionable scheduler-unavailable message.

Reliable logs

  • General log reads now support the bounded v2.22.0 offset, limit, and tail response contract.
  • When a task reaches a terminal state, AzureQL continues draining every remaining cursor page, preventing truncated tails and duplicated completion output.
  • Long system-log scrolling and pull-to-refresh were validated on an Android 16 device without unexpectedly opening the keyboard.

Dashboard and notification providers

  • The dashboard’s Today Success and Today Failure counters now open task details with names, commands, run counts, and deleted-task state.
  • Notification settings add QingLong v2.22.0 WPUSH fields for API Key, Channel, and Topic broadcast encoding while preserving masked, non-persistent secret handling.

Validation and compatibility

  • All 53 test suites and 300 unit tests passed, together with Android Lint and the Debug APK build.
  • In-place update, preserved session state, dashboard details, completed-task logs, and system logs were smoke-tested on a Motorola XT2551-3 running Android 16 / API 36 against QingLong v2.22.0, with no new crash or ANR.
  • Live WPUSH delivery, destructive authentication scenarios involving 401/password/2FA changes, and HTTP 503 during restore still require dedicated credentials or a disposable test instance.
  • Requires Android 12 (API 31) or later. This release targets QingLong v2.22.0 while retaining the existing compatibility paths.

Third-party software / 第三方组件

Third-party components remain under their respective upstream licenses. See THIRD_PARTY_NOTICES.md.

第三方组件继续适用各自的上游许可证,详见 THIRD_PARTY_NOTICES.md。

Full Changelog: v2.3.4...v2.3.5

AzureQL v2.3.4

Choose a tag to compare

@github-actions github-actions released this 10 Sep 02:57

AzureQL v2.3.4 — What’s Changed / 更新内容

中文

网络备份与恢复

  • WebDAV 与 S3 网络存储现在支持浏览远端备份、选择归档并流式下载。
  • 下载过程限制文件类型、远端目录边界和最大字节数;完成后复用现有归档校验、二次覆盖确认、服务恢复和重新登录流程。
  • WebDAV 列表解析限制 XML 大小并拒绝 DTD/外部实体;S3 支持签名的 ListObjectsV2 分页和对象下载。
  • 取消、失败或完成后会清理本地临时文件,传输进度可在页面切换后继续观察。

网络存储配置保留

  • 修复覆盖安装后 WebDAV/S3 设置可能看似清空的问题。
  • 网络存储设置改用规范化、版本化的账户作用域,并只迁移同一账户的旧配置,避免跨账户串用。
  • 配置异步加载完成前显示明确加载状态,不再短暂展示空白表单。

English 本地化

  • 补齐客户端业务页面、校验错误、空状态、Toast、Snackbar 和其他瞬时提示的 English 文案。
  • 日期和时间按当前应用 Locale 使用系统格式;首页数字使用本地数字分组,动态任务、变量、标签和地址支持正确英文单复数。
  • 服务端日志、脚本源码和通知正文保持原样,不对用户内容进行错误翻译。

FCM 通知接收技术预览

  • 加入默认关闭的 Firebase 初始化和受约束的 FCM data payload 接收器。
  • 通知按服务器建立 Channel,锁屏默认隐藏正文;接收器不接受远端 Intent、URI、图标或任意富媒体地址。
  • 新增独立的中继威胁模型与安全协议,服务账户私钥不会进入 APK 或仓库。
  • 本版本尚未完成 FCM 实机验收、中继部署、设备配对、Token 注册或青龙 Webhook 自动配置;该能力当前不可视为端到端可用。

验证与兼容性

  • 用户已确认本轮除 FCM 外的功能通过实机测试。
  • 网络存储与备份、本地化、设置、任务、环境变量、脚本和 MCP 相关单元测试通过,Debug APK 构建成功。
  • GitHub Actions 将继续执行全量 JVM 测试、Android Lint、Compose 测试源码编译、正式签名 APK 构建和签名校验。
  • 支持 Android 12(API 31)及以上、青龙 v2.17 及以上。

English

Network backup and restore

  • WebDAV and S3 storage can now list remote backups, select an archive, and stream it to the device.
  • Downloads enforce archive types, configured-directory boundaries, and byte limits, then reuse the existing validation, destructive-restore confirmation, service recovery, and re-authentication flow.
  • WebDAV parsing limits XML size and rejects DTD/external entities. S3 uses signed paginated ListObjectsV2 requests and signed object downloads.
  • Local temporary files are removed after cancellation, failure, or completion, while transfer progress remains observable across navigation.

Persistent network-storage settings

  • Fixed WebDAV/S3 settings sometimes appearing empty after an in-place app update.
  • Settings now use a normalized, versioned account scope and migrate only the matching account’s previous values, preventing cross-account reuse.
  • The settings screen shows an explicit loading state until encrypted account settings are available instead of briefly rendering an empty form.

Complete English code localization

  • Expanded English coverage across business screens, validation errors, empty states, Toasts, Snackbars, and other transient messages owned by the app.
  • Dates and times follow the active app locale, dashboard numbers use locale-aware grouping, and dynamic task, variable, label, and address counts use correct English singular/plural forms.
  • Server logs, script source, and notification content remain unchanged so user-provided content is never mistranslated.

FCM receiving technology preview

  • Added default-off Firebase initialization and a constrained FCM data-payload receiver.
  • Notifications use per-server channels and hide their body on the lock screen. The receiver does not accept remote intents, URIs, icons, or arbitrary media.
  • Added a separate relay threat model and security protocol; Firebase service-account credentials never enter the APK or repository.
  • FCM device validation, relay deployment, device enrollment, token registration, and automatic QingLong Webhook configuration are not complete in this release. This is not yet an end-to-end notification service.

Validation and compatibility

  • The user confirmed all changes in this release except FCM on a physical device.
  • Unit tests passed for network storage/backup, localization, Settings, Tasks, Variables, Scripts, and MCP; the Debug APK also built successfully.
  • GitHub Actions continues to run the complete JVM suite, Android Lint, Compose test-source compilation, signed Release APK construction, and signature verification.
  • Requires Android 12 (API 31) or later and QingLong v2.17 or later.

Third-party software / 第三方组件

Third-party components remain under their respective upstream licenses. See THIRD_PARTY_NOTICES.md.

第三方组件继续适用各自的上游许可证,详见 THIRD_PARTY_NOTICES.md。

Full Changelog: v2.3.3...v2.3.4

AzureQL v2.3.3

Choose a tag to compare

@github-actions github-actions released this 09 Sep 07:58

AzureQL v2.3.3 — What’s Changed / 更新内容

中文

通知设置

  • 新增“设置 → 通知设置”,可直接读取、编辑并测试青龙当前通知渠道。
  • 动态支持 Gotify、Ntfy、Telegram、Webhook、Bark、邮件、Server 酱、PushDeer、钉钉、企业微信、飞书、PushPlus、WxPusher 等青龙官方渠道及版本命名差异。
  • 令牌、密钥和密码默认遮罩,仅保留在当前页面内存中;进程重建或切换账户后重新从当前服务器读取,避免跨账户串用。
  • “发送测试通知并保存”增加防重复提交、必填校验和安全错误分类;修复加载进度环偏心、拉伸及越出按钮的问题。
  • 若通知服务位于 mTLS 反向代理后,测试请求仍由青龙后端发出,不会继承 App 的客户端证书;请确保青龙容器可直接访问该服务。

按日系统日志

  • 设置中的“任务日志”入口更新为“系统日志”,按服务器时区列出最近 7 天日志并按需加载。
  • 支持长日志窗口化显示、滚动到底部、下拉刷新、空日志状态和 1 MiB 截断提示。
  • 兼容不接受 limit 查询参数的青龙 2.20.x:HTTP 400 时自动使用旧格式重试,同时继续在客户端限制读取上限。
  • 任务详情实时日志、订阅日志、日志 Repository 能力和 MCP 日志工具均继续保留。

验证与工程质量

  • 真实通知渠道“发送测试通知并保存”已通过手动实机验收;进程重建和多账户切换后未出现通知配置串用。
  • 较长系统日志滚动到底部及下拉刷新通过;任务详情实时日志与 MCP 日志读取快速回归通过。
  • 新增通知 Repository、字段注册表、ViewModel、系统日志数据层/ViewModel 与 Compose UI 回归测试。
  • 本地全量 JVM 测试、Android Lint、三组 Compose 测试源码编译、Debug/Release APK 构建全部通过。
  • GitHub Actions 推送验证、正式签名构建和 APK 签名校验全部通过。

English

Notification settings

  • Added Settings → Notification settings to load, edit, test, and save the active QingLong notification provider.
  • Dynamically supports QingLong providers including Gotify, Ntfy, Telegram, Webhook, Bark, Email, ServerChan, PushDeer, DingTalk, WeCom, Lark, PushPlus, WxPusher, and version-specific naming variants.
  • Tokens, keys, and passwords are masked by default and kept only in the current screen’s memory. Configuration is reloaded from the active server after process recreation or account switching to prevent cross-account reuse.
  • Added required-field validation, duplicate-submit protection, and safe error classification to Send test notification and save. Fixed the loading spinner being off-center, stretched, or rendered outside the button.
  • Notification tests are sent by the QingLong backend. If the provider is behind an mTLS reverse proxy, the app’s client certificate is not forwarded; ensure the QingLong container can reach the provider directly.

Daily system logs

  • Replaced the Settings-level Task logs entry with System logs, listing the latest seven days in the server timezone and loading each day on demand.
  • Added windowed long-log rendering, bottom scrolling, pull-to-refresh, empty states, and a 1 MiB truncation indicator.
  • Added compatibility for QingLong 2.20.x servers that reject the limit query parameter: the client retries the legacy request after HTTP 400 while preserving its local read limit.
  • Task-detail live logs, subscription logs, repository APIs, and MCP log tools remain available.

Validation and engineering quality

  • A real notification provider passed Send test notification and save on device. Process recreation and multi-account switching showed no configuration leakage.
  • Long system-log bottom scrolling and pull-to-refresh passed on device; task live logs and MCP log reads passed regression checks.
  • Added regression coverage for the notification repository, provider registry, ViewModel, system-log data/ViewModel behavior, and Compose UI.
  • Full local JVM tests, Android Lint, three Compose test-source compilations, and Debug/Release APK builds all passed.
  • GitHub Actions push verification, signed release construction, and APK signature verification all passed.

Requires Android 12 (API 31) or later and QingLong v2.17 or later.

Full Changelog: v2.3.2...v2.3.3

AzureQL v2.3.2

Choose a tag to compare

@github-actions github-actions released this 06 Sep 18:52

AzureQL v2.3.2 — What’s Changed / 更新内容

中文

连续滑动导航

  • 首页、任务、脚本、订阅、环境和设置现在可以连续左右滑动切换,页签与底部导航保持同步。
  • 脚本与订阅继续共享同一个脚本管理状态;到达内部页面边界后,滑动会自然交接到相邻主页面。
  • 从任务编辑入口打开脚本时,仍会携带脚本路径并自动切换到脚本页。

脚本与订阅管理

  • 脚本根目录及文件夹菜单新增“新建文件夹”,支持嵌套目录,并拦截非法名称、路径分隔符和同名冲突。
  • 文件与文件夹的三点菜单新增“复制路径”,保留文件长按复制路径操作。
  • 订阅卡片不再显示或占用仓库链接区域,状态和定时规则收进紧凑内容区。

界面布局

  • 任务与环境变量搜索框缩短,搜索按钮进一步左移,减少右侧拥挤。
  • 任务编辑弹窗改为与环境变量编辑相同的 Material 3 标准宽度;实例模式使用等宽单行布局,避免文字换行错位。
  • 环境变量卡片与订阅卡片统一紧凑内边距;备注不再额外撑高操作行,启停继续使用尺寸更小的原生开关。

实时日志修复

  • 修复任务结束时完整日志快照被误判为增量内容、造成日志重复显示的问题。
  • 仅当青龙明确返回游标时追加日志;无游标响应作为完整快照替换,同时保留终态最后一次补拉,避免遗漏末尾输出。

验证与兼容性

  • 新增脚本文件夹、路径复制、环境变量开关和任务终态日志快照回归测试。
  • 本地发布验证通过 44 个测试套件、258 项单元测试(0 失败、0 错误、0 跳过),Android Lint、备份/环境变量/脚本 Compose 测试源码编译及 Release APK 构建全部成功。
  • Motorola XT2551-3(Android 16)通过环境变量卡片 4 项 UI 测试、正反向连续滑动导航及底栏跳转冒烟;任务终态日志由用户实机确认正常。
  • 支持 Android 12(API 31)及以上,青龙 v2.17 及以上。

English

Continuous swipe navigation

  • Home, Tasks, Scripts, Subscriptions, Variables, and Settings can now be traversed continuously with horizontal swipes, synchronized with tabs and bottom navigation.
  • Scripts and Subscriptions keep a single shared feature state; swipes hand off naturally to adjacent top-level pages at the inner pager boundaries.
  • Opening a script from a task still carries its path and switches directly to the Scripts page.

Script and subscription management

  • Added folder creation from the script root and directory menus, including nested-directory support and validation for invalid names, path separators, and duplicate entries.
  • Added Copy path to the overflow menu for both files and folders while retaining long-press copy for files.
  • Subscription cards no longer display or reserve space for repository URLs; status and schedule are presented in a compact content area.

UI refinements

  • Shortened the Tasks and Variables search fields and moved the submit icon further left to reduce right-edge crowding.
  • Task editing now uses the same standard Material 3 dialog width as variable editing. Equal-width, single-line instance controls prevent wrapping and alignment shifts.
  • Variable and subscription cards now share compact padding. Notes no longer increase the action-row height, and enable/disable remains a smaller native switch.

Live-log correctness

  • Fixed completed-task log snapshots being mistaken for incremental chunks and appended repeatedly.
  • Logs are appended only when QingLong returns an explicit cursor. Cursorless responses replace the current snapshot, while the final post-completion fetch remains in place so trailing output is not lost.

Validation and compatibility

  • Added regression coverage for script folders, path copying, the variable toggle, and terminal task-log snapshots.
  • Local release validation passed 44 suites and 258 unit tests with zero failures, errors, or skips. Android Lint, Compose test-source compilation for Backup/Variables/Scripts, and the Release APK build also completed successfully.
  • A Motorola XT2551-3 running Android 16 passed all four variable-card UI tests, forward/reverse continuous-swipe navigation, and bottom-navigation smoke checks. Terminal task-log behavior was also confirmed on device by the user.
  • Requires Android 12 (API 31) or later and QingLong v2.17 or later.

Third-party software / 第三方组件

Sora Editor and the selected Monarch language definitions remain under their respective upstream licenses. Both permit commercial use when their license conditions are followed. See THIRD_PARTY_NOTICES.md.

Sora Editor 与所选 Monarch 语法定义继续适用各自的上游许可证;遵守许可证条件时均允许商业使用。详见 THIRD_PARTY_NOTICES.md。

AzureQL v2.3.1

Choose a tag to compare

@github-actions github-actions released this 06 Sep 12:48

AzureQL v2.3.1 — What’s Changed / 更新内容

中文

设置内多账户与服务器管理

  • 新增独立的“账户与服务器”页面,可在应用内预览、排序、编辑、删除和直接切换已保存账户;只有新增账户才进入完整登录页。
  • 账户卡片展示脱敏服务器地址、别名、认证方式、TLS/mTLS 状态、最近使用时间和当前账户标记,不显示 Token、密码或 Client Secret。
  • 支持密码、Client ID、2FA 与 mTLS 账户直接切换。候选账户认证成功后才替换当前会话;网络、TLS、证书或验证码失败时继续保留原账户。
  • 当前账户删除前会先安全切换至其他账户;备份、恢复或网络导出仍在运行时会阻止可能造成跨账户数据混用的切换或删除。

账户内证书维护

  • 可在账户编辑界面直接添加、替换或移除 PKCS#12 客户端证书和私有 CA,无需返回登录页重新创建账户。
  • 新证书先原子复制到应用私有目录,证书密码继续使用 Android Keystore 加密保存。
  • 当前账户保存 TLS 变更后自动使用候选配置重新认证;失败或取消 2FA 时恢复旧账户记录、旧证书密码和原会话。
  • 替换或删除账户后,只清理不再被其他已保存账户或当前会话引用的证书文件。

账户隔离与界面改进

  • 删除账户会同步清理其响应缓存、带账户元数据的脚本草稿、WebDAV/S3 配置和本地 MCP Agent 授权,不影响其他账户。
  • WebDAV 与 S3 网络存储设置改为按账户隔离;旧版全局配置仅迁移给升级时的当前账户。
  • 账户卡片改用明确的“切换”和“编辑”文字操作;置顶、上移、下移和删除集中到“更多”菜单,减少误触并改善窄屏信息层级。
  • 长服务器地址和用户名增加省略保护,当前账户使用状态标签、色彩与描边明确区分。

验证与兼容性

  • 2.3.1 发布前本地 CI 等价验证通过:44 个测试套件、250 项单元测试全部通过,失败、错误和跳过均为 0;Debug APK、Android Lint 与备份模块 AndroidTest 源码编译通过。
  • 三账户切换矩阵以及账户编辑、删除和证书直接替换已在 Motorola XT2551-3(Android 16)实机验收通过。
  • 新增单元测试覆盖候选连接成功/失败回滚、2FA、账户删除、隔离清理、证书保存及错误证书回滚。
  • 支持 Android 12(API 31)及以上,青龙 v2.17 及以上。

English

In-app account and server management

  • Added a dedicated Accounts and Servers screen for previewing, sorting, editing, deleting, and directly switching saved accounts. Only adding a new account opens the full sign-in flow.
  • Account cards show a masked server address, alias, authentication method, TLS/mTLS status, last-used time, and current-account marker without exposing tokens, passwords, or client secrets.
  • Password, Client ID, 2FA, and mTLS accounts can be switched directly. The active session is replaced only after the candidate account authenticates successfully; network, TLS, certificate, and verification-code failures leave the previous account available.
  • Deleting the active account first performs a safe switch when another account exists. Active backup, restore, or network-export work blocks account changes that could mix account-scoped data.

Certificate maintenance from account settings

  • PKCS#12 client certificates and private CAs can now be added, replaced, or removed from the account editor without recreating the account through the sign-in screen.
  • New certificate files are copied atomically into app-private storage, while certificate passwords remain encrypted with Android Keystore.
  • Saving TLS changes for the active account re-authenticates with an isolated candidate configuration. A failure or cancelled 2FA challenge restores the previous account record, certificate password, and active session.
  • Replaced certificate files are removed only after no saved account or active session references them.

Account isolation and UI improvements

  • Removing an account also clears its response cache, account-tagged script drafts, WebDAV/S3 settings, and local MCP Agent access without affecting other accounts.
  • WebDAV and S3 settings are now isolated per QingLong account. Legacy global settings migrate only to the account active during upgrade.
  • Account cards now use explicit Switch and Edit actions. Pin, move, and delete operations are grouped in a More menu to reduce accidental actions and visual clutter.
  • Long server addresses and usernames are safely ellipsized, while the active account uses a distinct status chip, color, and outline.

Validation and compatibility

  • The local CI-equivalent pre-release run passed 44 suites and 250 unit tests with zero failures, errors, or skips, together with the Debug APK build, Android Lint, and backup-module AndroidTest source compilation.
  • The three-account switching matrix, account editing/deletion, and direct certificate replacement passed device acceptance on a Motorola XT2551-3 running Android 16.
  • Added unit coverage for candidate-session success and rollback, 2FA, account deletion, scoped cleanup, certificate persistence, and invalid-certificate rollback.
  • Requires Android 12 (API 31) or later and QingLong v2.17 or later.

Third-party software / 第三方组件

Sora Editor and the selected Monarch language definitions remain under their respective upstream licenses. Both permit commercial use when their license conditions are followed. See THIRD_PARTY_NOTICES.md.

Sora Editor 与所选 Monarch 语法定义继续适用各自的上游许可证;遵守许可证条件时均允许商业使用。详见 THIRD_PARTY_NOTICES.md。

AzureQL v2.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 03:35

AzureQL v2.3.0 — What’s Changed / 更新内容

中文

内置代码编辑器与语法高亮

  • 使用 Sora Editor 为普通脚本提供原生查看与编辑体验,支持行号、块引导线和增量语法高亮。
  • 按扩展名自动识别 Python、JavaScript、TypeScript、Shell、JSON 与 YAML,也可在标题栏手动切换语言或纯文本。
  • 未知类型安全降级为纯文本;大文件继续使用 8 KiB 分段预览,避免完整脚本进入编辑器布局。
  • 编辑保存继续沿用既有的缓存复用、服务端版本/哈希冲突检查、上传复核和待上传草稿恢复链路。

WebDAV 与 S3 网络备份

  • “数据备份与恢复”更名为“备份与恢复”,本机导出入口更名为“导出到本机存储”。
  • 新增独立“网络存储设置”子页,支持 WebDAV 和 S3 兼容存储;两者均已配置时,导出前明确选择目标。
  • WebDAV 支持连接测试、逐级创建目录和流式上传;S3 支持 AWS SigV4、自定义端点、路径样式、自动区域重签和条件写入。
  • WebDAV 密码及 S3 Access Key / Secret Key 使用 Android Keystore 加密;上传不携带青龙 Token,并保留后台进度、取消、重试、通知与脱敏错误分类。
  • “选择导出内容”默认折叠,仅显示基础设置、配置文件和脚本文件,可展开查看全部模块。

MCP 局域网与授权控制

  • MCP 服务默认仍仅本机可访问,可在服务停止时显式开启“局域网可访问”;设置页默认展示首选局域网 IPv4,其他 VPN/IPv6 地址按需展开。
  • 局域网模式继续执行 Host/Origin 校验、Bearer Token 鉴权、请求体/并发/速率限制和本地脱敏审计。当前为明文 HTTP,只适合可信局域网,不应暴露到公网。
  • 已授予“受控写入与执行”的 Agent 可单独开启“静默允许写入与执行”,仅跳过逐次确认;账户绑定、Scope、参数/路径上限、串行化、幂等与脚本冲突保护保持不变。
  • 开启高风险选项前需要设备身份验证;撤销受控权限会同步撤销静默授权。

mTLS 连接维护

  • 启用客户端证书的网络客户端最长复用 12 小时,之后在下一次 API 或 WebSocket 建连前重建 SSLContext,并自动复用当前账户的 PKCS#12、证书密码和私有 CA 完成完整握手。
  • 普通非 mTLS 连接继续长期复用;该机制不静默重放账号密码,也不会把真正的 Token 过期、DNS 故障或证书失效隐藏为续连成功。
  • 此路径需要等待会话自然过期,跨日实机验证仍在进行,不计作已通过验收。

验证与兼容性

  • 2.3.0 发布前已通过 Debug APK 构建、全部 Debug 单元测试、Android lint 与备份模块 AndroidTest 源码编译,失败任务为 0。
  • WebDAV 真实服务上传已通过;S3 模块已覆盖签名、上传、区域重试和输入校验,真实 AWS S3 / R2 / MinIO 仍待专项验证。
  • Sora 编辑器已在 Motorola XT2551-3(Android 16)验证语言切换、输入法、退出和只读显示;脚本实际保存/冲突/断网仍沿用既有链路并继续观察。
  • MCP 局域网监听与未授权拒绝已在 Android 16 实机验证;服务默认设置仍为仅本机访问。
  • 支持 Android 12(API 31)及以上,青龙 v2.17 及以上。

English

Built-in code editor and syntax highlighting

  • Added a native Sora Editor experience for regular scripts, including line numbers, block guides, and incremental syntax highlighting.
  • Language mode is selected from the file extension for Python, JavaScript, TypeScript, Shell, JSON, and YAML, with manual language and plain-text overrides.
  • Unknown files safely fall back to plain text. Large files keep the existing 8 KiB paged preview instead of entering the full editor layout.
  • Saving continues to use the existing cache reuse, server version/hash conflict checks, upload verification, and pending-draft recovery flow.

WebDAV and S3 network backups

  • Renamed “Data backup & restore” to “Backup & restore” and clarified the local destination as “Export to local storage”.
  • Added a dedicated Network Storage Settings page for WebDAV and S3-compatible storage. When both are configured, the destination is selected explicitly before export.
  • WebDAV supports connection tests, recursive directory creation, and streaming uploads. S3 supports AWS SigV4, custom endpoints, path-style access, automatic region re-signing, and conditional writes.
  • WebDAV passwords and S3 access/secret keys are encrypted with Android Keystore. Upload requests never carry the QingLong token and retain background progress, cancellation, retry, notifications, and sanitized error reporting.
  • The export-content list is collapsed by default and initially shows Base settings, Configuration files, and Scripts, with an option to reveal every module.

MCP local-network access and authorization controls

  • MCP remains loopback-only by default and can be explicitly exposed to a trusted local network while the service is stopped. The settings page shows the preferred LAN IPv4 first and keeps VPN/IPv6 endpoints collapsed.
  • Local-network mode retains Host/Origin validation, Bearer-token authentication, body/concurrency/rate limits, and sanitized local auditing. Transport is currently cleartext HTTP and must not be exposed to untrusted or public networks.
  • Agents with Controlled Writes & Execution can optionally enable silent approval. This skips only per-operation confirmation; account binding, scopes, parameter/path limits, serialization, idempotency, and script conflict protection remain enforced.
  • Device authentication is required before enabling either high-risk option, and revoking controlled access also revokes silent approval.

mTLS connection maintenance

  • mTLS clients are rotated after at most 12 hours. Before the next API or WebSocket connection, AzureQL rebuilds the SSLContext and automatically reuses the current account’s PKCS#12 certificate, certificate password, and private CA for a full handshake.
  • Non-mTLS clients remain reusable without periodic rotation. The mechanism does not replay account passwords or disguise genuine token expiry, DNS failures, or invalid certificates.
  • Cross-day device validation remains in progress because the session must expire naturally; it is not reported as a completed acceptance test in this release.

Validation and compatibility

  • The 2.3.0 pre-release run passed the Debug APK build, all Debug unit tests, Android lint, and compilation of the backup module’s AndroidTest sources with zero failed tasks.
  • Upload to a real WebDAV service passed. S3 signing, upload, region retry, and validation are covered by module tests; real AWS S3, R2, and MinIO remain pending.
  • Sora language switching, IME behavior, dismissal, and read-only rendering were checked on a Motorola XT2551-3 running Android 16. The existing save/conflict/offline flow remains under observation.
  • MCP LAN listening and unauthorized rejection were checked on Android 16; the default remains loopback-only.
  • Requires Android 12 (API 31) or later and QingLong v2.17 or later.

Third-party software / 第三方组件

Sora Editor and the selected Monarch language definitions remain under their respective upstream licenses. Both licenses permit commercial use when their conditions are followed; neither is a non-commercial-only license. See THIRD_PARTY_NOTICES.md.

Sora Editor 与所选 Monarch 语法定义继续适用各自的上游许可证。遵守对应条件时,两者均可用于商业用途,
并非“仅限非商业使用”。具体归属、源码、许可证入口和分发检查见 THIRD_PARTY_NOTICES.md。

AzureQL v2.2.9

Choose a tag to compare

@github-actions github-actions released this 05 Sep 10:33

AzureQL v2.2.9

本版本集中修复 MCP 长连接稳定性、设置页任务日志触底抖动,以及订阅运行期间缺少可见实时日志的问题。

MCP 连接稳定性

  • MCP 服务端由 Ktor Netty 切换为 CIO,修复 Android 上首次响应后新连接持续被重置的问题。
  • 服务启动会等待监听器真正就绪;端口被占用或监听失败时进入失败状态,不再留下“显示运行中但实际不可用”的前台服务。
  • 传输协程由独立 SupervisorJob 管理,停止服务时同步取消并释放端口。
  • 移除已经不需要的 Netty 依赖、原生传输探测和大范围 R8 keep 规则,缩小混淆配置面。
  • 保持原有安全边界:默认仅本机访问,新 Agent 默认只读;“局域网可访问”和预授权全部写入/执行仍是后续高风险规划,本版本未开放。

任务日志体验

  • 设置 → 任务日志不再使用会与正文列表争抢嵌套滚动的 ModalBottomSheet,改为 Activity 同窗覆盖层。
  • 只有顶部拖动柄响应下拉关闭,日志正文可以独立滚动;支持系统返回键和遮罩关闭。
  • 关闭时保留已渲染正文直至 120 ms 淡出结束,避免加载图标、编辑图标或底层列表在退出动画中闪过。
  • 修复查看 20 MiB 日志并滑至底部时的持续抖动,以及退出日志时输入法快速闪现的问题。

订阅实时日志

  • 订阅执行期间每 2 秒刷新日志,界面明确显示“实时更新中”,进入终态后自动停止轮询。
  • 每轮先读取最后一段正文,再确认订阅终态,避免执行很快结束时丢失成功行或结束行。
  • 支持标准 offset/nextOffset 增量响应,并裁剪服务端返回的重叠前缀。
  • 兼容青龙 2.21.0 实测出现的零游标响应:将正文视为最新全量快照并计算 UTF-8 虚拟游标,不再重复追加整段日志。
  • 保持最新 256 KiB 的显示窗口;关闭、切换订阅或终态后停止后台请求。

验证结果

  • Motorola XT2551-3(Android 16 / API 36)通过 ADB 端口转发连续访问 MCP:未授权请求稳定返回 401,达到限流后稳定返回 429,服务与应用进程持续存活。
  • 同设备打开 20 MiB 日志,触底静置采样正文保持稳定;反向滚动、返回键和顶部拖动关闭均正常,未触发输入法显示。
  • 同设备实际运行 BilibiliToolPro 订阅:运行中日志可见增长,约 3 秒进入终态后保留完整结束内容且没有重复正文。
  • 受影响模块共 64 项 JVM 测试通过:MCP 30 项、日志 1 项、脚本 33 项;本地 Debug、Release、R8 和 lintVital 构建通过。
  • GitHub Actions 完成全量 JVM 测试、Android lint、Compose AndroidTest 源码编译、正式签名 Release APK 构建和签名校验。

兼容性

  • Android 12(API 31)及以上。
  • 青龙 v2.17 及以上;本版本在青龙 2.21.0 上完成重点回归。

AzureQL v2.2.8

Choose a tag to compare

@github-actions github-actions released this 04 Sep 18:28
7e67081

AzureQL v2.2.8

本版本集中修复备份恢复、环境变量导入、依赖操作、任务日志、大型脚本和 Android 16 返回手势相关问题,并完成第一轮全局性能优化与真机回归。

2026-09-04 完成内容

备份与恢复

  • 修复导出任务取消后可能遗留 0 字节 SAF 文档的问题:等待 WorkManager 确认取消后,使用 DocumentsContract.deleteDocument() 清理,普通 ContentResolver.delete() 作为回退。
  • 补齐导出失败与自动重试耗尽后的文件清理,按 15/30/60 秒退避重试,最终失败不会误报成功,也不会在 SAF 目录留下空文件。
  • 增加无效 .tgz/.gz 归档的上传前校验;网络中断时可取消上传,并明确提示服务端数据尚未恢复。
  • 完成基础数据导出 → 上传 → 二次确认 → 服务重启 → 返回登录页 → 重新登录的核心闭环实机验证。

环境变量备份导入

  • 支持空文件、重复项、批量导入、部分失败重试和失败摘要,避免以笼统 HTTP 500 结束。
  • 重复变量不会覆盖已有数据;实机验证 47 条重复项全部跳过。
  • 实机验证 101 条有效变量批量导入,并将 1 条非法项在本地分类;空文件在本地直接拒绝,不发起网络请求。
  • 保留并恢复环境变量的置顶、禁用状态;搜索输入停止 300 ms 后自动提交远端搜索,同时保留搜索按钮的立即提交功能。

依赖管理

  • 完善新增、重装、删除的异步终态判断和日志结果展示,不再把“任务已提交”误判为最终成功或失败。
  • 增加单项与批量操作的并发门闩,快速重复点击不会重复提交;异常路径也会正确释放门闩。
  • 完成依赖新增、重装、删除的回归测试与 Android 16 真机验证,覆盖安装日志、结束时间、耗时和最终列表状态。

MCP 安全与连接

  • 修复 R8 压缩后 Netty 反射导致的 MCP 服务启动崩溃,扩大必要的运行时 keep 范围并排除未打包的可选 codec。
  • 实机验证未授权请求统一返回 401 UNAUTHORIZED,不会暴露匿名 MCP 接口。
  • 实机验证带有效 Bearer Token 的 initialize 握手、协议 2025-03-26 和 tools/list;当前返回 11 个只读工具。
  • MCP 设置入口明确为“创建 Agent(默认只读)”,读写权限需要后续单独授权;测试 Agent 已在验证后撤销。

任务、依赖与订阅日志

  • 修复日志选择层包裹整个 LazyColumn 导致的滚动抖动,改为每个可见日志分块独立支持文本选择。
  • 用 Activity 同窗覆盖层替换日志和任务详情的独立 ModalBottomSheet 窗口,修复返回时输入法快速闪现问题。
  • 保留遮罩点击、系统返回和顶部下拉关闭;下拉超过距离或速度阈值关闭,未达到阈值时弹性回位,正文日志仍可独立滚动。
  • 运行中任务日志支持先读取 64 KiB 尾部,再按 2 秒间隔使用 nextOffset 增量追加;任务结束、切换日志、退出页面或日志轮转时停止并重置,界面最多保留最新 256 KiB。
  • 依赖安装日志和订阅日志的返回路径完成 Android 16 真机回归,退出后不再闪现输入法。

返回手势与页面切换

  • 关闭 Android 16 预测返回造成的整窗缩放,保留 AndroidX 返回栈处理;设置、备份和依赖管理页面均可正常返回。
  • 页面切换继续保持无动画,真机复测未出现 missed VSync,设置返回首页时不再产生拖拽/卡顿观感。

大型脚本缓存、编辑与预览

  • 新增脚本草稿 .meta 边车文件,保存服务端大小、可用时的修改时间和原始 SHA-256;以服务端 size 为主要版本标识,兼容当前青龙脚本树不返回 mtime 的情况。
  • 脚本关闭后可复用未变化的本地缓存;脏稿优先恢复,不会被旧云端正文覆盖。缓存增加 64 个文件 / 256 MiB 的 LRU 上限,并联动清理 .meta、.bak 和孤儿边车文件。
  • 修复离线打开已缓存脚本时误删缓存并重新下载的问题;服务端不可达时直接复用干净缓存,明确确认文件不存在时才重新下载。
  • 上传增加服务端版本/大小二次确认;离线、超时、HTTP 4xx/5xx、冲突或服务端未确认时保留草稿并标记“待上传”,不会伪造成功。相关异常路径和 MCP update_script 分支已补齐测试。
  • 修复外部编辑器流程的快照、取消截断还原、异步落盘等待、进程重建恢复和 .meta 原子写入。
  • 长单行脚本按 1024 字形安全边界进行视觉分段,避免拆开代理对、ZWJ Emoji、肤色修饰符、组合标记和地区指示符;恢复软换行并移除横向滚动,视觉换行不会改变保存内容,支持复制当前原始段落。
  • Android 16 真机验证 10 MiB 脚本显示“第 1 / 1280 段”并可翻至下一段;50 MiB 脚本首次下载约 28.7 秒,缓存复用再次打开约 2.6 秒,约提升 11 倍。

性能与工程质量

  • ApiClientRegistry 按连接配置复用 Retrofit、OkHttp 和 TLS 材料;Token 更新不会触发客户端重建,相同配置的并发首次创建只构建一组客户端。
  • SessionSnapshot 在首次需要时读取 DataStore/Keystore,后续请求复用内存快照,不再重复解密和读取持久化数据。
  • 任务、依赖、订阅和日志正文保持青龙服务端原文,不再被本地化逻辑改写;日志查看器限制为最多 256 KiB 窗口。
  • 完成 Macrobenchmark 和 Baseline Profile 回归:覆盖冷启动、连续切换页面、500 项任务、大型脚本目录、1/5/20 MiB 日志、10/50 MiB 脚本及订阅日志轮询。
  • 复测确认大脚本文本布局的灾难性长帧已消除;script-50 场景 Frame overrun P99 为 11.20 ms,分页预览未出现此前的布局尖峰。
  • 补齐核心数据、脚本、依赖、MCP、备份和 Compose 相关回归测试;GitHub Actions #267 已完成 Debug 验证、签名 Release 构建和 APK 签名校验。

兼容性与安全

  • 支持 Android 12(API 31)及以上版本。
  • Release APK 使用 AzureQL 正式发布密钥签名。
  • MCP 默认创建只读 Agent;环境变量值、Token、密码和服务端敏感路径不会写入日志、审计或 MCP 响应。

已知限制

  • 已确认部分第三方文件管理器(包括 MT 管理器)无法通过 AzureQL 的 FileProvider content:// URI 原子写回文件,因此使用此类编辑器保存大型脚本可能失败。取消截断还原、进程重建恢复和待上传保护已实现,后续将继续评估 SAF 文档编辑或更清晰的兼容性提示。

参考

Android 12+ 用户可下载下方 APK 安装使用。