openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
247 lines • 11.3 kB
TypeScript
import { Gs as PluginCommandContext, Ks as PluginCommandResult, Ll as PluginInteractiveHandlerRegistration, Ls as GatewayRequestOptions, Ns as GatewayContextResolver, Or as PluginRuntime, Ps as GatewayRequestContext, Rl as PluginInteractiveRegistration, Us as AgentPromptSurfaceKind, Ws as OpenClawPluginCommandDefinition, as as OpenClawPluginConfigSchema, bs as PluginRegistry, os as OpenClawPluginApi, wa as RuntimeLogger } from "../agent-harness-runtime-CZIVRpx-.js";
import { r as OpenClawConfig } from "../types.openclaw-BdCLfP4c.js";
import { t as PluginOrigin } from "../plugin-origin.types-DOQEvsWL.js";
import { t as getGlobalHookRunner } from "../hook-runner-global-Bj0SlbYF.js";
import { n as PluginConversationBindingRequestParams, r as PluginConversationBindingRequestResult, t as PluginConversationBinding } from "../conversation-binding.types-_n_vU29m.js";
import { b as OpenClawPluginNodeWorkspace } from "../computer-use-contract-BQmcSq4v.js";
import { t as getPluginCommandSpecs } from "../command-specs-qolpzrsM.js";
import { i as requestPluginConversationBinding } from "../conversation-binding-CTZAGM1E.js";
//#region src/plugins/command-registry-state.d.ts
type RegisteredPluginCommand = OpenClawPluginCommandDefinition & {
pluginId: string;
pluginName?: string;
pluginRoot?: string;
trustedOwnerStatusExposure?: true;
};
export declare function clearPluginCommands(): void;
export declare function listRegisteredPluginAgentPromptGuidance(params?: {
surface?: AgentPromptSurfaceKind;
includeLegacyGlobalGuidance?: boolean;
}): string[];
//#endregion
//#region src/plugins/command-registration.d.ts
/** Result returned when a plugin command registration succeeds or fails validation. */
type CommandRegistrationResult = {
ok: boolean;
error?: string;
};
export declare function registerPluginCommand(pluginId: string, command: OpenClawPluginCommandDefinition, opts?: {
pluginName?: string;
pluginRoot?: string;
allowReservedCommandNames?: boolean;
allowOwnerStatusExposure?: boolean;
}): CommandRegistrationResult;
//#endregion
//#region src/plugins/commands.d.ts
/** Match one compatibility command invocation against the current command registry. */
export declare function matchPluginCommand(commandBody: string, options?: {
channel?: string;
}): {
command: RegisteredPluginCommand;
args?: string;
} | null;
export declare function executePluginCommand(params: {
command: RegisteredPluginCommand;
args?: string;
senderId?: string;
channel: string;
channelId?: PluginCommandContext["channelId"];
isAuthorizedSender: boolean;
senderIsOwner?: boolean;
gatewayClientScopes?: PluginCommandContext["gatewayClientScopes"];
/** Host-resolved agent authority for plugin-owned or non-agent-shaped session keys. */
agentId?: string;
sessionKey?: PluginCommandContext["sessionKey"];
sessionId?: PluginCommandContext["sessionId"];
sessionTarget?: PluginCommandContext["sessionTarget"];
sessionFile?: PluginCommandContext["sessionFile"];
authProfileId?: string;
commandBody: string;
config: OpenClawConfig;
from?: PluginCommandContext["from"];
to?: PluginCommandContext["to"];
originatingTo?: string;
accountId?: PluginCommandContext["accountId"];
messageThreadId?: PluginCommandContext["messageThreadId"];
threadParentId?: PluginCommandContext["threadParentId"];
diagnosticsSessions?: PluginCommandContext["diagnosticsSessions"];
diagnosticsUploadApproved?: PluginCommandContext["diagnosticsUploadApproved"];
diagnosticsPreviewOnly?: PluginCommandContext["diagnosticsPreviewOnly"];
diagnosticsPrivateRouted?: PluginCommandContext["diagnosticsPrivateRouted"];
}): Promise<PluginCommandResult>;
//#endregion
//#region src/plugins/interactive-binding-helpers.d.ts
type RegisteredInteractiveMetadata = {
pluginId: string;
pluginName?: string;
pluginRoot?: string;
};
type PluginBindingConversation = Parameters<typeof requestPluginConversationBinding>[0]["conversation"];
export declare function createInteractiveConversationBindingHelpers(params: {
registration: RegisteredInteractiveMetadata;
senderId?: string;
conversation: PluginBindingConversation;
}): {
requestConversationBinding: (binding?: PluginConversationBindingRequestParams) => Promise<PluginConversationBindingRequestResult>;
detachConversationBinding: () => Promise<{
removed: boolean;
}>;
getCurrentConversationBinding: () => Promise<PluginConversationBinding | null>;
};
//#endregion
//#region src/plugins/interactive-registry.d.ts
/** Registered interactive handler with owning plugin metadata. */
type RegisteredInteractiveHandler = PluginInteractiveHandlerRegistration & {
pluginId: string;
pluginName?: string;
pluginRoot?: string;
};
/** Registration result for plugin interactive namespace handlers. */
type InteractiveRegistrationResult = {
ok: boolean;
error?: string;
};
/** Registers one process-global interactive handler. */
export declare function registerPluginInteractiveHandler(pluginId: string, registration: PluginInteractiveHandlerRegistration, opts?: {
pluginName?: string;
pluginRoot?: string;
}): InteractiveRegistrationResult;
/** Clears all active plugin interactive handlers. */
export declare function clearPluginInteractiveHandlers(): void;
//#endregion
//#region src/plugins/interactive.d.ts
type InteractiveDispatchResult<TResult = unknown> = {
matched: false;
handled: false;
duplicate: false;
} | {
matched: true;
handled: boolean;
duplicate: boolean;
result?: TResult;
};
type PluginInteractiveDispatchRegistration = {
channel: string;
namespace: string;
};
/** Resolved interactive handler match passed to plugin callback dispatch. */
type PluginInteractiveMatch<TRegistration extends PluginInteractiveDispatchRegistration> = {
registration: RegisteredInteractiveHandler & TRegistration;
namespace: string;
payload: string;
};
type ChannelInteractivePayload = {
data: string;
namespace: string;
payload: string;
};
type ChannelInteractiveDispatchPayload<T> = T extends ChannelInteractivePayload ? Omit<T, keyof ChannelInteractivePayload> : never;
type ChannelInteractiveDispatchBase = {
accountId: string;
conversationId: string;
parentConversationId?: string;
senderId?: string;
threadId?: string | number;
auth: {
isAuthorizedSender: boolean;
};
};
type ChannelInteractiveHandlerContext<TChannel extends string, TInteractiveKey extends PropertyKey> = ChannelInteractiveDispatchBase & {
channel: TChannel;
respond: unknown;
} & Record<TInteractiveKey, ChannelInteractivePayload>;
type ChannelInteractiveOwnedContextKey<TInteractiveKey> = TInteractiveKey | "respond" | "channel" | "requestConversationBinding" | "detachConversationBinding" | "getCurrentConversationBinding";
type ChannelInteractiveDispatchContext<TContext, TInteractiveKey extends keyof TContext, TDispatchInteractiveKey extends PropertyKey> = Omit<TContext, ChannelInteractiveOwnedContextKey<TInteractiveKey>> & ChannelInteractiveDispatchBase & Record<TDispatchInteractiveKey, ChannelInteractiveDispatchPayload<TContext[TInteractiveKey]>>;
/** Dispatches one interactive callback payload to a matching plugin handler. */
export declare function dispatchPluginInteractiveHandler<TRegistration extends PluginInteractiveDispatchRegistration, TResult extends {
handled?: boolean;
} | void = {
handled?: boolean;
} | void>(params: {
channel: TRegistration["channel"];
data: string;
dedupeId?: string;
onMatched?: () => Promise<void> | void;
invoke: (match: PluginInteractiveMatch<TRegistration>) => Promise<TResult> | TResult;
afterInvoke?: (result: TResult) => Promise<void> | void;
}): Promise<InteractiveDispatchResult<TResult>>;
/** Creates a channel dispatcher for plugin-owned interactive callbacks. */
export declare function createChannelInteractiveDispatcher<TChannel extends string, TInteractiveKey extends PropertyKey, TContext extends ChannelInteractiveHandlerContext<TChannel, TInteractiveKey>, TResult extends {
handled?: boolean;
} | void = {
handled?: boolean;
} | void, TDispatchInteractiveKey extends PropertyKey = TInteractiveKey>(config: {
channel: TChannel;
interactiveKey: TInteractiveKey;
dispatchInteractiveKey?: TDispatchInteractiveKey;
}): (params: {
data: string;
dedupeId: string;
ctx: ChannelInteractiveDispatchContext<TContext, TInteractiveKey, TDispatchInteractiveKey>;
respond: TContext["respond"];
conversation?: Parameters<typeof createInteractiveConversationBindingHelpers>[0]["conversation"];
onMatched?: () => Promise<void> | void;
afterInvoke?: (result: TResult) => Promise<void> | void;
}) => Promise<InteractiveDispatchResult<TResult>>;
//#endregion
//#region src/plugins/lazy-service-module.d.ts
type LazyServiceModule = Record<string, unknown>;
type LazyPluginServiceHandle = {
stop: () => Promise<void>;
};
export declare function startLazyPluginServiceModule(params: {
skipEnvVar?: string;
overrideEnvVar?: string;
validateOverrideSpecifier?: (specifier: string) => string;
loadDefaultModule: () => Promise<LazyServiceModule>;
loadOverrideModule?: (specifier: string) => Promise<LazyServiceModule>;
startExportNames: string[];
stopExportNames?: string[];
}): Promise<LazyPluginServiceHandle | null>;
//#endregion
//#region src/plugins/runtime/gateway-request-scope.d.ts
type PluginRuntimeGatewayRequestScope = {
/** Exact placement owner captured before the local harness begins. */
assertNodeExecutionCurrent?: (request: {
runId: string;
agentId: string;
nodeId: string;
workspace: OpenClawPluginNodeWorkspace;
}) => void;
/** In-process admitted owner only; never projected into RPC parameters. */
invokeWithSessionNodeAuthority?: <T>(request: {
pluginId: string;
command: string;
source: "session-full" | "human-approved";
nodeId: string;
workspace: OpenClawPluginNodeWorkspace;
}, invoke: (assertCurrent: () => void, signal: AbortSignal) => Promise<T>) => Promise<T | undefined>;
/** Closure-bound admitted owner used to validate placement grant bindings. */
nodePlacementGrantAuthority?: {
agentId: string;
sessionKey: string;
runId: string;
assertCurrent: (request: {
pluginId: string;
command: string;
nodeId: string;
workspace: OpenClawPluginNodeWorkspace;
}) => void;
};
context?: GatewayRequestContext;
resolveGatewayContext?: GatewayContextResolver;
client?: GatewayRequestOptions["client"];
isWebchatConnect: GatewayRequestOptions["isWebchatConnect"];
pluginId?: string;
pluginSource?: string;
pluginOrigin?: PluginOrigin;
pluginTrustedOfficialInstall?: boolean;
gatewayMethodDispatchAllowed?: boolean;
pluginRegistry?: PluginRegistry;
};
/**
* Returns the current plugin gateway request scope when called from a plugin request handler.
*/
export declare function getPluginRuntimeGatewayRequestScope(): PluginRuntimeGatewayRequestScope | undefined;
//#endregion
export { type LazyPluginServiceHandle, type OpenClawPluginApi, type OpenClawPluginConfigSchema, type PluginConversationBinding, type PluginConversationBindingRequestParams, type PluginConversationBindingRequestResult, type PluginInteractiveRegistration, type PluginRuntime, type RuntimeLogger, getGlobalHookRunner, getPluginCommandSpecs };