diff --git a/extensions/discord/src/channel.setup.ts b/extensions/discord/src/channel.setup.ts index efec8990442..c45ed85fb0b 100644 --- a/extensions/discord/src/channel.setup.ts +++ b/extensions/discord/src/channel.setup.ts @@ -1,15 +1,10 @@ -import { - buildChannelConfigSchema, - DiscordConfigSchema, - type ChannelPlugin, -} from "openclaw/plugin-sdk/discord"; +import { type ChannelPlugin } from "openclaw/plugin-sdk/discord"; import { type ResolvedDiscordAccount } from "./accounts.js"; import { discordSetupAdapter } from "./setup-core.js"; import { createDiscordPluginBase } from "./shared.js"; export const discordSetupPlugin: ChannelPlugin = { ...createDiscordPluginBase({ - configSchema: buildChannelConfigSchema(DiscordConfigSchema), setup: discordSetupAdapter, }), }; diff --git a/extensions/discord/src/channel.ts b/extensions/discord/src/channel.ts index c4ff4827038..29568ed58dc 100644 --- a/extensions/discord/src/channel.ts +++ b/extensions/discord/src/channel.ts @@ -13,10 +13,8 @@ import { normalizeMessageChannel } from "openclaw/plugin-sdk/channel-runtime"; import { buildOutboundBaseSessionKey, normalizeOutboundThreadId } from "openclaw/plugin-sdk/core"; import { buildComputedAccountStatusSnapshot, - buildChannelConfigSchema, buildTokenChannelStatusSummary, DEFAULT_ACCOUNT_ID, - DiscordConfigSchema, getChatChannelMeta, listDiscordDirectoryGroupsFromConfig, listDiscordDirectoryPeersFromConfig, @@ -278,7 +276,6 @@ function resolveDiscordOutboundSessionRoute(params: { export const discordPlugin: ChannelPlugin = { ...createDiscordPluginBase({ - configSchema: buildChannelConfigSchema(DiscordConfigSchema), setup: discordSetupAdapter, }), pairing: { diff --git a/extensions/feishu/index.ts b/extensions/feishu/index.ts index 837ffa28671..1e18c0eea12 100644 --- a/extensions/feishu/index.ts +++ b/extensions/feishu/index.ts @@ -45,7 +45,6 @@ export { buildMentionedCardContent, type MentionTarget, } from "./src/mention.js"; -export { feishuPlugin } from "./src/channel.js"; export default defineChannelPluginEntry({ id: "feishu", diff --git a/extensions/imessage/src/channel.setup.ts b/extensions/imessage/src/channel.setup.ts index a6f2f90d9f0..4f715cab88c 100644 --- a/extensions/imessage/src/channel.setup.ts +++ b/extensions/imessage/src/channel.setup.ts @@ -1,15 +1,10 @@ -import { - buildChannelConfigSchema, - IMessageConfigSchema, - type ChannelPlugin, -} from "openclaw/plugin-sdk/imessage"; +import { type ChannelPlugin } from "openclaw/plugin-sdk/imessage"; import { type ResolvedIMessageAccount } from "./accounts.js"; import { imessageSetupAdapter } from "./setup-core.js"; import { createIMessagePluginBase, imessageSetupWizard } from "./shared.js"; export const imessageSetupPlugin: ChannelPlugin = { ...createIMessagePluginBase({ - configSchema: buildChannelConfigSchema(IMessageConfigSchema), setupWizard: imessageSetupWizard, setup: imessageSetupAdapter, }), diff --git a/extensions/imessage/src/channel.ts b/extensions/imessage/src/channel.ts index fe20327e463..3c34cea1be7 100644 --- a/extensions/imessage/src/channel.ts +++ b/extensions/imessage/src/channel.ts @@ -6,11 +6,9 @@ import { import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-runtime"; import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/core"; import { - buildChannelConfigSchema, collectStatusIssuesFromLastError, DEFAULT_ACCOUNT_ID, formatTrimmedAllowFromEntries, - IMessageConfigSchema, looksLikeIMessageTargetId, normalizeIMessageMessagingTarget, resolveIMessageGroupRequireMention, @@ -100,7 +98,6 @@ function resolveIMessageOutboundSessionRoute(params: { export const imessagePlugin: ChannelPlugin = { ...createIMessagePluginBase({ - configSchema: buildChannelConfigSchema(IMessageConfigSchema), setupWizard: imessageSetupWizard, setup: imessageSetupAdapter, }), diff --git a/extensions/signal/src/channel.setup.ts b/extensions/signal/src/channel.setup.ts index 752fcfcc241..6fa8add4405 100644 --- a/extensions/signal/src/channel.setup.ts +++ b/extensions/signal/src/channel.setup.ts @@ -1,15 +1,10 @@ -import { - buildChannelConfigSchema, - SignalConfigSchema, - type ChannelPlugin, -} from "openclaw/plugin-sdk/signal"; +import { type ChannelPlugin } from "openclaw/plugin-sdk/signal"; import { type ResolvedSignalAccount } from "./accounts.js"; import { signalSetupAdapter } from "./setup-core.js"; import { createSignalPluginBase, signalSetupWizard } from "./shared.js"; export const signalSetupPlugin: ChannelPlugin = { ...createSignalPluginBase({ - configSchema: buildChannelConfigSchema(SignalConfigSchema), setupWizard: signalSetupWizard, setup: signalSetupAdapter, }), diff --git a/extensions/signal/src/channel.ts b/extensions/signal/src/channel.ts index 0a58c29bfe7..17b97c96f25 100644 --- a/extensions/signal/src/channel.ts +++ b/extensions/signal/src/channel.ts @@ -11,7 +11,6 @@ import { type RoutePeer } from "openclaw/plugin-sdk/routing"; import { buildBaseAccountStatusSnapshot, buildBaseChannelStatusSummary, - buildChannelConfigSchema, collectStatusIssuesFromLastError, createDefaultChannelRuntimeState, DEFAULT_ACCOUNT_ID, @@ -20,7 +19,6 @@ import { normalizeSignalMessagingTarget, PAIRING_APPROVED_MESSAGE, resolveChannelMediaMaxBytes, - SignalConfigSchema, type ChannelMessageActionAdapter, type ChannelPlugin, } from "openclaw/plugin-sdk/signal"; @@ -279,7 +277,6 @@ async function sendFormattedSignalMedia(ctx: { export const signalPlugin: ChannelPlugin = { ...createSignalPluginBase({ - configSchema: buildChannelConfigSchema(SignalConfigSchema), setupWizard: signalSetupWizard, setup: signalSetupAdapter, }), diff --git a/extensions/slack/src/channel.setup.ts b/extensions/slack/src/channel.setup.ts index 519f6eabe7b..854e1782315 100644 --- a/extensions/slack/src/channel.setup.ts +++ b/extensions/slack/src/channel.setup.ts @@ -1,8 +1,4 @@ -import { - buildChannelConfigSchema, - SlackConfigSchema, - type ChannelPlugin, -} from "openclaw/plugin-sdk/slack"; +import { type ChannelPlugin } from "openclaw/plugin-sdk/slack"; import { type ResolvedSlackAccount } from "./accounts.js"; import { slackSetupAdapter } from "./setup-core.js"; import { slackSetupWizard } from "./setup-surface.js"; @@ -10,7 +6,6 @@ import { createSlackPluginBase } from "./shared.js"; export const slackSetupPlugin: ChannelPlugin = { ...createSlackPluginBase({ - configSchema: buildChannelConfigSchema(SlackConfigSchema), setupWizard: slackSetupWizard, setup: slackSetupAdapter, }), diff --git a/extensions/slack/src/channel.ts b/extensions/slack/src/channel.ts index 8a82a3577b8..5e25f0187b1 100644 --- a/extensions/slack/src/channel.ts +++ b/extensions/slack/src/channel.ts @@ -11,7 +11,6 @@ import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-runtime"; import { buildOutboundBaseSessionKey, normalizeOutboundThreadId } from "openclaw/plugin-sdk/core"; import { resolveThreadSessionKeys, type RoutePeer } from "openclaw/plugin-sdk/routing"; import { - buildChannelConfigSchema, buildComputedAccountStatusSnapshot, DEFAULT_ACCOUNT_ID, listSlackDirectoryGroupsFromConfig, @@ -23,7 +22,6 @@ import { resolveConfiguredFromRequiredCredentialStatuses, resolveSlackGroupRequireMention, resolveSlackGroupToolPolicy, - SlackConfigSchema, createSlackActions, type ChannelPlugin, type OpenClawConfig, @@ -309,7 +307,6 @@ async function resolveSlackAllowlistNames(params: { export const slackPlugin: ChannelPlugin = { ...createSlackPluginBase({ - configSchema: buildChannelConfigSchema(SlackConfigSchema), setupWizard: slackSetupWizard, setup: slackSetupAdapter, }), diff --git a/extensions/telegram/src/channel.setup.ts b/extensions/telegram/src/channel.setup.ts index bdee67aa41d..4879ef96c09 100644 --- a/extensions/telegram/src/channel.setup.ts +++ b/extensions/telegram/src/channel.setup.ts @@ -1,8 +1,4 @@ -import { - buildChannelConfigSchema, - TelegramConfigSchema, - type ChannelPlugin, -} from "openclaw/plugin-sdk/telegram"; +import { type ChannelPlugin } from "openclaw/plugin-sdk/telegram"; import { type ResolvedTelegramAccount } from "./accounts.js"; import type { TelegramProbe } from "./probe.js"; import { telegramSetupAdapter } from "./setup-core.js"; @@ -11,7 +7,6 @@ import { createTelegramPluginBase } from "./shared.js"; export const telegramSetupPlugin: ChannelPlugin = { ...createTelegramPluginBase({ - configSchema: buildChannelConfigSchema(TelegramConfigSchema), setupWizard: telegramSetupWizard, setup: telegramSetupAdapter, }), diff --git a/extensions/telegram/src/channel.ts b/extensions/telegram/src/channel.ts index 0e2ce964b95..d89d74da289 100644 --- a/extensions/telegram/src/channel.ts +++ b/extensions/telegram/src/channel.ts @@ -12,7 +12,6 @@ import { buildExecApprovalPendingReplyPayload } from "openclaw/plugin-sdk/infra- import { resolveThreadSessionKeys, type RoutePeer } from "openclaw/plugin-sdk/routing"; import { parseTelegramTopicConversation } from "openclaw/plugin-sdk/telegram"; import { - buildChannelConfigSchema, buildTokenChannelStatusSummary, clearAccountEntryFields, DEFAULT_ACCOUNT_ID, @@ -21,7 +20,6 @@ import { PAIRING_APPROVED_MESSAGE, projectCredentialSnapshotFields, resolveConfiguredFromCredentialStatuses, - TelegramConfigSchema, resolveTelegramGroupRequireMention, resolveTelegramGroupToolPolicy, type ChannelPlugin, @@ -298,7 +296,6 @@ function readTelegramAllowlistConfig(account: ResolvedTelegramAccount) { export const telegramPlugin: ChannelPlugin = { ...createTelegramPluginBase({ - configSchema: buildChannelConfigSchema(TelegramConfigSchema), setupWizard: telegramSetupWizard, setup: telegramSetupAdapter, }), diff --git a/extensions/whatsapp/src/channel.setup.ts b/extensions/whatsapp/src/channel.setup.ts index 3b4ecacce26..ebe4deb5789 100644 --- a/extensions/whatsapp/src/channel.setup.ts +++ b/extensions/whatsapp/src/channel.setup.ts @@ -1,11 +1,4 @@ -import { - buildChannelConfigSchema, - resolveWhatsAppGroupIntroHint, - resolveWhatsAppGroupRequireMention, - resolveWhatsAppGroupToolPolicy, - WhatsAppConfigSchema, - type ChannelPlugin, -} from "openclaw/plugin-sdk/whatsapp"; +import { type ChannelPlugin } from "openclaw/plugin-sdk/whatsapp"; import { type ResolvedWhatsAppAccount } from "./accounts.js"; import { webAuthExists } from "./auth-store.js"; import { whatsappSetupAdapter } from "./setup-core.js"; @@ -13,12 +6,6 @@ import { createWhatsAppPluginBase, whatsappSetupWizardProxy } from "./shared.js" export const whatsappSetupPlugin: ChannelPlugin = { ...createWhatsAppPluginBase({ - configSchema: buildChannelConfigSchema(WhatsAppConfigSchema), - groups: { - resolveRequireMention: resolveWhatsAppGroupRequireMention, - resolveToolPolicy: resolveWhatsAppGroupToolPolicy, - resolveGroupIntroHint: resolveWhatsAppGroupIntroHint, - }, setupWizard: whatsappSetupWizardProxy, setup: whatsappSetupAdapter, isConfigured: async (account) => await webAuthExists(account.authDir), diff --git a/extensions/whatsapp/src/channel.ts b/extensions/whatsapp/src/channel.ts index d69dd480a4a..e7f79ad5f2a 100644 --- a/extensions/whatsapp/src/channel.ts +++ b/extensions/whatsapp/src/channel.ts @@ -1,6 +1,5 @@ import { buildAccountScopedAllowlistConfigEditor } from "openclaw/plugin-sdk/allowlist-config-edit"; import { - buildChannelConfigSchema, createActionGate, createWhatsAppOutboundBase, DEFAULT_ACCOUNT_ID, @@ -8,13 +7,9 @@ import { listWhatsAppDirectoryGroupsFromConfig, listWhatsAppDirectoryPeersFromConfig, readStringParam, - resolveWhatsAppGroupIntroHint, - resolveWhatsAppGroupRequireMention, - resolveWhatsAppGroupToolPolicy, resolveWhatsAppOutboundTarget, resolveWhatsAppHeartbeatRecipients, resolveWhatsAppMentionStripRegexes, - WhatsAppConfigSchema, type ChannelMessageActionName, type ChannelPlugin, } from "openclaw/plugin-sdk/whatsapp"; @@ -49,12 +44,6 @@ function parseWhatsAppExplicitTarget(raw: string) { export const whatsappPlugin: ChannelPlugin = { ...createWhatsAppPluginBase({ - configSchema: buildChannelConfigSchema(WhatsAppConfigSchema), - groups: { - resolveRequireMention: resolveWhatsAppGroupRequireMention, - resolveToolPolicy: resolveWhatsAppGroupToolPolicy, - resolveGroupIntroHint: resolveWhatsAppGroupIntroHint, - }, setupWizard: whatsappSetupWizardProxy, setup: whatsappSetupAdapter, isConfigured: async (account) => diff --git a/src/agents/pi-embedded-runner/model.test.ts b/src/agents/pi-embedded-runner/model.test.ts index 42044f8a7d3..b733e3a3f5f 100644 --- a/src/agents/pi-embedded-runner/model.test.ts +++ b/src/agents/pi-embedded-runner/model.test.ts @@ -43,6 +43,7 @@ function buildForwardCompatTemplate(params: { provider: string; api: "anthropic-messages" | "google-gemini-cli" | "openai-completions" | "openai-responses"; baseUrl: string; + reasoning?: boolean; input?: readonly ["text"] | readonly ["text", "image"]; cost?: { input: number; output: number; cacheRead: number; cacheWrite: number }; contextWindow?: number; @@ -54,7 +55,7 @@ function buildForwardCompatTemplate(params: { provider: params.provider, api: params.api, baseUrl: params.baseUrl, - reasoning: true, + reasoning: params.reasoning ?? true, input: params.input ?? (["text", "image"] as const), cost: params.cost ?? { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: params.contextWindow ?? 200000, diff --git a/src/channels/plugins/contracts/registry.ts b/src/channels/plugins/contracts/registry.ts index d651b6ef012..fd2d84e8b70 100644 --- a/src/channels/plugins/contracts/registry.ts +++ b/src/channels/plugins/contracts/registry.ts @@ -4,7 +4,7 @@ import { createThreadBindingManager as createDiscordThreadBindingManager, } from "../../../../extensions/discord/runtime-api.js"; import { createFeishuThreadBindingManager } from "../../../../extensions/feishu/api.js"; -import { setMatrixRuntime } from "../../../../extensions/matrix/api.js"; +import { setMatrixRuntime } from "../../../../extensions/matrix/src/runtime.js"; import { createTelegramThreadBindingManager } from "../../../../extensions/telegram/runtime-api.js"; import type { OpenClawConfig } from "../../../config/config.js"; import { diff --git a/src/cli/plugins-cli.ts b/src/cli/plugins-cli.ts index c91f65c04c7..412e45a6639 100644 --- a/src/cli/plugins-cli.ts +++ b/src/cli/plugins-cli.ts @@ -143,7 +143,7 @@ function formatInspectSection(title: string, lines: string[]): string[] { if (lines.length === 0) { return []; } - return ["", `${theme.muted(`${title}:`)}`, ...lines]; + return ["", theme.muted(`${title}:`), ...lines]; } function formatCapabilityKinds( diff --git a/src/plugins/status.ts b/src/plugins/status.ts index 09a75e02516..5588d6f5874 100644 --- a/src/plugins/status.ts +++ b/src/plugins/status.ts @@ -159,14 +159,14 @@ export function buildPluginInspectReport(params: { name: entry.hookName, priority: entry.priority, })) - .sort((a, b) => a.name.localeCompare(b.name)); + .toSorted((a, b) => a.name.localeCompare(b.name)); const customHooks = report.hooks .filter((entry) => entry.pluginId === plugin.id) .map((entry) => ({ name: entry.entry.hook.name, - events: [...entry.events].sort(), + events: [...entry.events].toSorted(), })) - .sort((a, b) => a.name.localeCompare(b.name)); + .toSorted((a, b) => a.name.localeCompare(b.name)); const tools = report.tools .filter((entry) => entry.pluginId === plugin.id) .map((entry) => ({