import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import type { Plan } from "@xgjktech/xg-openclaw-shared"; export interface PlanEventSubscriptionDeps { /** 按 planId 反查权威 plan(注入 getPlanById) */ getPlanById: (planId: string) => Plan | undefined; /** 发送 PLAN_STAT 增量事件(与 middleware 共用同一实现) */ sendPlanStat: (params: { plan: Plan; source: "tool" | "snapshot"; }) => void; } type SubscriptionHandle = Parameters[0]["handle"]; /** * 构造事件订阅的 `handle` 回调,可独立单测(不依赖真实 api/网络)。 * * 降级纪律同 middleware:handle 内全身 try/catch,绝不外抛(与 middleware 同进程)。 * * 保留理由(D6 二选一,已裁定保留 + 瘦身):① 它是唯一非 middleware 的触发面, * middleware 注册受 trust 门控被拒时(docs/plan-integration-notes.md §4.1 的已知部署故障) * 它不受影响,仍是一条独立兜底;② 瘦身后主体只剩"守卫 → 反查 → sendPlanStat"三行, * 维护成本接近零;③ 删掉等于丢弃第一轮已投入的契约面,而 runId 限制解除是可预期的上游演进。 * * ⚠️ 当前 OpenClaw 版本下 xg-harness-tools 恒因缺少 runId 而不发送此事件, * 此 handle 不会被触发,保留以便未来该限制解除后零改动生效。 * 不得将其作为任何正确性判断依据——权威状态来自 SQLite 只读反查。 */ export declare function createPlanEventHandler(deps: PlanEventSubscriptionDeps): SubscriptionHandle; /** * 注册计划事件订阅(前瞻性预留)。 * * ⚠️ 当前 OpenClaw 版本下 xg-harness-tools 恒因缺少 runId 而不发送此事件, * 此订阅不会被触发,保留以便未来该限制解除后零改动生效。 */ export declare function registerPlanEventSubscription(api: OpenClawPluginApi, deps: PlanEventSubscriptionDeps): void; export {}; //# sourceMappingURL=plan-event-subscription.d.ts.map