Skip to content

Releases: AsterleedsGuild0/astrbot_plugin_webhook_notifier

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 10:00
  • 修复 OpenCode Desktop 在会话元数据回退路径中的会话标题回退处理,使回退逻辑按现有安全会话标题契约选择可展示标题;本条只记录回退行为已修正,不把诊断信号夸大为已确认的 Desktop 内部根因。
  • 新增通用 markdown provider 的受 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 失败,重跑通过。tag v1.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

Choose a tag to compare

@github-actions github-actions released this 10 Aug 04:28
  • 自 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。
  • 验证证据(正式发布前本地门禁与真实链路):
    • 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

Choose a tag to compare

@github-actions github-actions released this 30 Jul 07:02
  • 将 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.0 ZIP 三源版本校验。
  • v1.1.0 作为稳定版,Release workflow 应计算 prerelease=false、make_latest=true。

v1.1.0-rc.1

v1.1.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Jul 10:17
  • #11:Release Workflow 改为 uv 锁定环境与 Ruff lint 门禁:

    • 将 actions/setup-python + pip 迁移到 astral-sh/setup-uv(固定 SHA c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0),固定 uv 版本 0.11.12,Python 3.13,启用 uv cache。
    • pyproject.toml dev 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 只抑制成功完成的 OpenCode subagent;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) 展示;default variant 不追加括号,旧 payload 保持兼容。

  • OpenCode V1 新增 session.scope(缺失兼容为 unknown),Client 通过既有 session.get() 判断 root/subagent,永不发送 parentID;服务端升级必须先于 Client 重启。

  • #18:引入 Provider Adapter / Registry 与依赖注入边界,支持 omp 与 opencode provider,并保持 Endpoint provider 在创建后不可变。

  • #19:增加 OpenCode Server Adapter,接收 V1 envelope,覆盖 session_idle、session_error 与 permission_asked 三类事件。

  • #20:增加 OpenCode V1 Client Plugin,使用正确的 default { id, server } 与 plugin tuple,支持 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

Choose a tag to compare

@github-actions github-actions released this 21 Jul 03:25
  • 将首个稳定版公共契约定稿为 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.0 Git tag、GitHub Release 和正式 ZIP 尚待创建;正式 Release 应设置 prerelease=false、make_latest=true。
  • AstrBot 插件市场安装与更新路径列为正式版发布/上架后的检查项,当前不宣称已经通过。

v1.0.0-rc.1

v1.0.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Jul 10:02
  • 冻结首个 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

Choose a tag to compare

@github-actions github-actions released this 20 Jul 03:00
  • 完成 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_id rebind helper 与 runbook;该能力不作为聊天命令或 Plugin Page 功能提供。
  • 加固凭据交付:私聊不输出字符串 URL,Endpoint Path 与 Token 分离;Token 通过 direct send 发送且不进入 RespondStage 日志,失败时不重试、不回滚,由 owner 私聊 rotate 恢复。
  • 命令帮助动态适配 /、! 与空 wake_prefix;异常配置使用安全占位符和诊断提示,静态文档统一使用 <唤醒词>。
  • 增加 owner hard delete,仅允许删除当前 scope 的 revoked / expired managed 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 的 dev dependency group,用于本地锁定 PyYAML、pytest、pytest-asyncio 与 Pillow 等验证依赖;当前 GitHub Actions 发布流程仍使用 pip,尚未启用 Ruff 门禁或 uv.lock 强制同步。