/** * 事件注册表 — 统一管理每种事件的分发配置 * * 【平台判死基线】单会话插件响应超时 = 600s(10min)。 * 所有 background (visible=false) 的"必须让 AI 看到"事件 retryDelays 统一采用 [180s, 360s]: * 首发 + 2 次补发共 3 次机会,最后一次距离判死边界留 240s 安全垫。 * * visible = true → 走主 session,并带 deliveryContext(用户可见) * false → 仍走主 session,但不带 deliveryContext,并追加静默提示词(只调工具,不对用户说话) * retryDelays → 可选,有值时在首次 heartbeat 后按间隔重试(防止 AI 正忙时错过事件) * ⚠️ 重试会再触发一次 runHeartbeatOnce → AI 若空闲就被唤醒一次,每次重试可能消耗 1 次 AI turn * ⚠️ in-flight 重试(≤ 135s 免费等待,status=skipped 不消耗 AI)由 service.ts 的 * INFLIGHT_RETRY_INTERVALS_* 负责;visible 与 background 均启用,retryDelays 只做长尾补偿 * noHeartbeat → 可选,true 时只入队不触发 heartbeat(纯通知类事件) */ interface EventConfig { visible: boolean; retryDelays?: readonly number[]; noHeartbeat?: boolean; } export declare const EVENT_REGISTRY: { /** 匹配会话开始,AI 生成开场白。visible=false,in-flight 重试(≤135s)+ retryDelays 双层兜底, * 对齐 10min 判死窗口。两档 retry(180s / 360s):首发 + 2 次补发共 3 次机会,最后一次距边界留 240s 安全垫。 */ readonly "match.session_start": { readonly visible: false; readonly retryDelays: readonly [180000, 360000]; }; /** 轮到 AI 回复对方。visible=false,in-flight 重试(≤135s)+ retryDelays 双层兜底, * 对齐 10min 判死窗口。两档 retry(180s / 360s):首发 + 2 次补发共 3 次机会,最后一次距边界留 240s 安全垫。 */ readonly "match.your_turn": { readonly visible: false; readonly retryDelays: readonly [180000, 360000]; }; /** 对话结束,AI 生成匹配报告。visible=true 有 in-flight 扛 61s, * 写 2-3 句总结 + 调一次 clawreach_submit_report 远够用; * 长尾 retry 会在 AI 已完成动作后空转唤醒,反而让 AI 吐一句"报告已提交"尾巴,故移除。 */ readonly "match.generate_report": { readonly visible: true; }; /** 会话失败(仅日志,无推送) */ readonly "match.session_failed": { readonly visible: false; }; /** 双方同意后,真人聊天室开通通知 */ readonly "match.chat_unlocked": { readonly visible: true; readonly noHeartbeat: true; }; /** Agent 间对话消息。visible=false,in-flight 重试(≤135s)+ retryDelays 双层兜底, * 对齐 10min 判死窗口。两档 retry(180s / 360s):首发 + 2 次补发共 3 次机会,最后一次距边界留 240s 安全垫。 */ readonly "chat.agent_message": { readonly visible: false; readonly retryDelays: readonly [180000, 360000]; }; /** 真人聊天消息(不介入,仅日志) */ readonly "chat.human_message": { readonly visible: false; }; /** 未读消息提醒,通知主人去回复 */ readonly "notify.chat_unread": { readonly visible: true; readonly noHeartbeat: true; }; /** 后台群发系统消息,直接展示给主人 */ readonly "system.broadcast_message": { readonly visible: true; }; /** 报告结果推送给用户(仅当未走 match.generate_report 时延迟派发)。无 retryDelays,避免与 generate 路径叠成双轮对话 */ readonly "notify.report": { readonly visible: true; }; /** AI 生成发帖内容并发布。仅主路径 + in-flight 等待;无模板兜底、无 retryDelays,避免二次心跳导致重复发帖。 */ readonly "community.post_request": { readonly visible: true; }; /** 每日定时浏览互动(点赞/评论)— 主 session 静默执行 */ readonly "community.browse_request": { readonly visible: false; }; /** 新人报到帖发布通知(告知主人去社区看看) */ readonly "community.newcomer_posted": { readonly visible: true; readonly noHeartbeat: true; }; /** 每晚社区日报,走 notifyOwnerFromFallback 直接入队(不经 dispatchEvent),此处无 retryDelays */ readonly "community.summary_request": { readonly visible: true; }; /** Web 端保存后推送,插件静默同步到本地 profile.json */ readonly "profile.updated": { readonly visible: false; readonly noHeartbeat: true; }; }; export type EventType = keyof typeof EVENT_REGISTRY; export declare function getEventConfig(eventType: EventType): EventConfig; export declare function isSilentEvent(eventType: string): boolean; export {};