diff --git a/extensions/acpx/runtime-api.ts b/extensions/acpx/runtime-api.ts index 9a019cdd0e6..7a8a555a9a7 100644 --- a/extensions/acpx/runtime-api.ts +++ b/extensions/acpx/runtime-api.ts @@ -1 +1,38 @@ -export * from "../../src/plugin-sdk/acpx.js"; +export type { AcpRuntimeErrorCode } from "openclaw/plugin-sdk/acp-runtime"; +export { + AcpRuntimeError, + registerAcpRuntimeBackend, + unregisterAcpRuntimeBackend, +} from "openclaw/plugin-sdk/acp-runtime"; +export type { + AcpRuntime, + AcpRuntimeCapabilities, + AcpRuntimeDoctorReport, + AcpRuntimeEnsureInput, + AcpRuntimeEvent, + AcpRuntimeHandle, + AcpRuntimeStatus, + AcpRuntimeTurnInput, + AcpSessionUpdateTag, +} from "openclaw/plugin-sdk/acp-runtime"; +export type { + OpenClawPluginApi, + OpenClawPluginConfigSchema, + OpenClawPluginService, + OpenClawPluginServiceContext, + PluginLogger, +} from "openclaw/plugin-sdk/core"; +export type { + WindowsSpawnProgram, + WindowsSpawnProgramCandidate, + WindowsSpawnResolution, +} from "openclaw/plugin-sdk/windows-spawn"; +export { + applyWindowsSpawnProgramPolicy, + materializeWindowsSpawnProgram, + resolveWindowsSpawnProgramCandidate, +} from "openclaw/plugin-sdk/windows-spawn"; +export { + listKnownProviderAuthEnvVarNames, + omitEnvKeysCaseInsensitive, +} from "openclaw/plugin-sdk/provider-env-vars"; diff --git a/extensions/google/runtime-api.ts b/extensions/google/runtime-api.ts index 60e25c7303e..9b2b8047998 100644 --- a/extensions/google/runtime-api.ts +++ b/extensions/google/runtime-api.ts @@ -1 +1 @@ -export * from "../../src/plugin-sdk/google.js"; +export { normalizeGoogleModelId, parseGeminiAuth } from "openclaw/plugin-sdk/provider-google"; diff --git a/extensions/lobster/runtime-api.ts b/extensions/lobster/runtime-api.ts index 24898e04cf5..d883e0853b3 100644 --- a/extensions/lobster/runtime-api.ts +++ b/extensions/lobster/runtime-api.ts @@ -1 +1,12 @@ -export * from "../../src/plugin-sdk/lobster.js"; +export { definePluginEntry } from "openclaw/plugin-sdk/core"; +export type { + AnyAgentTool, + OpenClawPluginApi, + OpenClawPluginToolContext, + OpenClawPluginToolFactory, +} from "openclaw/plugin-sdk/core"; +export { + applyWindowsSpawnProgramPolicy, + materializeWindowsSpawnProgram, + resolveWindowsSpawnProgramCandidate, +} from "openclaw/plugin-sdk/windows-spawn"; diff --git a/extensions/matrix/runtime-api.ts b/extensions/matrix/runtime-api.ts index 1aaee387fc8..865936cb6ff 100644 --- a/extensions/matrix/runtime-api.ts +++ b/extensions/matrix/runtime-api.ts @@ -3,3 +3,4 @@ // matrix-js-sdk during plain runtime-api import. export * from "./src/auth-precedence.js"; export * from "./helper-api.js"; +export * from "./thread-bindings-runtime.js"; diff --git a/extensions/zai/runtime-api.ts b/extensions/zai/runtime-api.ts index 16d46dd4362..f512627cde8 100644 --- a/extensions/zai/runtime-api.ts +++ b/extensions/zai/runtime-api.ts @@ -1 +1,5 @@ -export * from "../../src/plugin-sdk/zai.js"; +export { + detectZaiEndpoint, + type ZaiDetectedEndpoint, + type ZaiEndpointId, +} from "openclaw/plugin-sdk/provider-zai-endpoint"; diff --git a/package.json b/package.json index b8fe827b3e7..a522ced8380 100644 --- a/package.json +++ b/package.json @@ -169,6 +169,10 @@ "types": "./dist/plugin-sdk/process-runtime.d.ts", "default": "./dist/plugin-sdk/process-runtime.js" }, + "./plugin-sdk/windows-spawn": { + "types": "./dist/plugin-sdk/windows-spawn.d.ts", + "default": "./dist/plugin-sdk/windows-spawn.js" + }, "./plugin-sdk/acp-runtime": { "types": "./dist/plugin-sdk/acp-runtime.d.ts", "default": "./dist/plugin-sdk/acp-runtime.js" @@ -357,6 +361,14 @@ "types": "./dist/plugin-sdk/provider-catalog.d.ts", "default": "./dist/plugin-sdk/provider-catalog.js" }, + "./plugin-sdk/provider-env-vars": { + "types": "./dist/plugin-sdk/provider-env-vars.d.ts", + "default": "./dist/plugin-sdk/provider-env-vars.js" + }, + "./plugin-sdk/provider-google": { + "types": "./dist/plugin-sdk/provider-google.d.ts", + "default": "./dist/plugin-sdk/provider-google.js" + }, "./plugin-sdk/provider-models": { "types": "./dist/plugin-sdk/provider-models.d.ts", "default": "./dist/plugin-sdk/provider-models.js" @@ -377,6 +389,10 @@ "types": "./dist/plugin-sdk/provider-web-search.d.ts", "default": "./dist/plugin-sdk/provider-web-search.js" }, + "./plugin-sdk/provider-zai-endpoint": { + "types": "./dist/plugin-sdk/provider-zai-endpoint.d.ts", + "default": "./dist/plugin-sdk/provider-zai-endpoint.js" + }, "./plugin-sdk/image-generation": { "types": "./dist/plugin-sdk/image-generation.d.ts", "default": "./dist/plugin-sdk/image-generation.js" diff --git a/scripts/check-plugin-extension-import-boundary.mjs b/scripts/check-plugin-extension-import-boundary.mjs index 13c4fa596a3..bbe9f9702f5 100644 --- a/scripts/check-plugin-extension-import-boundary.mjs +++ b/scripts/check-plugin-extension-import-boundary.mjs @@ -194,7 +194,10 @@ function scanWebSearchRegistrySmells(sourceFile, filePath) { function shouldSkipFile(filePath) { const relativeFile = normalizePath(filePath); - return relativeFile.startsWith("src/plugins/contracts/"); + return ( + relativeFile.startsWith("src/plugins/contracts/") || + /^src\/plugins\/runtime\/runtime-[^/]+-contract\.[cm]?[jt]s$/u.test(relativeFile) + ); } export async function collectPluginExtensionImportBoundaryInventory() { diff --git a/scripts/lib/plugin-sdk-entrypoints.json b/scripts/lib/plugin-sdk-entrypoints.json index e1991f4ab76..e5dad4777eb 100644 --- a/scripts/lib/plugin-sdk-entrypoints.json +++ b/scripts/lib/plugin-sdk-entrypoints.json @@ -32,6 +32,7 @@ "cli-runtime", "hook-runtime", "process-runtime", + "windows-spawn", "acp-runtime", "telegram", "telegram-core", @@ -79,11 +80,14 @@ "provider-auth-login", "plugin-entry", "provider-catalog", + "provider-env-vars", + "provider-google", "provider-models", "provider-onboard", "provider-stream", "provider-usage", "provider-web-search", + "provider-zai-endpoint", "image-generation", "reply-history", "media-understanding", diff --git a/src/plugin-sdk/acp-runtime.ts b/src/plugin-sdk/acp-runtime.ts index 84435bb896a..7767d042f9b 100644 --- a/src/plugin-sdk/acp-runtime.ts +++ b/src/plugin-sdk/acp-runtime.ts @@ -2,6 +2,7 @@ export { getAcpSessionManager } from "../acp/control-plane/manager.js"; export { AcpRuntimeError, isAcpRuntimeError } from "../acp/runtime/errors.js"; +export { registerAcpRuntimeBackend, unregisterAcpRuntimeBackend } from "../acp/runtime/registry.js"; export type { AcpRuntimeErrorCode } from "../acp/runtime/errors.js"; export type { AcpRuntime, diff --git a/src/plugin-sdk/core.ts b/src/plugin-sdk/core.ts index 38509cef4ab..c8c7980fbd2 100644 --- a/src/plugin-sdk/core.ts +++ b/src/plugin-sdk/core.ts @@ -51,6 +51,8 @@ export type { ProviderAuthMethodNonInteractiveContext, ProviderAuthMethod, ProviderAuthResult, + OpenClawPluginToolContext, + OpenClawPluginToolFactory, OpenClawPluginCommandDefinition, OpenClawPluginDefinition, PluginCommandContext, diff --git a/src/plugin-sdk/matrix.ts b/src/plugin-sdk/matrix.ts index 660fe7183fb..3d6ff402d59 100644 --- a/src/plugin-sdk/matrix.ts +++ b/src/plugin-sdk/matrix.ts @@ -1,178 +1 @@ -// Narrow plugin-sdk surface for the bundled matrix plugin. -// Keep this list additive and scoped to symbols used under extensions/matrix. - -import { createOptionalChannelSetupSurface } from "./channel-setup.js"; - -export { - createActionGate, - jsonResult, - readNumberParam, - readReactionParams, - readStringArrayParam, - readStringParam, -} from "../agents/tools/common.js"; -export type { ReplyPayload } from "../auto-reply/types.js"; -export { resolveAckReaction } from "../agents/identity.js"; -export { - compileAllowlist, - resolveCompiledAllowlistMatch, - resolveAllowlistCandidates, - resolveAllowlistMatchByCandidates, -} from "../channels/allowlist-match.js"; -export { - addAllowlistUserEntriesFromConfigEntry, - buildAllowlistResolutionSummary, - canonicalizeAllowlistWithResolvedIds, - mergeAllowlist, - patchAllowlistUsersInConfigEntries, - summarizeMapping, -} from "../channels/allowlists/resolve-utils.js"; -export { ensureConfiguredAcpBindingReady } from "../acp/persistent-bindings.lifecycle.js"; -export { resolveConfiguredAcpBindingRecord } from "../acp/persistent-bindings.resolve.js"; -export { resolveControlCommandGate } from "../channels/command-gating.js"; -export type { NormalizedLocation } from "../channels/location.js"; -export { formatLocationText, toLocationContext } from "../channels/location.js"; -export { logInboundDrop, logTypingFailure } from "../channels/logging.js"; -export type { AllowlistMatch } from "../channels/plugins/allowlist-match.js"; -export { formatAllowlistMatchMeta } from "../channels/plugins/allowlist-match.js"; -export { - buildChannelKeyCandidates, - resolveChannelEntryMatch, -} from "../channels/plugins/channel-config.js"; -export { createAccountListHelpers } from "../channels/plugins/account-helpers.js"; -export { - deleteAccountFromConfigSection, - setAccountEnabledInConfigSection, -} from "../channels/plugins/config-helpers.js"; -export { buildChannelConfigSchema } from "../channels/plugins/config-schema.js"; -export { formatPairingApproveHint } from "../channels/plugins/helpers.js"; -export { - buildSingleChannelSecretPromptState, - addWildcardAllowFrom, - mergeAllowFromEntries, - promptAccountId, - promptSingleChannelSecretInput, - setTopLevelChannelGroupPolicy, -} from "../channels/plugins/setup-wizard-helpers.js"; -export { promptChannelAccessConfig } from "../channels/plugins/setup-group-access.js"; -export { PAIRING_APPROVED_MESSAGE } from "../channels/plugins/pairing-message.js"; -export { - applyAccountNameToChannelSection, - moveSingleAccountChannelSectionToDefaultAccount, -} from "../channels/plugins/setup-helpers.js"; -export type { - BaseProbeResult, - ChannelDirectoryEntry, - ChannelGroupContext, - ChannelMessageActionAdapter, - ChannelMessageActionContext, - ChannelMessageActionName, - ChannelMessageToolDiscovery, - ChannelMessageToolSchemaContribution, - ChannelOutboundAdapter, - ChannelResolveKind, - ChannelResolveResult, - ChannelSetupInput, - ChannelToolSend, -} from "../channels/plugins/types.js"; -export type { ChannelPlugin } from "../channels/plugins/types.plugin.js"; -export { createReplyPrefixOptions } from "../channels/reply-prefix.js"; -export { resolveThreadBindingFarewellText } from "../channels/thread-bindings-messages.js"; -export { - resolveThreadBindingIdleTimeoutMsForChannel, - resolveThreadBindingMaxAgeMsForChannel, -} from "../channels/thread-bindings-policy.js"; -export { - setMatrixThreadBindingIdleTimeoutBySessionKey, - setMatrixThreadBindingMaxAgeBySessionKey, -} from "../../extensions/matrix/thread-bindings-runtime.js"; -export { createTypingCallbacks } from "../channels/typing.js"; -export { createChannelReplyPipeline } from "./channel-reply-pipeline.js"; -export type { OpenClawConfig } from "../config/config.js"; -export { - GROUP_POLICY_BLOCKED_LABEL, - resolveAllowlistProviderRuntimeGroupPolicy, - resolveDefaultGroupPolicy, - warnMissingProviderGroupPolicyFallbackOnce, -} from "../config/runtime-group-policy.js"; -export type { - DmPolicy, - GroupPolicy, - GroupToolPolicyConfig, - MarkdownTableMode, -} from "../config/types.js"; -export type { SecretInput } from "./secret-input.js"; -export { - buildSecretInputSchema, - hasConfiguredSecretInput, - normalizeResolvedSecretInputString, - normalizeSecretInputString, -} from "./secret-input.js"; -export { ToolPolicySchema } from "../config/zod-schema.agent-runtime.js"; -export { MarkdownConfigSchema } from "../config/zod-schema.core.js"; -export { formatZonedTimestamp } from "../infra/format-time/format-datetime.js"; -export { fetchWithSsrFGuard } from "../infra/net/fetch-guard.js"; -export { maybeCreateMatrixMigrationSnapshot } from "../infra/matrix-migration-snapshot.js"; -export { - getSessionBindingService, - registerSessionBindingAdapter, - unregisterSessionBindingAdapter, -} from "../infra/outbound/session-binding-service.js"; -export { resolveOutboundSendDep } from "../infra/outbound/send-deps.js"; -export type { - BindingTargetKind, - SessionBindingRecord, -} from "../infra/outbound/session-binding-service.js"; -export { isPrivateOrLoopbackHost } from "../gateway/net.js"; -export { getAgentScopedMediaLocalRoots } from "../media/local-roots.js"; -export { emptyPluginConfigSchema } from "../plugins/config-schema.js"; -export type { PluginRuntime, RuntimeLogger } from "../plugins/runtime/types.js"; -export type { OpenClawPluginApi } from "../plugins/types.js"; -export type { PollInput } from "../polls.js"; -export { normalizePollInput } from "../polls.js"; -export { - DEFAULT_ACCOUNT_ID, - normalizeAccountId, - normalizeOptionalAccountId, - resolveAgentIdFromSessionKey, -} from "../routing/session-key.js"; -export type { RuntimeEnv } from "../runtime.js"; -export { normalizeStringEntries } from "../shared/string-normalization.js"; -export { formatDocsLink } from "../terminal/links.js"; -export { redactSensitiveText } from "../logging/redact.js"; -export type { WizardPrompter } from "../wizard/prompts.js"; -export { - evaluateGroupRouteAccessForPolicy, - resolveSenderScopedGroupPolicy, -} from "./group-access.js"; -export { createChannelPairingController } from "./channel-pairing.js"; -export { readJsonFileWithFallback, writeJsonFileAtomically } from "./json-store.js"; -export { formatResolvedUnresolvedNote } from "./resolution-notes.js"; -export { runPluginCommandWithTimeout } from "./run-command.js"; -export { createLoggerBackedRuntime, resolveRuntimeEnv } from "./runtime.js"; -export { dispatchReplyFromConfigWithSettledDispatcher } from "./inbound-reply-dispatch.js"; -export { - buildProbeChannelStatusSummary, - collectStatusIssuesFromLastError, -} from "./status-helpers.js"; -export { - resolveMatrixAccountStorageRoot, - resolveMatrixCredentialsDir, - resolveMatrixCredentialsPath, - resolveMatrixLegacyFlatStoragePaths, -} from "../../extensions/matrix/helper-api.js"; -export { getMatrixScopedEnvVarNames } from "../../extensions/matrix/helper-api.js"; -export { - requiresExplicitMatrixDefaultAccount, - resolveMatrixDefaultOrOnlyAccountId, -} from "../../extensions/matrix/helper-api.js"; - -const matrixSetup = createOptionalChannelSetupSurface({ - channel: "matrix", - label: "Matrix", - npmSpec: "@openclaw/matrix", - docsPath: "/channels/matrix", -}); - -export const matrixSetupWizard = matrixSetup.setupWizard; -export const matrixSetupAdapter = matrixSetup.setupAdapter; +export * from "../plugins/runtime/runtime-matrix-contract.js"; diff --git a/src/plugin-sdk/provider-env-vars.ts b/src/plugin-sdk/provider-env-vars.ts new file mode 100644 index 00000000000..fb4d0271bf1 --- /dev/null +++ b/src/plugin-sdk/provider-env-vars.ts @@ -0,0 +1,6 @@ +// Public provider auth environment variable helpers for plugin runtimes. + +export { + listKnownProviderAuthEnvVarNames, + omitEnvKeysCaseInsensitive, +} from "../secrets/provider-env-vars.js"; diff --git a/src/plugin-sdk/provider-google.ts b/src/plugin-sdk/provider-google.ts new file mode 100644 index 00000000000..43130b853ca --- /dev/null +++ b/src/plugin-sdk/provider-google.ts @@ -0,0 +1,4 @@ +// Public Google provider helpers shared by bundled Google extensions. + +export { normalizeGoogleModelId } from "../agents/model-id-normalization.js"; +export { parseGeminiAuth } from "../infra/gemini-auth.js"; diff --git a/src/plugin-sdk/provider-zai-endpoint.ts b/src/plugin-sdk/provider-zai-endpoint.ts new file mode 100644 index 00000000000..d2c288b7ed6 --- /dev/null +++ b/src/plugin-sdk/provider-zai-endpoint.ts @@ -0,0 +1,7 @@ +// Public Z.AI endpoint detection helpers for provider plugins. + +export { + detectZaiEndpoint, + type ZaiDetectedEndpoint, + type ZaiEndpointId, +} from "../plugins/provider-zai-endpoint.js"; diff --git a/src/plugin-sdk/runtime-api-guardrails.test.ts b/src/plugin-sdk/runtime-api-guardrails.test.ts index 78a39d7ccb3..2158edff7d0 100644 --- a/src/plugin-sdk/runtime-api-guardrails.test.ts +++ b/src/plugin-sdk/runtime-api-guardrails.test.ts @@ -38,6 +38,7 @@ const RUNTIME_API_EXPORT_GUARDS: Record = { "extensions/matrix/runtime-api.ts": [ 'export * from "./src/auth-precedence.js";', 'export * from "./helper-api.js";', + 'export * from "./thread-bindings-runtime.js";', ], "extensions/nextcloud-talk/runtime-api.ts": [ 'export * from "../../src/plugin-sdk/nextcloud-talk.js";', diff --git a/src/plugin-sdk/telegram.ts b/src/plugin-sdk/telegram.ts index 4b1d41df386..6a579af19f4 100644 --- a/src/plugin-sdk/telegram.ts +++ b/src/plugin-sdk/telegram.ts @@ -1,127 +1 @@ -export type { - ChannelAccountSnapshot, - ChannelGatewayContext, - ChannelMessageActionAdapter, - ChannelPlugin, -} from "../channels/plugins/types.js"; -export type { OpenClawConfig } from "../config/config.js"; -export type { PluginRuntime } from "../plugins/runtime/types.js"; -export type { OpenClawPluginApi } from "../plugins/types.js"; -export type { - TelegramAccountConfig, - TelegramActionConfig, - TelegramNetworkConfig, -} from "../config/types.js"; -export type { - ChannelConfiguredBindingProvider, - ChannelConfiguredBindingConversationRef, - ChannelConfiguredBindingMatch, -} from "../channels/plugins/types.adapters.js"; -export type { InspectedTelegramAccount } from "../../extensions/telegram/api.js"; -export type { ResolvedTelegramAccount } from "../../extensions/telegram/api.js"; -export type { TelegramProbe } from "../../extensions/telegram/runtime-api.js"; -export type { TelegramButtonStyle, TelegramInlineButtons } from "../../extensions/telegram/api.js"; -export type { StickerMetadata } from "../../extensions/telegram/api.js"; - -export { emptyPluginConfigSchema } from "../plugins/config-schema.js"; -export { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js"; -export { parseTelegramTopicConversation } from "../acp/conversation-id.js"; -export { clearAccountEntryFields } from "../channels/plugins/config-helpers.js"; -export { resolveTelegramPollVisibility } from "../poll-params.js"; - -export { - PAIRING_APPROVED_MESSAGE, - applyAccountNameToChannelSection, - buildChannelConfigSchema, - deleteAccountFromConfigSection, - formatPairingApproveHint, - getChatChannelMeta, - migrateBaseNameToDefaultAccount, - setAccountEnabledInConfigSection, -} from "./channel-plugin-common.js"; - -export { - projectCredentialSnapshotFields, - resolveConfiguredFromCredentialStatuses, -} from "../channels/account-snapshot-fields.js"; -export { - resolveAllowlistProviderRuntimeGroupPolicy, - resolveDefaultGroupPolicy, -} from "../config/runtime-group-policy.js"; -export { - listTelegramDirectoryGroupsFromConfig, - listTelegramDirectoryPeersFromConfig, -} from "../../extensions/telegram/api.js"; -export { - resolveTelegramGroupRequireMention, - resolveTelegramGroupToolPolicy, -} from "../../extensions/telegram/api.js"; -export { TelegramConfigSchema } from "../config/zod-schema.providers-core.js"; - -export { buildTokenChannelStatusSummary } from "./status-helpers.js"; - -export { - createTelegramActionGate, - listTelegramAccountIds, - resolveDefaultTelegramAccountId, - resolveTelegramPollActionGateState, -} from "../../extensions/telegram/api.js"; -export { inspectTelegramAccount } from "../../extensions/telegram/api.js"; -export { - looksLikeTelegramTargetId, - normalizeTelegramMessagingTarget, -} from "../../extensions/telegram/api.js"; -export { - parseTelegramReplyToMessageId, - parseTelegramThreadId, -} from "../../extensions/telegram/api.js"; -export { - isNumericTelegramUserId, - normalizeTelegramAllowFromEntry, -} from "../../extensions/telegram/api.js"; -export { fetchTelegramChatId } from "../../extensions/telegram/api.js"; -export { - resolveTelegramInlineButtonsScope, - resolveTelegramTargetChatType, -} from "../../extensions/telegram/api.js"; -export { resolveTelegramReactionLevel } from "../../extensions/telegram/api.js"; -export { - auditTelegramGroupMembership, - collectTelegramUnmentionedGroupIds, - createForumTopicTelegram, - deleteMessageTelegram, - editForumTopicTelegram, - editMessageReplyMarkupTelegram, - editMessageTelegram, - monitorTelegramProvider, - pinMessageTelegram, - reactMessageTelegram, - renameForumTopicTelegram, - probeTelegram, - sendMessageTelegram, - sendPollTelegram, - sendStickerTelegram, - sendTypingTelegram, - unpinMessageTelegram, -} from "../../extensions/telegram/runtime-api.js"; -export { getCacheStats, searchStickers } from "../../extensions/telegram/api.js"; -export { resolveTelegramToken } from "../../extensions/telegram/runtime-api.js"; -export { telegramMessageActions } from "../../extensions/telegram/runtime-api.js"; -export { - setTelegramThreadBindingIdleTimeoutBySessionKey, - setTelegramThreadBindingMaxAgeBySessionKey, -} from "../../extensions/telegram/runtime-api.js"; -export { collectTelegramStatusIssues } from "../../extensions/telegram/api.js"; -export { sendTelegramPayloadMessages } from "../../extensions/telegram/api.js"; -export { - buildBrowseProvidersButton, - buildModelsKeyboard, - buildProviderKeyboard, - calculateTotalPages, - getModelsPageSize, - type ProviderInfo, -} from "../../extensions/telegram/api.js"; -export { - isTelegramExecApprovalApprover, - isTelegramExecApprovalClientEnabled, -} from "../../extensions/telegram/api.js"; +export * from "../plugins/runtime/runtime-telegram-contract.js"; diff --git a/src/plugins/runtime/runtime-matrix-contract.ts b/src/plugins/runtime/runtime-matrix-contract.ts new file mode 100644 index 00000000000..ec33e96ef2f --- /dev/null +++ b/src/plugins/runtime/runtime-matrix-contract.ts @@ -0,0 +1,178 @@ +// Narrow plugin-sdk surface for the bundled matrix plugin. +// Keep this list additive and scoped to symbols used under extensions/matrix. + +import { createOptionalChannelSetupSurface } from "../../plugin-sdk/channel-setup.js"; + +export { + createActionGate, + jsonResult, + readNumberParam, + readReactionParams, + readStringArrayParam, + readStringParam, +} from "../../agents/tools/common.js"; +export type { ReplyPayload } from "../../auto-reply/types.js"; +export { resolveAckReaction } from "../../agents/identity.js"; +export { + compileAllowlist, + resolveCompiledAllowlistMatch, + resolveAllowlistCandidates, + resolveAllowlistMatchByCandidates, +} from "../../channels/allowlist-match.js"; +export { + addAllowlistUserEntriesFromConfigEntry, + buildAllowlistResolutionSummary, + canonicalizeAllowlistWithResolvedIds, + mergeAllowlist, + patchAllowlistUsersInConfigEntries, + summarizeMapping, +} from "../../channels/allowlists/resolve-utils.js"; +export { ensureConfiguredAcpBindingReady } from "../../acp/persistent-bindings.lifecycle.js"; +export { resolveConfiguredAcpBindingRecord } from "../../acp/persistent-bindings.resolve.js"; +export { resolveControlCommandGate } from "../../channels/command-gating.js"; +export type { NormalizedLocation } from "../../channels/location.js"; +export { formatLocationText, toLocationContext } from "../../channels/location.js"; +export { logInboundDrop, logTypingFailure } from "../../channels/logging.js"; +export type { AllowlistMatch } from "../../channels/plugins/allowlist-match.js"; +export { formatAllowlistMatchMeta } from "../../channels/plugins/allowlist-match.js"; +export { + buildChannelKeyCandidates, + resolveChannelEntryMatch, +} from "../../channels/plugins/channel-config.js"; +export { createAccountListHelpers } from "../../channels/plugins/account-helpers.js"; +export { + deleteAccountFromConfigSection, + setAccountEnabledInConfigSection, +} from "../../channels/plugins/config-helpers.js"; +export { buildChannelConfigSchema } from "../../channels/plugins/config-schema.js"; +export { formatPairingApproveHint } from "../../channels/plugins/helpers.js"; +export { + buildSingleChannelSecretPromptState, + addWildcardAllowFrom, + mergeAllowFromEntries, + promptAccountId, + promptSingleChannelSecretInput, + setTopLevelChannelGroupPolicy, +} from "../../channels/plugins/setup-wizard-helpers.js"; +export { promptChannelAccessConfig } from "../../channels/plugins/setup-group-access.js"; +export { PAIRING_APPROVED_MESSAGE } from "../../channels/plugins/pairing-message.js"; +export { + applyAccountNameToChannelSection, + moveSingleAccountChannelSectionToDefaultAccount, +} from "../../channels/plugins/setup-helpers.js"; +export type { + BaseProbeResult, + ChannelDirectoryEntry, + ChannelGroupContext, + ChannelMessageActionAdapter, + ChannelMessageActionContext, + ChannelMessageActionName, + ChannelMessageToolDiscovery, + ChannelMessageToolSchemaContribution, + ChannelOutboundAdapter, + ChannelResolveKind, + ChannelResolveResult, + ChannelSetupInput, + ChannelToolSend, +} from "../../channels/plugins/types.js"; +export type { ChannelPlugin } from "../../channels/plugins/types.plugin.js"; +export { createReplyPrefixOptions } from "../../channels/reply-prefix.js"; +export { resolveThreadBindingFarewellText } from "../../channels/thread-bindings-messages.js"; +export { + resolveThreadBindingIdleTimeoutMsForChannel, + resolveThreadBindingMaxAgeMsForChannel, +} from "../../channels/thread-bindings-policy.js"; +export { + setMatrixThreadBindingIdleTimeoutBySessionKey, + setMatrixThreadBindingMaxAgeBySessionKey, +} from "../../../extensions/matrix/runtime-api.js"; +export { createTypingCallbacks } from "../../channels/typing.js"; +export { createChannelReplyPipeline } from "../../plugin-sdk/channel-reply-pipeline.js"; +export type { OpenClawConfig } from "../../config/config.js"; +export { + GROUP_POLICY_BLOCKED_LABEL, + resolveAllowlistProviderRuntimeGroupPolicy, + resolveDefaultGroupPolicy, + warnMissingProviderGroupPolicyFallbackOnce, +} from "../../config/runtime-group-policy.js"; +export type { + DmPolicy, + GroupPolicy, + GroupToolPolicyConfig, + MarkdownTableMode, +} from "../../config/types.js"; +export type { SecretInput } from "../../plugin-sdk/secret-input.js"; +export { + buildSecretInputSchema, + hasConfiguredSecretInput, + normalizeResolvedSecretInputString, + normalizeSecretInputString, +} from "../../plugin-sdk/secret-input.js"; +export { ToolPolicySchema } from "../../config/zod-schema.agent-runtime.js"; +export { MarkdownConfigSchema } from "../../config/zod-schema.core.js"; +export { formatZonedTimestamp } from "../../infra/format-time/format-datetime.js"; +export { fetchWithSsrFGuard } from "../../infra/net/fetch-guard.js"; +export { maybeCreateMatrixMigrationSnapshot } from "../../infra/matrix-migration-snapshot.js"; +export { + getSessionBindingService, + registerSessionBindingAdapter, + unregisterSessionBindingAdapter, +} from "../../infra/outbound/session-binding-service.js"; +export { resolveOutboundSendDep } from "../../infra/outbound/send-deps.js"; +export type { + BindingTargetKind, + SessionBindingRecord, +} from "../../infra/outbound/session-binding-service.js"; +export { isPrivateOrLoopbackHost } from "../../gateway/net.js"; +export { getAgentScopedMediaLocalRoots } from "../../media/local-roots.js"; +export { emptyPluginConfigSchema } from "../config-schema.js"; +export type { PluginRuntime, RuntimeLogger } from "./types.js"; +export type { OpenClawPluginApi } from "../types.js"; +export type { PollInput } from "../../polls.js"; +export { normalizePollInput } from "../../polls.js"; +export { + DEFAULT_ACCOUNT_ID, + normalizeAccountId, + normalizeOptionalAccountId, + resolveAgentIdFromSessionKey, +} from "../../routing/session-key.js"; +export type { RuntimeEnv } from "../../runtime.js"; +export { normalizeStringEntries } from "../../shared/string-normalization.js"; +export { formatDocsLink } from "../../terminal/links.js"; +export { redactSensitiveText } from "../../logging/redact.js"; +export type { WizardPrompter } from "../../wizard/prompts.js"; +export { + evaluateGroupRouteAccessForPolicy, + resolveSenderScopedGroupPolicy, +} from "../../plugin-sdk/group-access.js"; +export { createChannelPairingController } from "../../plugin-sdk/channel-pairing.js"; +export { readJsonFileWithFallback, writeJsonFileAtomically } from "../../plugin-sdk/json-store.js"; +export { formatResolvedUnresolvedNote } from "../../plugin-sdk/resolution-notes.js"; +export { runPluginCommandWithTimeout } from "../../plugin-sdk/run-command.js"; +export { createLoggerBackedRuntime, resolveRuntimeEnv } from "../../plugin-sdk/runtime.js"; +export { dispatchReplyFromConfigWithSettledDispatcher } from "../../plugin-sdk/inbound-reply-dispatch.js"; +export { + buildProbeChannelStatusSummary, + collectStatusIssuesFromLastError, +} from "../../plugin-sdk/status-helpers.js"; +export { + resolveMatrixAccountStorageRoot, + resolveMatrixCredentialsDir, + resolveMatrixCredentialsPath, + resolveMatrixLegacyFlatStoragePaths, +} from "../../../extensions/matrix/runtime-api.js"; +export { getMatrixScopedEnvVarNames } from "../../../extensions/matrix/runtime-api.js"; +export { + requiresExplicitMatrixDefaultAccount, + resolveMatrixDefaultOrOnlyAccountId, +} from "../../../extensions/matrix/runtime-api.js"; + +const matrixSetup = createOptionalChannelSetupSurface({ + channel: "matrix", + label: "Matrix", + npmSpec: "@openclaw/matrix", + docsPath: "/channels/matrix", +}); + +export const matrixSetupWizard = matrixSetup.setupWizard; +export const matrixSetupAdapter = matrixSetup.setupAdapter; diff --git a/src/plugins/runtime/runtime-telegram-contract.ts b/src/plugins/runtime/runtime-telegram-contract.ts new file mode 100644 index 00000000000..6700ae25429 --- /dev/null +++ b/src/plugins/runtime/runtime-telegram-contract.ts @@ -0,0 +1,130 @@ +export type { + ChannelAccountSnapshot, + ChannelGatewayContext, + ChannelMessageActionAdapter, +} from "../../channels/plugins/types.js"; +export type { ChannelPlugin } from "../../channels/plugins/types.plugin.js"; +export type { OpenClawConfig } from "../../config/config.js"; +export type { PluginRuntime } from "./types.js"; +export type { OpenClawPluginApi } from "../types.js"; +export type { + TelegramAccountConfig, + TelegramActionConfig, + TelegramNetworkConfig, +} from "../../config/types.js"; +export type { + ChannelConfiguredBindingProvider, + ChannelConfiguredBindingConversationRef, + ChannelConfiguredBindingMatch, +} from "../../channels/plugins/types.adapters.js"; +export type { InspectedTelegramAccount } from "../../../extensions/telegram/api.js"; +export type { ResolvedTelegramAccount } from "../../../extensions/telegram/api.js"; +export type { TelegramProbe } from "../../../extensions/telegram/runtime-api.js"; +export type { + TelegramButtonStyle, + TelegramInlineButtons, +} from "../../../extensions/telegram/api.js"; +export type { StickerMetadata } from "../../../extensions/telegram/api.js"; + +export { emptyPluginConfigSchema } from "../config-schema.js"; +export { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../../routing/session-key.js"; +export { parseTelegramTopicConversation } from "../../acp/conversation-id.js"; +export { clearAccountEntryFields } from "../../channels/plugins/config-helpers.js"; +export { resolveTelegramPollVisibility } from "../../poll-params.js"; + +export { + PAIRING_APPROVED_MESSAGE, + applyAccountNameToChannelSection, + buildChannelConfigSchema, + deleteAccountFromConfigSection, + formatPairingApproveHint, + getChatChannelMeta, + migrateBaseNameToDefaultAccount, + setAccountEnabledInConfigSection, +} from "../../plugin-sdk/channel-plugin-common.js"; + +export { + projectCredentialSnapshotFields, + resolveConfiguredFromCredentialStatuses, +} from "../../channels/account-snapshot-fields.js"; +export { + resolveAllowlistProviderRuntimeGroupPolicy, + resolveDefaultGroupPolicy, +} from "../../config/runtime-group-policy.js"; +export { + listTelegramDirectoryGroupsFromConfig, + listTelegramDirectoryPeersFromConfig, +} from "../../../extensions/telegram/api.js"; +export { + resolveTelegramGroupRequireMention, + resolveTelegramGroupToolPolicy, +} from "../../../extensions/telegram/api.js"; +export { TelegramConfigSchema } from "../../config/zod-schema.providers-core.js"; + +export { buildTokenChannelStatusSummary } from "../../plugin-sdk/status-helpers.js"; + +export { + createTelegramActionGate, + listTelegramAccountIds, + resolveDefaultTelegramAccountId, + resolveTelegramPollActionGateState, +} from "../../../extensions/telegram/api.js"; +export { inspectTelegramAccount } from "../../../extensions/telegram/api.js"; +export { + looksLikeTelegramTargetId, + normalizeTelegramMessagingTarget, +} from "../../../extensions/telegram/api.js"; +export { + parseTelegramReplyToMessageId, + parseTelegramThreadId, +} from "../../../extensions/telegram/api.js"; +export { + isNumericTelegramUserId, + normalizeTelegramAllowFromEntry, +} from "../../../extensions/telegram/api.js"; +export { fetchTelegramChatId } from "../../../extensions/telegram/api.js"; +export { + resolveTelegramInlineButtonsScope, + resolveTelegramTargetChatType, +} from "../../../extensions/telegram/api.js"; +export { resolveTelegramReactionLevel } from "../../../extensions/telegram/api.js"; +export { + auditTelegramGroupMembership, + collectTelegramUnmentionedGroupIds, + createForumTopicTelegram, + deleteMessageTelegram, + editForumTopicTelegram, + editMessageReplyMarkupTelegram, + editMessageTelegram, + monitorTelegramProvider, + pinMessageTelegram, + reactMessageTelegram, + renameForumTopicTelegram, + probeTelegram, + sendMessageTelegram, + sendPollTelegram, + sendStickerTelegram, + sendTypingTelegram, + unpinMessageTelegram, +} from "../../../extensions/telegram/runtime-api.js"; +export { getCacheStats, searchStickers } from "../../../extensions/telegram/api.js"; +export { resolveTelegramToken } from "../../../extensions/telegram/runtime-api.js"; +export { telegramMessageActions } from "../../../extensions/telegram/runtime-api.js"; +export { + setTelegramThreadBindingIdleTimeoutBySessionKey, + setTelegramThreadBindingMaxAgeBySessionKey, +} from "../../../extensions/telegram/runtime-api.js"; +export { collectTelegramStatusIssues } from "../../../extensions/telegram/api.js"; +export { sendTelegramPayloadMessages } from "../../../extensions/telegram/api.js"; +export { + buildBrowseProvidersButton, + buildModelsKeyboard, + buildProviderKeyboard, + calculateTotalPages, + getModelsPageSize, + type ProviderInfo, +} from "../../../extensions/telegram/api.js"; +export { + isTelegramExecApprovalApprover, + isTelegramExecApprovalClientEnabled, +} from "../../../extensions/telegram/api.js"; diff --git a/src/plugins/runtime/types-channel.ts b/src/plugins/runtime/types-channel.ts index 1a44e0e45f1..5712f50eb31 100644 --- a/src/plugins/runtime/types-channel.ts +++ b/src/plugins/runtime/types-channel.ts @@ -94,29 +94,29 @@ export type PluginRuntimeChannel = { shouldHandleTextCommands: typeof import("../../auto-reply/commands-registry.js").shouldHandleTextCommands; }; discord: { - messageActions: typeof import("../../../extensions/discord/runtime-api.js").discordMessageActions; - auditChannelPermissions: typeof import("../../../extensions/discord/runtime-api.js").auditDiscordChannelPermissions; - listDirectoryGroupsLive: typeof import("../../../extensions/discord/runtime-api.js").listDiscordDirectoryGroupsLive; - listDirectoryPeersLive: typeof import("../../../extensions/discord/runtime-api.js").listDiscordDirectoryPeersLive; - probeDiscord: typeof import("../../../extensions/discord/runtime-api.js").probeDiscord; - resolveChannelAllowlist: typeof import("../../../extensions/discord/runtime-api.js").resolveDiscordChannelAllowlist; - resolveUserAllowlist: typeof import("../../../extensions/discord/runtime-api.js").resolveDiscordUserAllowlist; - sendComponentMessage: typeof import("../../../extensions/discord/runtime-api.js").sendDiscordComponentMessage; - sendMessageDiscord: typeof import("../../../extensions/discord/runtime-api.js").sendMessageDiscord; - sendPollDiscord: typeof import("../../../extensions/discord/runtime-api.js").sendPollDiscord; - monitorDiscordProvider: typeof import("../../../extensions/discord/runtime-api.js").monitorDiscordProvider; + messageActions: typeof import("../../plugin-sdk/discord.js").discordMessageActions; + auditChannelPermissions: typeof import("../../plugin-sdk/discord.js").auditDiscordChannelPermissions; + listDirectoryGroupsLive: typeof import("../../plugin-sdk/discord.js").listDiscordDirectoryGroupsLive; + listDirectoryPeersLive: typeof import("../../plugin-sdk/discord.js").listDiscordDirectoryPeersLive; + probeDiscord: typeof import("../../plugin-sdk/discord.js").probeDiscord; + resolveChannelAllowlist: typeof import("../../plugin-sdk/discord.js").resolveDiscordChannelAllowlist; + resolveUserAllowlist: typeof import("../../plugin-sdk/discord.js").resolveDiscordUserAllowlist; + sendComponentMessage: typeof import("../../plugin-sdk/discord.js").sendDiscordComponentMessage; + sendMessageDiscord: typeof import("../../plugin-sdk/discord.js").sendMessageDiscord; + sendPollDiscord: typeof import("../../plugin-sdk/discord.js").sendPollDiscord; + monitorDiscordProvider: typeof import("../../plugin-sdk/discord.js").monitorDiscordProvider; threadBindings: { - getManager: typeof import("../../../extensions/discord/runtime-api.js").getThreadBindingManager; - resolveIdleTimeoutMs: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingIdleTimeoutMs; - resolveInactivityExpiresAt: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingInactivityExpiresAt; - resolveMaxAgeMs: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingMaxAgeMs; - resolveMaxAgeExpiresAt: typeof import("../../../extensions/discord/runtime-api.js").resolveThreadBindingMaxAgeExpiresAt; - setIdleTimeoutBySessionKey: typeof import("../../../extensions/discord/runtime-api.js").setThreadBindingIdleTimeoutBySessionKey; - setMaxAgeBySessionKey: typeof import("../../../extensions/discord/runtime-api.js").setThreadBindingMaxAgeBySessionKey; - unbindBySessionKey: typeof import("../../../extensions/discord/runtime-api.js").unbindThreadBindingsBySessionKey; + getManager: typeof import("../../plugin-sdk/discord.js").getThreadBindingManager; + resolveIdleTimeoutMs: typeof import("../../plugin-sdk/discord.js").resolveThreadBindingIdleTimeoutMs; + resolveInactivityExpiresAt: typeof import("../../plugin-sdk/discord.js").resolveThreadBindingInactivityExpiresAt; + resolveMaxAgeMs: typeof import("../../plugin-sdk/discord.js").resolveThreadBindingMaxAgeMs; + resolveMaxAgeExpiresAt: typeof import("../../plugin-sdk/discord.js").resolveThreadBindingMaxAgeExpiresAt; + setIdleTimeoutBySessionKey: typeof import("../../plugin-sdk/discord.js").setThreadBindingIdleTimeoutBySessionKey; + setMaxAgeBySessionKey: typeof import("../../plugin-sdk/discord.js").setThreadBindingMaxAgeBySessionKey; + unbindBySessionKey: typeof import("../../plugin-sdk/discord.js").unbindThreadBindingsBySessionKey; }; typing: { - pulse: typeof import("../../../extensions/discord/runtime-api.js").sendTypingDiscord; + pulse: typeof import("../../plugin-sdk/discord.js").sendTypingDiscord; start: (params: { channelId: string; accountId?: string; @@ -128,39 +128,39 @@ export type PluginRuntimeChannel = { }>; }; conversationActions: { - editMessage: typeof import("../../../extensions/discord/runtime-api.js").editMessageDiscord; - deleteMessage: typeof import("../../../extensions/discord/runtime-api.js").deleteMessageDiscord; - pinMessage: typeof import("../../../extensions/discord/runtime-api.js").pinMessageDiscord; - unpinMessage: typeof import("../../../extensions/discord/runtime-api.js").unpinMessageDiscord; - createThread: typeof import("../../../extensions/discord/runtime-api.js").createThreadDiscord; - editChannel: typeof import("../../../extensions/discord/runtime-api.js").editChannelDiscord; + editMessage: typeof import("../../plugin-sdk/discord.js").editMessageDiscord; + deleteMessage: typeof import("../../plugin-sdk/discord.js").deleteMessageDiscord; + pinMessage: typeof import("../../plugin-sdk/discord.js").pinMessageDiscord; + unpinMessage: typeof import("../../plugin-sdk/discord.js").unpinMessageDiscord; + createThread: typeof import("../../plugin-sdk/discord.js").createThreadDiscord; + editChannel: typeof import("../../plugin-sdk/discord.js").editChannelDiscord; }; }; slack: { - listDirectoryGroupsLive: typeof import("../../../extensions/slack/runtime-api.js").listSlackDirectoryGroupsLive; - listDirectoryPeersLive: typeof import("../../../extensions/slack/runtime-api.js").listSlackDirectoryPeersLive; - probeSlack: typeof import("../../../extensions/slack/runtime-api.js").probeSlack; - resolveChannelAllowlist: typeof import("../../../extensions/slack/runtime-api.js").resolveSlackChannelAllowlist; - resolveUserAllowlist: typeof import("../../../extensions/slack/runtime-api.js").resolveSlackUserAllowlist; - sendMessageSlack: typeof import("../../../extensions/slack/runtime-api.js").sendMessageSlack; - monitorSlackProvider: typeof import("../../../extensions/slack/runtime-api.js").monitorSlackProvider; - handleSlackAction: typeof import("../../../extensions/slack/runtime-api.js").handleSlackAction; + listDirectoryGroupsLive: typeof import("../../plugin-sdk/slack.js").listSlackDirectoryGroupsLive; + listDirectoryPeersLive: typeof import("../../plugin-sdk/slack.js").listSlackDirectoryPeersLive; + probeSlack: typeof import("../../plugin-sdk/slack.js").probeSlack; + resolveChannelAllowlist: typeof import("../../plugin-sdk/slack.js").resolveSlackChannelAllowlist; + resolveUserAllowlist: typeof import("../../plugin-sdk/slack.js").resolveSlackUserAllowlist; + sendMessageSlack: typeof import("../../plugin-sdk/slack.js").sendMessageSlack; + monitorSlackProvider: typeof import("../../plugin-sdk/slack.js").monitorSlackProvider; + handleSlackAction: typeof import("../../plugin-sdk/slack.js").handleSlackAction; }; telegram: { - auditGroupMembership: typeof import("../../../extensions/telegram/runtime-api.js").auditTelegramGroupMembership; - collectUnmentionedGroupIds: typeof import("../../../extensions/telegram/runtime-api.js").collectTelegramUnmentionedGroupIds; - probeTelegram: typeof import("../../../extensions/telegram/runtime-api.js").probeTelegram; - resolveTelegramToken: typeof import("../../../extensions/telegram/runtime-api.js").resolveTelegramToken; - sendMessageTelegram: typeof import("../../../extensions/telegram/runtime-api.js").sendMessageTelegram; - sendPollTelegram: typeof import("../../../extensions/telegram/runtime-api.js").sendPollTelegram; - monitorTelegramProvider: typeof import("../../../extensions/telegram/runtime-api.js").monitorTelegramProvider; - messageActions: typeof import("../../../extensions/telegram/runtime-api.js").telegramMessageActions; + auditGroupMembership: typeof import("../../plugin-sdk/telegram.js").auditTelegramGroupMembership; + collectUnmentionedGroupIds: typeof import("../../plugin-sdk/telegram.js").collectTelegramUnmentionedGroupIds; + probeTelegram: typeof import("../../plugin-sdk/telegram.js").probeTelegram; + resolveTelegramToken: typeof import("../../plugin-sdk/telegram.js").resolveTelegramToken; + sendMessageTelegram: typeof import("../../plugin-sdk/telegram.js").sendMessageTelegram; + sendPollTelegram: typeof import("../../plugin-sdk/telegram.js").sendPollTelegram; + monitorTelegramProvider: typeof import("../../plugin-sdk/telegram.js").monitorTelegramProvider; + messageActions: typeof import("../../plugin-sdk/telegram.js").telegramMessageActions; threadBindings: { - setIdleTimeoutBySessionKey: typeof import("../../../extensions/telegram/runtime-api.js").setTelegramThreadBindingIdleTimeoutBySessionKey; - setMaxAgeBySessionKey: typeof import("../../../extensions/telegram/runtime-api.js").setTelegramThreadBindingMaxAgeBySessionKey; + setIdleTimeoutBySessionKey: typeof import("../../plugin-sdk/telegram.js").setTelegramThreadBindingIdleTimeoutBySessionKey; + setMaxAgeBySessionKey: typeof import("../../plugin-sdk/telegram.js").setTelegramThreadBindingMaxAgeBySessionKey; }; typing: { - pulse: typeof import("../../../extensions/telegram/runtime-api.js").sendTypingTelegram; + pulse: typeof import("../../plugin-sdk/telegram.js").sendTypingTelegram; start: (params: { to: string; accountId?: string; @@ -173,8 +173,8 @@ export type PluginRuntimeChannel = { }>; }; conversationActions: { - editMessage: typeof import("../../../extensions/telegram/runtime-api.js").editMessageTelegram; - editReplyMarkup: typeof import("../../../extensions/telegram/runtime-api.js").editMessageReplyMarkupTelegram; + editMessage: typeof import("../../plugin-sdk/telegram.js").editMessageTelegram; + editReplyMarkup: typeof import("../../plugin-sdk/telegram.js").editMessageReplyMarkupTelegram; clearReplyMarkup: ( chatIdInput: string | number, messageIdInput: string | number, @@ -187,10 +187,10 @@ export type PluginRuntimeChannel = { cfg?: ReturnType; }, ) => Promise<{ ok: true; messageId: string; chatId: string }>; - deleteMessage: typeof import("../../../extensions/telegram/runtime-api.js").deleteMessageTelegram; - renameTopic: typeof import("../../../extensions/telegram/runtime-api.js").renameForumTopicTelegram; - pinMessage: typeof import("../../../extensions/telegram/runtime-api.js").pinMessageTelegram; - unpinMessage: typeof import("../../../extensions/telegram/runtime-api.js").unpinMessageTelegram; + deleteMessage: typeof import("../../plugin-sdk/telegram.js").deleteMessageTelegram; + renameTopic: typeof import("../../plugin-sdk/telegram.js").renameForumTopicTelegram; + pinMessage: typeof import("../../plugin-sdk/telegram.js").pinMessageTelegram; + unpinMessage: typeof import("../../plugin-sdk/telegram.js").unpinMessageTelegram; }; }; matrix: { @@ -200,15 +200,15 @@ export type PluginRuntimeChannel = { }; }; signal: { - probeSignal: typeof import("../../../extensions/signal/runtime-api.js").probeSignal; - sendMessageSignal: typeof import("../../../extensions/signal/runtime-api.js").sendMessageSignal; - monitorSignalProvider: typeof import("../../../extensions/signal/runtime-api.js").monitorSignalProvider; - messageActions: typeof import("../../../extensions/signal/runtime-api.js").signalMessageActions; + probeSignal: typeof import("../../plugin-sdk/signal.js").probeSignal; + sendMessageSignal: typeof import("../../plugin-sdk/signal.js").sendMessageSignal; + monitorSignalProvider: typeof import("../../plugin-sdk/signal.js").monitorSignalProvider; + messageActions: typeof import("../../plugin-sdk/signal.js").signalMessageActions; }; imessage: { - monitorIMessageProvider: typeof import("../../../extensions/imessage/runtime-api.js").monitorIMessageProvider; - probeIMessage: typeof import("../../../extensions/imessage/runtime-api.js").probeIMessage; - sendMessageIMessage: typeof import("../../../extensions/imessage/runtime-api.js").sendMessageIMessage; + monitorIMessageProvider: typeof import("../../plugin-sdk/imessage.js").monitorIMessageProvider; + probeIMessage: typeof import("../../plugin-sdk/imessage.js").probeIMessage; + sendMessageIMessage: typeof import("../../plugin-sdk/imessage.js").sendMessageIMessage; }; whatsapp: { getActiveWebListener: typeof import("./runtime-whatsapp-boundary.js").getActiveWebListener; diff --git a/test/plugin-extension-import-boundary.test.ts b/test/plugin-extension-import-boundary.test.ts index 254b3613797..c2bd07b5e00 100644 --- a/test/plugin-extension-import-boundary.test.ts +++ b/test/plugin-extension-import-boundary.test.ts @@ -29,13 +29,16 @@ describe("plugin extension import boundary inventory", () => { ); }); - it("ignores plugin-sdk boundary shims by scope", async () => { + it("ignores boundary shims by scope", async () => { const inventory = await collectPluginExtensionImportBoundaryInventory(); expect(inventory.some((entry) => entry.file.startsWith("src/plugin-sdk/"))).toBe(false); expect(inventory.some((entry) => entry.file.startsWith("src/plugin-sdk-internal/"))).toBe( false, ); + expect(inventory.some((entry) => entry.file.startsWith("src/plugins/runtime/runtime-"))).toBe( + false, + ); }); it("produces stable sorted output", async () => {