Spaces:
Configuration error
Configuration error
| import { createRequire } from "node:module"; | |
| import { | |
| chunkByNewline, | |
| chunkMarkdownText, | |
| chunkMarkdownTextWithMode, | |
| chunkText, | |
| chunkTextWithMode, | |
| resolveChunkMode, | |
| resolveTextChunkLimit, | |
| } from "../../auto-reply/chunk.js"; | |
| import { | |
| hasControlCommand, | |
| isControlCommandMessage, | |
| shouldComputeCommandAuthorized, | |
| } from "../../auto-reply/command-detection.js"; | |
| import { shouldHandleTextCommands } from "../../auto-reply/commands-registry.js"; | |
| import { | |
| createInboundDebouncer, | |
| resolveInboundDebounceMs, | |
| } from "../../auto-reply/inbound-debounce.js"; | |
| import { | |
| formatAgentEnvelope, | |
| formatInboundEnvelope, | |
| resolveEnvelopeFormatOptions, | |
| } from "../../auto-reply/envelope.js"; | |
| import { dispatchReplyFromConfig } from "../../auto-reply/reply/dispatch-from-config.js"; | |
| import { | |
| buildMentionRegexes, | |
| matchesMentionPatterns, | |
| matchesMentionWithExplicit, | |
| } from "../../auto-reply/reply/mentions.js"; | |
| import { dispatchReplyWithBufferedBlockDispatcher } from "../../auto-reply/reply/provider-dispatcher.js"; | |
| import { createReplyDispatcherWithTyping } from "../../auto-reply/reply/reply-dispatcher.js"; | |
| import { finalizeInboundContext } from "../../auto-reply/reply/inbound-context.js"; | |
| import { resolveEffectiveMessagesConfig, resolveHumanDelayConfig } from "../../agents/identity.js"; | |
| import { createMemoryGetTool, createMemorySearchTool } from "../../agents/tools/memory-tool.js"; | |
| import { handleSlackAction } from "../../agents/tools/slack-actions.js"; | |
| import { handleWhatsAppAction } from "../../agents/tools/whatsapp-actions.js"; | |
| import { removeAckReactionAfterReply, shouldAckReaction } from "../../channels/ack-reactions.js"; | |
| import { resolveCommandAuthorizedFromAuthorizers } from "../../channels/command-gating.js"; | |
| import { recordInboundSession } from "../../channels/session.js"; | |
| import { discordMessageActions } from "../../channels/plugins/actions/discord.js"; | |
| import { signalMessageActions } from "../../channels/plugins/actions/signal.js"; | |
| import { telegramMessageActions } from "../../channels/plugins/actions/telegram.js"; | |
| import { createWhatsAppLoginTool } from "../../channels/plugins/agent-tools/whatsapp-login.js"; | |
| import { monitorWebChannel } from "../../channels/web/index.js"; | |
| import { | |
| resolveChannelGroupPolicy, | |
| resolveChannelGroupRequireMention, | |
| } from "../../config/group-policy.js"; | |
| import { resolveMarkdownTableMode } from "../../config/markdown-tables.js"; | |
| import { resolveStateDir } from "../../config/paths.js"; | |
| import { loadConfig, writeConfigFile } from "../../config/config.js"; | |
| import { | |
| readSessionUpdatedAt, | |
| recordSessionMetaFromInbound, | |
| resolveStorePath, | |
| updateLastRoute, | |
| } from "../../config/sessions.js"; | |
| import { auditDiscordChannelPermissions } from "../../discord/audit.js"; | |
| import { | |
| listDiscordDirectoryGroupsLive, | |
| listDiscordDirectoryPeersLive, | |
| } from "../../discord/directory-live.js"; | |
| import { monitorDiscordProvider } from "../../discord/monitor.js"; | |
| import { probeDiscord } from "../../discord/probe.js"; | |
| import { resolveDiscordChannelAllowlist } from "../../discord/resolve-channels.js"; | |
| import { resolveDiscordUserAllowlist } from "../../discord/resolve-users.js"; | |
| import { sendMessageDiscord, sendPollDiscord } from "../../discord/send.js"; | |
| import { getChannelActivity, recordChannelActivity } from "../../infra/channel-activity.js"; | |
| import { enqueueSystemEvent } from "../../infra/system-events.js"; | |
| import { monitorIMessageProvider } from "../../imessage/monitor.js"; | |
| import { probeIMessage } from "../../imessage/probe.js"; | |
| import { sendMessageIMessage } from "../../imessage/send.js"; | |
| import { shouldLogVerbose } from "../../globals.js"; | |
| import { convertMarkdownTables } from "../../markdown/tables.js"; | |
| import { getChildLogger } from "../../logging.js"; | |
| import { normalizeLogLevel } from "../../logging/levels.js"; | |
| import { isVoiceCompatibleAudio } from "../../media/audio.js"; | |
| import { mediaKindFromMime } from "../../media/constants.js"; | |
| import { fetchRemoteMedia } from "../../media/fetch.js"; | |
| import { getImageMetadata, resizeToJpeg } from "../../media/image-ops.js"; | |
| import { detectMime } from "../../media/mime.js"; | |
| import { saveMediaBuffer } from "../../media/store.js"; | |
| import { buildPairingReply } from "../../pairing/pairing-messages.js"; | |
| import { | |
| readChannelAllowFromStore, | |
| upsertChannelPairingRequest, | |
| } from "../../pairing/pairing-store.js"; | |
| import { runCommandWithTimeout } from "../../process/exec.js"; | |
| import { resolveAgentRoute } from "../../routing/resolve-route.js"; | |
| import { monitorSignalProvider } from "../../signal/index.js"; | |
| import { probeSignal } from "../../signal/probe.js"; | |
| import { sendMessageSignal } from "../../signal/send.js"; | |
| import { monitorSlackProvider } from "../../slack/index.js"; | |
| import { | |
| listSlackDirectoryGroupsLive, | |
| listSlackDirectoryPeersLive, | |
| } from "../../slack/directory-live.js"; | |
| import { probeSlack } from "../../slack/probe.js"; | |
| import { resolveSlackChannelAllowlist } from "../../slack/resolve-channels.js"; | |
| import { resolveSlackUserAllowlist } from "../../slack/resolve-users.js"; | |
| import { sendMessageSlack } from "../../slack/send.js"; | |
| import { | |
| auditTelegramGroupMembership, | |
| collectTelegramUnmentionedGroupIds, | |
| } from "../../telegram/audit.js"; | |
| import { monitorTelegramProvider } from "../../telegram/monitor.js"; | |
| import { probeTelegram } from "../../telegram/probe.js"; | |
| import { sendMessageTelegram } from "../../telegram/send.js"; | |
| import { resolveTelegramToken } from "../../telegram/token.js"; | |
| import { loadWebMedia } from "../../web/media.js"; | |
| import { getActiveWebListener } from "../../web/active-listener.js"; | |
| import { | |
| getWebAuthAgeMs, | |
| logoutWeb, | |
| logWebSelfId, | |
| readWebSelfId, | |
| webAuthExists, | |
| } from "../../web/auth-store.js"; | |
| import { loginWeb } from "../../web/login.js"; | |
| import { startWebLoginWithQr, waitForWebLogin } from "../../web/login-qr.js"; | |
| import { sendMessageWhatsApp, sendPollWhatsApp } from "../../web/outbound.js"; | |
| import { registerMemoryCli } from "../../cli/memory-cli.js"; | |
| import { formatNativeDependencyHint } from "./native-deps.js"; | |
| import { textToSpeechTelephony } from "../../tts/tts.js"; | |
| import { | |
| listLineAccountIds, | |
| normalizeAccountId as normalizeLineAccountId, | |
| resolveDefaultLineAccountId, | |
| resolveLineAccount, | |
| } from "../../line/accounts.js"; | |
| import { probeLineBot } from "../../line/probe.js"; | |
| import { | |
| createQuickReplyItems, | |
| pushMessageLine, | |
| pushMessagesLine, | |
| pushFlexMessage, | |
| pushTemplateMessage, | |
| pushLocationMessage, | |
| pushTextMessageWithQuickReplies, | |
| sendMessageLine, | |
| } from "../../line/send.js"; | |
| import { monitorLineProvider } from "../../line/monitor.js"; | |
| import { buildTemplateMessageFromPayload } from "../../line/template-messages.js"; | |
| import type { PluginRuntime } from "./types.js"; | |
| let cachedVersion: string | null = null; | |
| function resolveVersion(): string { | |
| if (cachedVersion) return cachedVersion; | |
| try { | |
| const require = createRequire(import.meta.url); | |
| const pkg = require("../../../package.json") as { version?: string }; | |
| cachedVersion = pkg.version ?? "unknown"; | |
| return cachedVersion; | |
| } catch { | |
| cachedVersion = "unknown"; | |
| return cachedVersion; | |
| } | |
| } | |
| export function createPluginRuntime(): PluginRuntime { | |
| return { | |
| version: resolveVersion(), | |
| config: { | |
| loadConfig, | |
| writeConfigFile, | |
| }, | |
| system: { | |
| enqueueSystemEvent, | |
| runCommandWithTimeout, | |
| formatNativeDependencyHint, | |
| }, | |
| media: { | |
| loadWebMedia, | |
| detectMime, | |
| mediaKindFromMime, | |
| isVoiceCompatibleAudio, | |
| getImageMetadata, | |
| resizeToJpeg, | |
| }, | |
| tts: { | |
| textToSpeechTelephony, | |
| }, | |
| tools: { | |
| createMemoryGetTool, | |
| createMemorySearchTool, | |
| registerMemoryCli, | |
| }, | |
| channel: { | |
| text: { | |
| chunkByNewline, | |
| chunkMarkdownText, | |
| chunkMarkdownTextWithMode, | |
| chunkText, | |
| chunkTextWithMode, | |
| resolveChunkMode, | |
| resolveTextChunkLimit, | |
| hasControlCommand, | |
| resolveMarkdownTableMode, | |
| convertMarkdownTables, | |
| }, | |
| reply: { | |
| dispatchReplyWithBufferedBlockDispatcher, | |
| createReplyDispatcherWithTyping, | |
| resolveEffectiveMessagesConfig, | |
| resolveHumanDelayConfig, | |
| dispatchReplyFromConfig, | |
| finalizeInboundContext, | |
| formatAgentEnvelope, | |
| formatInboundEnvelope, | |
| resolveEnvelopeFormatOptions, | |
| }, | |
| routing: { | |
| resolveAgentRoute, | |
| }, | |
| pairing: { | |
| buildPairingReply, | |
| readAllowFromStore: readChannelAllowFromStore, | |
| upsertPairingRequest: upsertChannelPairingRequest, | |
| }, | |
| media: { | |
| fetchRemoteMedia, | |
| saveMediaBuffer, | |
| }, | |
| activity: { | |
| record: recordChannelActivity, | |
| get: getChannelActivity, | |
| }, | |
| session: { | |
| resolveStorePath, | |
| readSessionUpdatedAt, | |
| recordSessionMetaFromInbound, | |
| recordInboundSession, | |
| updateLastRoute, | |
| }, | |
| mentions: { | |
| buildMentionRegexes, | |
| matchesMentionPatterns, | |
| matchesMentionWithExplicit, | |
| }, | |
| reactions: { | |
| shouldAckReaction, | |
| removeAckReactionAfterReply, | |
| }, | |
| groups: { | |
| resolveGroupPolicy: resolveChannelGroupPolicy, | |
| resolveRequireMention: resolveChannelGroupRequireMention, | |
| }, | |
| debounce: { | |
| createInboundDebouncer, | |
| resolveInboundDebounceMs, | |
| }, | |
| commands: { | |
| resolveCommandAuthorizedFromAuthorizers, | |
| isControlCommandMessage, | |
| shouldComputeCommandAuthorized, | |
| shouldHandleTextCommands, | |
| }, | |
| discord: { | |
| messageActions: discordMessageActions, | |
| auditChannelPermissions: auditDiscordChannelPermissions, | |
| listDirectoryGroupsLive: listDiscordDirectoryGroupsLive, | |
| listDirectoryPeersLive: listDiscordDirectoryPeersLive, | |
| probeDiscord, | |
| resolveChannelAllowlist: resolveDiscordChannelAllowlist, | |
| resolveUserAllowlist: resolveDiscordUserAllowlist, | |
| sendMessageDiscord, | |
| sendPollDiscord, | |
| monitorDiscordProvider, | |
| }, | |
| slack: { | |
| listDirectoryGroupsLive: listSlackDirectoryGroupsLive, | |
| listDirectoryPeersLive: listSlackDirectoryPeersLive, | |
| probeSlack, | |
| resolveChannelAllowlist: resolveSlackChannelAllowlist, | |
| resolveUserAllowlist: resolveSlackUserAllowlist, | |
| sendMessageSlack, | |
| monitorSlackProvider, | |
| handleSlackAction, | |
| }, | |
| telegram: { | |
| auditGroupMembership: auditTelegramGroupMembership, | |
| collectUnmentionedGroupIds: collectTelegramUnmentionedGroupIds, | |
| probeTelegram, | |
| resolveTelegramToken, | |
| sendMessageTelegram, | |
| monitorTelegramProvider, | |
| messageActions: telegramMessageActions, | |
| }, | |
| signal: { | |
| probeSignal, | |
| sendMessageSignal, | |
| monitorSignalProvider, | |
| messageActions: signalMessageActions, | |
| }, | |
| imessage: { | |
| monitorIMessageProvider, | |
| probeIMessage, | |
| sendMessageIMessage, | |
| }, | |
| whatsapp: { | |
| getActiveWebListener, | |
| getWebAuthAgeMs, | |
| logoutWeb, | |
| logWebSelfId, | |
| readWebSelfId, | |
| webAuthExists, | |
| sendMessageWhatsApp, | |
| sendPollWhatsApp, | |
| loginWeb, | |
| startWebLoginWithQr, | |
| waitForWebLogin, | |
| monitorWebChannel, | |
| handleWhatsAppAction, | |
| createLoginTool: createWhatsAppLoginTool, | |
| }, | |
| line: { | |
| listLineAccountIds, | |
| resolveDefaultLineAccountId, | |
| resolveLineAccount, | |
| normalizeAccountId: normalizeLineAccountId, | |
| probeLineBot, | |
| sendMessageLine, | |
| pushMessageLine, | |
| pushMessagesLine, | |
| pushFlexMessage, | |
| pushTemplateMessage, | |
| pushLocationMessage, | |
| pushTextMessageWithQuickReplies, | |
| createQuickReplyItems, | |
| buildTemplateMessageFromPayload, | |
| monitorLineProvider, | |
| }, | |
| }, | |
| logging: { | |
| shouldLogVerbose, | |
| getChildLogger: (bindings, opts) => { | |
| const logger = getChildLogger(bindings, { | |
| level: opts?.level ? normalizeLogLevel(opts.level) : undefined, | |
| }); | |
| return { | |
| debug: (message) => logger.debug?.(message), | |
| info: (message) => logger.info(message), | |
| warn: (message) => logger.warn(message), | |
| error: (message) => logger.error(message), | |
| }; | |
| }, | |
| }, | |
| state: { | |
| resolveStateDir, | |
| }, | |
| }; | |
| } | |
| export type { PluginRuntime } from "./types.js"; | |