@@ -57,6 +57,7 @@ vi.mock("openclaw/plugin-sdk/plugin-runtime", async (importOriginal) => {
5757
5858vi . resetModules ( ) ;
5959const { deliverReplies } = await import ( "./delivery.js" ) ;
60+ const { clearTelegramRuntimeCommsGuardMemoryForTests } = await import ( "../runtime-comms-guard.js" ) ;
6061
6162vi . mock ( "grammy" , ( ) => ( {
6263 API_CONSTANTS : {
@@ -175,6 +176,7 @@ function createVoiceFailureHarness(params: {
175176
176177describe ( "deliverReplies" , ( ) => {
177178 beforeEach ( ( ) => {
179+ clearTelegramRuntimeCommsGuardMemoryForTests ( ) ;
178180 loadWebMedia . mockClear ( ) ;
179181 probeVideoDimensions . mockReset ( ) ;
180182 probeVideoDimensions . mockResolvedValue ( undefined ) ;
@@ -185,6 +187,59 @@ describe("deliverReplies", () => {
185187 messageHookRunner . runMessageSent . mockReset ( ) ;
186188 } ) ;
187189
190+ it ( "suppresses visible runtime guard text on automatic Telegram replies" , async ( ) => {
191+ const runtime = createRuntime ( ) ;
192+ const sendMessage = vi . fn ( ) . mockResolvedValue ( { message_id : 4101 , chat : { id : "123" } } ) ;
193+ const bot = createBot ( { sendMessage } ) ;
194+
195+ await deliverWith ( {
196+ bot,
197+ runtime,
198+ replies : [
199+ {
200+ text : "MODEL-GATE\ntask_type: small code/report edit\nproceed_status: PROCEED" ,
201+ } ,
202+ ] ,
203+ } ) ;
204+
205+ expect ( sendMessage ) . not . toHaveBeenCalled ( ) ;
206+ } ) ;
207+
208+ it ( "delivers requested markdown files immediately without leaking guard text" , async ( ) => {
209+ const runtime = createRuntime ( ) ;
210+ const sendDocument = vi . fn ( ) . mockResolvedValue ( { message_id : 4102 , chat : { id : "123" } } ) ;
211+ const sendMessage = vi . fn ( ) . mockResolvedValue ( { message_id : 4103 , chat : { id : "123" } } ) ;
212+ const bot = createBot ( { sendDocument, sendMessage } ) ;
213+ mockMediaLoad ( "telegram-response-guide.md" , "text/markdown" , "# Telegram guide\n" ) ;
214+
215+ await deliverWith ( {
216+ bot,
217+ runtime,
218+ replies : [
219+ {
220+ text : "MODEL-GATE\ntask_type: small code/report edit\nproceed_status: PROCEED" ,
221+ mediaUrls : [ "/tmp/telegram-response-guide.md" ] ,
222+ } ,
223+ {
224+ text : "Готово: файл доставлен." ,
225+ } ,
226+ ] ,
227+ } ) ;
228+
229+ expect ( sendDocument ) . toHaveBeenCalledTimes ( 1 ) ;
230+ expect ( sendDocument ) . toHaveBeenCalledWith (
231+ "123" ,
232+ expect . anything ( ) ,
233+ expect . not . objectContaining ( { caption : expect . stringContaining ( "MODEL-GATE" ) } ) ,
234+ ) ;
235+ expect ( sendMessage ) . toHaveBeenCalledTimes ( 1 ) ;
236+ expect ( sendMessage ) . toHaveBeenCalledWith (
237+ "123" ,
238+ expect . stringContaining ( "Готово: файл доставлен." ) ,
239+ expect . anything ( ) ,
240+ ) ;
241+ } ) ;
242+
188243 it ( "skips audioAsVoice-only payloads without logging an error" , async ( ) => {
189244 const runtime = createRuntime ( false ) ;
190245
0 commit comments