@@ -5,6 +5,7 @@ import os from "node:os";
55import path from "node:path" ;
66import { CURRENT_SESSION_VERSION } from "openclaw/plugin-sdk/agent-sessions" ;
77import { afterEach , beforeEach , describe , expect , it , vi } from "vitest" ;
8+ import type { ChannelPlugin } from "../../channels/plugins/types.plugin.js" ;
89import type { OpenClawConfig } from "../../config/types.openclaw.js" ;
910import { registerLegacyContextEngine } from "../../context-engine/legacy.registration.js" ;
1011import {
@@ -14,6 +15,11 @@ import {
1415import type { ContextEngine } from "../../context-engine/types.js" ;
1516import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js" ;
1617import { clearMemoryPluginState , registerMemoryPromptSection } from "../../plugins/memory-state.js" ;
18+ import { setActivePluginRegistry } from "../../plugins/runtime.js" ;
19+ import {
20+ createChannelTestPluginBase ,
21+ createTestRegistry ,
22+ } from "../../test-utils/channel-plugins.js" ;
1723import { captureEnv , setTestEnvValue } from "../../test-utils/env.js" ;
1824import { testing as cliBackendsTesting } from "../cli-backends.js" ;
1925import { hashCliSessionText } from "../cli-session.js" ;
@@ -276,6 +282,7 @@ describe("shouldSkipLocalCliCredentialEpoch", () => {
276282 ensureSandboxWorkspaceForSessionMock . mockReset ( ) ;
277283 resetContextWindowCacheForTest ( ) ;
278284 clearMemoryPluginState ( ) ;
285+ setActivePluginRegistry ( createTestRegistry ( ) ) ;
279286 vi . unstubAllEnvs ( ) ;
280287 sessionFileEnvSnapshot ?. restore ( ) ;
281288 sessionFileEnvSnapshot = undefined ;
@@ -1012,6 +1019,45 @@ describe("shouldSkipLocalCliCredentialEpoch", () => {
10121019 }
10131020 } ) ;
10141021
1022+ it ( "passes Telegram rich text capabilities into CLI system prompts" , async ( ) => {
1023+ const { dir, sessionFile } = createSessionFile ( ) ;
1024+ setActivePluginRegistry (
1025+ createTestRegistry ( [
1026+ {
1027+ pluginId : "telegram" ,
1028+ source : "test" ,
1029+ plugin : {
1030+ ...createChannelTestPluginBase ( { id : "telegram" , label : "Telegram" } ) ,
1031+ agentPrompt : {
1032+ messageToolCapabilities : ( ) => [ "richText" ] ,
1033+ } ,
1034+ } satisfies ChannelPlugin ,
1035+ } ,
1036+ ] ) ,
1037+ ) ;
1038+
1039+ try {
1040+ const context = await prepareCliRunContext ( {
1041+ sessionId : "session-test" ,
1042+ sessionFile,
1043+ workspaceDir : dir ,
1044+ prompt : "latest ask" ,
1045+ provider : "test-cli" ,
1046+ model : "test-model" ,
1047+ timeoutMs : 1_000 ,
1048+ runId : "run-test-telegram-rich-text" ,
1049+ messageChannel : "telegram" ,
1050+ config : createCliBackendConfig ( ) ,
1051+ } ) ;
1052+
1053+ expect ( context . systemPrompt ) . toContain ( "channel=telegram" ) ;
1054+ expect ( context . systemPrompt ) . toContain ( "Telegram rich text is available" ) ;
1055+ expect ( context . systemPrompt ) . toContain ( "This is not legacy MarkdownV2/parse_mode" ) ;
1056+ } finally {
1057+ fs . rmSync ( dir , { recursive : true , force : true } ) ;
1058+ }
1059+ } ) ;
1060+
10151061 it ( "ignores volatile prompt text when static prompt text matches" , async ( ) => {
10161062 const { dir, sessionFile } = createSessionFile ( ) ;
10171063 try {
0 commit comments