






















@@ -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", () => {
276282ensureSandboxWorkspaceForSessionMock.mockReset();
277283resetContextWindowCacheForTest();
278284clearMemoryPluginState();
285+setActivePluginRegistry(createTestRegistry());
279286vi.unstubAllEnvs();
280287sessionFileEnvSnapshot?.restore();
281288sessionFileEnvSnapshot = undefined;
@@ -1012,6 +1019,45 @@ describe("shouldSkipLocalCliCredentialEpoch", () => {
10121019}
10131020});
101410211022+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+10151061it("ignores volatile prompt text when static prompt text matches", async () => {
10161062const { dir, sessionFile } = createSessionFile();
10171063try {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。