Releases: AsterleedsGuild0/astrbot_plugin_webhook_notifier
Release list
v1.3.0
- 修复 OpenCode Desktop 在会话元数据回退路径中的会话标题回退处理,使回退逻辑按现有安全会话标题契约选择可展示标题;本条只记录回退行为已修正,不把诊断信号夸大为已确认的 Desktop 内部根因。
- 新增通用
markdownprovider 的受 endpoint Bearer 鉴权保护的信息推送能力:请求通过既有 endpoint 鉴权后,接收固定event: "markdown.message"的 JSON object;允许字段仅为event、id、title、markdown、target_alias。markdown必须为非空字符串,并受 32,768 字符与 64 KiB 限制;可选字段也有界校验,未知字段拒绝。内容由受限 Markdown parser 渲染为文本或 HTML,不进入 Jinja 执行。 - 增加 OpenCode 根会话上下文:子会话卡片保留当前会话,并显示“所属主会话”;完整 root-cycle 时间线显示“所属会话”。出站只传递安全清洗后的
session.rootName,父链只使用匿名parentRef且最多解析 16 层;父项缺失、出现环路或超过深度时省略,不传 ID、parentID、rootRef、路径或原始对象,旧 payload 继续向后兼容。 - 已完成的真实链路与针对性证据:Bun 279、Python 合并 532、Package 14、Chromium 静态渲染 smoke、测试 ZIP 结构检查;OpenCode Desktop 完全重启后 2 次 Question、2 次 Permission 及
session_idle链路均返回 HTTP 200,用户目视确认显示正常。 - 完整 Release 门禁(本地)通过:
uv lock --check、全仓 Ruff、前端 clean build、Bun 279 项与 Python 1191 项测试全部通过。本地正式 ZIP 为单一插件根目录、51 entries、2,902,505 bytes,三版本源为v1.3.0/1.3.0,SHA-256 为4a22f4b91d111a0b33b763849cf72a6b2753de96ccd755fe342d429d47adb2e1,forbidden=0。 - 正式发布证据:GitHub Actions run
32240193983的 attempt 2 成功;首轮仅因 Chrome CDP target 启动瞬态Connection refused失败,重跑通过。tagv1.3.0精确指向提交9dadf96608ef4018d724d27059389db48ba33e97;GitHub Release 为非 draft、prerelease=false且为 Latest,发布于2026-08-19T10:00:25Z。正式 ZIP 为 51 entries、2,902,505 bytes,远端 SHA-256 为1fba8ce3acb360246148c5b37dc057e67c4155d1e7c6383b5667d252ac224465,Release notes 已覆盖本版本三项主要变更。 - 插件市场安装/更新路径与生产 AstrBot 使用远端正式资产的 smoke 仍待按实际结果验证;本节不将这两项写成已完成。
v1.2.0
- 自
v1.1.0以来新增 OpenCode 元数据异常诊断、Subagent Timeline 覆盖统计与用户等待时间线,并将这三组向后兼容能力纳入v1.2.0稳定版,不破坏既有 V1 公共契约。 - anomaly 元数据异常诊断(
metadataDiagnostics=anomaly):全天低概率取证模式,专用于捕获 OpenCode Desktop 内部 session 被判为 root/unknown 并产生 fallback 卡片的问题。每阶段最多 32 条候选,按同一匿名 session + 相同安全 payload 去重;不增加任何session.get/session.messages/ HTTP 调用,只观测既有链路。日志为有界、匿名、fail-closed 的元数据诊断,不记录标题/正文、ID 值、路径、Token 或响应体。该模式不承诺已经找到 fallback 根因,只提供取证信号;采集后应恢复为off。 - #25:Subagent Timeline 顶部覆盖统计:总任务时长使用 root busy→idle 周期的可靠
durationMs;子任务覆盖时长仅合并 timing quality 为observed/fallback且起止完整、并裁剪到[0, 总任务时长]的可靠区间,重叠或相邻区间按并集计时,覆盖率限制在 0~100%。数据不完整时只统计可靠完整区间,并将峰值与覆盖指标标为“已观测”;不对未覆盖区间作 root 或其他执行归因。统计区改为两行响应式网格布局,甘特图仍只展示 subagent。 - #26:统一用户等待时间线(
userWaitTimeline):OpenCode Client 采集 Question/Permission asked→resolved 的插件接收时间区间,以独立可选字段、严格隐私安全且向后兼容的 envelope 传递,并在同一张完整 root-cycle 甘特图中与 subagent 区间对齐展示。- 甘特图横轴改为完整 root 总时长:总任务时长可靠时横轴为
0 → durationMs,缺失时才回退到已观测最大终点并标记不完整;顶部固定“等待用户”轨道,Question 与 Permission 可区分;不单独绘制第二张图,不计入子任务数、峰值并发或 subagent 覆盖率。 - interval 使用
kind、result、intervalState、root 相对 offset 与 duration;complete区间参与并集计时,left/right censored 保留边界但不伪造 duration、不参与并集;等待区间与 subagent 可重叠,不推导主 agent 真实活跃时间。 - 统一图顶部增加“未分类时间 / 占比”:总任务时长减去已知可靠并集(subagent 并集 + 等待并集)得出,观测受限时标注“至多/观测受限”,不把未观测时间归因给 root 或其他执行。
- 只统计 root session 自身的等待;原始 session/request ID、正文、答案、pattern/target、URL 与 Token 一律不出站、不进日志、不渲染;request ID 仅用于去重/撤销。
- 服务端先升级并重载,再部署新版 TS Client 并完全重启 OpenCode;旧服务端严格 allowlist 不接受新增
userWaitTimeline。
- 甘特图横轴改为完整 root 总时长:总任务时长可靠时横轴为
- 验证证据(正式发布前本地门禁与真实链路):
uv lock --check、全仓 Ruff、前端 clean build 与 1123 项 Python 测试通过;Bun(TypeScript Client)272 项通过;真实 Chrome/CDP timeline geometry 与截图 smoke 5/5 通过。- 真实 Question/Permission、长等待场景与 T2I 渲染 smoke 已通过。
- 本地正式 ZIP 为单一插件根目录、49 个文件、2,890,724 bytes,三版本源为
v1.2.0/1.2.0,SHA-256 为89fa8ebe3f9541c87b1d3f365d305e56061cf17ae40d6f75fe406852aed244b1,未包含.git、.env、auth/secrets、node_modules或tmp。 - GitHub Actions dry-run、tag、GitHub Release、远端正式资产及 AstrBot 插件市场安装/更新路径仍须按实际结果分别留证,当前不宣称已完成。
v1.1.0
- 将 v1.1.0-rc.1 已验证范围定稿为 v1.1.0,不新增业务功能。
- RC 验证范围:
- uv/Ruff Release CI、1018 Python tests、前端构建、正式 RC ZIP 契约均已通过。
- 用户已将本地 rc-smoke 测试包部署到 AstrBot v4.26.7,最近 60 分钟约 45 个 request_id、13 次实际投递全部 message_sent;session_not_found、send_failed、4xx/5xx、重复投递均为 0。
- 新增 delivery 日志字段在线生效,未发现凭据、payload、正文或完整 UMO 泄露。
- 稳定版发布前完整门禁通过 1019 项 Python 测试、全仓 Ruff、前端构建与
v1.1.0ZIP 三源版本校验。 v1.1.0作为稳定版,Release workflow 应计算prerelease=false、make_latest=true。
v1.1.0-rc.1
-
#11:Release Workflow 改为 uv 锁定环境与 Ruff lint 门禁:
- 将
actions/setup-python+ pip 迁移到astral-sh/setup-uv(固定 SHAc771a70e6277c0a99b617c7a806ffedaca235ff9# v9.0.0),固定 uv 版本0.11.12,Python 3.13,启用 uv cache。 pyproject.tomldev dependency group 新增 Ruff;uv.lock同步更新。- 新增
uv lock --check、uv sync --frozen --group dev、uv run --frozen ruff check .步骤。 uv run --frozen替代裸python命令运行版本校验、测试、打包。workflow_dispatch始终为 dry-run:完整执行锁检查、Ruff、前端、测试、版本校验、打包和 artifact 上传,但不调用action-gh-release。- 手动 dry-run checkout 当前触发 ref,候选 tag 仅用于版本契约和 artifact 命名,不要求预先创建 tag。
- 正式 Release 仅在
github.event_name == 'push'且 ref 为 v tag 时执行。 - 不启用
ruff format --check,避免全仓格式化噪音。 requirements.txt保留作为运行时依赖声明,Release Workflow 不再使用 pip。- 更新
docs/release.md与 CI 契约测试。
- 将
-
#24:全局
min_completion_duration_seconds(最短完成通知时长):成功完成的 Webhook 事件耗时长低于阈值时跳过通知,减少短任务噪音。默认 15 秒;设为 0 关闭过滤恢复旧行为。有效范围 0–3600。仅在canonical completed状态参与过滤;failed、action_required、unknown 不参与;notification_mode 过滤在 duration 之前判断。task_duration_ms 仅来自 Provider 的可靠任务耗时(OMP round.durationMs / startedAt→endedAt 差值,OpenCode payload durationMs),不对外通过 to_dict() 暴露。通过admin config min-duration命令查询/设置/reset。保存失败时回滚内存值,Server 保持旧值。 -
#13:完善 Webhook 投递日志上下文与凭据过滤:成功、session 不存在和发送异常日志可关联
request_id、Provider、Endpoint、目标别名、投递阶段和耗时;意外异常保留经过凭据过滤的完整 traceback。过滤 Endpoint Token、Bearer/Token 认证值、Authorization/Cookie、API key/password/secret、URL userinfo 和敏感查询参数,不新增 payload、Header、消息正文或完整目标 UMO 日志;不引入聊天诊断、错误缓冲或 debug 模式。 -
修复 OpenCode
timeoutMs=5000在服务端渲染/投递约 5 秒以上时触发 retry、造成同一权限通知重复投递的问题:服务端新增按 Envelope 顶层id的进程内 single-flight 幂等与发送边界追踪;示例 timeout 调整为 15000 毫秒。 -
冻结多 Provider 通知降噪:新增全局
notification_mode,默认focused只抑制成功完成的 OpenCodesubagent;all保持全部通知,unknown scope/status fail-open。actionContentMode与该策略正交。 -
OpenCode root
session_idle可选携带subagentTimeline:记录相对 root busy→idle cycle 的匿名子任务图、时间质量、部分/截断状态与有界计数;不新增配置项,也不在其他 event 或 scope 携带。 -
#22:默认渲染按执行复杂度展示子任务阶段:简单流程保持最多 8 项主卡;复杂流程使用同一 MessageChain 的独立横向甘特图,按任务数、名称与跨度在 1440~2400px 内动态布局,并完整展示 payload 中最多 64 项。名称自然折行,25~64 项自动切换紧凑密度;3000px 为软高度预算。附图强制使用完整页面与动态 viewport 高度,时间刻度使用覆盖全跨度的 nice step,并采用与白色通知报告协调的浅蓝灰视觉;缺失或附图失败时仍只保留安全主卡。
-
#23:subagent timeline item 可选携带清洗后的
model与modelVariant,简单主卡、复杂甘特图、安全模板 view 和文本降级统一按agent · model(variant)展示;defaultvariant 不追加括号,旧 payload 保持兼容。 -
OpenCode V1 新增
session.scope(缺失兼容为unknown),Client 通过既有session.get()判断 root/subagent,永不发送parentID;服务端升级必须先于 Client 重启。 -
#18:引入 Provider Adapter / Registry 与依赖注入边界,支持
omp与opencodeprovider,并保持 Endpoint provider 在创建后不可变。 -
#19:增加 OpenCode Server Adapter,接收 V1 envelope,覆盖
session_idle、session_error与permission_asked三类事件。 -
#20:增加 OpenCode V1 Client Plugin,使用正确的
default { id, server }与plugintuple,支持 env/file URL/Token 配置、状态机、timeout 和有限 retry。 -
#21:收紧 OpenCode 字段白名单与隐私边界,匿名化 session ref、清洗 name fallback,并补齐 Bun/Python 契约测试、隔离 CLI Plugin Service smoke、Desktop 安全 SKIP 与中文集成文档。
-
本 RC 的发布前本地验证覆盖 Python 1018、Bun 221 和 OpenCode 1.18.4 CLI smoke;这不等同于已通过 RC ZIP 的 AstrBot WebUI 安装、Bot Endpoint 实际验证或 Desktop 端到端 smoke。
-
使用本 RC ZIP 的 AstrBot WebUI 手动安装、Bot Endpoint 验证和 Desktop 端到端 smoke 尚待本 RC 包验证,不能据此宣称已通过或已发布
v1.1.0。
v1.0.0
- 将首个稳定版公共契约定稿为
v1.0.0,覆盖配置与安全默认值、命令、Registry v2、Webhook HTTP 响应、平台支持边界、模板管理和可安装 ZIP 结构;不在 RC 基础上新增业务功能。 - 保留并确认
v1.0.0-rc.1已完成的自动化测试、构建、打包、Release Workflow、真实平台与 Webhook 链路验证证据。 - 云端兼容验证采用卸载 v0.3.0 旧包后安装
v1.0.0-rc.1、同时保留原数据目录和配置数据的方式;该结果支持“卸载重装后的数据兼容性”,不等同于原位升级、在线更新或 AstrBot 插件市场一键更新验证。 v1.0.0Git tag、GitHub Release 和正式 ZIP 尚待创建;正式 Release 应设置prerelease=false、make_latest=true。- AstrBot 插件市场安装与更新路径列为正式版发布/上架后的检查项,当前不宣称已经通过。
v1.0.0-rc.1
- 冻结首个 1.0 Release Candidate 的公共契约范围,明确配置、命令、Registry v2、HTTP 响应、平台边界与可安装 ZIP 结构。
- 收敛版本与发布流程:SemVer tag/插件版本使用
v1.0.0-rc.1,Python 项目版本使用 PEP 440 等价形式1.0.0rc1。 - 增加版本一致性、响应契约、打包与 Release workflow 的聚焦验证,为 RC 新装及从 v0.3.0 升级 smoke 做准备。
- 更新 PRD、FSD、发布指南与公共契约文档;本 RC 不宣称新增业务功能,最终 v1.0.0 仅在 smoke 通过后归档 MVP。
v0.3.0
- 完成 Registry v2:managed key 使用
(owner_platform_id, owner_user_id, endpoint_name),pending key 使用(owner_platform_id, request_id),实现多 Bot / 多 adapter 实例隔离。 - 增加 Registry v1 透明迁移、私有备份、quarantine、原子 candidate transaction、幂等重载与 fail-closed 校验;quarantine 仅保留 legacy Webhook 兼容投递,普通用户不可发现或管理。
- 完成
aiocqhttp与qq_official双通道群验证;QQ 官方 WebSocket 普通 QQ 群的真实主动 Webhook / OMP 图片卡片 smoke 已通过。 - 增加离线
platform_idrebind helper 与 runbook;该能力不作为聊天命令或 Plugin Page 功能提供。 - 加固凭据交付:私聊不输出字符串 URL,Endpoint Path 与 Token 分离;Token 通过 direct send 发送且不进入 RespondStage 日志,失败时不重试、不回滚,由 owner 私聊 rotate 恢复。
- 命令帮助动态适配
/、!与空wake_prefix;异常配置使用安全占位符和诊断提示,静态文档统一使用<唤醒词>。 - 增加 owner hard delete,仅允许删除当前 scope 的
revoked/expiredmanaged endpoint;active 必须先 revoke,删除后原 path 返回 404 且旧 Token 失效。 - 完善全局超级管理员私聊命令
list、revoke-path、revoke-owner,使用精确选择器和脱敏审计,绝不展示 Token。 - Plugin Page 增加认证
GET /astrbot_plugin_webhook_notifier/base-url,只返回base_url与configured,并提供 Base URL 复制入口。 - 增加
uv.lock与pyproject.toml的devdependency group,用于本地锁定 PyYAML、pytest、pytest-asyncio 与 Pillow 等验证依赖;当前 GitHub Actions 发布流程仍使用 pip,尚未启用 Ruff 门禁或uv.lock强制同步。