fix(ci): restore extension runtime seams

This commit is contained in:
Vincent Koc
2026-04-03 22:57:21 +09:00
parent 9b83e462cf
commit d2427c19e0
5 changed files with 45 additions and 8 deletions

View File

@@ -98,6 +98,22 @@ function resolveRuntimeDiscordMessageActions() {
}
}
function resolveOptionalDiscordRuntime() {
try {
return getDiscordRuntime();
} catch {
return null;
}
}
function resolveDiscordSend(deps?: { [channelId: string]: unknown }): DiscordSendFn {
return (
resolveOutboundSendDep<DiscordSendFn>(deps, "discord") ??
resolveOptionalDiscordRuntime()?.channel?.discord?.sendMessageDiscord ??
sendMessageDiscord
);
}
const discordMessageActions = {
describeMessageTool: (
ctx: Parameters<NonNullable<typeof discordMessageActionsImpl.describeMessageTool>>[0],
@@ -685,7 +701,7 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
attachedResults: {
channel: "discord",
sendText: async ({ cfg, to, text, accountId, deps, replyToId, silent }) => {
const send = resolveOutboundSendDep<DiscordSendFn>(deps, "discord") ?? sendMessageDiscord;
const send = resolveDiscordSend(deps);
return await send(to, text, {
verbose: false,
cfg,
@@ -705,7 +721,7 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
replyToId,
silent,
}) => {
const send = resolveOutboundSendDep<DiscordSendFn>(deps, "discord") ?? sendMessageDiscord;
const send = resolveDiscordSend(deps);
return await send(to, text, {
verbose: false,
cfg,

View File

@@ -3,6 +3,7 @@ import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
type DiscordChannelRuntime = {
messageActions?: typeof import("./channel-actions.js").discordMessageActions;
sendMessageDiscord?: typeof import("./send.js").sendMessageDiscord;
};
export type DiscordRuntime = PluginRuntime & {

View File

@@ -1,2 +1,7 @@
export type { ClawdbotConfig, OutboundIdentity, ReplyPayload, RuntimeEnv } from "../runtime-api.js";
export { createReplyPrefixContext } from "openclaw/plugin-sdk/feishu";
export {
createReplyPrefixContext,
type ClawdbotConfig,
type OutboundIdentity,
type ReplyPayload,
type RuntimeEnv,
} from "../runtime-api.js";

View File

@@ -66,7 +66,7 @@ import {
type ChannelPlugin,
type OpenClawConfig,
} from "./runtime-api.js";
import { getSlackRuntime } from "./runtime.js";
import { getOptionalSlackRuntime, getSlackRuntime } from "./runtime.js";
import { fetchSlackScopes } from "./scopes.js";
import { sendMessageSlack } from "./send.js";
import { slackSetupAdapter } from "./setup-core.js";
@@ -96,6 +96,10 @@ function resolveSlackProbe() {
return probeSlack;
}
function resolveSlackHandleAction() {
return getOptionalSlackRuntime()?.channel?.slack?.handleSlackAction ?? handleSlackAction;
}
// Select the appropriate Slack token for read/write operations.
function getTokenForOperation(
account: ResolvedSlackAccount,
@@ -364,7 +368,7 @@ export const slackPlugin: ChannelPlugin<ResolvedSlackAccount, SlackProbe> = crea
},
actions: createSlackActions(SLACK_CHANNEL, {
invoke: async (action, cfg, toolContext) =>
await handleSlackAction(
await resolveSlackHandleAction()(
action,
cfg as OpenClawConfig,
toolContext as SlackActionContext | undefined,

View File

@@ -1,9 +1,20 @@
import type { PluginRuntime } from "openclaw/plugin-sdk/core";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
type SlackChannelRuntime = {
handleSlackAction?: typeof import("./action-runtime.js").handleSlackAction;
};
export type SlackRuntime = PluginRuntime & {
channel: PluginRuntime["channel"] & {
slack?: SlackChannelRuntime;
};
};
const {
setRuntime: setSlackRuntime,
clearRuntime: clearSlackRuntime,
tryGetRuntime: getOptionalSlackRuntime,
getRuntime: getSlackRuntime,
} = createPluginRuntimeStore<PluginRuntime>("Slack runtime not initialized");
export { clearSlackRuntime, getSlackRuntime, setSlackRuntime };
} = createPluginRuntimeStore<SlackRuntime>("Slack runtime not initialized");
export { clearSlackRuntime, getOptionalSlackRuntime, getSlackRuntime, setSlackRuntime };