@shgroup/dsh-serenity-hooks 1.89.0 → 1.91.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/im/hook.d.ts CHANGED
@@ -60,12 +60,17 @@ export interface WeixinHookIncomingEvent extends WeixinHookEventBase {
60
60
  };
61
61
  }
62
62
  /**
63
- * outgoing 事件来源:
64
- * - `reply`(缺省,向后兼容)= 收到用户消息后的回复
65
- * - `proactive` = 桥被调用主动发给指定用户(CCC MSM 经本机入口发起)
66
- * - `reply-fallback`(v1.30.17)= 手动输出模式下 agent 本轮一次都没发送成功 → 桥兜底转发其最终文本
63
+ * outgoing 事件来源 —— 🔴 **2026-10-24(D238)只剩 `proactive` 一个值**。
64
+ *
65
+ * 历史(R↓,两个已退役的值):
66
+ * - `reply`(v1.27 缺省)= 桥收到消息后自动回发最终文本。**随 `autoReplyWithLastMessage` 退役**;
67
+ * - `reply-fallback`(v1.30.17)= 手动模式下 agent 未发送时桥兜底转发。**随 `fallbackOnNoSend` 退役**。
68
+ *
69
+ * ⇒ 现在**所有出站都来自 agent 自己调 `im-bridge`**。保留 `source` 字段本身是为了:
70
+ * ① 存量日志里那两种值仍可被读到(历史不改写);
71
+ * ② 将来接第二种"出站起因"时不必再动事件形状。
67
72
  */
68
- type WeixinOutgoingSource = 'reply' | 'proactive' | 'reply-fallback';
73
+ type WeixinOutgoingSource = 'proactive';
69
74
  /** outgoing 事件(bot → 用户):回复文本(已剥离 think) */
70
75
  export interface WeixinHookOutgoingEvent extends WeixinHookEventBase {
71
76
  event: 'outgoing';
@@ -103,7 +108,10 @@ interface OutgoingHookInput {
103
108
  sessionId: string;
104
109
  role: string;
105
110
  reply: string;
106
- /** 缺省 'reply'(对话回复);'proactive' = 主动发送;'reply-fallback' = 手动模式兜底转发 */
111
+ /**
112
+ * 出站来源。🔴 **D238 起只剩 `'proactive'`**(历史值 `reply` / `reply-fallback` 已退役)。
113
+ * 造事件时**不传就不写该字段** —— 缺席 = 调用方未指定,**不是某个缺省语义**(见 buildOutgoingHookEvent)。
114
+ */
107
115
  source?: WeixinOutgoingSource;
108
116
  /** 文件外发记录(可选;send-file 路径填) */
109
117
  file?: {
@@ -145,7 +145,7 @@ export declare function handleInboundEvent(ctx: Context, root: string, accountId
145
145
  channel?: string;
146
146
  }): Promise<void>;
147
147
  /**
148
- * 手动输出模式的**机制标记**(v1.30.10 引入;v1.30.16 按「ACC 管机制、CCC 管措辞」重构)。
148
+ * 出站**机制标记**(v1.30.10 引入;v1.30.16 按「ACC 管机制、CCC 管措辞」重构)。
149
149
  *
150
150
  * 边界(R↓):ACC 只提供**机制与数据**——"桥不转发最终文本"这个事实 + 三个已填好的参数值。
151
151
  * **纪律措辞归 CCC**:怎么写、必须怎么做、后果是什么,全部写在轨迹的 `PROMPT.md` 里。
@@ -153,21 +153,21 @@ export declare function handleInboundEvent(ctx: Context, root: string, accountId
153
153
  * 🔴 **渠道不是常量**(2026-10-20 Q4):此前这里硬写 `channel:"weixin"`,
154
154
  * 而一条**飞书**会话收到的却是"发往微信"的命令 ⇒ 模型照着做必然失败(目标 id 是 open_id)。
155
155
  * ⇒ 渠道由调用方传入;缺省 `'weixin'` 保留既有调用点与测试的读数。
156
+ *
157
+ * 🔴 2026-10-24(D238):本标记从"手动模式才注入"变成**每轮必注入**(手动模式已成唯一路径)。
158
+ * ⚠️ **标记字符串 `[serenity:weixin-manual-output]` 不改名**:CCC 侧角色提示词按它做判据,
159
+ * 改名会把已写好的纪律文档全打成废纸;它是**协议标记**,不是渠道名(与 A85 同一处置)。
156
160
  */
157
161
  export declare function manualOutputMarker(accountId: string, userId: string, channel?: string): string;
162
+ export {};
158
163
  /**
159
- * 手动输出模式的**兜底判定**(纯函数,v1.30.17——把决策矩阵从装配里抽出来,可独立测试)。
164
+ * 🔴 **`manualOutputFallbackNeeded` 已于 2026-10-24 删除**(owner 令,D238)。
160
165
  *
161
- * 四个条件同时成立才兜底:
162
- * ① CCC 显式开启 `fallbackOnNoSend`(缺省 false = 严格静默)
163
- * ② 机械闸门**已装配**(未装配时无法判定"是否发送过" → 宁可静默也不冒重复发送风险)
164
- * ③ 本轮**没有**成功发送(agent 自己发过 → 输出权归 agent,桥不插话)
165
- * ④ 有最终文本可转发(空文本无意义)
166
+ * 它实现的是「手动模式下 agent 一次都没发成功 ⇒ 桥兜底转发最终文本」。
167
+ * **随 `fallbackOnNoSend` 一起退役** —— 那个开关只在 `autoReplyWithLastMessage=false` 时才有意义,
168
+ * 而后者已整条删除(出站只剩 `im-bridge` 一条路)。
169
+ *
170
+ * ⛔ **不要把它改写成"自动兜底"再放回来**:owner 否决的正是"桥替 agent 说最后一句"这件事本身
171
+ * (「autoReply 并不合适,主动性的 imBridge 仍然是更好的」),而不是它的某个实现细节。
172
+ * 兜底带来的"不丢消息"收益,改由 guard 打回(可见性前置检查 + 响亮告警)承担。
166
173
  */
167
- export declare function manualOutputFallbackNeeded(input: {
168
- fallbackOnNoSend?: boolean;
169
- guardActive: boolean;
170
- sentThisTurn: boolean;
171
- answer: string;
172
- }): boolean;
173
- export {};