import { type Mock } from "vitest"; import type { MsgContext } from "../../../auto-reply/templating.js"; import type { ReplyPayload } from "../../../auto-reply/types.js"; import type { OpenClawConfig } from "../../../config/config.js"; import type { ResolveProviderRuntimeGroupPolicyParams, RuntimeGroupPolicyResolution } from "../../../config/runtime-group-policy.js"; import type { SessionBindingCapabilities, SessionBindingRecord } from "../../../infra/outbound/session-binding-service.js"; import type { ChannelAccountSnapshot, ChannelAccountState, ChannelSetupInput } from "../types.core.js"; import type { ChannelMessageActionName, ChannelMessageCapability, ChannelPlugin } from "../types.js"; type OutboundSendMock = Mock<(...args: unknown[]) => Promise>>; type SlackOutboundPayloadHarness = { run: () => Promise>; sendMock: OutboundSendMock; to: string; }; export declare function createSlackOutboundPayloadHarness(params: { payload: ReplyPayload; sendResults?: Array<{ messageId: string; }>; }): SlackOutboundPayloadHarness; export declare function installChannelPluginContractSuite(params: { plugin: Pick; }): void; type ChannelActionsContractCase = { name: string; cfg: OpenClawConfig; expectedActions: readonly ChannelMessageActionName[]; expectedCapabilities?: readonly ChannelMessageCapability[]; beforeTest?: () => void; }; export declare function installChannelActionsContractSuite(params: { plugin: Pick; cases: readonly ChannelActionsContractCase[]; unsupportedAction?: ChannelMessageActionName; }): void; export declare function installChannelSurfaceContractSuite(params: { plugin: Pick; surface: "actions" | "setup" | "status" | "outbound" | "messaging" | "threading" | "directory" | "gateway"; }): void; export declare function installChannelThreadingContractSuite(params: { plugin: Pick; }): void; export declare function installChannelDirectoryContractSuite(params: { plugin: Pick; coverage?: "lookups" | "presence"; cfg?: OpenClawConfig; accountId?: string; }): void; export declare function installSessionBindingContractSuite(params: { getCapabilities: () => SessionBindingCapabilities | Promise; bindAndResolve: () => Promise; unbindAndVerify: (binding: SessionBindingRecord) => Promise; cleanup: () => Promise | void; expectedCapabilities: SessionBindingCapabilities; }): void; type ChannelSetupContractCase = { name: string; cfg: OpenClawConfig; accountId?: string; input: ChannelSetupInput; expectedAccountId?: string; expectedValidation?: string | null; beforeTest?: () => void; assertPatchedConfig?: (cfg: OpenClawConfig) => void; assertResolvedAccount?: (account: ResolvedAccount, cfg: OpenClawConfig) => void; }; export declare function installChannelSetupContractSuite(params: { plugin: Pick, "id" | "config" | "setup">; cases: readonly ChannelSetupContractCase[]; }): void; type ChannelStatusContractCase = { name: string; cfg: OpenClawConfig; accountId?: string; runtime?: ChannelAccountSnapshot; probe?: Probe; beforeTest?: () => void; expectedState?: ChannelAccountState; resolveStateInput?: { configured: boolean; enabled: boolean; }; assertSnapshot?: (snapshot: ChannelAccountSnapshot) => void; assertSummary?: (summary: Record) => void; }; export declare function installChannelStatusContractSuite(params: { plugin: Pick, "id" | "config" | "status">; cases: readonly ChannelStatusContractCase[]; }): void; type PayloadLike = { mediaUrl?: string; mediaUrls?: string[]; text?: string; }; type SendResultLike = { messageId: string; [key: string]: unknown; }; type ChunkingMode = { longTextLength: number; maxChunkLength: number; mode: "split"; } | { longTextLength: number; mode: "passthrough"; }; export declare function installChannelOutboundPayloadContractSuite(params: { channel: string; chunking: ChunkingMode; createHarness: (params: { payload: PayloadLike; sendResults?: SendResultLike[]; }) => { run: () => Promise>; sendMock: Mock; to: string; }; }): void; export declare function primeChannelOutboundSendMock(sendMock: Mock<(...args: TArgs) => Promise>, fallbackResult: Record, sendResults?: Record[]): void; type RuntimeGroupPolicyResolver = (params: ResolveProviderRuntimeGroupPolicyParams) => RuntimeGroupPolicyResolution; export declare function installChannelRuntimeGroupPolicyFallbackSuite(params: { configuredLabel: string; defaultGroupPolicyUnderTest: "allowlist" | "disabled" | "open"; missingConfigLabel: string; missingDefaultLabel: string; resolve: RuntimeGroupPolicyResolver; }): void; export declare function expectChannelInboundContextContract(ctx: MsgContext): void; export {};