package loop import "context" // muteKey 是「抑制 UI 广播」标志的 context key。置位时, // Run 照常完成工作,但不把 stream/thinking/capacity 事件 // 推给 UI 通道(OnStream / OnCapacity)。内部自主流程 // (如后台反思)使用它,这些流程的中间推理 // 不得泄露进面向用户的聊天流。循环本身不变, // 只是对外的广播被静音。 type muteKey struct{} // WithMutedBroadcast 返回一个 context,其 loop Run 抑制 UI 流式 // 与 capacity 广播,但仍把最终结果返回给调用方。 func WithMutedBroadcast(ctx context.Context) context.Context { return context.WithValue(ctx, muteKey{}, true) } // isMutedBroadcast 报告驱动 ctx 的 Run 是否应抑制 UI // 广播。标志未置位(常见情况)返回 false,因此正常聊天 // 流式不受影响。 func isMutedBroadcast(ctx context.Context) bool { v, _ := ctx.Value(muteKey{}).(bool) return v }