diff --git a/src/plugin-sdk/discord-runtime-surface.ts b/src/plugin-sdk/discord-runtime-surface.ts new file mode 100644 index 00000000000..76bcf501d93 --- /dev/null +++ b/src/plugin-sdk/discord-runtime-surface.ts @@ -0,0 +1,185 @@ +import { + createLazyFacadeObjectValue, + loadBundledPluginPublicSurfaceModuleSync, +} from "./facade-runtime.js"; + +type DiscordRuntimeModule = typeof import("../../extensions/discord/runtime-api.js"); + +type DiscordRuntimeSurface = Pick< + DiscordRuntimeModule, + | "auditDiscordChannelPermissions" + | "createThreadDiscord" + | "deleteMessageDiscord" + | "discordMessageActions" + | "editChannelDiscord" + | "editMessageDiscord" + | "getThreadBindingManager" + | "listDiscordDirectoryGroupsLive" + | "listDiscordDirectoryPeersLive" + | "monitorDiscordProvider" + | "pinMessageDiscord" + | "probeDiscord" + | "resolveDiscordChannelAllowlist" + | "resolveDiscordUserAllowlist" + | "resolveThreadBindingIdleTimeoutMs" + | "resolveThreadBindingInactivityExpiresAt" + | "resolveThreadBindingMaxAgeExpiresAt" + | "resolveThreadBindingMaxAgeMs" + | "sendDiscordComponentMessage" + | "sendMessageDiscord" + | "sendPollDiscord" + | "sendTypingDiscord" + | "setThreadBindingIdleTimeoutBySessionKey" + | "setThreadBindingMaxAgeBySessionKey" + | "unbindThreadBindingsBySessionKey" + | "unpinMessageDiscord" +>; + +function loadDiscordRuntimeSurface(): DiscordRuntimeSurface { + return loadBundledPluginPublicSurfaceModuleSync({ + dirName: "discord", + artifactBasename: "runtime-api.js", + }); +} + +export const discordMessageActions: DiscordRuntimeModule["discordMessageActions"] = + createLazyFacadeObjectValue(() => loadDiscordRuntimeSurface().discordMessageActions); + +export const auditDiscordChannelPermissions: DiscordRuntimeModule["auditDiscordChannelPermissions"] = + ((...args) => + loadDiscordRuntimeSurface().auditDiscordChannelPermissions( + ...args, + )) as DiscordRuntimeModule["auditDiscordChannelPermissions"]; + +export const createThreadDiscord: DiscordRuntimeModule["createThreadDiscord"] = ((...args) => + loadDiscordRuntimeSurface().createThreadDiscord( + ...args, + )) as DiscordRuntimeModule["createThreadDiscord"]; + +export const deleteMessageDiscord: DiscordRuntimeModule["deleteMessageDiscord"] = ((...args) => + loadDiscordRuntimeSurface().deleteMessageDiscord( + ...args, + )) as DiscordRuntimeModule["deleteMessageDiscord"]; + +export const editChannelDiscord: DiscordRuntimeModule["editChannelDiscord"] = ((...args) => + loadDiscordRuntimeSurface().editChannelDiscord( + ...args, + )) as DiscordRuntimeModule["editChannelDiscord"]; + +export const editMessageDiscord: DiscordRuntimeModule["editMessageDiscord"] = ((...args) => + loadDiscordRuntimeSurface().editMessageDiscord( + ...args, + )) as DiscordRuntimeModule["editMessageDiscord"]; + +export const getThreadBindingManager: DiscordRuntimeModule["getThreadBindingManager"] = (( + ...args +) => + loadDiscordRuntimeSurface().getThreadBindingManager( + ...args, + )) as DiscordRuntimeModule["getThreadBindingManager"]; + +export const listDiscordDirectoryGroupsLive: DiscordRuntimeModule["listDiscordDirectoryGroupsLive"] = + ((...args) => + loadDiscordRuntimeSurface().listDiscordDirectoryGroupsLive( + ...args, + )) as DiscordRuntimeModule["listDiscordDirectoryGroupsLive"]; + +export const listDiscordDirectoryPeersLive: DiscordRuntimeModule["listDiscordDirectoryPeersLive"] = + ((...args) => + loadDiscordRuntimeSurface().listDiscordDirectoryPeersLive( + ...args, + )) as DiscordRuntimeModule["listDiscordDirectoryPeersLive"]; + +export const monitorDiscordProvider: DiscordRuntimeModule["monitorDiscordProvider"] = ((...args) => + loadDiscordRuntimeSurface().monitorDiscordProvider( + ...args, + )) as DiscordRuntimeModule["monitorDiscordProvider"]; + +export const pinMessageDiscord: DiscordRuntimeModule["pinMessageDiscord"] = ((...args) => + loadDiscordRuntimeSurface().pinMessageDiscord( + ...args, + )) as DiscordRuntimeModule["pinMessageDiscord"]; + +export const probeDiscord: DiscordRuntimeModule["probeDiscord"] = ((...args) => + loadDiscordRuntimeSurface().probeDiscord(...args)) as DiscordRuntimeModule["probeDiscord"]; + +export const resolveDiscordChannelAllowlist: DiscordRuntimeModule["resolveDiscordChannelAllowlist"] = + ((...args) => + loadDiscordRuntimeSurface().resolveDiscordChannelAllowlist( + ...args, + )) as DiscordRuntimeModule["resolveDiscordChannelAllowlist"]; + +export const resolveDiscordUserAllowlist: DiscordRuntimeModule["resolveDiscordUserAllowlist"] = (( + ...args +) => + loadDiscordRuntimeSurface().resolveDiscordUserAllowlist( + ...args, + )) as DiscordRuntimeModule["resolveDiscordUserAllowlist"]; + +export const resolveThreadBindingIdleTimeoutMs: DiscordRuntimeModule["resolveThreadBindingIdleTimeoutMs"] = + ((...args) => + loadDiscordRuntimeSurface().resolveThreadBindingIdleTimeoutMs( + ...args, + )) as DiscordRuntimeModule["resolveThreadBindingIdleTimeoutMs"]; + +export const resolveThreadBindingInactivityExpiresAt: DiscordRuntimeModule["resolveThreadBindingInactivityExpiresAt"] = + ((...args) => + loadDiscordRuntimeSurface().resolveThreadBindingInactivityExpiresAt( + ...args, + )) as DiscordRuntimeModule["resolveThreadBindingInactivityExpiresAt"]; + +export const resolveThreadBindingMaxAgeExpiresAt: DiscordRuntimeModule["resolveThreadBindingMaxAgeExpiresAt"] = + ((...args) => + loadDiscordRuntimeSurface().resolveThreadBindingMaxAgeExpiresAt( + ...args, + )) as DiscordRuntimeModule["resolveThreadBindingMaxAgeExpiresAt"]; + +export const resolveThreadBindingMaxAgeMs: DiscordRuntimeModule["resolveThreadBindingMaxAgeMs"] = (( + ...args +) => + loadDiscordRuntimeSurface().resolveThreadBindingMaxAgeMs( + ...args, + )) as DiscordRuntimeModule["resolveThreadBindingMaxAgeMs"]; + +export const sendDiscordComponentMessage: DiscordRuntimeModule["sendDiscordComponentMessage"] = (( + ...args +) => + loadDiscordRuntimeSurface().sendDiscordComponentMessage( + ...args, + )) as DiscordRuntimeModule["sendDiscordComponentMessage"]; + +export const sendMessageDiscord: DiscordRuntimeModule["sendMessageDiscord"] = ((...args) => + loadDiscordRuntimeSurface().sendMessageDiscord( + ...args, + )) as DiscordRuntimeModule["sendMessageDiscord"]; + +export const sendPollDiscord: DiscordRuntimeModule["sendPollDiscord"] = ((...args) => + loadDiscordRuntimeSurface().sendPollDiscord(...args)) as DiscordRuntimeModule["sendPollDiscord"]; + +export const sendTypingDiscord: DiscordRuntimeModule["sendTypingDiscord"] = ((...args) => + loadDiscordRuntimeSurface().sendTypingDiscord( + ...args, + )) as DiscordRuntimeModule["sendTypingDiscord"]; + +export const setThreadBindingIdleTimeoutBySessionKey: DiscordRuntimeModule["setThreadBindingIdleTimeoutBySessionKey"] = + ((...args) => + loadDiscordRuntimeSurface().setThreadBindingIdleTimeoutBySessionKey( + ...args, + )) as DiscordRuntimeModule["setThreadBindingIdleTimeoutBySessionKey"]; + +export const setThreadBindingMaxAgeBySessionKey: DiscordRuntimeModule["setThreadBindingMaxAgeBySessionKey"] = + ((...args) => + loadDiscordRuntimeSurface().setThreadBindingMaxAgeBySessionKey( + ...args, + )) as DiscordRuntimeModule["setThreadBindingMaxAgeBySessionKey"]; + +export const unbindThreadBindingsBySessionKey: DiscordRuntimeModule["unbindThreadBindingsBySessionKey"] = + ((...args) => + loadDiscordRuntimeSurface().unbindThreadBindingsBySessionKey( + ...args, + )) as DiscordRuntimeModule["unbindThreadBindingsBySessionKey"]; + +export const unpinMessageDiscord: DiscordRuntimeModule["unpinMessageDiscord"] = ((...args) => + loadDiscordRuntimeSurface().unpinMessageDiscord( + ...args, + )) as DiscordRuntimeModule["unpinMessageDiscord"]; diff --git a/src/plugin-sdk/signal-runtime-surface.ts b/src/plugin-sdk/signal-runtime-surface.ts new file mode 100644 index 00000000000..7a6768ffbe2 --- /dev/null +++ b/src/plugin-sdk/signal-runtime-surface.ts @@ -0,0 +1,34 @@ +import { + createLazyFacadeObjectValue, + loadBundledPluginPublicSurfaceModuleSync, +} from "./facade-runtime.js"; + +type SignalRuntimeModule = typeof import("../../extensions/signal/runtime-api.js"); + +type SignalRuntimeSurface = Pick< + SignalRuntimeModule, + "monitorSignalProvider" | "probeSignal" | "sendMessageSignal" | "signalMessageActions" +>; + +function loadSignalRuntimeSurface(): SignalRuntimeSurface { + return loadBundledPluginPublicSurfaceModuleSync({ + dirName: "signal", + artifactBasename: "runtime-api.js", + }); +} + +export const signalMessageActions: SignalRuntimeModule["signalMessageActions"] = + createLazyFacadeObjectValue(() => loadSignalRuntimeSurface().signalMessageActions); + +export const monitorSignalProvider: SignalRuntimeModule["monitorSignalProvider"] = ((...args) => + loadSignalRuntimeSurface().monitorSignalProvider( + ...args, + )) as SignalRuntimeModule["monitorSignalProvider"]; + +export const probeSignal: SignalRuntimeModule["probeSignal"] = ((...args) => + loadSignalRuntimeSurface().probeSignal(...args)) as SignalRuntimeModule["probeSignal"]; + +export const sendMessageSignal: SignalRuntimeModule["sendMessageSignal"] = ((...args) => + loadSignalRuntimeSurface().sendMessageSignal( + ...args, + )) as SignalRuntimeModule["sendMessageSignal"]; diff --git a/src/plugin-sdk/slack-runtime-surface.ts b/src/plugin-sdk/slack-runtime-surface.ts new file mode 100644 index 00000000000..c49d57766e0 --- /dev/null +++ b/src/plugin-sdk/slack-runtime-surface.ts @@ -0,0 +1,64 @@ +import { loadBundledPluginPublicSurfaceModuleSync } from "./facade-runtime.js"; + +type SlackRuntimeModule = typeof import("../../extensions/slack/runtime-api.js"); + +type SlackRuntimeSurface = Pick< + SlackRuntimeModule, + | "handleSlackAction" + | "listSlackDirectoryGroupsLive" + | "listSlackDirectoryPeersLive" + | "monitorSlackProvider" + | "probeSlack" + | "resolveSlackChannelAllowlist" + | "resolveSlackUserAllowlist" + | "sendMessageSlack" +>; + +function loadSlackRuntimeSurface(): SlackRuntimeSurface { + return loadBundledPluginPublicSurfaceModuleSync({ + dirName: "slack", + artifactBasename: "runtime-api.js", + }); +} + +export const handleSlackAction: SlackRuntimeModule["handleSlackAction"] = ((...args) => + loadSlackRuntimeSurface().handleSlackAction(...args)) as SlackRuntimeModule["handleSlackAction"]; + +export const listSlackDirectoryGroupsLive: SlackRuntimeModule["listSlackDirectoryGroupsLive"] = (( + ...args +) => + loadSlackRuntimeSurface().listSlackDirectoryGroupsLive( + ...args, + )) as SlackRuntimeModule["listSlackDirectoryGroupsLive"]; + +export const listSlackDirectoryPeersLive: SlackRuntimeModule["listSlackDirectoryPeersLive"] = (( + ...args +) => + loadSlackRuntimeSurface().listSlackDirectoryPeersLive( + ...args, + )) as SlackRuntimeModule["listSlackDirectoryPeersLive"]; + +export const monitorSlackProvider: SlackRuntimeModule["monitorSlackProvider"] = ((...args) => + loadSlackRuntimeSurface().monitorSlackProvider( + ...args, + )) as SlackRuntimeModule["monitorSlackProvider"]; + +export const probeSlack: SlackRuntimeModule["probeSlack"] = ((...args) => + loadSlackRuntimeSurface().probeSlack(...args)) as SlackRuntimeModule["probeSlack"]; + +export const resolveSlackChannelAllowlist: SlackRuntimeModule["resolveSlackChannelAllowlist"] = (( + ...args +) => + loadSlackRuntimeSurface().resolveSlackChannelAllowlist( + ...args, + )) as SlackRuntimeModule["resolveSlackChannelAllowlist"]; + +export const resolveSlackUserAllowlist: SlackRuntimeModule["resolveSlackUserAllowlist"] = (( + ...args +) => + loadSlackRuntimeSurface().resolveSlackUserAllowlist( + ...args, + )) as SlackRuntimeModule["resolveSlackUserAllowlist"]; + +export const sendMessageSlack: SlackRuntimeModule["sendMessageSlack"] = ((...args) => + loadSlackRuntimeSurface().sendMessageSlack(...args)) as SlackRuntimeModule["sendMessageSlack"]; diff --git a/src/plugins/runtime/runtime-channel.ts b/src/plugins/runtime/runtime-channel.ts index f1d2b47cdf8..fd336b35766 100644 --- a/src/plugins/runtime/runtime-channel.ts +++ b/src/plugins/runtime/runtime-channel.ts @@ -1,7 +1,3 @@ -import { - setThreadBindingIdleTimeoutBySessionKey, - setThreadBindingMaxAgeBySessionKey, -} from "../../../extensions/discord/runtime-api.js"; import { resolveEffectiveMessagesConfig, resolveHumanDelayConfig } from "../../agents/identity.js"; import { chunkByNewline, @@ -65,6 +61,10 @@ import { readChannelAllowFromStore, upsertChannelPairingRequest, } from "../../pairing/pairing-store.js"; +import { + setThreadBindingIdleTimeoutBySessionKey, + setThreadBindingMaxAgeBySessionKey, +} from "../../plugin-sdk/discord-runtime-surface.js"; import { buildAgentSessionKey, resolveAgentRoute } from "../../routing/resolve-route.js"; import { defineCachedValue } from "./runtime-cache.js"; import { createRuntimeDiscord } from "./runtime-discord.js"; diff --git a/src/plugins/runtime/runtime-discord-ops.runtime.ts b/src/plugins/runtime/runtime-discord-ops.runtime.ts index 7e12c6e1036..9afadcbdcb8 100644 --- a/src/plugins/runtime/runtime-discord-ops.runtime.ts +++ b/src/plugins/runtime/runtime-discord-ops.runtime.ts @@ -16,7 +16,7 @@ import { sendPollDiscord as sendPollDiscordImpl, sendTypingDiscord as sendTypingDiscordImpl, unpinMessageDiscord as unpinMessageDiscordImpl, -} from "../../../extensions/discord/runtime-api.js"; +} from "../../plugin-sdk/discord-runtime-surface.js"; import type { PluginRuntimeChannel } from "./types-channel.js"; type RuntimeDiscordOps = Pick< diff --git a/src/plugins/runtime/runtime-discord.ts b/src/plugins/runtime/runtime-discord.ts index 8264a7f04df..3841a47d2b6 100644 --- a/src/plugins/runtime/runtime-discord.ts +++ b/src/plugins/runtime/runtime-discord.ts @@ -1,5 +1,5 @@ -import { discordMessageActions } from "../../../extensions/discord/runtime-api.js"; import { + discordMessageActions, getThreadBindingManager, resolveThreadBindingIdleTimeoutMs, resolveThreadBindingInactivityExpiresAt, @@ -8,7 +8,7 @@ import { setThreadBindingIdleTimeoutBySessionKey, setThreadBindingMaxAgeBySessionKey, unbindThreadBindingsBySessionKey, -} from "../../../extensions/discord/runtime-api.js"; +} from "../../plugin-sdk/discord-runtime-surface.js"; import { createLazyRuntimeMethodBinder, createLazyRuntimeSurface, diff --git a/src/plugins/runtime/runtime-signal.ts b/src/plugins/runtime/runtime-signal.ts index 5eade131012..3489ecc0b65 100644 --- a/src/plugins/runtime/runtime-signal.ts +++ b/src/plugins/runtime/runtime-signal.ts @@ -3,7 +3,7 @@ import { probeSignal, signalMessageActions, sendMessageSignal, -} from "../../../extensions/signal/runtime-api.js"; +} from "../../plugin-sdk/signal-runtime-surface.js"; import type { PluginRuntimeChannel } from "./types-channel.js"; export function createRuntimeSignal(): PluginRuntimeChannel["signal"] { diff --git a/src/plugins/runtime/runtime-slack-ops.runtime.ts b/src/plugins/runtime/runtime-slack-ops.runtime.ts index ec534c0b224..33e0c673bf1 100644 --- a/src/plugins/runtime/runtime-slack-ops.runtime.ts +++ b/src/plugins/runtime/runtime-slack-ops.runtime.ts @@ -7,7 +7,7 @@ import { resolveSlackUserAllowlist as resolveSlackUserAllowlistImpl, sendMessageSlack as sendMessageSlackImpl, handleSlackAction as handleSlackActionImpl, -} from "../../../extensions/slack/runtime-api.js"; +} from "../../plugin-sdk/slack-runtime-surface.js"; import type { PluginRuntimeChannel } from "./types-channel.js"; type RuntimeSlackOps = Pick<