From 9f158ed00be9c1b6187d082c20934337a71d8e54 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 13 Jul 2026 04:42:16 +0100 Subject: [PATCH] refactor(channels): remove internal compatibility aliases --- security/opengrep/precise.yml | 2 +- src/auto-reply/reply/reply-delivery.ts | 2 +- src/auto-reply/reply/reply-directives.ts | 2 -- src/channels/plugins/catalog.ts | 11 ----------- .../test-helpers/channel-catalog-contract.ts | 12 ++++++------ .../channel-plugin-catalog-contract-suites.ts | 6 +++--- src/infra/outbound/payloads.ts | 2 +- src/media/parse.test.ts | 2 -- src/media/parse.ts | 3 --- 9 files changed, 12 insertions(+), 30 deletions(-) diff --git a/security/opengrep/precise.yml b/security/opengrep/precise.yml index 1f170065012..ab7a895c9d1 100644 --- a/security/opengrep/precise.yml +++ b/security/opengrep/precise.yml @@ -179,7 +179,7 @@ rules: - patterns: - pattern-either: - pattern: getChannelPluginCatalogEntry(...) - - pattern: listChannelPluginCatalogEntries(...) + - pattern: listRawChannelPluginCatalogEntries(...) - pattern-not-regex: \bexcludeWorkspace\s*:\s*true\b pattern-sanitizers: - patterns: diff --git a/src/auto-reply/reply/reply-delivery.ts b/src/auto-reply/reply/reply-delivery.ts index 2fe7f14a512..3c63ee62d82 100644 --- a/src/auto-reply/reply/reply-delivery.ts +++ b/src/auto-reply/reply/reply-delivery.ts @@ -49,7 +49,7 @@ export function normalizeReplyPayloadDirectives(params: { } const mediaUrls = params.payload.mediaUrls ?? parsed?.mediaUrls; - const mediaUrl = params.payload.mediaUrl ?? parsed?.mediaUrl ?? mediaUrls?.[0]; + const mediaUrl = params.payload.mediaUrl ?? mediaUrls?.[0]; const channelData = mergeReactionDirectiveChannelData( params.payload.channelData, diff --git a/src/auto-reply/reply/reply-directives.ts b/src/auto-reply/reply/reply-directives.ts index 46d5619ffc9..9554c0262fd 100644 --- a/src/auto-reply/reply/reply-directives.ts +++ b/src/auto-reply/reply/reply-directives.ts @@ -7,7 +7,6 @@ import { isSilentReplyPayloadText, SILENT_REPLY_TOKEN } from "../tokens.js"; export type ReplyDirectiveParseResult = { text: string; mediaUrls?: string[]; - mediaUrl?: string; reaction?: { emoji: string; replyToCurrent?: boolean; @@ -109,7 +108,6 @@ export function parseReplyDirectives( return { text, mediaUrls: split.mediaUrls, - mediaUrl: split.mediaUrl, reaction: reactionParsed.reaction, replyToId: replyParsed.replyToId ?? reactionParsed.reaction?.replyToId, replyToCurrent: diff --git a/src/channels/plugins/catalog.ts b/src/channels/plugins/catalog.ts index 35fca84cc41..46edab14708 100644 --- a/src/channels/plugins/catalog.ts +++ b/src/channels/plugins/catalog.ts @@ -531,17 +531,6 @@ export function listRawChannelPluginCatalogEntries( }); } -/** - * @deprecated Use `listTrustedChannelPluginCatalogEntries` for execution-facing - * paths, or `listRawChannelPluginCatalogEntries` for internal plumbing - * that applies its own trust filtering. - */ -export function listChannelPluginCatalogEntries( - options: CatalogOptions = {}, -): ChannelPluginCatalogEntry[] { - return listRawChannelPluginCatalogEntries(options); -} - export function getChannelPluginCatalogEntry( id: string, options: CatalogOptions = {}, diff --git a/src/channels/plugins/contracts/test-helpers/channel-catalog-contract.ts b/src/channels/plugins/contracts/test-helpers/channel-catalog-contract.ts index 962199ac03b..af701a294f1 100644 --- a/src/channels/plugins/contracts/test-helpers/channel-catalog-contract.ts +++ b/src/channels/plugins/contracts/test-helpers/channel-catalog-contract.ts @@ -7,7 +7,7 @@ import fs from "node:fs"; import path from "node:path"; import { describe, expect, it } from "vitest"; import { resolvePreferredOpenClawTmpDir } from "../../../../infra/tmp-openclaw-dir.js"; -import { getChannelPluginCatalogEntry, listChannelPluginCatalogEntries } from "../../catalog.js"; +import { getChannelPluginCatalogEntry, listRawChannelPluginCatalogEntries } from "../../catalog.js"; type CatalogEntryMeta = { id: string; @@ -48,7 +48,7 @@ export function describeChannelCatalogEntryContract(params: { }); it("appears in the channel catalog listing", () => { - const ids = listChannelPluginCatalogEntries().map((entry) => entry.id); + const ids = listRawChannelPluginCatalogEntries().map((entry) => entry.id); expect(ids).toContain(params.channelId); }); }); @@ -96,7 +96,7 @@ export function describeBundledMetadataOnlyChannelCatalogContract(params: { "utf8", ); - const entry = listChannelPluginCatalogEntries({ + const entry = listRawChannelPluginCatalogEntries({ workspaceDir, env: createCatalogFixtureEnv({ OPENCLAW_DISABLE_BUNDLED_PLUGINS: "1" }), }).find((item) => item.id === params.meta.id); @@ -141,7 +141,7 @@ export function describeOfficialFallbackChannelCatalogContract(params: { }), ); - const entry = listChannelPluginCatalogEntries({ + const entry = listRawChannelPluginCatalogEntries({ env: createCatalogFallbackOnlyEnv(), officialCatalogPaths: [catalogPath], }).find((item) => item.id === params.channelId); @@ -216,7 +216,7 @@ export function describeOfficialFallbackChannelCatalogContract(params: { "utf8", ); - const entry = listChannelPluginCatalogEntries({ + const entry = listRawChannelPluginCatalogEntries({ catalogPaths: [externalCatalogPath], officialCatalogPaths: [officialCatalogPath], env: createCatalogFallbackOnlyEnv(), @@ -252,7 +252,7 @@ export function describeOfficialFallbackChannelCatalogContract(params: { "utf8", ); - const entry = listChannelPluginCatalogEntries({ + const entry = listRawChannelPluginCatalogEntries({ catalogPaths: [catalogPath], officialCatalogPaths: [], env: createCatalogFallbackOnlyEnv(), diff --git a/src/channels/plugins/contracts/test-helpers/channel-plugin-catalog-contract-suites.ts b/src/channels/plugins/contracts/test-helpers/channel-plugin-catalog-contract-suites.ts index f5b112c861f..9cf157eb647 100644 --- a/src/channels/plugins/contracts/test-helpers/channel-plugin-catalog-contract-suites.ts +++ b/src/channels/plugins/contracts/test-helpers/channel-plugin-catalog-contract-suites.ts @@ -7,7 +7,7 @@ import fs from "node:fs"; import path from "node:path"; import { describe, expect, it } from "vitest"; import { resolvePreferredOpenClawTmpDir } from "../../../../infra/tmp-openclaw-dir.js"; -import { listChannelPluginCatalogEntries } from "../../catalog.js"; +import { listRawChannelPluginCatalogEntries } from "../../catalog.js"; function createCatalogEntry(params: { packageName: string; @@ -88,7 +88,7 @@ function expectCatalogIdsContain(params: { catalogPaths?: string[]; env?: NodeJS.ProcessEnv; }) { - const ids = listChannelPluginCatalogEntries({ + const ids = listRawChannelPluginCatalogEntries({ ...(params.catalogPaths ? { catalogPaths: params.catalogPaths } : {}), ...(params.env ? { env: params.env } : {}), }).map((entry) => entry.id); @@ -100,7 +100,7 @@ function findCatalogEntry(params: { catalogPaths?: string[]; env?: NodeJS.ProcessEnv; }) { - return listChannelPluginCatalogEntries({ + return listRawChannelPluginCatalogEntries({ ...(params.catalogPaths ? { catalogPaths: params.catalogPaths } : {}), ...(params.env ? { env: params.env } : {}), }).find((entry) => entry.id === params.channelId); diff --git a/src/infra/outbound/payloads.ts b/src/infra/outbound/payloads.ts index ac98c23fc4b..a0c57ad4402 100644 --- a/src/infra/outbound/payloads.ts +++ b/src/infra/outbound/payloads.ts @@ -231,7 +231,7 @@ function createOutboundPayloadPlanEntry( extractMarkdownImages: context.extractMarkdownImages, }); const explicitMediaUrls = payload.mediaUrls ?? parsed.mediaUrls; - const explicitMediaUrl = payload.mediaUrl ?? parsed.mediaUrl; + const explicitMediaUrl = payload.mediaUrl ?? parsed.mediaUrls?.[0]; const mergedMedia = mergeMediaUrls( explicitMediaUrls, explicitMediaUrl ? [explicitMediaUrl] : undefined, diff --git a/src/media/parse.test.ts b/src/media/parse.test.ts index 01cb6a2a060..9340f93958c 100644 --- a/src/media/parse.test.ts +++ b/src/media/parse.test.ts @@ -21,10 +21,8 @@ describe("splitMediaFromOutput", () => { } if ("mediaUrls" in expected) { expect(result.mediaUrls).toEqual(expected.mediaUrls); - expect(result.mediaUrl).toBe(expected.mediaUrls?.[0]); } else { expect(result.mediaUrls).toBeUndefined(); - expect(result.mediaUrl).toBeUndefined(); } } diff --git a/src/media/parse.ts b/src/media/parse.ts index 9c320d6f75c..8a30e6073b4 100644 --- a/src/media/parse.ts +++ b/src/media/parse.ts @@ -489,8 +489,6 @@ export function splitMediaFromOutput( ): { text: string; mediaUrls?: string[]; - /** @deprecated Use mediaUrls[0]. */ - mediaUrl?: string; audioAsVoice?: boolean; // true if [[audio_as_voice]] tag was found segments?: ParsedMediaOutputSegment[]; } { @@ -718,7 +716,6 @@ export function splitMediaFromOutput( return { text: cleanedText, mediaUrls: media, - mediaUrl: media[0], segments: segments.length > 0 ? segments : [{ type: "text", text: cleanedText }], ...(hasAudioAsVoice ? { audioAsVoice: true } : {}), };