diff --git a/extensions/irc/src/channel.test.ts b/extensions/irc/src/channel.test.ts index a6df034edc0..258eebe0672 100644 --- a/extensions/irc/src/channel.test.ts +++ b/extensions/irc/src/channel.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it } from "vitest"; -import { ircPlugin } from "./channel.js"; +import { ircOutboundBaseAdapter } from "./outbound-base.js"; import { clearIrcRuntime } from "./runtime.js"; describe("irc outbound chunking", () => { @@ -8,11 +8,9 @@ describe("irc outbound chunking", () => { }); it("chunks outbound text without requiring IRC runtime initialization", () => { - const chunker = ircPlugin.outbound?.chunker; - if (!chunker) { - throw new Error("irc outbound.chunker unavailable"); - } - - expect(chunker("alpha beta", 5)).toEqual(["alpha", "beta"]); + expect(ircOutboundBaseAdapter.chunker("alpha beta", 5)).toEqual(["alpha", "beta"]); + expect(ircOutboundBaseAdapter.deliveryMode).toBe("direct"); + expect(ircOutboundBaseAdapter.chunkerMode).toBe("markdown"); + expect(ircOutboundBaseAdapter.textChunkLimit).toBe(350); }); }); diff --git a/extensions/irc/src/channel.ts b/extensions/irc/src/channel.ts index 7835394039f..ede728ab31e 100644 --- a/extensions/irc/src/channel.ts +++ b/extensions/irc/src/channel.ts @@ -14,7 +14,6 @@ import { createChannelDirectoryAdapter, createResolvedDirectoryEntriesLister, } from "openclaw/plugin-sdk/directory-runtime"; -import { sanitizeForPlainText } from "openclaw/plugin-sdk/outbound-runtime"; import { createComputedAccountStatusAdapter, createDefaultChannelRuntimeState, @@ -27,7 +26,6 @@ import { } from "./accounts.js"; import { buildBaseChannelStatusSummary, - chunkTextForOutbound, DEFAULT_ACCOUNT_ID, PAIRING_APPROVED_MESSAGE, type ChannelPlugin, @@ -41,6 +39,7 @@ import { normalizeIrcAllowEntry, normalizeIrcMessagingTarget, } from "./normalize.js"; +import { ircOutboundBaseAdapter } from "./outbound-base.js"; import { resolveIrcGroupMatch, resolveIrcRequireMention } from "./policy.js"; import { probeIrc } from "./probe.js"; import { collectRuntimeConfigAssignments, secretTargetRegistryEntries } from "./secret-contract.js"; @@ -342,13 +341,7 @@ export const ircPlugin: ChannelPlugin = createChat collectWarnings: collectIrcSecurityWarnings, }, outbound: { - base: { - deliveryMode: "direct", - chunker: chunkTextForOutbound, - chunkerMode: "markdown", - textChunkLimit: 350, - sanitizeText: ({ text }) => sanitizeForPlainText(text), - }, + base: ircOutboundBaseAdapter, attachedResults: { channel: "irc", sendText: async ({ cfg, to, text, accountId, replyToId }) => { diff --git a/extensions/irc/src/outbound-base.ts b/extensions/irc/src/outbound-base.ts new file mode 100644 index 00000000000..6e453b3fdc4 --- /dev/null +++ b/extensions/irc/src/outbound-base.ts @@ -0,0 +1,10 @@ +import { sanitizeForPlainText } from "openclaw/plugin-sdk/outbound-runtime"; +import { chunkTextForOutbound } from "./channel-api.js"; + +export const ircOutboundBaseAdapter = { + deliveryMode: "direct" as const, + chunker: chunkTextForOutbound, + chunkerMode: "markdown" as const, + textChunkLimit: 350, + sanitizeText: ({ text }: { text: string }) => sanitizeForPlainText(text), +};