fix(messages): keep runtime details out of chat alerts (#121600)

Keep raw commands, paths, and provider errors out of ordinary chat while preserving explicit raw diagnostics and structured admin history.

Default command progress is status-only; `/verbose full` and `commandText: "raw"` retain diagnostic detail.

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
This commit is contained in:
Ayaan Zaidi
2026-08-10 21:37:48 +05:30
committed by GitHub
parent e195585a90
commit 4c951398ef
90 changed files with 1090 additions and 552 deletions
+162 -162
View File
@@ -53,15 +53,15 @@
{"closureHash":"ff3c4616cd6212a6d698831a8b287ad87e3968c8663f4090d095bb30ec40fc1c","declaration":"export function abortAndDrainAgentHarnessRun(params: { sessionId: string; sessionKey?: string; settleMs?: number; forceClear?: boolean; reason?: string; }): Promise<AbortAndDrainEmbeddedAgentRunResult>;","entrypoint":"agent-harness","exportName":"abortAndDrainAgentHarnessRun","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"58989e3fa91eecf2e05202e36548e6e64a3b9219e83154bd99866c851604e34e","declaration":"export function createAgentToolResultMiddlewareRunner(ctx: AgentToolResultMiddlewareContext, handlers?: AgentToolResultMiddleware[]): { applyToolResultMiddleware(event: AgentToolResultMiddlewareEvent): Promise<OpenClawAgentToolResult>; };","entrypoint":"agent-harness","exportName":"createAgentToolResultMiddlewareRunner","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"b8f6355d7ad1700aceecddaa6e9ccf43091a792d5b481a1ee3f55294a881a67d","declaration":"export function createCodexAppServerToolResultExtensionRunner(ctx: CodexAppServerExtensionContext, factories?: CodexAppServerExtensionFactory[]): { applyToolResultExtensions(event: CodexAppServerToolResultEvent): Promise<AgentToolResult<unknown>>; };","entrypoint":"agent-harness","exportName":"createCodexAppServerToolResultExtensionRunner","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"1fa429ab2638afe78f542cd7b34b73afe633a69063c42cb5da1123273726489f","declaration":"export function createOpenClawCodingTools(options?: OpenClawCodingToolsOptions): AnyAgentTool[];","entrypoint":"agent-harness","exportName":"createOpenClawCodingTools","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"6062f10ec859c2a6d91666c0f1ee2fc3a5e4591ca758fcd7c1df7ad1cc6b857f","declaration":"export function createOpenClawCodingTools(options?: OpenClawCodingToolsOptions): AnyAgentTool[];","entrypoint":"agent-harness","exportName":"createOpenClawCodingTools","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"13649ee853485319e7449fda25c106b3f3f53d3090e53cdbb28e220a8529eb80","declaration":"export function disposeRegisteredAgentHarnesses(): Promise<void>;","entrypoint":"agent-harness","exportName":"disposeRegisteredAgentHarnesses","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"f255a91162ece4c239bb8fa745efa14a1054bc024a291e9954f75f239b2b87c3","declaration":"export function resolveActiveEmbeddedRunSessionId(sessionKey: string): string | undefined;","entrypoint":"agent-harness","exportName":"resolveActiveEmbeddedRunSessionId","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"27d9f61df9ccf68615cb2002a6da891e36ab0c07623bc37c4d07aa980b446881","declaration":"export function resolveWebSearchToolPolicy(params: WebSearchToolPolicyParams): WebSearchToolPolicyResolution;","entrypoint":"agent-harness","exportName":"resolveWebSearchToolPolicy","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"function","recordType":"export"}
{"closureHash":"069afe164b45b50b6a4df310f4b257eff482dcd6ca93b1f9a5dcf08724eb44c2","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"agent-harness","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"closureHash":"d3f58785b718226c2b2b6ed6b27f196eebbc7fee2a8366a1b95aa0961dfb5a87","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"agent-harness","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"closureHash":"4ad0f830bf11a2db48faefb1439b7fbb08d9f22d22083f5e301327e1696f2310","declaration":"export type AgentToolResultMiddleware = AgentToolResultMiddleware;","entrypoint":"agent-harness","exportName":"AgentToolResultMiddleware","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"closureHash":"008b6c78d5e44a9d1df1d7e32e6015382ee9ba1cb9b10bd4c2b467619d1c89d4","declaration":"export type AgentToolResultMiddlewareEvent = AgentToolResultMiddlewareEvent;","entrypoint":"agent-harness","exportName":"AgentToolResultMiddlewareEvent","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"closureHash":"7414a2a79c2d78c1d52538250c827305bba1a2bb25010448837c8524a9f95b3c","declaration":"export type AnyAgentTool = AnyAgentTool;","entrypoint":"agent-harness","exportName":"AnyAgentTool","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"closureHash":"39aca9d1bc332fd3192cf133df5d5d383e18c0584c1680b2ce2a13a2d3fe17e2","declaration":"export type EmbeddedRunAttemptParams = EmbeddedRunAttemptParams;","entrypoint":"agent-harness","exportName":"EmbeddedRunAttemptParams","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"closureHash":"b58ad0c54a29c986eace05d14e7bc4925274ff2d61db000698c8963027bcdba3","declaration":"export type EmbeddedRunAttemptParams = EmbeddedRunAttemptParams;","entrypoint":"agent-harness","exportName":"EmbeddedRunAttemptParams","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"closureHash":"25c6985c3bef2c6efc6a96e70af6d66fe073be0b0d311681cfc0dfc186528d9a","declaration":"export type OpenClawAgentToolResult<TResult = unknown> = OpenClawAgentToolResult<TResult>;","entrypoint":"agent-harness","exportName":"OpenClawAgentToolResult","importSpecifier":"openclaw/plugin-sdk/agent-harness","kind":"type","recordType":"export"}
{"category":"runtime","entrypoint":"agent-harness-runtime","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","recordType":"module"}
{"closureHash":"fab99dfcb01d475a1bfdbe7a8fac9be10a93dac5f12ac78c2dea673c8ab86abf","declaration":"export function abortAgentHarnessRun(sessionId: string): boolean;\nexport function abortAgentHarnessRun(sessionId: undefined, opts: { mode: \"all\" | \"compacting\"; reason?: \"restart\"; }): boolean;","entrypoint":"agent-harness-runtime","exportName":"abortAgentHarnessRun","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
@@ -72,16 +72,16 @@
{"closureHash":"155d94754b1411dd9b9fdae11ca094cbce25610ffb1dd9a617f293596b3a78f7","declaration":"export function assertContextEngineHostSupport(params: { contextEngine: ContextEngine; operation: ContextEngineOperation; host: ContextEngineHostSupport; }): void;","entrypoint":"agent-harness-runtime","exportName":"assertContextEngineHostSupport","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"3209ee56dbd86be4de23a2de59903a4d310fc99ed912d220ebe57efd308ff14f","declaration":"export function assignMcpCatalogSafeServerNames(serverNames: Iterable<string>): Map<string, string>;","entrypoint":"agent-harness-runtime","exportName":"assignMcpCatalogSafeServerNames","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"911838521fabe5f74acfeadabfa855fd9857fa21671b3f0cad08779f3402825a","declaration":"export function attachModelProviderRequestTransport<TModel extends object>(model: TModel, request: ModelProviderRequestTransportOverrides | undefined): TModel;","entrypoint":"agent-harness-runtime","exportName":"attachModelProviderRequestTransport","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"180c1f7bdcf37282e711d2bbdeb73b600b6f18b6785eb73dbee1f0c530d62e6f","declaration":"export function awaitAgentEndSideEffects(params: AgentEndSideEffectsParams): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"awaitAgentEndSideEffects","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"542d877b64fb60bbe3ad5d62417328c5f3b041010aeec88cb1a1d81955e77246","declaration":"export function awaitAgentHarnessAgentEndHook(params: { event: PluginHookAgentEndEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"awaitAgentHarnessAgentEndHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"5a1f9481bcbe41730c3259db1c42eb4562289a46d7f82f7a22e5c5f77469b746","declaration":"export function awaitAgentEndSideEffects(params: AgentEndSideEffectsParams): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"awaitAgentEndSideEffects","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"9c31e4020485bc1867573ebdce41610a19c119c6072589c7f82c4c8c9d7d5986","declaration":"export function awaitAgentHarnessAgentEndHook(params: { event: PluginHookAgentEndEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"awaitAgentHarnessAgentEndHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"73d8efb2d4171745da0c8f433ec80363cd9ce26b0d76be0cdddaa077489a5134","declaration":"export function bootstrapHarnessContextEngine(params: { hadSessionFile: boolean; contextEngine?: HarnessContextEngine; sessionId: string; sessionKey?: string; sessionTarget?: ContextEngineSessionTarget; sessionFile: string; sessionManager?: unknown; runtimeContext?: ContextEngineRuntimeContext; transcriptReadFence?: UserTurnTranscriptAdmissionReceipt; runtimeSettings?: ContextEngineRuntimeSettings; contextEngineHostSupport?: ContextEngineHostSupport; harnessId?: string | null; runtimeId?: string | null; providerId?: string | null; requestedModelId?: string | null; modelId?: string | null; maxOutputTokens?: number | null; fallbackReason?: string | null; degradedReason?: string | null; runMaintenance?: typeof runHarnessContextEngineMaintenance; config?: OpenClawConfig; warn: (message: string) => void; }): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"bootstrapHarnessContextEngine","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"fdd485fc00b19e46356354d24cc924c694fbb8c01a01e16048183880a3fbf50d","declaration":"export function buildAgentHarnessUserInputAnswers(questions: readonly AgentHarnessUserInputQuestion[], inputText: string): AgentHarnessUserInputAnswers;","entrypoint":"agent-harness-runtime","exportName":"buildAgentHarnessUserInputAnswers","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"bcc8554c0316257b42e7ca95e16c6b1f3bfb9794e5db7f41cf2bcdd2464bb218","declaration":"export function buildAgentHookContextChannelFields(params: { sessionKey?: string | null; messageChannel?: string | null; messageProvider?: string | null; currentChannelId?: string | null; messageTo?: string | null; senderId?: string | null; agentAccountId?: string | null; }): Pick<PluginHookAgentContext, \"accountId\" | \"channel\" | \"channelId\" | \"chatId\" | \"messageProvider\" | \"senderId\">;","entrypoint":"agent-harness-runtime","exportName":"buildAgentHookContextChannelFields","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"593bc2b598c7715ab011aa6ab5659f02262f134b15f218b02921e1c7e33198ba","declaration":"export function buildAgentRuntimePlan(params: BuildAgentRuntimePlanParams): AgentRuntimePlan;","entrypoint":"agent-harness-runtime","exportName":"buildAgentRuntimePlan","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"528d11abf061b0b303722737de5a6406e7e55bffa38c45144c77d896ae1b3b0a","declaration":"export function buildBootstrapContextForFiles(bootstrapFiles: WorkspaceBootstrapFile[], params: { config?: OpenClawConfig; agentId?: string | null; warn?: (message: string) => void; }): EmbeddedContextFile[];","entrypoint":"agent-harness-runtime","exportName":"buildBootstrapContextForFiles","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"44d5a4667d2f3dc3a28e5c9d7b46765b1fb3c62820288e40251f5174911c8a6a","declaration":"export function buildEmbeddedAttemptToolRunContext(params: { trigger?: EmbeddedRunTrigger; jobId?: string; memoryFlushWritePath?: string; toolsAllow?: string[]; conversationToolPolicy?: GroupToolPolicyConfig; trace?: DiagnosticTraceContext; }): { trigger?: EmbeddedRunTrigger; jobId?: string; memoryFlushWritePath?: string; runtimeToolAllowlist?: string[]; conversationToolPolicy?: GroupToolPolicyConfig; trace?: DiagnosticTraceContext; };","entrypoint":"agent-harness-runtime","exportName":"buildEmbeddedAttemptToolRunContext","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"921c0ec02577e9d99d8654084198e20feefa5e35992cdeb229fd0e2b65a24846","declaration":"export function buildHarnessContextEngineRuntimeContext(params: Parameters<typeof buildAfterTurnRuntimeContext>[0]): ContextEngineRuntimeContext;","entrypoint":"agent-harness-runtime","exportName":"buildHarnessContextEngineRuntimeContext","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"853772512f7bf800ebc40ad00d1c5fd1c45a6727e22a7cac48d10ed7f623d413","declaration":"export function buildHarnessContextEngineRuntimeContextFromUsage(params: Parameters<typeof buildAfterTurnRuntimeContextFromUsage>[0]): ContextEngineRuntimeContext;","entrypoint":"agent-harness-runtime","exportName":"buildHarnessContextEngineRuntimeContextFromUsage","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"c01326f73f47eb63565cb218d11b79aaeb1c80f97725198091f5dc64c94ab511","declaration":"export function buildHarnessContextEngineRuntimeContext(params: Parameters<typeof buildAfterTurnRuntimeContext>[0]): ContextEngineRuntimeContext;","entrypoint":"agent-harness-runtime","exportName":"buildHarnessContextEngineRuntimeContext","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"67329faf1e830f5dc8a08e5a88e2617166c10f914713c9651557c8b111bc0088","declaration":"export function buildHarnessContextEngineRuntimeContextFromUsage(params: Parameters<typeof buildAfterTurnRuntimeContextFromUsage>[0]): ContextEngineRuntimeContext;","entrypoint":"agent-harness-runtime","exportName":"buildHarnessContextEngineRuntimeContextFromUsage","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"33a7cd8d63d4ef045ee3a42f806026a8b621e7dd32d8d6fbf4e7b44452d5e0ce","declaration":"export function buildNativeHookRelayCommand(params: { provider: NativeHookRelayProvider; relayId: string; generation?: string; event: NativeHookRelayEvent; preToolUseUnavailable?: \"noop\"; timeoutMs?: number; executable?: string; nice?: number | false; nodeExecutable?: string; }): string;","entrypoint":"agent-harness-runtime","exportName":"buildNativeHookRelayCommand","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"3846647c3c2fb0242f70591cf95c2e02f2a5a3c44447efb4cf7a31b2dc2122fd","declaration":"export function buildSkillWorkshopPromptSection(): string[];","entrypoint":"agent-harness-runtime","exportName":"buildSkillWorkshopPromptSection","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"32e977ece65144a83ae1b0a3c8d1b9b00a2a2506ad9ef1db3b2b9770ce762dbe","declaration":"export function buildWatchedSessionsHarnessContext(params: { config?: OpenClawConfig; sessionKey?: string; sandboxed?: boolean; toolNames: Iterable<string>; capabilityToolNames?: Iterable<string>; }): string | undefined;","entrypoint":"agent-harness-runtime","exportName":"buildWatchedSessionsHarnessContext","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
@@ -98,7 +98,7 @@
{"closureHash":"51f76e9e37b65b358f0313e10152d950b003bc3e50f4bb26fe29a988237772e2","declaration":"export function consumePreExecutionBlockedToolCall(toolCallId: string, runId?: string): boolean;","entrypoint":"agent-harness-runtime","exportName":"consumePreExecutionBlockedToolCall","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"58989e3fa91eecf2e05202e36548e6e64a3b9219e83154bd99866c851604e34e","declaration":"export function createAgentToolResultMiddlewareRunner(ctx: AgentToolResultMiddlewareContext, handlers?: AgentToolResultMiddleware[]): { applyToolResultMiddleware(event: AgentToolResultMiddlewareEvent): Promise<OpenClawAgentToolResult>; };","entrypoint":"agent-harness-runtime","exportName":"createAgentToolResultMiddlewareRunner","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"b8f6355d7ad1700aceecddaa6e9ccf43091a792d5b481a1ee3f55294a881a67d","declaration":"export function createCodexAppServerToolResultExtensionRunner(ctx: CodexAppServerExtensionContext, factories?: CodexAppServerExtensionFactory[]): { applyToolResultExtensions(event: CodexAppServerToolResultEvent): Promise<AgentToolResult<unknown>>; };","entrypoint":"agent-harness-runtime","exportName":"createCodexAppServerToolResultExtensionRunner","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"8cdac0ac3597b3c88d5a81676c6d05410bc86ec245a20d3790eb9199873ab8f6","declaration":"export function deliverAgentHarnessUserInputPrompt(params: PromptDeliveryParams, questions: readonly AgentHarnessUserInputQuestion[], options?: AgentHarnessUserInputPromptOptions): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"deliverAgentHarnessUserInputPrompt","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"59d485af36457d1bda20196e90de4a619b1722bd72cfc96648ce30d4d0e2b437","declaration":"export function deliverAgentHarnessUserInputPrompt(params: PromptDeliveryParams, questions: readonly AgentHarnessUserInputQuestion[], options?: AgentHarnessUserInputPromptOptions): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"deliverAgentHarnessUserInputPrompt","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"6f436485257f69fa07a18203b91d4341690522f12aff4f25805c7a1e21326ee3","declaration":"export function detectAndLoadAgentHarnessPromptImages(params: { prompt: string; workspaceDir: string; model: { input?: string[]; }; existingImages?: ImageContent[]; imageOrder?: PromptImageOrderEntry[]; media?: MediaFact[]; config?: OpenClawConfig; workspaceOnly?: boolean; localRoots?: readonly string[]; sandbox?: { root: string; bridge: SandboxFsBridge; }; }): Promise<{ images: ImageContent[]; detectedRefs: Array<{ raw: string; resolved: string; type: \"path\" | \"media-uri\"; }>; loadedCount: number; skippedCount: number; }>;","entrypoint":"agent-harness-runtime","exportName":"detectAndLoadAgentHarnessPromptImages","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"13649ee853485319e7449fda25c106b3f3f53d3090e53cdbb28e220a8529eb80","declaration":"export function disposeRegisteredAgentHarnesses(): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"disposeRegisteredAgentHarnesses","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"c38cd390190bb07ddcd247420d6e0b489a0229bd402ddca0440417217a57251a","declaration":"export function emitAgentEvent(event: Omit<AgentEventPayload, \"seq\" | \"ts\">): void;","entrypoint":"agent-harness-runtime","exportName":"emitAgentEvent","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
@@ -121,7 +121,7 @@
{"closureHash":"5fa61424d7471cf6f3b142964294cca4723eefc5b673eff97b2b1a8b3f139172","declaration":"export function formatToolAggregate(toolName?: string, metas?: string[], options?: ToolAggregateOptions): string;","entrypoint":"agent-harness-runtime","exportName":"formatToolAggregate","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"cb9c705d6862116c7c61a3cc3941f8fea1c834ad14a628441cff1d1a697eb00b","declaration":"export function formatToolExecutionErrorMessage(error: unknown, fallback: string): string;","entrypoint":"agent-harness-runtime","exportName":"formatToolExecutionErrorMessage","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"16ca31a0ec0bec339d1a9ac63252eec5665d00d763c20075a93be176dc098239","declaration":"export function formatToolProgressOutput(output: string, options?: { maxChars?: number; }): string | undefined;","entrypoint":"agent-harness-runtime","exportName":"formatToolProgressOutput","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"d07ce9d731f8f387a085dad0a4c608a281f65613c318d206a88c231c1c6bf59b","declaration":"export function getAgentHarnessHookRunner(): AgentHarnessHookRunner;","entrypoint":"agent-harness-runtime","exportName":"getAgentHarnessHookRunner","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"43d14ee5a05c9d84c9d1b8b966882a48c1e8b68d6b7455d041a1d2d61156f4b8","declaration":"export function getAgentHarnessHookRunner(): AgentHarnessHookRunner;","entrypoint":"agent-harness-runtime","exportName":"getAgentHarnessHookRunner","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"37c1f0f87fd002e7de9ddb6ec0e4389e7add214dd3ceb6001077038f395d8451","declaration":"export function getBeforeToolCallFailureDisposition(error: unknown): BeforeToolCallFailureDisposition | undefined;","entrypoint":"agent-harness-runtime","exportName":"getBeforeToolCallFailureDisposition","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"2f995f2a9777cac11240f0dd375d2041fdc11ca0ad57c65e102db3d0be6b6f62","declaration":"export function getBeforeToolCallPolicyDiagnosticState(): BeforeToolCallPolicyDiagnosticState;","entrypoint":"agent-harness-runtime","exportName":"getBeforeToolCallPolicyDiagnosticState","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"45828b5ebf771446b493a1af9dee71e58aa8b96a28957a633e5fd5f3d6bfcaa4","declaration":"export function getChannelAgentToolMeta(tool: ChannelAgentTool): ChannelAgentToolMeta | undefined;","entrypoint":"agent-harness-runtime","exportName":"getChannelAgentToolMeta","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
@@ -188,16 +188,16 @@
{"closureHash":"f2fb5a4e5546086c8a69600795e5b6cde1817b2ba5a4680600c41297005b3ee2","declaration":"export function resolveUserPath(input: string, env?: NodeJS.ProcessEnv, homedir?: () => string): string;","entrypoint":"agent-harness-runtime","exportName":"resolveUserPath","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"4204798ce3bf40e0b488d6642a9617f361e53931f634042fcd09dde69f3924c4","declaration":"export function resolveWritableSandboxBindHostRoots(binds: readonly string[] | undefined): string[];","entrypoint":"agent-harness-runtime","exportName":"resolveWritableSandboxBindHostRoots","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"10e5de5d2202452344eca9023fccecd19bcede51b031fe7926bd6335e7767158","declaration":"export function runAgentCleanupStep(params: { runId: string; sessionId: string; step: string; cleanup: () => Promise<void>; getTimeoutDetails?: () => string | undefined; log: AgentCleanupLogger; env?: NodeJS.ProcessEnv; timeoutMs?: number; }): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"runAgentCleanupStep","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"ff445b96f37d299f5aa41b8f3a383542eb13177bc75eef1cb44897ef8a224e0c","declaration":"export function runAgentEndSideEffects(params: AgentEndSideEffectsParams): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentEndSideEffects","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"816bf59dedc19b85f9da621b41b7a73ac2c0b4c4729c044322948f57aa9bda4b","declaration":"export function runAgentEndSideEffects(params: AgentEndSideEffectsParams): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentEndSideEffects","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"a88818cc62232eeb75281bb6ccfbaf7928a4bb1390313c73c08b14c73e4e92bb","declaration":"export function runAgentHarnessAfterCompactionHook(params: { sessionFile: string; messages?: AgentMessage[]; ctx: AgentHarnessHookContext; compactedCount: number; }): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessAfterCompactionHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"d6517f30fc90c4fa8ef89ac0fe3d6499adcfad71fd3ab46cc66d3e4a2472a844","declaration":"export function runAgentHarnessAfterToolCallHook(params: { toolName: string; toolCallId: string; runId?: string; agentId?: string; sessionId?: string; sessionKey?: string; channelId?: string; startArgs: Record<string, unknown>; result?: unknown; error?: string; startedAt?: number; }): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessAfterToolCallHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"8495ec0ad47e8e54d34d3ccdac91a36f9033387938ebd15b67d77cf42704f19f","declaration":"export function runAgentHarnessAgentEndHook(params: { event: PluginHookAgentEndEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessAgentEndHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"1e739840596195415c92326059e6d7fb42f94823752e9623cceebc5806a34171","declaration":"export function runAgentHarnessBeforeAgentFinalizeHook(params: { event: PluginHookBeforeAgentFinalizeEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): Promise<AgentHarnessBeforeAgentFinalizeOutcome>;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessBeforeAgentFinalizeHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"58ae81c43c770b2b7586014081120e123c4c4223b89cdd7b9649eb2f98a1d9a0","declaration":"export function runAgentHarnessAgentEndHook(params: { event: PluginHookAgentEndEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessAgentEndHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"e4784aeda4c24b60cd49b7f5983e70a380a4759d5176c74d30f2900952ba848f","declaration":"export function runAgentHarnessBeforeAgentFinalizeHook(params: { event: PluginHookBeforeAgentFinalizeEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): Promise<AgentHarnessBeforeAgentFinalizeOutcome>;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessBeforeAgentFinalizeHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"8fec73ee8c7c9be3335bd6dc1bac9278f0be5beef22a5975eb06e56f504f4bd6","declaration":"export function runAgentHarnessBeforeCompactionHook(params: { sessionFile: string; messages?: AgentMessage[]; ctx: AgentHarnessHookContext; }): Promise<void>;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessBeforeCompactionHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"021b81820bef2e8d54c50a5fc159d6665b23b50a1f5c40dae76a4833839d89c9","declaration":"export function runAgentHarnessBeforeMessageWriteHook(params: { message: AgentMessage; agentId?: string; sessionKey?: string; }): AgentMessage | null;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessBeforeMessageWriteHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"f629dbc1d655df5f8559b637878c5604a2368a927f21593d77a5be96aa20ddd1","declaration":"export function runAgentHarnessGatewayQuestion(params: RunAgentHarnessGatewayQuestionParams): Promise<QuestionWaitAnswerResult>;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessGatewayQuestion","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"879806716664c6159307778fd01879e526f293b65468df9577500bcacb8c65ba","declaration":"export function runAgentHarnessLlmInputHook(params: { event: PluginHookLlmInputEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessLlmInputHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"f8cbde26fe171d89ffd3d36a731277f5e1020f79d51f11b7877ea7b286c01d27","declaration":"export function runAgentHarnessLlmOutputHook(params: { event: PluginHookLlmOutputEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessLlmOutputHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"32861994c9752f55ebdfcb074908f1d08f35a93ed1532bcd220ce1ae3a0f8469","declaration":"export function runAgentHarnessGatewayQuestion(params: RunAgentHarnessGatewayQuestionParams): Promise<QuestionWaitAnswerResult>;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessGatewayQuestion","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"50a4d7cb20dd8f884abbcb62d77b5b2df183fbfcd058cc7aa76edacd1f7b90d8","declaration":"export function runAgentHarnessLlmInputHook(params: { event: PluginHookLlmInputEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessLlmInputHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"1bd55c141c249b1c04470cafe0cd4d41dce334ea2883ce83235af56d24a15cca","declaration":"export function runAgentHarnessLlmOutputHook(params: { event: PluginHookLlmOutputEvent; ctx: AgentHarnessHookContext; hookRunner?: AgentHarnessHookRunner; }): void;","entrypoint":"agent-harness-runtime","exportName":"runAgentHarnessLlmOutputHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"c4c5131ab7065decd8d8e935ac3779e3baa2c52fbbbd95a6ccb624377db09ca1","declaration":"export function runBeforeToolCallHook(args: { toolName: string; params: unknown; toolKind?: PluginHookToolKind; toolInputKind?: PluginHookToolInputKind; toolCallId?: string; ctx?: HookContext; signal?: AbortSignal; approvalMode?: \"request\" | \"report\" | \"deny\" | \"defer\"; }): Promise<HookOutcome>;","entrypoint":"agent-harness-runtime","exportName":"runBeforeToolCallHook","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"35268edd668bcf1981dff5f000b8bbb5847a1a9bb7e8923769edc378e21108aa","declaration":"export function runHarnessContextEngineMaintenance(params: { contextEngine?: HarnessContextEngine; sessionId: string; sessionKey?: string; sessionTarget?: ContextEngineSessionTarget; sessionFile: string; reason: \"bootstrap\" | \"compaction\" | \"turn\"; sessionManager?: unknown; runtimeContext?: ContextEngineRuntimeContext; runtimeSettings?: ContextEngineRuntimeSettings; contextEngineHostSupport?: ContextEngineHostSupport; harnessId?: string | null; runtimeId?: string | null; providerId?: string | null; requestedModelId?: string | null; modelId?: string | null; tokenBudget?: number | null; maxOutputTokens?: number | null; fallbackReason?: string | null; degradedReason?: string | null; executionMode?: \"foreground\" | \"background\"; onDeferredMaintenance?: (promise: Promise<void>) => void; withSessionManagerRewriteLock?: <T>(operation: () => Promise<T> | T) => Promise<T>; config?: OpenClawConfig; }): Promise<TranscriptRewriteResult | undefined>;","entrypoint":"agent-harness-runtime","exportName":"runHarnessContextEngineMaintenance","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
{"closureHash":"ac1ea146e8b2031b307790d708076df67f0120365804edffacbf9841edd86185","declaration":"export function sanitizeToolResult(result: unknown): unknown;","entrypoint":"agent-harness-runtime","exportName":"sanitizeToolResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"function","recordType":"export"}
@@ -221,8 +221,8 @@
{"closureHash":"f237bbc11e1d389679cd4e2ad7aa9055951b3029348e3374b81f769786a51d55","declaration":"export type AbortAndDrainAgentHarnessRunResult = AbortAndDrainEmbeddedAgentRunResult;","entrypoint":"agent-harness-runtime","exportName":"AbortAndDrainAgentHarnessRunResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"6f802f46717d28d260bbcb2cf4790dfed4e9ab28c4fe822d259228189cca4665","declaration":"export type AgentApprovalEventData = AgentApprovalEventData;","entrypoint":"agent-harness-runtime","exportName":"AgentApprovalEventData","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"12aac3a57ce200b0f082002be237625729f84ed7c337f1bac90bcd0688a53319","declaration":"export type AgentEventPayload = AgentEventPayload;","entrypoint":"agent-harness-runtime","exportName":"AgentEventPayload","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"069afe164b45b50b6a4df310f4b257eff482dcd6ca93b1f9a5dcf08724eb44c2","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"agent-harness-runtime","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"069afe164b45b50b6a4df310f4b257eff482dcd6ca93b1f9a5dcf08724eb44c2","declaration":"export type AgentHarnessAttemptParams = AgentHarnessAttemptParams;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessAttemptParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"d3f58785b718226c2b2b6ed6b27f196eebbc7fee2a8366a1b95aa0961dfb5a87","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"agent-harness-runtime","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"d3f58785b718226c2b2b6ed6b27f196eebbc7fee2a8366a1b95aa0961dfb5a87","declaration":"export type AgentHarnessAttemptParams = AgentHarnessAttemptParams;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessAttemptParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"2dc2a62deea63b316142cc28d40afb88fb0d1e5ce3e048f141420726cda38248","declaration":"export type AgentHarnessAttemptResult = AgentHarnessAttemptResult;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessAttemptResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"c7e642234081160830fd9e18a301900f8ee1ea8c88382e5a286f0102de65b714","declaration":"export type AgentHarnessAuthBindingFingerprintParams = AgentHarnessAuthBindingFingerprintParams;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessAuthBindingFingerprintParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"601d68a3c668b18a4009d33b516d577bade06c3f89fafaa19685681c44d801b2","declaration":"export type AgentHarnessCompactParams = CompactEmbeddedAgentSessionParams;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessCompactParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
@@ -236,7 +236,7 @@
{"closureHash":"95741b872a194687696eba4a96d6e887ec6e81922695fa0282cb2f0a46ff9f97","declaration":"export type AgentHarnessSessionForkParams = AgentHarnessSessionForkParams;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSessionForkParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"f3c46fef2a6c3393b0b6ad09915abcd6f57bb58ddddde1d60ebd113c7a1c5fa6","declaration":"export type AgentHarnessSessionForkResult = AgentHarnessSessionForkResult;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSessionForkResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"4b5a59730309e446f59a8ec1c554c3193aca1959916594cc657347098bd67a35","declaration":"export type AgentHarnessSettledTurnFinalizationResult = AgentHarnessSettledTurnFinalizationResult;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSettledTurnFinalizationResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"44637f2058047675f040a811322e775e3439bbdc4e163e0fa507408979538ba9","declaration":"export type AgentHarnessSideQuestionParams = AgentHarnessSideQuestionParams;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSideQuestionParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"36a47a23a22ada500a2439f80c89ec114f20c3fe3c3e0e40dde73a64679734a6","declaration":"export type AgentHarnessSideQuestionParams = AgentHarnessSideQuestionParams;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSideQuestionParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"e84173055503c40dd0ef1cb67c6d333e9257fcf995252b27c1d58f5c904e8de9","declaration":"export type AgentHarnessSideQuestionResult = AgentHarnessSideQuestionResult;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSideQuestionResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"50214d08dac98e3c1031ac7bc733b85cb2247d2eef3b6b2045758ae403af7647","declaration":"export type AgentHarnessSupport = AgentHarnessSupport;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSupport","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"50ce26ea22bc225e6064d2e5f37356b6f4ce4a57f8b9fa42baa4c421da48aad5","declaration":"export type AgentHarnessSupportContext = AgentHarnessSupportContext;","entrypoint":"agent-harness-runtime","exportName":"AgentHarnessSupportContext","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
@@ -271,7 +271,7 @@
{"closureHash":"f30b66fd82f4cd61c60880c42a3b8f152ca64a2216036c99ab4129648ed329e7","declaration":"export type EmbeddedAgentCompactResult = EmbeddedAgentCompactResult;","entrypoint":"agent-harness-runtime","exportName":"EmbeddedAgentCompactResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"1bbefad0193436f7340f9d0dec50be5d482973325c3c65170b1053dd05566f0a","declaration":"export type EmbeddedContextFile = EmbeddedContextFile;","entrypoint":"agent-harness-runtime","exportName":"EmbeddedContextFile","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"f30b66fd82f4cd61c60880c42a3b8f152ca64a2216036c99ab4129648ed329e7","declaration":"export type EmbeddedPiCompactResult = EmbeddedAgentCompactResult;","entrypoint":"agent-harness-runtime","exportName":"EmbeddedPiCompactResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"39aca9d1bc332fd3192cf133df5d5d383e18c0584c1680b2ce2a13a2d3fe17e2","declaration":"export type EmbeddedRunAttemptParams = EmbeddedRunAttemptParams;","entrypoint":"agent-harness-runtime","exportName":"EmbeddedRunAttemptParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"b58ad0c54a29c986eace05d14e7bc4925274ff2d61db000698c8963027bcdba3","declaration":"export type EmbeddedRunAttemptParams = EmbeddedRunAttemptParams;","entrypoint":"agent-harness-runtime","exportName":"EmbeddedRunAttemptParams","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"a6cd2eebe0d06e6578ec8438a207c5acda10ddf01041102d84e4c576a0b6a42f","declaration":"export type EmbeddedRunAttemptResult = EmbeddedRunAttemptResult;","entrypoint":"agent-harness-runtime","exportName":"EmbeddedRunAttemptResult","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"f6cb2d6411db22cb04220777720d97bcca977351de1cb344ce2ff6ab126a3a08","declaration":"export type ExecApprovalDecision = ExecApprovalDecision;","entrypoint":"agent-harness-runtime","exportName":"ExecApprovalDecision","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
{"closureHash":"7acb0dffc7bcda6c727e4afc49c955fa8e14f4f8b7b45d197ed794dfa0d73b8e","declaration":"export type ExecAutoReviewDecision = ExecAutoReviewDecision;","entrypoint":"agent-harness-runtime","exportName":"ExecAutoReviewDecision","importSpecifier":"openclaw/plugin-sdk/agent-harness-runtime","kind":"type","recordType":"export"}
@@ -309,7 +309,7 @@
{"closureHash":"666634000ee5bf317dabcbd70524833961fad58edc2b3cd66fe5fa0172e89602","declaration":"export function getAgentScopedMediaLocalRoots(cfg: OpenClawConfig, agentId?: string): readonly string[];","entrypoint":"agent-media-payload","exportName":"getAgentScopedMediaLocalRoots","importSpecifier":"openclaw/plugin-sdk/agent-media-payload","kind":"function","recordType":"export"}
{"closureHash":"160c685c3f4e7ed80fb24d3d76655a182116efe6a7b985bb3bc57b89fe436d2a","declaration":"export type AgentMediaPayload = AgentMediaPayload;","entrypoint":"agent-media-payload","exportName":"AgentMediaPayload","importSpecifier":"openclaw/plugin-sdk/agent-media-payload","kind":"type","recordType":"export"}
{"category":"runtime","entrypoint":"agent-runtime","importSpecifier":"openclaw/plugin-sdk/agent-runtime","recordType":"module"}
{"closureHash":"5b9395838f9417a8e82296ae9b5badf9317ffbc046353102307933a68cec2b7a","declaration":"export function agentCommandFromIngress(opts: AgentCommandIngressOpts, runtime?: RuntimeEnv, deps?: CliDeps): Promise<{ payloads: ReturnType<typeof projectOutboundPayloadPlanForJson>; meta: EmbeddedAgentRunMeta; didSendViaMessagingTool?: boolean; messagingToolSentTexts?: string[]; messagingToolSentMediaUrls?: string[]; messagingToolSentTargets?: MessagingToolSend[]; deliverySucceeded?: boolean; deliveryStatus?: { requested: true; attempted: boolean; status: \"sent\" | \"suppressed\" | \"partial_failed\" | \"failed\"; succeeded: true | false | \"partial\"; error?: true; errorMessage?: string; reason?: string; resultCount?: number; sentBeforeError?: true; payloadOutcomes?: SerializedDurableMessagePayloadOutcome[]; }; }>;","entrypoint":"agent-runtime","exportName":"agentCommandFromIngress","importSpecifier":"openclaw/plugin-sdk/agent-runtime","kind":"function","recordType":"export"}
{"closureHash":"9cbc2cf811486a2e5e0408aa28579772da0e8058566ed6cd4782a5c28e287a06","declaration":"export function agentCommandFromIngress(opts: AgentCommandIngressOpts, runtime?: RuntimeEnv, deps?: CliDeps): Promise<{ payloads: ReturnType<typeof projectOutboundPayloadPlanForJson>; meta: EmbeddedAgentRunMeta; didSendViaMessagingTool?: boolean; messagingToolSentTexts?: string[]; messagingToolSentMediaUrls?: string[]; messagingToolSentTargets?: MessagingToolSend[]; deliverySucceeded?: boolean; deliveryStatus?: { requested: true; attempted: boolean; status: \"sent\" | \"suppressed\" | \"partial_failed\" | \"failed\"; succeeded: true | false | \"partial\"; error?: true; errorMessage?: string; reason?: string; resultCount?: number; sentBeforeError?: true; payloadOutcomes?: SerializedDurableMessagePayloadOutcome[]; }; }>;","entrypoint":"agent-runtime","exportName":"agentCommandFromIngress","importSpecifier":"openclaw/plugin-sdk/agent-runtime","kind":"function","recordType":"export"}
{"closureHash":"cb95256473d5489ef80ec3e1d93c6a612b2cc733c26ab535f945f8797995b5cb","declaration":"export function buildConfiguredModelCatalog(params: { cfg: OpenClawConfig; workspaceDir?: string; manifestPlugins?: ModelManifestPlugins; }): ModelCatalogEntry[];","entrypoint":"agent-runtime","exportName":"buildConfiguredModelCatalog","importSpecifier":"openclaw/plugin-sdk/agent-runtime","kind":"function","recordType":"export"}
{"closureHash":"4a71b73b60d846e9d99fa3881cb72eb7eaaebe7b3386b6bcbaa6cfa46eb3a073","declaration":"export function buildModelAliasIndex(params: BuildModelAliasIndexParams): ModelAliasIndex;","entrypoint":"agent-runtime","exportName":"buildModelAliasIndex","importSpecifier":"openclaw/plugin-sdk/agent-runtime","kind":"function","recordType":"export"}
{"closureHash":"ae0f930ec291a0345c4e99e247711465a5d29a8bbdd63968900fa69f382b3a78","declaration":"export function clearExpiredCooldowns(store: AuthProfileStore, now?: number): boolean;","entrypoint":"agent-runtime","exportName":"clearExpiredCooldowns","importSpecifier":"openclaw/plugin-sdk/agent-runtime","kind":"function","recordType":"export"}
@@ -755,7 +755,7 @@
{"closureHash":"9fc7e45343d7bfbc6ed56d05c9f824e2f9cf6dafc3ca4b25437d1f65c2200727","declaration":"export function clearAccountEntryFields<TAccountEntry extends object>(params: { accounts?: Record<string, TAccountEntry>; accountId: string; fields: string[]; isValueSet?: (value: unknown) => boolean; markClearedOnFieldPresence?: boolean; }): { nextAccounts?: Record<string, TAccountEntry>; changed: boolean; cleared: boolean; };","entrypoint":"channel-core","exportName":"clearAccountEntryFields","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
{"closureHash":"f4e084b64b5376268885a73fe507aa5d72bee17a88ec2d7ae1d19b36ea5f1ccb","declaration":"export function createChannelConfigUiHints(params: { channelLabel: string; dmPolicy?: { channelKey: string; includeLegacyNestedPolicy?: boolean; legacyNestedPolicyOrder?: \"before\" | \"after\"; }; configWrites?: boolean; mentionPatterns?: { targetDescription: string; policyTargetDescription?: string; policyNote?: string; denyNote?: string; }; nativeCommands?: boolean; implicitMentions?: boolean; progress?: { includeCommentary?: boolean; commentaryOrder?: \"before-command\" | \"after-command\"; labels?: \"openclaw\"; titleWording?: boolean; }; streaming?: Partial<Record<StreamingHintKey, StreamingHintValue>>; retry?: boolean; }): HintMap;","entrypoint":"channel-core","exportName":"createChannelConfigUiHints","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
{"closureHash":"c26bfcd8451627b0eb75f7837e281b58dc127d19591d7c030691ca9bbe0edbf4","declaration":"export function createChatChannelPlugin<TResolvedAccount extends { accountId?: string | null; }, Probe = unknown, Audit = unknown>(params: { base: ChatChannelPluginBase<TResolvedAccount, Probe, Audit>; security?: ChannelSecurityAdapter<TResolvedAccount> | ChatChannelSecurityOptions<TResolvedAccount>; pairing?: ChannelPairingAdapter | ChatChannelPairingOptions; threading?: ChannelThreadingAdapter | ChatChannelThreadingOptions<TResolvedAccount>; outbound?: ChannelOutboundAdapter | ChatChannelAttachedOutboundOptions; }): ChannelPlugin<TResolvedAccount, Probe, Audit>;","entrypoint":"channel-core","exportName":"createChatChannelPlugin","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
{"closureHash":"b71327e7ce28ebadd8059c6ace39bff225972322d0991f5c5d26d3d5b22e53ea","declaration":"export function defineChannelPluginEntry<TPlugin>({ id, name, description, plugin, configSchema, setRuntime, registerCliMetadata, registerFull, registerCapabilities, }: DefineChannelPluginEntryOptions<TPlugin>): DefinedChannelPluginEntry<TPlugin>;","entrypoint":"channel-core","exportName":"defineChannelPluginEntry","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
{"closureHash":"a569ea024508826e0ec5d7d9222b23e2a522a4ed51d46833181838a2ee079f06","declaration":"export function defineChannelPluginEntry<TPlugin>({ id, name, description, plugin, configSchema, setRuntime, registerCliMetadata, registerFull, registerCapabilities, }: DefineChannelPluginEntryOptions<TPlugin>): DefinedChannelPluginEntry<TPlugin>;","entrypoint":"channel-core","exportName":"defineChannelPluginEntry","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
{"closureHash":"0e0a9f6b22c433bdb1165e7707b1f9a1ddac1a544a8add00b503048cf157921f","declaration":"export function defineSetupPluginEntry<TPlugin>(plugin: TPlugin): { plugin: TPlugin; };","entrypoint":"channel-core","exportName":"defineSetupPluginEntry","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
{"closureHash":"8895f7af11b994dcd383ebc45d8cfb3c3b1e6d88a64a001b04f604a83f77e517","declaration":"export function parseOptionalDelimitedEntries(value?: string): string[] | undefined;","entrypoint":"channel-core","exportName":"parseOptionalDelimitedEntries","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
{"closureHash":"3f97534b10d08eda6a556044eaba623b3744b200a2033877e48d2f2ca924d298","declaration":"export function recoverCurrentThreadSessionId(params: { route: ChannelOutboundSessionRoute; currentSessionKey?: string | null; canRecover?: (context: ThreadAwareOutboundSessionRouteRecoveryContext) => boolean; }): string | undefined;","entrypoint":"channel-core","exportName":"recoverCurrentThreadSessionId","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"function","recordType":"export"}
@@ -767,24 +767,24 @@
{"closureHash":"8126b651a679d5435eaa5d346916792c3600e5f0f75d8492b077dd361854f7dd","declaration":"export type ChannelOutboundSessionRouteParams = { cfg: OpenClawConfig; agentId: string; accountId?: string | null; target: string; currentSessionKey?: string; resolvedTarget?: { to: string; kind: ChannelDirectoryEntryKind | \"channel\"; display?: string; source: \"normalized\" | \"directory\"; }; replyToId?: string | null; threadId?: string | number | null;};","entrypoint":"channel-core","exportName":"ChannelOutboundSessionRouteParams","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"closureHash":"4dd12b961fc300d388143ed5d8dc990e759c382b949c337c8f28ac83ca65aae7","declaration":"export type ChannelPlugin<ResolvedAccount = any, Probe = unknown, Audit = unknown> = ChannelPlugin<ResolvedAccount, Probe, Audit>;","entrypoint":"channel-core","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"closureHash":"8054ffbe71b91afced900ef8a06f5e368ac10c4f99ffc1c6f538a802856f61c6","declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"channel-core","exportName":"OpenClawConfig","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"closureHash":"baddda61cd7c006909d5364a531fc1d362afca4d789674b0af5f5175f339af9c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"channel-core","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"closureHash":"adad7f6d6c8f37f73c803f8decd56bc9db755e3449b59059de4cbef52f90f116","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"channel-core","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"closureHash":"d2fd2ab0a5bcfbefb315f61a58e1ec1ea3ecd4bc009b67c6cd52c83a716b8021","declaration":"export type PluginCommandContext = PluginCommandContext;","entrypoint":"channel-core","exportName":"PluginCommandContext","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"closureHash":"2cea6ec6d79e6fd4291233833057d122a7e96e2838c06409312f57d55734d4ad","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"channel-core","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"closureHash":"ee07774fb1d0711bbe9a5d9f49bde457bfb0169000423e58c5a4da432d68f888","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"channel-core","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/channel-core","kind":"type","recordType":"export"}
{"category":"channel","entrypoint":"channel-dm-policy","importSpecifier":"openclaw/plugin-sdk/channel-dm-policy","recordType":"module"}
{"closureHash":"821fe6ccd0d9323322bf70c4d1ca5697071a0e32032f44c1e14157162c2c729d","declaration":"export function createChannelDmPolicy<TConfig extends DmPolicyAccountConfig>(params: CreateChannelDmPolicyParams<TConfig>): ChannelSetupDmPolicy & { promptAllowFrom: NonNullable<ChannelSetupDmPolicy[\"promptAllowFrom\"]>; };","entrypoint":"channel-dm-policy","exportName":"createChannelDmPolicy","importSpecifier":"openclaw/plugin-sdk/channel-dm-policy","kind":"function","recordType":"export"}
{"category":null,"entrypoint":"channel-entry-contract","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","recordType":"module"}
{"closureHash":"10442746e1f19b9cf94fe6767a79831b0c447fb3ff0aac9e57c283db39baa855","declaration":"export function defineBundledChannelEntry<TPlugin = ChannelPlugin>({ id, name, description, importMetaUrl, plugin, outbound, secrets, configSchema, runtime, accountInspect, features, registerCliMetadata, registerFull, registerCapabilities, }: DefineBundledChannelEntryOptions<TPlugin>): BundledChannelEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"defineBundledChannelEntry","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"function","recordType":"export"}
{"closureHash":"c19b7a9ff6770096a269051f7a4fd42ddd3b0a815302d709a9540d09320d6c02","declaration":"export function defineBundledChannelSetupEntry<TPlugin = ChannelPlugin>({ importMetaUrl, plugin, secrets, runtime, legacyStateMigrations, legacySessionSurface, registerSetupRuntime, features, }: DefineBundledChannelSetupEntryOptions): BundledChannelSetupEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"defineBundledChannelSetupEntry","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"function","recordType":"export"}
{"closureHash":"324022006bbd575cf17dc8b50ab4d7e8c534702c61c41581f8b5c6ae50a19b32","declaration":"export function defineBundledChannelEntry<TPlugin = ChannelPlugin>({ id, name, description, importMetaUrl, plugin, outbound, secrets, configSchema, runtime, accountInspect, features, registerCliMetadata, registerFull, registerCapabilities, }: DefineBundledChannelEntryOptions<TPlugin>): BundledChannelEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"defineBundledChannelEntry","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"function","recordType":"export"}
{"closureHash":"9e570d8dd297bfe66f3e0c4b93574cd367a4fbcad0d7208e0910caf191e3446a","declaration":"export function defineBundledChannelSetupEntry<TPlugin = ChannelPlugin>({ importMetaUrl, plugin, secrets, runtime, legacyStateMigrations, legacySessionSurface, registerSetupRuntime, features, }: DefineBundledChannelSetupEntryOptions): BundledChannelSetupEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"defineBundledChannelSetupEntry","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"function","recordType":"export"}
{"closureHash":"cd150287d7e286e7a0d7d6caeb05d0a1efa63b5f351f75f69ba932510a108afd","declaration":"export function loadBundledEntryExportSync<T>(importMetaUrl: string, reference: BundledEntryModuleRef, options?: BundledEntryModuleLoadOptions): T;","entrypoint":"channel-entry-contract","exportName":"loadBundledEntryExportSync","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"function","recordType":"export"}
{"closureHash":"7781a3d570d08929af5b3b6cffbb9ef4b9c8e8f1bed55234e0015a681868c812","declaration":"export type AnyAgentTool = AnyAgentTool;","entrypoint":"channel-entry-contract","exportName":"AnyAgentTool","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"b948f57b4b79788dbdcb8f8ceb1fea954bc00f43ca55144afaf572ea4211aad1","declaration":"export type BundledChannelEntryContract<TPlugin = ChannelPlugin> = BundledChannelEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"BundledChannelEntryContract","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"83892b448b551c3afb5904a14ec581927b01913d043b2f073d6c62556330a3e7","declaration":"export type BundledChannelEntryContract<TPlugin = ChannelPlugin> = BundledChannelEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"BundledChannelEntryContract","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"f4b82dfd995bd6f08b232984743389d1c854866cb845a8dbb3605acb28818688","declaration":"export type BundledChannelEntryFeatures = BundledChannelEntryFeatures;","entrypoint":"channel-entry-contract","exportName":"BundledChannelEntryFeatures","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"960693591b9bdc974bf3f0097076d90490078db3dceb35349a4f851736cde4fc","declaration":"export type BundledChannelLegacySessionSurface = BundledChannelLegacySessionSurface;","entrypoint":"channel-entry-contract","exportName":"BundledChannelLegacySessionSurface","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"edf79e6a736e5c4977e3b86ef21e7fdf0c0b2bc7deacd8edbee2ca76cb8cef43","declaration":"export type BundledChannelLegacyStateMigrationDetector = BundledChannelLegacyStateMigrationDetector;","entrypoint":"channel-entry-contract","exportName":"BundledChannelLegacyStateMigrationDetector","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"8ebb37563b907141bfbc401063ea376da2f7f989c21a427cca0b52b4754b7c60","declaration":"export type BundledChannelSetupEntryContract<TPlugin = ChannelPlugin> = BundledChannelSetupEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"BundledChannelSetupEntryContract","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"0ab0c2988e242205be0a69fd99af52bff747a7066815e54400bcdf11805b1199","declaration":"export type BundledChannelSetupEntryContract<TPlugin = ChannelPlugin> = BundledChannelSetupEntryContract<TPlugin>;","entrypoint":"channel-entry-contract","exportName":"BundledChannelSetupEntryContract","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"24679ecdf2ff34157b6345a37b58ec1363ec8cb1969b522599d0d92bb7a113b7","declaration":"export type BundledChannelSetupEntryFeatures = BundledChannelSetupEntryFeatures;","entrypoint":"channel-entry-contract","exportName":"BundledChannelSetupEntryFeatures","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"367219c821915e5be4d1ba3a86754475a5f8a4194512f0401de3be11cc649c60","declaration":"export type BundledEntryModuleLoadOptions = BundledEntryModuleLoadOptions;","entrypoint":"channel-entry-contract","exportName":"BundledEntryModuleLoadOptions","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"5aebbae6e4dcf0e7698eb092f906eb1be8c570dc126029c43da3f07ff5de860c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"channel-entry-contract","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"8b2fd029fd7852fb0ee5f84990afe7a8e277ec38ba357e594c5b47fd9f1f908c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"channel-entry-contract","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"91a09e6dcc03ab8fdb2ca6efc5fba8dd38e52c964c990307b7b6993a3fd3ab9a","declaration":"export type OpenClawPluginCommandDefinition = OpenClawPluginCommandDefinition;","entrypoint":"channel-entry-contract","exportName":"OpenClawPluginCommandDefinition","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"closureHash":"de47782d94eab6ffeb6f3b2f170cf852b4320fecf59613f5d228ba2df4d3a824","declaration":"export type PluginCommandContext = PluginCommandContext;","entrypoint":"channel-entry-contract","exportName":"PluginCommandContext","importSpecifier":"openclaw/plugin-sdk/channel-entry-contract","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"channel-feedback","importSpecifier":"openclaw/plugin-sdk/channel-feedback","recordType":"module"}
@@ -827,10 +827,10 @@
{"closureHash":"dd949b517f4b679f06ad1b7bf97b3ab71c3ef22ffdaaee6616c786dcc925785c","declaration":"export function createDirectDmPreCryptoGuardPolicy(overrides?: DirectDmPreCryptoGuardPolicyOverrides): DirectDmPreCryptoGuardPolicy;","entrypoint":"channel-inbound","exportName":"createDirectDmPreCryptoGuardPolicy","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"d2a3f9dd1ffc16941bb39360012138d3a3cbcf5e8beb08106182831b1c269054","declaration":"export function createInboundDebouncer<T>(params: InboundDebounceCreateParams<T>): { enqueue: (item: T) => Promise<void>; flushKey: (key: string) => Promise<void>; cancelKey: (key: string) => boolean; drain: () => Promise<void>; };","entrypoint":"channel-inbound","exportName":"createInboundDebouncer","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"0589d27aa139324b1ed177b814368d633ef11a77d07697d63ff9b7a6c11f4500","declaration":"export function createPreCryptoDirectDmAuthorizer(params: { resolveAccess: (senderId: string) => Promise<Pick<ResolvedInboundDirectDmAccess, \"access\"> | ResolvedInboundDirectDmAccess>; issuePairingChallenge?: (params: { senderId: string; reply: (text: string) => Promise<void>; }) => Promise<void>; onBlocked?: (params: { senderId: string; reason: string; reasonCode: DmGroupAccessReasonCode; }) => void; }): (input: { senderId: string; reply: (text: string) => Promise<void>; }) => Promise<\"allow\" | \"block\" | \"pairing\">;","entrypoint":"channel-inbound","exportName":"createPreCryptoDirectDmAuthorizer","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"9e88cbd2dceec5532df844f561b1950553b16867ef124ab1264cb4060a4637b1","declaration":"export function dispatchChannelInboundReply(params: AssembledInboundReply): Promise<ChannelTurnResult>;","entrypoint":"channel-inbound","exportName":"dispatchChannelInboundReply","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"64418b5343dd123c7173a7a43a57c49c8c5a17a94a5257c9799a29b6a00d7f52","declaration":"export function dispatchChannelInboundTurn(params: ChannelInboundTurnPlan<\"provider_message_sending\">): Promise<ChannelTurnResult>;\nexport function dispatchChannelInboundTurn(params: ChannelInboundTurnPlan): Promise<ChannelTurnResult>;","entrypoint":"channel-inbound","exportName":"dispatchChannelInboundTurn","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"223b7cf0db02a8db31985c199faa1168e84fd3d6e45727254545ecf2684608ed","declaration":"export function dispatchChannelInboundReply(params: AssembledInboundReply): Promise<ChannelTurnResult>;","entrypoint":"channel-inbound","exportName":"dispatchChannelInboundReply","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"90d9dde3622571da20733d6f4be9c10fcf3856fa48f638656caf69622462a195","declaration":"export function dispatchChannelInboundTurn(params: ChannelInboundTurnPlan<\"provider_message_sending\">): Promise<ChannelTurnResult>;\nexport function dispatchChannelInboundTurn(params: ChannelInboundTurnPlan): Promise<ChannelTurnResult>;","entrypoint":"channel-inbound","exportName":"dispatchChannelInboundTurn","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"2f997d08980c2c3f531382428c58204ca04e423a64ca201798f7667da15e774e","declaration":"export function dispatchInboundDirectDm(params: DispatchInboundDirectDmParams): Promise<{ route: DirectDmRoute; ctxPayload: FinalizedMsgContext; }>;","entrypoint":"channel-inbound","exportName":"dispatchInboundDirectDm","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"03d0fe1868cd04a3e5f0a72402c759d1139011498ec79254b266f492faa532c8","declaration":"export function dispatchInboundDirectDmWithRuntime(params: DispatchInboundDirectDmParams & { runtime: PluginRuntime; }): Promise<{ route: DirectDmRoute; storePath: string; ctxPayload: FinalizedMsgContext; }>;","entrypoint":"channel-inbound","exportName":"dispatchInboundDirectDmWithRuntime","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"0325df283b4dcc7149b6e7537c197e46782622adac4ee74edc877a359b91d4e7","declaration":"export function dispatchInboundDirectDmWithRuntime(params: DispatchInboundDirectDmParams & { runtime: PluginRuntime; }): Promise<{ route: DirectDmRoute; storePath: string; ctxPayload: FinalizedMsgContext; }>;","entrypoint":"channel-inbound","exportName":"dispatchInboundDirectDmWithRuntime","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"33cb9d760233f3d322599f7745a42e0b9fe2c653ffb9310d8b579f2d70f7638c","declaration":"export function filterChannelInboundQuoteContext(contextVisibility: ContextVisibilityMode | undefined, quote: SupplementalContextFacts[\"quote\"] | undefined): SupplementalContextFacts[\"quote\"] | undefined;","entrypoint":"channel-inbound","exportName":"filterChannelInboundQuoteContext","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"793b9b84aacb8f5b12daf857de82efc579fa018ba6b2357b0acd044be3dcec5f","declaration":"export function filterChannelInboundSupplementalContext(params: { supplemental?: SupplementalContextFacts; contextVisibility?: ContextVisibilityMode; }): SupplementalContextFacts | undefined;","entrypoint":"channel-inbound","exportName":"filterChannelInboundSupplementalContext","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"ff1797f8e6adf2331d98af9947dcefef02d743c2c7619fc8b5a2462980cb7126","declaration":"export function finalizeChannelInboundContext<T extends Record<string, unknown>>(params: FinalizeChannelInboundContextAsyncParams<T>): Promise<FinalizeChannelInboundContextResult<T>>;\nexport function finalizeChannelInboundContext<T extends Record<string, unknown>>(params: FinalizeChannelInboundContextParams<T>): FinalizeChannelInboundContextResult<T>;","entrypoint":"channel-inbound","exportName":"finalizeChannelInboundContext","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
@@ -855,7 +855,7 @@
{"closureHash":"6b537112d5d84ed07c0b9fd24787eabc2f893f7bfdce1ed5915f88574a7e101c","declaration":"export function normalizeMentionText(text: string): string;","entrypoint":"channel-inbound","exportName":"normalizeMentionText","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"92900098c3cc5b73fba7622a3aa5a1a8c48462ff7ec0cfae8ee0a3aa6f8277f0","declaration":"export function normalizeOutboundLocation(value: unknown, label?: string): OutboundLocation | undefined;","entrypoint":"channel-inbound","exportName":"normalizeOutboundLocation","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"65f5f2725c1124096e437bcf5894983eee1023f7033be886f1a506044b77c58e","declaration":"export function recordChannelBotPairLoopAndCheckSuppression(params: ChannelBotLoopProtectionFacts): PairLoopGuardResult;","entrypoint":"channel-inbound","exportName":"recordChannelBotPairLoopAndCheckSuppression","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"ed88425d5a4ff2de6306689bf2645eaa4e143b08eb1748213e9d6cdd85020758","declaration":"export function recordChannelFeedbackEvent(params: { cfg: OpenClawConfig; agentId: string; sessionKey: string; event: Parameters<typeof appendTranscriptEvent>[1]; }): Promise<boolean>;","entrypoint":"channel-inbound","exportName":"recordChannelFeedbackEvent","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"b9a9d004fab62d0c96698827022993574677b99d776dabc824e1e7cedaf6a878","declaration":"export function recordChannelFeedbackEvent(params: { cfg: OpenClawConfig; agentId: string; sessionKey: string; event: Parameters<typeof appendTranscriptEvent>[1]; }): Promise<boolean>;","entrypoint":"channel-inbound","exportName":"recordChannelFeedbackEvent","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"33b4280a69de6a4a87acf915c6d694b9ee41fc4f0262a1bb9836c46d53fe337c","declaration":"export function recordDroppedChannelInboundHistory(params: { input: NormalizedTurnInput; preflight: PreflightFacts; admission?: ChannelTurnAdmission; }): Promise<void>;","entrypoint":"channel-inbound","exportName":"recordDroppedChannelInboundHistory","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"33b4280a69de6a4a87acf915c6d694b9ee41fc4f0262a1bb9836c46d53fe337c","declaration":"export function recordDroppedChannelTurnHistory(params: { input: NormalizedTurnInput; preflight: PreflightFacts; admission?: ChannelTurnAdmission; }): Promise<void>;","entrypoint":"channel-inbound","exportName":"recordDroppedChannelTurnHistory","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"54b920fd80ac659a03000356b64e34d4a44ec22ae39a77accdd2ac97dc5a094e","declaration":"export function resolveChannelInboundRouteEnvelope(params: ResolveAgentRouteInput): { route: ResolvedAgentRoute; buildEnvelope: (input: ChannelInboundEnvelopeInput) => string; };","entrypoint":"channel-inbound","exportName":"resolveChannelInboundRouteEnvelope","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
@@ -869,7 +869,7 @@
{"closureHash":"5af56d49219f28e2d3a8104b771d2e758f14b4cd784e8ffc892b5a94634a3e73","declaration":"export function resolveMentionPatternPolicy(params: ResolveMentionPatternPolicyParams): ResolvedMentionPatternPolicy;","entrypoint":"channel-inbound","exportName":"resolveMentionPatternPolicy","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"1fb79e56b0b0e11f768f2075c9cdc060c3af281c79bbcd5334e5d887b99e5946","declaration":"export function resolveUnmentionedGroupInboundPolicy(params: { cfg: OpenClawConfig; agentId?: string; }): InboundEventKind;","entrypoint":"channel-inbound","exportName":"resolveUnmentionedGroupInboundPolicy","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"b06b5999074830bb40a3d6348a582fc5e1795997442acef561fca6a541d2b015","declaration":"export function runChannelFeedbackReflection(params: { cfg: OpenClawConfig; channel: string; channelLabel: string; accountId?: string; agentId: string; sessionKey: string; conversationId: string; conversationKind: \"direct\" | \"group\" | \"channel\"; thumbedDownResponse?: string; userComment?: string; cooldownMs?: number; onRecordError?: (error: unknown) => void; onDispatchError?: (error: unknown) => void; }): Promise<ChannelFeedbackReflectionResult>;","entrypoint":"channel-inbound","exportName":"runChannelFeedbackReflection","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"8924950cb2ab1f70ab55bb8d44587dc2d246e06c10684e81c7776c74ed87a2d8","declaration":"export function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: RunChannelTurnParams<TRaw, TDispatchResult, ChannelProviderOwnedMessageSendingDeliveryAdapter>): Promise<ChannelTurnResult<TDispatchResult>>;\nexport function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: ChannelInboundEventRunnerParams<TRaw, TDispatchResult>): Promise<ChannelTurnResult<TDispatchResult>>;","entrypoint":"channel-inbound","exportName":"runChannelInboundEvent","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"6162750b963f3e70be551f4eb4515932b6d108d9dd9d4dc1d18ee7096ecab3f1","declaration":"export function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: RunChannelTurnParams<TRaw, TDispatchResult, ChannelProviderOwnedMessageSendingDeliveryAdapter>): Promise<ChannelTurnResult<TDispatchResult>>;\nexport function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: ChannelInboundEventRunnerParams<TRaw, TDispatchResult>): Promise<ChannelTurnResult<TDispatchResult>>;","entrypoint":"channel-inbound","exportName":"runChannelInboundEvent","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"2c68496a174872b31aaf1ac8fad2789deb79d490c5ffbcb157325f1c95d1b51f","declaration":"export function runPreparedInboundReply<TDispatchResult>(params: PreparedChannelTurn<TDispatchResult>): Promise<ChannelTurnResult<TDispatchResult>>;","entrypoint":"channel-inbound","exportName":"runPreparedInboundReply","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"7cd0e032be61b330962c9cee9ba6a4e67c31a90e22fd79850e28c97ea3200bd1","declaration":"export function shouldDebounceTextInbound(params: { text: string | null | undefined; cfg: OpenClawConfig; hasMedia?: boolean; commandOptions?: CommandNormalizeOptions; allowDebounce?: boolean; }): boolean;","entrypoint":"channel-inbound","exportName":"shouldDebounceTextInbound","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
{"closureHash":"8289a274f0ea2c1c7f0daaae77c4e9e0c5588f6a17148240e83720a59ec23604","declaration":"export function toHistoryMediaEntries(media: readonly ChannelInboundMediaInput[] | null | undefined, defaults?: { kind?: InboundMediaFacts[\"kind\"]; messageId?: string; }): HistoryMediaEntry[];","entrypoint":"channel-inbound","exportName":"toHistoryMediaEntries","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"function","recordType":"export"}
@@ -879,7 +879,7 @@
{"closureHash":"c700a03f4222eb20560db6abb3c775940b35cfbdfb3d122b2644cdc521809fb4","declaration":"export const DEFAULT_CHANNEL_FEEDBACK_REFLECTION_COOLDOWN_MS: 300000;","entrypoint":"channel-inbound","exportName":"DEFAULT_CHANNEL_FEEDBACK_REFLECTION_COOLDOWN_MS","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"const","recordType":"export"}
{"closureHash":"03bfa4a5365916c2d9f59e4e3c5c6ae3ee7952b2aec209c232bf73a5ccd2ae94","declaration":"export const filterChannelTurnSupplementalContext: (params: { supplemental?: SupplementalContextFacts; contextVisibility?: ContextVisibilityMode;}) => SupplementalContextFacts | undefined;","entrypoint":"channel-inbound","exportName":"filterChannelTurnSupplementalContext","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"const","recordType":"export"}
{"closureHash":"b028978582295be29c22e06673b8f1b48819511b6b8c26cfff9e322ddc2834e3","declaration":"export type AccessGroupMembershipResolver = AccessGroupMembershipResolver;","entrypoint":"channel-inbound","exportName":"AccessGroupMembershipResolver","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"e1642fb62352886de78856a9c6d9fdefcbf53a8dd54702f7de402c60fcaab4bb","declaration":"export type AssembledInboundReply = AssembledChannelTurn;","entrypoint":"channel-inbound","exportName":"AssembledInboundReply","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"5de6d107d40b06837a6b1d69d87411950714ad38aa80270120c2bf72f9f933b2","declaration":"export type AssembledInboundReply = AssembledChannelTurn;","entrypoint":"channel-inbound","exportName":"AssembledInboundReply","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"16e04f044a9af3553fa26fec210bf6d2e6e101c4fe4db18b8914fce21dce573f","declaration":"export type BuildChannelInboundEventContextAsyncParams = BuildChannelInboundEventContextAsyncParams;","entrypoint":"channel-inbound","exportName":"BuildChannelInboundEventContextAsyncParams","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"bfda516454e1d03a16f685f9470c8ce4329328d5658b5ca26bc703c70c5d17c8","declaration":"export type BuildChannelInboundEventContextParams = BuildChannelInboundEventContextParams;","entrypoint":"channel-inbound","exportName":"BuildChannelInboundEventContextParams","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"b6ce3464585a1f042b94574c385dd57ca9be83740ef0fc929db769710dc78061","declaration":"export type BuildChannelTurnContextParams = BuildChannelTurnContextParams;","entrypoint":"channel-inbound","exportName":"BuildChannelTurnContextParams","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
@@ -890,11 +890,11 @@
{"closureHash":"bf7e13e0308a3f54e1686373d312f9883b1de82bf771ea1763379a5bf8f6e716","declaration":"export type ChannelFeedbackReflectionResult = ChannelFeedbackReflectionResult;","entrypoint":"channel-inbound","exportName":"ChannelFeedbackReflectionResult","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"f0da845bbdf49b30f6718a4b7ff012a0536deb98f65418583555dc90825797ca","declaration":"export type ChannelInboundDroppedHistoryOptions = ChannelTurnDroppedHistoryOptions;","entrypoint":"channel-inbound","exportName":"ChannelInboundDroppedHistoryOptions","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"359ec07a928d613ac5a9f96ded5561f4e3087fd1bf741e1f8e5e8a3b0fb30d29","declaration":"export type ChannelInboundEnvelopeInput = ChannelInboundEnvelopeInput;","entrypoint":"channel-inbound","exportName":"ChannelInboundEnvelopeInput","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"b909039017728e976e5ce869d4d153562a184b792ff6d208ee5eab13eee40c6c","declaration":"export type ChannelInboundEventRunnerParams<TRaw, TDispatchResult = DispatchFromConfigResult> = ChannelInboundEventRunnerParams<TRaw, TDispatchResult>;","entrypoint":"channel-inbound","exportName":"ChannelInboundEventRunnerParams","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"413bb9a5c066b3eee5e30d22d8d047d9c0fe05576551f1f992f07b95f6690b56","declaration":"export type ChannelInboundEventRunnerParams<TRaw, TDispatchResult = DispatchFromConfigResult> = ChannelInboundEventRunnerParams<TRaw, TDispatchResult>;","entrypoint":"channel-inbound","exportName":"ChannelInboundEventRunnerParams","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"fce252e3d1ade4690deb2b6368c79ebee42243d49dffca65670e2ee7a9883e89","declaration":"export type ChannelInboundMediaInput = ChannelInboundMediaInput;","entrypoint":"channel-inbound","exportName":"ChannelInboundMediaInput","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"1a0f5a78203bfe24fd1e02389bd2535fbb1937daad45a11058f6fe27641bc792","declaration":"export type ChannelInboundMediaPayload = ChannelInboundMediaPayload;","entrypoint":"channel-inbound","exportName":"ChannelInboundMediaPayload","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"5725f1ae1cf4ac225068feb9ba49057cc24fb99862d768a9cfffe5485d6f410c","declaration":"export type ChannelInboundSupplementalResolutionOptions = ChannelInboundSupplementalResolutionOptions;","entrypoint":"channel-inbound","exportName":"ChannelInboundSupplementalResolutionOptions","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"2d47a1f70361b132c10938e4129836e3a3659edb8710a530371708a39ab105b8","declaration":"export type ChannelInboundTurnPlan<TOwnership extends \"core\" | \"provider_message_sending\" = \"core\"> = ChannelInboundTurnPlan<TOwnership>;","entrypoint":"channel-inbound","exportName":"ChannelInboundTurnPlan","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"631adbdd141b50bb43f7147eaaf249fb00ecbfd83e9fff5aaf15cfb15821a1ff","declaration":"export type ChannelInboundTurnPlan<TOwnership extends \"core\" | \"provider_message_sending\" = \"core\"> = ChannelInboundTurnPlan<TOwnership>;","entrypoint":"channel-inbound","exportName":"ChannelInboundTurnPlan","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"a5d806d7e29220e98d1fa3ce08ce3ffb12f07d70d6b24b22a3ee4907ed3b1677","declaration":"export type ChannelPartialDeliveryError = ChannelPartialDeliveryError;","entrypoint":"channel-inbound","exportName":"ChannelPartialDeliveryError","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"f0da845bbdf49b30f6718a4b7ff012a0536deb98f65418583555dc90825797ca","declaration":"export type ChannelTurnDroppedHistoryOptions = ChannelTurnDroppedHistoryOptions;","entrypoint":"channel-inbound","exportName":"ChannelTurnDroppedHistoryOptions","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
{"closureHash":"fce252e3d1ade4690deb2b6368c79ebee42243d49dffca65670e2ee7a9883e89","declaration":"export type ChannelTurnMediaInput = ChannelInboundMediaInput;","entrypoint":"channel-inbound","exportName":"ChannelTurnMediaInput","importSpecifier":"openclaw/plugin-sdk/channel-inbound","kind":"type","recordType":"export"}
@@ -1008,16 +1008,16 @@
{"closureHash":"8b3e6ac673ead45e03d536a4e365b8acfe2184ebde7907244e98af33b36cc99b","declaration":"export type LogFn = LogFn;","entrypoint":"channel-logging","exportName":"LogFn","importSpecifier":"openclaw/plugin-sdk/channel-logging","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"channel-message","importSpecifier":"openclaw/plugin-sdk/channel-message","recordType":"module"}
{"closureHash":"cbc698a638ef9da9664ea97c5d772472e5a00c4b70f8bad7410248650ad15c0b","declaration":"export function bindIngressLifecycleToReplyOptions(lifecycle: ChannelIngressDispatchLifecycle): { turnAdoptionLifecycle: { admission: \"exclusive\"; onAdopted: () => void | Promise<void>; onDeferred: () => void; onAbandoned: () => void | Promise<void>; abortSignal: AbortSignal; }; };","entrypoint":"channel-message","exportName":"bindIngressLifecycleToReplyOptions","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"a5114e7a8616a7c7fb200dcfdac6514bf35d8588697105a91d87d2214bbc43f4","declaration":"export function buildChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-message","exportName":"buildChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"aeef6b8d581ff1e87780ad2a88c60ce458cbaa14ff36bf40ffde1459b37ef104","declaration":"export function buildChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-message","exportName":"buildChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"1529cd8c4498338811b4d3bc1d52f2e89a4d8eeae35db526f79ff7914d889fe2","declaration":"export function buildChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-message","exportName":"buildChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"3f938b19f99e8206c1c9be21620614d99dc5b642ac129de3b04999333ebd62bb","declaration":"export function buildChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-message","exportName":"buildChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"3ad861e20afa48e092e1600aea27e46e2d2f7de743a39743c4204239ee3975b8","declaration":"export function buildOutboundSessionContext(params: { cfg: OpenClawConfig; sessionKey?: string | null; policySessionKey?: string | null; conversationType?: string | null; isGroup?: boolean | null; agentId?: string | null; requesterAccountId?: string | null; requesterSenderId?: string | null; requesterSenderName?: string | null; requesterSenderUsername?: string | null; requesterSenderE164?: string | null; }): OutboundSessionContext | undefined;","entrypoint":"channel-message","exportName":"buildOutboundSessionContext","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"45470d4d0feced17992e9c4bb2b9fd198736a3a7bfc7a38229111e0f54fd2f6e","declaration":"export function createAccountStatusSink(params: { accountId: string; setStatus: (next: ChannelAccountSnapshot) => void; }): (patch: Omit<ChannelAccountSnapshot, \"accountId\">) => void;","entrypoint":"channel-message","exportName":"createAccountStatusSink","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"ed08ae6487be62f47b1b24aabf7b02006f0ef954dc92dd1f589353128eee95ba","declaration":"export function createChannelIngressDrain<TPayload, TMetadata = unknown, TCompletedMetadata = unknown>(options: CreateChannelIngressDrainOptions<TPayload, TMetadata, TCompletedMetadata>): ChannelIngressDrain;","entrypoint":"channel-message","exportName":"createChannelIngressDrain","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"2ee885cd4f5bd43dc0edc0bd8866bc2655e135dc229dcd08390ce24205a79e6a","declaration":"export function createChannelIngressError(name: string): ChannelIngressErrorClass<Error, [message: string, options?: ErrorOptions]>;\nexport function createChannelIngressError<TReason extends string>(name: string, options: { withReason: true; }): ChannelIngressErrorClass<Error & { readonly reason: TReason; }, [reason: TReason, message: string, errorOptions?: ErrorOptions]>;","entrypoint":"channel-message","exportName":"createChannelIngressError","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"1148ff7d1272453be5061ccbb1e4213c21701a4d034f7a09dc6539ac28c6122e","declaration":"export function createChannelIngressMonitor<TRaw, TBody, TStoredPayload, TMetadata = unknown>(options: CreateChannelIngressMonitorOptions<TRaw, TBody, TStoredPayload, TMetadata>): { admit: (raw: TRaw, admitOptions?: { receivedAt?: number; facts?: ChannelIngressMonitorFacts; }) => Promise<{ readonly kind: \"ignored\"; readonly queueResult?: undefined; } | { readonly kind: \"durable\"; readonly queueResult: { kind: \"failed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; failedAt: number; reason: string; message?: string; }; } | { kind: \"accepted\"; duplicate: false; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"pending\"; duplicate: true; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"claimed\"; duplicate: true; record: ChannelIngressQueueClaim<TStoredPayload, TMetadata>; } | { kind: \"completed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; completedAt: number; metadata?: unknown; }; }; }>; admitBatch: (rawEvents: readonly TRaw[], admitOptions?: { receivedAt?: number; }) => Promise<({ readonly kind: \"ignored\"; readonly queueResult?: undefined; } | { readonly kind: \"durable\"; readonly queueResult: { kind: \"failed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; failedAt: number; reason: string; message?: string; }; } | { kind: \"accepted\"; duplicate: false; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"pending\"; duplicate: true; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"claimed\"; duplicate: true; record: ChannelIngressQueueClaim<TStoredPayload, TMetadata>; } | { kind: \"completed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; completedAt: number; metadata?: unknown; }; }; })[]>; start: () => void; ensureQueueAvailable: () => void; requestDrain: () => void; pause: () => Promise<void>; stop: () => Promise<void>; waitForIdle: () => Promise<void>; waitForDeferredClaims: () => Promise<void>; waitForPumpIdle: () => Promise<void>; isRunning: () => boolean; isStopped: () => boolean; };","entrypoint":"channel-message","exportName":"createChannelIngressMonitor","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"c2da77bb4d055b4058a10dc5125a8ddbeec764cd700a47280599cfbe000bc7b2","declaration":"export function createChannelMessageAdapterFromOutbound<TConfig = unknown>(params: CreateChannelMessageAdapterFromOutboundParams<TConfig>): ChannelMessageAdapterShape<TConfig>;","entrypoint":"channel-message","exportName":"createChannelMessageAdapterFromOutbound","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"a66afb6e59691c75f1e5a773fc33bf13859385f6a984743dd0e1f18ad0ab4b05","declaration":"export function createChannelMessageReplyPipeline(params: CreateChannelReplyPipelineParams): ChannelReplyPipeline;","entrypoint":"channel-message","exportName":"createChannelMessageReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"3bbbf08a1e6aa4371dcfdc26ef035b32d03eb46ad1204285ca43d40e348695e4","declaration":"export function createChannelProgressDraftCompositor(params: { entry: StreamingCompatEntry | null | undefined; mode: ChannelProgressDraftMode; active: boolean; seed: string; update: (text: string, options?: ChannelProgressDraftUpdateOptions) => Promise<boolean | void> | boolean | void; deleteCurrent?: () => Promise<void> | void; tryNativeUpdate?: (text: string) => Promise<boolean> | boolean; updateOnLineChange?: boolean; rendersRollingLinesNatively?: boolean; formatLine?: (line: string) => string; isEmptyLine?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; shouldStartNow?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; reasoningLinePrefix?: string; commentaryLinePrefix?: string; reasoningGate?: boolean; commentaryItalics?: boolean; now?: () => number; setTimeoutFn?: typeof setTimeout; clearTimeoutFn?: typeof clearTimeout; buildProgressEventLine?: ChannelProgressDraftEventLineBuilder; }): { pushPlanProgress(steps?: AgentPlanStep[], options?: { explanation?: string; }): Promise<boolean>; pushPreambleHeadline(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushNarrationProgress(text?: string): Promise<boolean>; pushReasoningProgress(text?: string, options?: { snapshot?: boolean; }): Promise<boolean>; pushCommentaryProgress(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushToolEvent: (payload: { name?: string | undefined; args?: Record<string, unknown> | undefined; phase?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; } & { detailMode?: \"explain\" | \"raw\"; }) => Promise<boolean>; pushItemEvent: (payload: Omit<{ title?: string | undefined; meta?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; summary?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; progressText?: string | undefined; itemKind?: string | undefined; }, \"itemKind\"> & { kind?: string; }) => Promise<boolean>; pushApprovalEvent: (payload: { message?: string | undefined; title?: string | undefined; command?: string | undefined; reason?: string | undefined; phase?: string | undefined; }) => Promise<boolean>; pushCommandOutputEvent: (payload: { title?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; exitCode?: number | null | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; pushPatchEvent: (payload: { title?: string | undefined; name?: string | undefined; phase?: string | undefined; deleted?: string[] | undefined; added?: string[] | undefined; summary?: string | undefined; modified?: string[] | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; previewToolProgressEnabled: boolean; commentaryProgressEnabled: boolean; suppressDefaultToolProgressMessages: boolean; hasStarted: boolean; isVisible: boolean; hasStatusHeadline: boolean; hasPlanProgress: boolean; getSnapshot: () => ChannelProgressDraftCompositorSnapshot; markFinalReplyStarted(): void; markFinalReplyDelivered(): void; beginNewTurn(options?: { force?: boolean; }): boolean; reset(): void; resetReasoningProgress(): void; mergeReasoningProgress: (text?: string, options?: { snapshot?: boolean; }) => string; suppress(): void; cancel(): void; start(): Promise<void>; noteActivity(options?: { startImmediately?: boolean; }): Promise<boolean>; pushToolProgress: (line?: ChannelProgressDraftCompositorLine, options?: { toolName?: string; startImmediately?: boolean; }) => Promise<boolean>; };","entrypoint":"channel-message","exportName":"createChannelProgressDraftCompositor","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"aee1b9be43b42ac3b4c398fd9819d5ccc01b365e127d97535c07355557566d20","declaration":"export function createChannelMessageReplyPipeline(params: CreateChannelReplyPipelineParams): ChannelReplyPipeline;","entrypoint":"channel-message","exportName":"createChannelMessageReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"6de2ed474a548200548efc2c385a462fc045eabafc6280a69cc6b91e30718f77","declaration":"export function createChannelProgressDraftCompositor(params: { entry: StreamingCompatEntry | null | undefined; mode: ChannelProgressDraftMode; active: boolean; seed: string; update: (text: string, options?: ChannelProgressDraftUpdateOptions) => Promise<boolean | void> | boolean | void; deleteCurrent?: () => Promise<void> | void; tryNativeUpdate?: (text: string) => Promise<boolean> | boolean; updateOnLineChange?: boolean; rendersRollingLinesNatively?: boolean; formatLine?: (line: string) => string; isEmptyLine?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; shouldStartNow?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; reasoningLinePrefix?: string; commentaryLinePrefix?: string; reasoningGate?: boolean; commentaryItalics?: boolean; now?: () => number; setTimeoutFn?: typeof setTimeout; clearTimeoutFn?: typeof clearTimeout; buildProgressEventLine?: ChannelProgressDraftEventLineBuilder; }): { pushPlanProgress(steps?: AgentPlanStep[], options?: { explanation?: string; }): Promise<boolean>; pushPreambleHeadline(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushNarrationProgress(text?: string): Promise<boolean>; pushReasoningProgress(text?: string, options?: { snapshot?: boolean; }): Promise<boolean>; pushCommentaryProgress(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushToolEvent: (payload: { name?: string | undefined; args?: Record<string, unknown> | undefined; phase?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; } & { detailMode?: \"explain\" | \"raw\"; }) => Promise<boolean>; pushItemEvent: (payload: Omit<{ title?: string | undefined; meta?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; summary?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; progressText?: string | undefined; itemKind?: string | undefined; commandBearing?: boolean | undefined; }, \"itemKind\"> & { kind?: string; }) => Promise<boolean>; pushApprovalEvent: (payload: { message?: string | undefined; title?: string | undefined; command?: string | undefined; reason?: string | undefined; phase?: string | undefined; }) => Promise<boolean>; pushCommandOutputEvent: (payload: { title?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; exitCode?: number | null | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; pushPatchEvent: (payload: { title?: string | undefined; name?: string | undefined; phase?: string | undefined; deleted?: string[] | undefined; added?: string[] | undefined; summary?: string | undefined; modified?: string[] | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; previewToolProgressEnabled: boolean; commentaryProgressEnabled: boolean; suppressDefaultToolProgressMessages: boolean; hasStarted: boolean; isVisible: boolean; hasStatusHeadline: boolean; hasPlanProgress: boolean; getSnapshot: () => ChannelProgressDraftCompositorSnapshot; markFinalReplyStarted(): void; markFinalReplyDelivered(): void; beginNewTurn(options?: { force?: boolean; }): boolean; reset(): void; resetReasoningProgress(): void; mergeReasoningProgress: (text?: string, options?: { snapshot?: boolean; }) => string; suppress(): void; cancel(): void; start(): Promise<void>; noteActivity(options?: { startImmediately?: boolean; }): Promise<boolean>; pushToolProgress: (line?: ChannelProgressDraftCompositorLine, options?: { toolName?: string; startImmediately?: boolean; }) => Promise<boolean>; };","entrypoint":"channel-message","exportName":"createChannelProgressDraftCompositor","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"44c199920938c7a282e44d36eea187f1f8ce1d09bfb845180e1844124f497a3c","declaration":"export function createChannelProgressDraftGate(params: { onStart: () => void | Promise<void>; initialDelayMs?: number; onStartError?: (error: unknown) => void; setTimeoutFn?: typeof setTimeout; clearTimeoutFn?: typeof clearTimeout; }): { readonly hasStarted: boolean; readonly workEvents: number; noteWork(): Promise<boolean>; startNow(): Promise<void>; cancel(): void; reset(): void; };","entrypoint":"channel-message","exportName":"createChannelProgressDraftGate","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"2204efb262a5e8af61346bce23492dd759c15037ce3b8500148c5cc8dce1c421","declaration":"export function createChannelProgressReceiptTracker(params?: { now?: () => number; }): { noteReasoning(): void; closeReasoning: () => void; noteToolCall(toolName?: string): void; noteCommentary(itemId?: string, text?: string): void; reset: () => void; buildSummaryLine(): string; };","entrypoint":"channel-message","exportName":"createChannelProgressReceiptTracker","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"2209fd876893dd56da7cffda42967e79b6437d5230f70efd42b8171c2ba32611","declaration":"export function createChannelRunQueue(params: ChannelRunQueueParams): ChannelRunQueue;","entrypoint":"channel-message","exportName":"createChannelRunQueue","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
@@ -1027,10 +1027,10 @@
{"closureHash":"acd64a0d6ce6dbd9db22f9e4a4497cef2110a9e962f240c6f5e90cef31505459","declaration":"export function createFinalizableDraftStreamControlsForState<T = string>(params: { throttleMs: number; state: FinalizableDraftStreamState; sendOrEditStreamMessage: (value: T) => Promise<void | boolean>; emptyValue?: T; isEmpty?: (value: T) => boolean; }): { loop: DraftStreamLoop<T> & { takePending: () => T; }; update: (value: T) => void; stop: () => Promise<void>; seal: () => Promise<void>; discardPending: () => Promise<void>; stopForClear: () => Promise<void>; };","entrypoint":"channel-message","exportName":"createFinalizableDraftStreamControlsForState","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"f2bb1868ec1cf7d97e6b8eb0a9a8a37122ec53c9cd4e2bbfc8448c1555f3d382","declaration":"export function createMessageReceiptFromOutboundResults(params: { results: readonly MessageReceiptInputResult[]; kind?: MessageReceiptPartKind; threadId?: string; replyToId?: string; sentAt?: number; }): MessageReceipt;","entrypoint":"channel-message","exportName":"createMessageReceiptFromOutboundResults","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"3c150fb027a4e4a1685b572d26aa1f70b3838641bd7629434c4265bfda549d0a","declaration":"export function createMessageReceiveContext<TMessage>(params: { id: string; channel: string; accountId?: string; message: TMessage; ackPolicy?: MessageAckPolicy; receivedAt?: number; signal?: AbortSignal; onAck?: () => Promise<void> | void; onNack?: (error: unknown) => Promise<void> | void; }): MessageReceiveContext<TMessage>;","entrypoint":"channel-message","exportName":"createMessageReceiveContext","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"0077f2695f161c9c879b3f676ac6598e8add0af66bdc36ee33ee69a09fab70ba","declaration":"export function createOutboundPayloadPlan(payloads: readonly ReplyPayload[], context?: OutboundPayloadPlanContext): OutboundPayloadPlan[];","entrypoint":"channel-message","exportName":"createOutboundPayloadPlan","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"5130c4460ed27cc1137c888e58c09dec0be06241bce0dbc230284efac7d08284","declaration":"export function createOutboundPayloadPlan(payloads: readonly ReplyPayload[], context?: OutboundPayloadPlanContext): OutboundPayloadPlan[];","entrypoint":"channel-message","exportName":"createOutboundPayloadPlan","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"7abc004852a9162c3f4241d6c80b9962c9732dd03d2d38a56e4080a4e92758a1","declaration":"export function createPreviewMessageReceipt(params: { id: unknown; threadId?: string; replyToId?: string; sentAt?: number; raw?: unknown; }): MessageReceipt;","entrypoint":"channel-message","exportName":"createPreviewMessageReceipt","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"5bc1d0180c6325ad014aa58a9810aaab97994ead19dcff59df1d1cefe1444ed8","declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixContextBundle;","entrypoint":"channel-message","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"e264e9ecf7fe1bab36ba506d03b4654a099a0b3db7b706b5ddcf953427516707","declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixOptions;","entrypoint":"channel-message","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"f5e0146088171cb3d54ff40d309ad33782c545405db40ddf4415ef080cc18033","declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixContextBundle;","entrypoint":"channel-message","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"5ce1bcf4ed49156404455d981ad4ed663423b1ce1c747936ba53325b84943d72","declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixOptions;","entrypoint":"channel-message","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"74fc19137203a84902b6a7cdaa10db8db714e6aed701e61d398d9edc1bbf2592","declaration":"export function createReplyToFanout(params: { replyToId?: string | null; replyToMode?: ReplyToMode; replyToIdSource?: ReplyToResolution[\"source\"]; }): () => string | undefined;","entrypoint":"channel-message","exportName":"createReplyToFanout","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"d934828dfca3782d302de428edb678320bafaaf43732a885df3a78c9775e49c6","declaration":"export function createRuntimeOutboundDelegates<Runtime>(params: { getRuntime: () => MaybePromise<Runtime>; renderPresentation?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"renderPresentation\"] | null | undefined; unavailableMessage?: string; }; sendPayload?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendPayload\"] | null | undefined; unavailableMessage?: string; }; sendText?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendText\"] | null | undefined; unavailableMessage?: string; }; sendMedia?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendMedia\"] | null | undefined; unavailableMessage?: string; }; sendPoll?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendPoll\"] | null | undefined; unavailableMessage?: string; }; }): Pick<ChannelOutboundAdapter, OutboundMethod>;","entrypoint":"channel-message","exportName":"createRuntimeOutboundDelegates","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"1c08a759db76abcefee8ee1bab6313a396d321f42a105176b5705bef8ffa94ad","declaration":"export function createTypingCallbacks(params: CreateTypingCallbacksParams): TypingCallbacks;","entrypoint":"channel-message","exportName":"createTypingCallbacks","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
@@ -1039,9 +1039,9 @@
{"closureHash":"7e63fe1abf08995573bb768b68c670ec952a1782e00c3721a625fac283e980cb","declaration":"export function defineFinalizableLivePreviewAdapter<TPayload, TId, TEdit>(adapter: FinalizableLivePreviewAdapter<TPayload, TId, TEdit>): FinalizableLivePreviewAdapter<TPayload, TId, TEdit>;","entrypoint":"channel-message","exportName":"defineFinalizableLivePreviewAdapter","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"f74a47c1667d189ed96c702b3c5307f64306a232b65b9807f43bbd756e819322","declaration":"export function deliverWithFinalizableLivePreviewAdapter<TPayload, TId, TEdit>(params: { kind: \"tool\" | \"block\" | \"final\"; payload: TPayload; liveState?: LiveMessageState<TPayload>; adapter?: FinalizableLivePreviewAdapter<TPayload, TId, TEdit>; deliverNormally: (payload: TPayload) => Promise<boolean | void>; onNormalDelivered?: () => Promise<void> | void; }): Promise<LivePreviewFinalizerResult<TPayload>>;","entrypoint":"channel-message","exportName":"deliverWithFinalizableLivePreviewAdapter","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"d1e255cca4dee40f6f6536738809b7616b492da325a439111e0b832546f4734d","declaration":"export function deriveDurableFinalDeliveryRequirements(params: DeriveDurableFinalDeliveryRequirementsParams): DurableFinalDeliveryRequirementMap;","entrypoint":"channel-message","exportName":"deriveDurableFinalDeliveryRequirements","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"4181ce4435cd74d55cde1a2f81498084856202c1c6fddee8148654a1c86fa6ff","declaration":"export function formatChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-message","exportName":"formatChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"b567c796ddd84b4a95788291ffd3673ffd4762932a6186529c304cb084b34f42","declaration":"export function formatChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-message","exportName":"formatChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"ee056fe27cb960789fbf068f28b71def2a6d16ca495803733457755eecdb994d","declaration":"export function formatChannelProgressDraftText(params: { entry?: StreamingCompatEntry | null; lines: Array<string | ChannelProgressDraftLine>; seed?: string; random?: () => number; formatLine?: (line: string) => string; bullet?: string; narration?: string; plan?: readonly AgentPlanStep[]; }): string;","entrypoint":"channel-message","exportName":"formatChannelProgressDraftText","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"fe3b2cc123400a9b7dfb51f69aa0ddc88675b983e772852cb7d902a528dcd055","declaration":"export function formatChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-message","exportName":"formatChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"df25d6ffb817eb32f8b4b670057c2c5e4d42512f416f99351e2345a09371226d","declaration":"export function formatChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-message","exportName":"formatChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"ad582c3d988c6ba71760e6ccf10f896c98034a70ed5bed6924087b898de61d3e","declaration":"export function formatChannelProgressDraftText(params: { entry?: StreamingCompatEntry | null; lines: Array<string | ChannelProgressDraftLine>; seed?: string; random?: () => number; formatLine?: (line: string) => string; bullet?: string; narration?: string; plan?: readonly AgentPlanStep[]; }): string;","entrypoint":"channel-message","exportName":"formatChannelProgressDraftText","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"d54d2cfdcb9d85947f0ce5380faa272a982ab558b483cd2cd67a4cd4ced16fbb","declaration":"export function formatPlanChecklistLines(steps: readonly AgentPlanStep[], options: { maxLines: number; maxLineChars: number; }): string[];","entrypoint":"channel-message","exportName":"formatPlanChecklistLines","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"72ef52a7a184703e0ac9fec319b40f650c6ffc488153ebc1ff2d4c5ef0d2fe63","declaration":"export function getChannelStreamingConfigObject(entry: StreamingCompatEntry | null | undefined): ChannelStreamingConfig | undefined;","entrypoint":"channel-message","exportName":"getChannelStreamingConfigObject","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"8a142089acc4d9428ed552977f90f17b2283c109cd1c66b91b51b3653d455eea","declaration":"export function hasFinalChannelTurnDispatch(result: ChannelTurnDispatchResultLike, signals?: Pick<ChannelTurnVisibleDeliverySignals, \"fallbackDelivered\" | \"deliverySummaryDelivered\">): boolean;","entrypoint":"channel-message","exportName":"hasFinalChannelTurnDispatch","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
@@ -1052,11 +1052,11 @@
{"closureHash":"76834dcabb16e8bf079074313b0883d7fccd003117cb630f5c1ea8eef0bd7b62","declaration":"export function keepHttpServerTaskAlive(params: { server: CloseAwareServer; abortSignal?: AbortSignal; onAbort?: () => void | Promise<void>; }): Promise<void>;","entrypoint":"channel-message","exportName":"keepHttpServerTaskAlive","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"5b3cd54bde62dfe24a8f940c26459db2f10b2569f638224ca73d41c79c9315bf","declaration":"export function listMessageReceiptPlatformIds(receipt: MessageReceipt): string[];","entrypoint":"channel-message","exportName":"listMessageReceiptPlatformIds","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"447bed40e4b999ca05c2a5e517c9f3081c127ed9e5f16db058135fecacbdff7d","declaration":"export function logTypingFailure(params: { log: LogFn; channel: string; target?: string; action?: \"start\" | \"stop\"; error: unknown; }): void;","entrypoint":"channel-message","exportName":"logTypingFailure","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"6afbf0355ecf5eb0ba8f89322eb73b19cce9dd021bfff3ca1ab1d018154e7680","declaration":"export function mergeChannelProgressDraftLine<TLine extends string | ChannelProgressDraftLine>(lines: TLine[], line: TLine, params: { maxLines: number; }): TLine[];","entrypoint":"channel-message","exportName":"mergeChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"63de02df0263b3534b1c84a1e45aad5201c859d04c49dcbe9cbe64131f9704be","declaration":"export function mergeChannelProgressDraftLine<TLine extends string | ChannelProgressDraftLine>(lines: TLine[], line: TLine, params: { maxLines: number; }): TLine[];","entrypoint":"channel-message","exportName":"mergeChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"844a3251dcba84a9735c855d7b6c930570cc486f3a1c5fc49b541572d52bb7d7","declaration":"export function normalizeAgentPlanSteps(value: unknown): AgentPlanStep[] | undefined;","entrypoint":"channel-message","exportName":"normalizeAgentPlanSteps","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"2458fcb3c1632a3d75c6ed4225937a65323729dc25fc000c643ecf8dbea743bf","declaration":"export function normalizeChannelProgressDraftLineIdentity(line: string | ChannelProgressDraftLine | undefined): string;","entrypoint":"channel-message","exportName":"normalizeChannelProgressDraftLineIdentity","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"b19d38e15e2054e826fd132198c606165fc369fb5a96f4e6bbbf7b89bee35ac2","declaration":"export function normalizeChannelProgressDraftLineIdentity(line: string | ChannelProgressDraftLine | undefined): string;","entrypoint":"channel-message","exportName":"normalizeChannelProgressDraftLineIdentity","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"ba2389600eeea10867e3891e411bd84e8fd07dcd410249c29ca92ba59ef27bad","declaration":"export function processPidFromOwnerId(ownerId: string): number;","entrypoint":"channel-message","exportName":"processPidFromOwnerId","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"03552b213fb7043a408c7a78722ad9786022e19ffea1c70e0166a59b2c3dead4","declaration":"export function projectOutboundPayloadPlanForDelivery(plan: readonly OutboundPayloadPlan[]): ReplyPayload[];","entrypoint":"channel-message","exportName":"projectOutboundPayloadPlanForDelivery","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"5c3fd4b52f1e8d9c676ae83e438156943823fb03a5d0ebf4692c58df8d8fcfc3","declaration":"export function projectOutboundPayloadPlanForDelivery(plan: readonly OutboundPayloadPlan[]): ReplyPayload[];","entrypoint":"channel-message","exportName":"projectOutboundPayloadPlanForDelivery","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"bc16377d8f9c3467da5115ff2d6b3ef0423980794a0f5af287b1f1e8ee9533ef","declaration":"export function recordOutboundMessageIdentity(identity: OutboundMessageIdentity): void;","entrypoint":"channel-message","exportName":"recordOutboundMessageIdentity","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"3090faaaca1e2c970a0eadbb7792c531a053746df6df83a082d8564a8313b401","declaration":"export function resolveAgentOutboundIdentity(cfg: OpenClawConfig, agentId: string): OutboundIdentity | undefined;","entrypoint":"channel-message","exportName":"resolveAgentOutboundIdentity","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
{"closureHash":"ba763bf7ff1dee852fb9b58f5995f9df744028d47ca29f687b215ba316c66723","declaration":"export function resolveChannelDraftStreamingChunking(cfg: OpenClawConfig | undefined, channelId: ChannelId, accountId: string | null | undefined, opts: { fallbackLimit: number; }): ChannelDraftStreamingChunking;","entrypoint":"channel-message","exportName":"resolveChannelDraftStreamingChunking","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"function","recordType":"export"}
@@ -1096,7 +1096,7 @@
{"closureHash":"9555a73ba2717bba0bf94888017be4cecef2c51cc3887ed34f8d8ef3c79d6abf","declaration":"export const DEFAULT_INGRESS_RETRY_DEAD_LETTER_MIN_AGE_MS: number;","entrypoint":"channel-message","exportName":"DEFAULT_INGRESS_RETRY_DEAD_LETTER_MIN_AGE_MS","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"const","recordType":"export"}
{"closureHash":"3a2df3ab656149630c004d2d9f71b8ceda99aa81eb6b72b0cc7b3982ed0ce044","declaration":"export const DEFAULT_INGRESS_RETRY_MAX_ATTEMPTS: 8;","entrypoint":"channel-message","exportName":"DEFAULT_INGRESS_RETRY_MAX_ATTEMPTS","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"const","recordType":"export"}
{"closureHash":"38c735a14c65067aa7825390d1c5c8876c651d0603e84980dfaf947f5235747a","declaration":"export const INGRESS_CLAIM_PROCESS_ID: string;","entrypoint":"channel-message","exportName":"INGRESS_CLAIM_PROCESS_ID","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"const","recordType":"export"}
{"closureHash":"2887dec3a9c4ee96e2d46f8dd7a18894b8e3179f45c2bf634343df93012a55b4","declaration":"export const deliverInboundReplyWithMessageSendContext: (params: DurableInboundReplyDeliveryParams) => Promise<{ status: \"not_applicable\"; reason: \"non_final\";} | { status: \"unsupported\"; reason: \"missing_channel\" | \"missing_target\" | \"missing_outbound_handler\" | \"capability_mismatch\"; capability?: DurableFinalDeliveryRequirement;} | { status: \"handled_visible\"; delivery: ChannelDeliveryResult;} | { status: \"handled_no_send\"; reason: \"no_visible_result\"; delivery: ChannelDeliveryResult;} | { status: \"failed\"; error: unknown; sentBeforeError?: true;}>;","entrypoint":"channel-message","exportName":"deliverInboundReplyWithMessageSendContext","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"const","recordType":"export"}
{"closureHash":"879bf9f1b156e597b1138ee3576f48860b0cb572294aaed088ea2cf0bacfe021","declaration":"export const deliverInboundReplyWithMessageSendContext: (params: DurableInboundReplyDeliveryParams) => Promise<{ status: \"not_applicable\"; reason: \"non_final\";} | { status: \"unsupported\"; reason: \"missing_channel\" | \"missing_target\" | \"missing_outbound_handler\" | \"capability_mismatch\"; capability?: DurableFinalDeliveryRequirement;} | { status: \"handled_visible\"; delivery: ChannelDeliveryResult;} | { status: \"handled_no_send\"; reason: \"no_visible_result\"; delivery: ChannelDeliveryResult;} | { status: \"failed\"; error: unknown; sentBeforeError?: true;}>;","entrypoint":"channel-message","exportName":"deliverInboundReplyWithMessageSendContext","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"const","recordType":"export"}
{"closureHash":"2c52eff200a5b9bd2d93ee72209c2626bbe165f59b538591db661b94773023b0","declaration":"export type AgentPlanStep = AgentPlanStep;","entrypoint":"channel-message","exportName":"AgentPlanStep","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"1e8bcb2c8d8f5327f5b81b8c217f722f090dccba21ba3943324010f4f80a5a50","declaration":"export type AgentPlanStepStatus = AgentPlanStepStatus;","entrypoint":"channel-message","exportName":"AgentPlanStepStatus","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"b036fc26e5330dfd7da1af8839bb3c23e85283b9e16e252a659dd4bb0c35cd5e","declaration":"export type ChannelDeliveryStreamingConfig = ChannelDeliveryStreamingConfig;","entrypoint":"channel-message","exportName":"ChannelDeliveryStreamingConfig","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
@@ -1118,9 +1118,9 @@
{"closureHash":"f55e61d3efa488a6ddf6dcceebef7259df98883ecfc5fda904b09754f199ee1a","declaration":"export type ChannelMessageUnknownSendContext<TConfig = OpenClawConfig> = ChannelMessageUnknownSendContext<TConfig>;","entrypoint":"channel-message","exportName":"ChannelMessageUnknownSendContext","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"e3bde4b77d2c764a8d8236b5739523240f594f484825ac9ea4205cacdb100960","declaration":"export type ChannelMessageUnknownSendReconciliationResult = ChannelMessageUnknownSendReconciliationResult;","entrypoint":"channel-message","exportName":"ChannelMessageUnknownSendReconciliationResult","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"67f3a704195e12f66ff1b8633639dc4de4af9769891b13e7ba7a575ca1efcdc6","declaration":"export type ChannelPreviewStreamingConfig = ChannelPreviewStreamingConfig;","entrypoint":"channel-message","exportName":"ChannelPreviewStreamingConfig","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"70fac0ae1a73d61c1cc6ed001c7cae94ccafcf7547e6c53f833c87566a6f8d88","declaration":"export type ChannelProgressDraftCompositorLine = ChannelProgressDraftCompositorLine;","entrypoint":"channel-message","exportName":"ChannelProgressDraftCompositorLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"39e6a4ced74b0ecb12a41e703947469ba72d0dbcc4686dce968ccb541d0e71a5","declaration":"export type ChannelProgressDraftCompositorSnapshot = Readonly<{ lines: readonly ChannelProgressDraftCompositorLine[]; statusHeadline?: string; plan?: readonly AgentPlanStep[]; planExplanation?: string;}>;","entrypoint":"channel-message","exportName":"ChannelProgressDraftCompositorSnapshot","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"7a6eeb19346d69b173c5206d5f07414d44d551f38a285d06660a418f3905abd1","declaration":"export type ChannelProgressDraftLine = ChannelProgressDraftLine;","entrypoint":"channel-message","exportName":"ChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"0e770e84db0236d956e70398054333f16395d5522bebbb7122d65ade2f64e44a","declaration":"export type ChannelProgressDraftCompositorLine = ChannelProgressDraftCompositorLine;","entrypoint":"channel-message","exportName":"ChannelProgressDraftCompositorLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"b7c76761bd56e44d2ae0e3c54f8880a1ae4897c2c1b28bc5704367f841c18b06","declaration":"export type ChannelProgressDraftCompositorSnapshot = Readonly<{ lines: readonly ChannelProgressDraftCompositorLine[]; statusHeadline?: string; plan?: readonly AgentPlanStep[]; planExplanation?: string;}>;","entrypoint":"channel-message","exportName":"ChannelProgressDraftCompositorSnapshot","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"a9ec1f82184ba85d82bfdb8b4ebb8b8280e6dd0c63f08a61e55e92c6df005fcc","declaration":"export type ChannelProgressDraftLine = ChannelProgressDraftLine;","entrypoint":"channel-message","exportName":"ChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"de6224d5ef3d05e9e25fadc96c00f75c3df158ef94345e7c9f102b7234926fb7","declaration":"export type ChannelStreamingBlockConfig = ChannelStreamingBlockConfig;","entrypoint":"channel-message","exportName":"ChannelStreamingBlockConfig","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"c3269be226828d9e407cadb848af626a7a01949ce921c44494542eb676217d67","declaration":"export type ChannelStreamingProgressConfig = ChannelStreamingProgressConfig;","entrypoint":"channel-message","exportName":"ChannelStreamingProgressConfig","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"closureHash":"fc7e4c04e9bb74b8ab367534651361c243c839d563677621540793eed89c61bf","declaration":"export type DurableMessageBatchSendResult = DurableMessageBatchSendResult;","entrypoint":"channel-message","exportName":"DurableMessageBatchSendResult","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
@@ -1140,16 +1140,16 @@
{"closureHash":"424d0b4b21b078d07a49a7bc52c3b63250be032a3e17f47c0cc824178b828ded","declaration":"export type TextChunkMode = TextChunkMode;","entrypoint":"channel-message","exportName":"TextChunkMode","importSpecifier":"openclaw/plugin-sdk/channel-message","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"channel-outbound","importSpecifier":"openclaw/plugin-sdk/channel-outbound","recordType":"module"}
{"closureHash":"cbc698a638ef9da9664ea97c5d772472e5a00c4b70f8bad7410248650ad15c0b","declaration":"export function bindIngressLifecycleToReplyOptions(lifecycle: ChannelIngressDispatchLifecycle): { turnAdoptionLifecycle: { admission: \"exclusive\"; onAdopted: () => void | Promise<void>; onDeferred: () => void; onAbandoned: () => void | Promise<void>; abortSignal: AbortSignal; }; };","entrypoint":"channel-outbound","exportName":"bindIngressLifecycleToReplyOptions","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"a5114e7a8616a7c7fb200dcfdac6514bf35d8588697105a91d87d2214bbc43f4","declaration":"export function buildChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-outbound","exportName":"buildChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"aeef6b8d581ff1e87780ad2a88c60ce458cbaa14ff36bf40ffde1459b37ef104","declaration":"export function buildChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-outbound","exportName":"buildChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"1529cd8c4498338811b4d3bc1d52f2e89a4d8eeae35db526f79ff7914d889fe2","declaration":"export function buildChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-outbound","exportName":"buildChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"3f938b19f99e8206c1c9be21620614d99dc5b642ac129de3b04999333ebd62bb","declaration":"export function buildChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-outbound","exportName":"buildChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"3ad861e20afa48e092e1600aea27e46e2d2f7de743a39743c4204239ee3975b8","declaration":"export function buildOutboundSessionContext(params: { cfg: OpenClawConfig; sessionKey?: string | null; policySessionKey?: string | null; conversationType?: string | null; isGroup?: boolean | null; agentId?: string | null; requesterAccountId?: string | null; requesterSenderId?: string | null; requesterSenderName?: string | null; requesterSenderUsername?: string | null; requesterSenderE164?: string | null; }): OutboundSessionContext | undefined;","entrypoint":"channel-outbound","exportName":"buildOutboundSessionContext","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"45470d4d0feced17992e9c4bb2b9fd198736a3a7bfc7a38229111e0f54fd2f6e","declaration":"export function createAccountStatusSink(params: { accountId: string; setStatus: (next: ChannelAccountSnapshot) => void; }): (patch: Omit<ChannelAccountSnapshot, \"accountId\">) => void;","entrypoint":"channel-outbound","exportName":"createAccountStatusSink","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"ed08ae6487be62f47b1b24aabf7b02006f0ef954dc92dd1f589353128eee95ba","declaration":"export function createChannelIngressDrain<TPayload, TMetadata = unknown, TCompletedMetadata = unknown>(options: CreateChannelIngressDrainOptions<TPayload, TMetadata, TCompletedMetadata>): ChannelIngressDrain;","entrypoint":"channel-outbound","exportName":"createChannelIngressDrain","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"2ee885cd4f5bd43dc0edc0bd8866bc2655e135dc229dcd08390ce24205a79e6a","declaration":"export function createChannelIngressError(name: string): ChannelIngressErrorClass<Error, [message: string, options?: ErrorOptions]>;\nexport function createChannelIngressError<TReason extends string>(name: string, options: { withReason: true; }): ChannelIngressErrorClass<Error & { readonly reason: TReason; }, [reason: TReason, message: string, errorOptions?: ErrorOptions]>;","entrypoint":"channel-outbound","exportName":"createChannelIngressError","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"1148ff7d1272453be5061ccbb1e4213c21701a4d034f7a09dc6539ac28c6122e","declaration":"export function createChannelIngressMonitor<TRaw, TBody, TStoredPayload, TMetadata = unknown>(options: CreateChannelIngressMonitorOptions<TRaw, TBody, TStoredPayload, TMetadata>): { admit: (raw: TRaw, admitOptions?: { receivedAt?: number; facts?: ChannelIngressMonitorFacts; }) => Promise<{ readonly kind: \"ignored\"; readonly queueResult?: undefined; } | { readonly kind: \"durable\"; readonly queueResult: { kind: \"failed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; failedAt: number; reason: string; message?: string; }; } | { kind: \"accepted\"; duplicate: false; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"pending\"; duplicate: true; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"claimed\"; duplicate: true; record: ChannelIngressQueueClaim<TStoredPayload, TMetadata>; } | { kind: \"completed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; completedAt: number; metadata?: unknown; }; }; }>; admitBatch: (rawEvents: readonly TRaw[], admitOptions?: { receivedAt?: number; }) => Promise<({ readonly kind: \"ignored\"; readonly queueResult?: undefined; } | { readonly kind: \"durable\"; readonly queueResult: { kind: \"failed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; failedAt: number; reason: string; message?: string; }; } | { kind: \"accepted\"; duplicate: false; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"pending\"; duplicate: true; record: ChannelIngressQueueRecord<TStoredPayload, TMetadata>; } | { kind: \"claimed\"; duplicate: true; record: ChannelIngressQueueClaim<TStoredPayload, TMetadata>; } | { kind: \"completed\"; duplicate: true; record: { id: string; channelId: string; accountId: string; queueName: string; completedAt: number; metadata?: unknown; }; }; })[]>; start: () => void; ensureQueueAvailable: () => void; requestDrain: () => void; pause: () => Promise<void>; stop: () => Promise<void>; waitForIdle: () => Promise<void>; waitForDeferredClaims: () => Promise<void>; waitForPumpIdle: () => Promise<void>; isRunning: () => boolean; isStopped: () => boolean; };","entrypoint":"channel-outbound","exportName":"createChannelIngressMonitor","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"c2da77bb4d055b4058a10dc5125a8ddbeec764cd700a47280599cfbe000bc7b2","declaration":"export function createChannelMessageAdapterFromOutbound<TConfig = unknown>(params: CreateChannelMessageAdapterFromOutboundParams<TConfig>): ChannelMessageAdapterShape<TConfig>;","entrypoint":"channel-outbound","exportName":"createChannelMessageAdapterFromOutbound","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"a66afb6e59691c75f1e5a773fc33bf13859385f6a984743dd0e1f18ad0ab4b05","declaration":"export function createChannelMessageReplyPipeline(params: CreateChannelReplyPipelineParams): ChannelReplyPipeline;","entrypoint":"channel-outbound","exportName":"createChannelMessageReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"3bbbf08a1e6aa4371dcfdc26ef035b32d03eb46ad1204285ca43d40e348695e4","declaration":"export function createChannelProgressDraftCompositor(params: { entry: StreamingCompatEntry | null | undefined; mode: ChannelProgressDraftMode; active: boolean; seed: string; update: (text: string, options?: ChannelProgressDraftUpdateOptions) => Promise<boolean | void> | boolean | void; deleteCurrent?: () => Promise<void> | void; tryNativeUpdate?: (text: string) => Promise<boolean> | boolean; updateOnLineChange?: boolean; rendersRollingLinesNatively?: boolean; formatLine?: (line: string) => string; isEmptyLine?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; shouldStartNow?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; reasoningLinePrefix?: string; commentaryLinePrefix?: string; reasoningGate?: boolean; commentaryItalics?: boolean; now?: () => number; setTimeoutFn?: typeof setTimeout; clearTimeoutFn?: typeof clearTimeout; buildProgressEventLine?: ChannelProgressDraftEventLineBuilder; }): { pushPlanProgress(steps?: AgentPlanStep[], options?: { explanation?: string; }): Promise<boolean>; pushPreambleHeadline(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushNarrationProgress(text?: string): Promise<boolean>; pushReasoningProgress(text?: string, options?: { snapshot?: boolean; }): Promise<boolean>; pushCommentaryProgress(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushToolEvent: (payload: { name?: string | undefined; args?: Record<string, unknown> | undefined; phase?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; } & { detailMode?: \"explain\" | \"raw\"; }) => Promise<boolean>; pushItemEvent: (payload: Omit<{ title?: string | undefined; meta?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; summary?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; progressText?: string | undefined; itemKind?: string | undefined; }, \"itemKind\"> & { kind?: string; }) => Promise<boolean>; pushApprovalEvent: (payload: { message?: string | undefined; title?: string | undefined; command?: string | undefined; reason?: string | undefined; phase?: string | undefined; }) => Promise<boolean>; pushCommandOutputEvent: (payload: { title?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; exitCode?: number | null | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; pushPatchEvent: (payload: { title?: string | undefined; name?: string | undefined; phase?: string | undefined; deleted?: string[] | undefined; added?: string[] | undefined; summary?: string | undefined; modified?: string[] | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; previewToolProgressEnabled: boolean; commentaryProgressEnabled: boolean; suppressDefaultToolProgressMessages: boolean; hasStarted: boolean; isVisible: boolean; hasStatusHeadline: boolean; hasPlanProgress: boolean; getSnapshot: () => ChannelProgressDraftCompositorSnapshot; markFinalReplyStarted(): void; markFinalReplyDelivered(): void; beginNewTurn(options?: { force?: boolean; }): boolean; reset(): void; resetReasoningProgress(): void; mergeReasoningProgress: (text?: string, options?: { snapshot?: boolean; }) => string; suppress(): void; cancel(): void; start(): Promise<void>; noteActivity(options?: { startImmediately?: boolean; }): Promise<boolean>; pushToolProgress: (line?: ChannelProgressDraftCompositorLine, options?: { toolName?: string; startImmediately?: boolean; }) => Promise<boolean>; };","entrypoint":"channel-outbound","exportName":"createChannelProgressDraftCompositor","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"aee1b9be43b42ac3b4c398fd9819d5ccc01b365e127d97535c07355557566d20","declaration":"export function createChannelMessageReplyPipeline(params: CreateChannelReplyPipelineParams): ChannelReplyPipeline;","entrypoint":"channel-outbound","exportName":"createChannelMessageReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"6de2ed474a548200548efc2c385a462fc045eabafc6280a69cc6b91e30718f77","declaration":"export function createChannelProgressDraftCompositor(params: { entry: StreamingCompatEntry | null | undefined; mode: ChannelProgressDraftMode; active: boolean; seed: string; update: (text: string, options?: ChannelProgressDraftUpdateOptions) => Promise<boolean | void> | boolean | void; deleteCurrent?: () => Promise<void> | void; tryNativeUpdate?: (text: string) => Promise<boolean> | boolean; updateOnLineChange?: boolean; rendersRollingLinesNatively?: boolean; formatLine?: (line: string) => string; isEmptyLine?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; shouldStartNow?: (line: ChannelProgressDraftCompositorLine | undefined) => boolean; reasoningLinePrefix?: string; commentaryLinePrefix?: string; reasoningGate?: boolean; commentaryItalics?: boolean; now?: () => number; setTimeoutFn?: typeof setTimeout; clearTimeoutFn?: typeof clearTimeout; buildProgressEventLine?: ChannelProgressDraftEventLineBuilder; }): { pushPlanProgress(steps?: AgentPlanStep[], options?: { explanation?: string; }): Promise<boolean>; pushPreambleHeadline(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushNarrationProgress(text?: string): Promise<boolean>; pushReasoningProgress(text?: string, options?: { snapshot?: boolean; }): Promise<boolean>; pushCommentaryProgress(text?: string, options?: { itemId?: string; }): Promise<boolean>; pushToolEvent: (payload: { name?: string | undefined; args?: Record<string, unknown> | undefined; phase?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; } & { detailMode?: \"explain\" | \"raw\"; }) => Promise<boolean>; pushItemEvent: (payload: Omit<{ title?: string | undefined; meta?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; summary?: string | undefined; toolCallId?: string | undefined; itemId?: string | undefined; progressText?: string | undefined; itemKind?: string | undefined; commandBearing?: boolean | undefined; }, \"itemKind\"> & { kind?: string; }) => Promise<boolean>; pushApprovalEvent: (payload: { message?: string | undefined; title?: string | undefined; command?: string | undefined; reason?: string | undefined; phase?: string | undefined; }) => Promise<boolean>; pushCommandOutputEvent: (payload: { title?: string | undefined; status?: string | undefined; name?: string | undefined; phase?: string | undefined; exitCode?: number | null | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; pushPatchEvent: (payload: { title?: string | undefined; name?: string | undefined; phase?: string | undefined; deleted?: string[] | undefined; added?: string[] | undefined; summary?: string | undefined; modified?: string[] | undefined; toolCallId?: string | undefined; itemId?: string | undefined; }) => Promise<boolean>; previewToolProgressEnabled: boolean; commentaryProgressEnabled: boolean; suppressDefaultToolProgressMessages: boolean; hasStarted: boolean; isVisible: boolean; hasStatusHeadline: boolean; hasPlanProgress: boolean; getSnapshot: () => ChannelProgressDraftCompositorSnapshot; markFinalReplyStarted(): void; markFinalReplyDelivered(): void; beginNewTurn(options?: { force?: boolean; }): boolean; reset(): void; resetReasoningProgress(): void; mergeReasoningProgress: (text?: string, options?: { snapshot?: boolean; }) => string; suppress(): void; cancel(): void; start(): Promise<void>; noteActivity(options?: { startImmediately?: boolean; }): Promise<boolean>; pushToolProgress: (line?: ChannelProgressDraftCompositorLine, options?: { toolName?: string; startImmediately?: boolean; }) => Promise<boolean>; };","entrypoint":"channel-outbound","exportName":"createChannelProgressDraftCompositor","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"44c199920938c7a282e44d36eea187f1f8ce1d09bfb845180e1844124f497a3c","declaration":"export function createChannelProgressDraftGate(params: { onStart: () => void | Promise<void>; initialDelayMs?: number; onStartError?: (error: unknown) => void; setTimeoutFn?: typeof setTimeout; clearTimeoutFn?: typeof clearTimeout; }): { readonly hasStarted: boolean; readonly workEvents: number; noteWork(): Promise<boolean>; startNow(): Promise<void>; cancel(): void; reset(): void; };","entrypoint":"channel-outbound","exportName":"createChannelProgressDraftGate","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"2204efb262a5e8af61346bce23492dd759c15037ce3b8500148c5cc8dce1c421","declaration":"export function createChannelProgressReceiptTracker(params?: { now?: () => number; }): { noteReasoning(): void; closeReasoning: () => void; noteToolCall(toolName?: string): void; noteCommentary(itemId?: string, text?: string): void; reset: () => void; buildSummaryLine(): string; };","entrypoint":"channel-outbound","exportName":"createChannelProgressReceiptTracker","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"2209fd876893dd56da7cffda42967e79b6437d5230f70efd42b8171c2ba32611","declaration":"export function createChannelRunQueue(params: ChannelRunQueueParams): ChannelRunQueue;","entrypoint":"channel-outbound","exportName":"createChannelRunQueue","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
@@ -1159,10 +1159,10 @@
{"closureHash":"acd64a0d6ce6dbd9db22f9e4a4497cef2110a9e962f240c6f5e90cef31505459","declaration":"export function createFinalizableDraftStreamControlsForState<T = string>(params: { throttleMs: number; state: FinalizableDraftStreamState; sendOrEditStreamMessage: (value: T) => Promise<void | boolean>; emptyValue?: T; isEmpty?: (value: T) => boolean; }): { loop: DraftStreamLoop<T> & { takePending: () => T; }; update: (value: T) => void; stop: () => Promise<void>; seal: () => Promise<void>; discardPending: () => Promise<void>; stopForClear: () => Promise<void>; };","entrypoint":"channel-outbound","exportName":"createFinalizableDraftStreamControlsForState","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"f2bb1868ec1cf7d97e6b8eb0a9a8a37122ec53c9cd4e2bbfc8448c1555f3d382","declaration":"export function createMessageReceiptFromOutboundResults(params: { results: readonly MessageReceiptInputResult[]; kind?: MessageReceiptPartKind; threadId?: string; replyToId?: string; sentAt?: number; }): MessageReceipt;","entrypoint":"channel-outbound","exportName":"createMessageReceiptFromOutboundResults","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"3c150fb027a4e4a1685b572d26aa1f70b3838641bd7629434c4265bfda549d0a","declaration":"export function createMessageReceiveContext<TMessage>(params: { id: string; channel: string; accountId?: string; message: TMessage; ackPolicy?: MessageAckPolicy; receivedAt?: number; signal?: AbortSignal; onAck?: () => Promise<void> | void; onNack?: (error: unknown) => Promise<void> | void; }): MessageReceiveContext<TMessage>;","entrypoint":"channel-outbound","exportName":"createMessageReceiveContext","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"0077f2695f161c9c879b3f676ac6598e8add0af66bdc36ee33ee69a09fab70ba","declaration":"export function createOutboundPayloadPlan(payloads: readonly ReplyPayload[], context?: OutboundPayloadPlanContext): OutboundPayloadPlan[];","entrypoint":"channel-outbound","exportName":"createOutboundPayloadPlan","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"5130c4460ed27cc1137c888e58c09dec0be06241bce0dbc230284efac7d08284","declaration":"export function createOutboundPayloadPlan(payloads: readonly ReplyPayload[], context?: OutboundPayloadPlanContext): OutboundPayloadPlan[];","entrypoint":"channel-outbound","exportName":"createOutboundPayloadPlan","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"7abc004852a9162c3f4241d6c80b9962c9732dd03d2d38a56e4080a4e92758a1","declaration":"export function createPreviewMessageReceipt(params: { id: unknown; threadId?: string; replyToId?: string; sentAt?: number; raw?: unknown; }): MessageReceipt;","entrypoint":"channel-outbound","exportName":"createPreviewMessageReceipt","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"5bc1d0180c6325ad014aa58a9810aaab97994ead19dcff59df1d1cefe1444ed8","declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixContextBundle;","entrypoint":"channel-outbound","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"e264e9ecf7fe1bab36ba506d03b4654a099a0b3db7b706b5ddcf953427516707","declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixOptions;","entrypoint":"channel-outbound","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"f5e0146088171cb3d54ff40d309ad33782c545405db40ddf4415ef080cc18033","declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixContextBundle;","entrypoint":"channel-outbound","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"5ce1bcf4ed49156404455d981ad4ed663423b1ce1c747936ba53325b84943d72","declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixOptions;","entrypoint":"channel-outbound","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"74fc19137203a84902b6a7cdaa10db8db714e6aed701e61d398d9edc1bbf2592","declaration":"export function createReplyToFanout(params: { replyToId?: string | null; replyToMode?: ReplyToMode; replyToIdSource?: ReplyToResolution[\"source\"]; }): () => string | undefined;","entrypoint":"channel-outbound","exportName":"createReplyToFanout","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"d934828dfca3782d302de428edb678320bafaaf43732a885df3a78c9775e49c6","declaration":"export function createRuntimeOutboundDelegates<Runtime>(params: { getRuntime: () => MaybePromise<Runtime>; renderPresentation?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"renderPresentation\"] | null | undefined; unavailableMessage?: string; }; sendPayload?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendPayload\"] | null | undefined; unavailableMessage?: string; }; sendText?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendText\"] | null | undefined; unavailableMessage?: string; }; sendMedia?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendMedia\"] | null | undefined; unavailableMessage?: string; }; sendPoll?: { resolve: (runtime: Runtime) => ChannelOutboundAdapter[\"sendPoll\"] | null | undefined; unavailableMessage?: string; }; }): Pick<ChannelOutboundAdapter, OutboundMethod>;","entrypoint":"channel-outbound","exportName":"createRuntimeOutboundDelegates","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"1c08a759db76abcefee8ee1bab6313a396d321f42a105176b5705bef8ffa94ad","declaration":"export function createTypingCallbacks(params: CreateTypingCallbacksParams): TypingCallbacks;","entrypoint":"channel-outbound","exportName":"createTypingCallbacks","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
@@ -1171,9 +1171,9 @@
{"closureHash":"7e63fe1abf08995573bb768b68c670ec952a1782e00c3721a625fac283e980cb","declaration":"export function defineFinalizableLivePreviewAdapter<TPayload, TId, TEdit>(adapter: FinalizableLivePreviewAdapter<TPayload, TId, TEdit>): FinalizableLivePreviewAdapter<TPayload, TId, TEdit>;","entrypoint":"channel-outbound","exportName":"defineFinalizableLivePreviewAdapter","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"f74a47c1667d189ed96c702b3c5307f64306a232b65b9807f43bbd756e819322","declaration":"export function deliverWithFinalizableLivePreviewAdapter<TPayload, TId, TEdit>(params: { kind: \"tool\" | \"block\" | \"final\"; payload: TPayload; liveState?: LiveMessageState<TPayload>; adapter?: FinalizableLivePreviewAdapter<TPayload, TId, TEdit>; deliverNormally: (payload: TPayload) => Promise<boolean | void>; onNormalDelivered?: () => Promise<void> | void; }): Promise<LivePreviewFinalizerResult<TPayload>>;","entrypoint":"channel-outbound","exportName":"deliverWithFinalizableLivePreviewAdapter","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"d1e255cca4dee40f6f6536738809b7616b492da325a439111e0b832546f4734d","declaration":"export function deriveDurableFinalDeliveryRequirements(params: DeriveDurableFinalDeliveryRequirementsParams): DurableFinalDeliveryRequirementMap;","entrypoint":"channel-outbound","exportName":"deriveDurableFinalDeliveryRequirements","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"4181ce4435cd74d55cde1a2f81498084856202c1c6fddee8148654a1c86fa6ff","declaration":"export function formatChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-outbound","exportName":"formatChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"b567c796ddd84b4a95788291ffd3673ffd4762932a6186529c304cb084b34f42","declaration":"export function formatChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-outbound","exportName":"formatChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"ee056fe27cb960789fbf068f28b71def2a6d16ca495803733457755eecdb994d","declaration":"export function formatChannelProgressDraftText(params: { entry?: StreamingCompatEntry | null; lines: Array<string | ChannelProgressDraftLine>; seed?: string; random?: () => number; formatLine?: (line: string) => string; bullet?: string; narration?: string; plan?: readonly AgentPlanStep[]; }): string;","entrypoint":"channel-outbound","exportName":"formatChannelProgressDraftText","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"fe3b2cc123400a9b7dfb51f69aa0ddc88675b983e772852cb7d902a528dcd055","declaration":"export function formatChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-outbound","exportName":"formatChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"df25d6ffb817eb32f8b4b670057c2c5e4d42512f416f99351e2345a09371226d","declaration":"export function formatChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-outbound","exportName":"formatChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"ad582c3d988c6ba71760e6ccf10f896c98034a70ed5bed6924087b898de61d3e","declaration":"export function formatChannelProgressDraftText(params: { entry?: StreamingCompatEntry | null; lines: Array<string | ChannelProgressDraftLine>; seed?: string; random?: () => number; formatLine?: (line: string) => string; bullet?: string; narration?: string; plan?: readonly AgentPlanStep[]; }): string;","entrypoint":"channel-outbound","exportName":"formatChannelProgressDraftText","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"d54d2cfdcb9d85947f0ce5380faa272a982ab558b483cd2cd67a4cd4ced16fbb","declaration":"export function formatPlanChecklistLines(steps: readonly AgentPlanStep[], options: { maxLines: number; maxLineChars: number; }): string[];","entrypoint":"channel-outbound","exportName":"formatPlanChecklistLines","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"72ef52a7a184703e0ac9fec319b40f650c6ffc488153ebc1ff2d4c5ef0d2fe63","declaration":"export function getChannelStreamingConfigObject(entry: StreamingCompatEntry | null | undefined): ChannelStreamingConfig | undefined;","entrypoint":"channel-outbound","exportName":"getChannelStreamingConfigObject","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"a3392a9a24bc265b97c030d5e44169bf0b3a59738aae7ee2d3589c8840aa701a","declaration":"export function isChannelProgressDraftWorkToolName(name: string | null | undefined): boolean;","entrypoint":"channel-outbound","exportName":"isChannelProgressDraftWorkToolName","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
@@ -1182,11 +1182,11 @@
{"closureHash":"76834dcabb16e8bf079074313b0883d7fccd003117cb630f5c1ea8eef0bd7b62","declaration":"export function keepHttpServerTaskAlive(params: { server: CloseAwareServer; abortSignal?: AbortSignal; onAbort?: () => void | Promise<void>; }): Promise<void>;","entrypoint":"channel-outbound","exportName":"keepHttpServerTaskAlive","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"5b3cd54bde62dfe24a8f940c26459db2f10b2569f638224ca73d41c79c9315bf","declaration":"export function listMessageReceiptPlatformIds(receipt: MessageReceipt): string[];","entrypoint":"channel-outbound","exportName":"listMessageReceiptPlatformIds","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"447bed40e4b999ca05c2a5e517c9f3081c127ed9e5f16db058135fecacbdff7d","declaration":"export function logTypingFailure(params: { log: LogFn; channel: string; target?: string; action?: \"start\" | \"stop\"; error: unknown; }): void;","entrypoint":"channel-outbound","exportName":"logTypingFailure","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"6afbf0355ecf5eb0ba8f89322eb73b19cce9dd021bfff3ca1ab1d018154e7680","declaration":"export function mergeChannelProgressDraftLine<TLine extends string | ChannelProgressDraftLine>(lines: TLine[], line: TLine, params: { maxLines: number; }): TLine[];","entrypoint":"channel-outbound","exportName":"mergeChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"63de02df0263b3534b1c84a1e45aad5201c859d04c49dcbe9cbe64131f9704be","declaration":"export function mergeChannelProgressDraftLine<TLine extends string | ChannelProgressDraftLine>(lines: TLine[], line: TLine, params: { maxLines: number; }): TLine[];","entrypoint":"channel-outbound","exportName":"mergeChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"844a3251dcba84a9735c855d7b6c930570cc486f3a1c5fc49b541572d52bb7d7","declaration":"export function normalizeAgentPlanSteps(value: unknown): AgentPlanStep[] | undefined;","entrypoint":"channel-outbound","exportName":"normalizeAgentPlanSteps","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"2458fcb3c1632a3d75c6ed4225937a65323729dc25fc000c643ecf8dbea743bf","declaration":"export function normalizeChannelProgressDraftLineIdentity(line: string | ChannelProgressDraftLine | undefined): string;","entrypoint":"channel-outbound","exportName":"normalizeChannelProgressDraftLineIdentity","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"b19d38e15e2054e826fd132198c606165fc369fb5a96f4e6bbbf7b89bee35ac2","declaration":"export function normalizeChannelProgressDraftLineIdentity(line: string | ChannelProgressDraftLine | undefined): string;","entrypoint":"channel-outbound","exportName":"normalizeChannelProgressDraftLineIdentity","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"ba2389600eeea10867e3891e411bd84e8fd07dcd410249c29ca92ba59ef27bad","declaration":"export function processPidFromOwnerId(ownerId: string): number;","entrypoint":"channel-outbound","exportName":"processPidFromOwnerId","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"03552b213fb7043a408c7a78722ad9786022e19ffea1c70e0166a59b2c3dead4","declaration":"export function projectOutboundPayloadPlanForDelivery(plan: readonly OutboundPayloadPlan[]): ReplyPayload[];","entrypoint":"channel-outbound","exportName":"projectOutboundPayloadPlanForDelivery","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"5c3fd4b52f1e8d9c676ae83e438156943823fb03a5d0ebf4692c58df8d8fcfc3","declaration":"export function projectOutboundPayloadPlanForDelivery(plan: readonly OutboundPayloadPlan[]): ReplyPayload[];","entrypoint":"channel-outbound","exportName":"projectOutboundPayloadPlanForDelivery","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"bc16377d8f9c3467da5115ff2d6b3ef0423980794a0f5af287b1f1e8ee9533ef","declaration":"export function recordOutboundMessageIdentity(identity: OutboundMessageIdentity): void;","entrypoint":"channel-outbound","exportName":"recordOutboundMessageIdentity","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"3090faaaca1e2c970a0eadbb7792c531a053746df6df83a082d8564a8313b401","declaration":"export function resolveAgentOutboundIdentity(cfg: OpenClawConfig, agentId: string): OutboundIdentity | undefined;","entrypoint":"channel-outbound","exportName":"resolveAgentOutboundIdentity","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
{"closureHash":"ba763bf7ff1dee852fb9b58f5995f9df744028d47ca29f687b215ba316c66723","declaration":"export function resolveChannelDraftStreamingChunking(cfg: OpenClawConfig | undefined, channelId: ChannelId, accountId: string | null | undefined, opts: { fallbackLimit: number; }): ChannelDraftStreamingChunking;","entrypoint":"channel-outbound","exportName":"resolveChannelDraftStreamingChunking","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"function","recordType":"export"}
@@ -1225,7 +1225,7 @@
{"closureHash":"9555a73ba2717bba0bf94888017be4cecef2c51cc3887ed34f8d8ef3c79d6abf","declaration":"export const DEFAULT_INGRESS_RETRY_DEAD_LETTER_MIN_AGE_MS: number;","entrypoint":"channel-outbound","exportName":"DEFAULT_INGRESS_RETRY_DEAD_LETTER_MIN_AGE_MS","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"const","recordType":"export"}
{"closureHash":"3a2df3ab656149630c004d2d9f71b8ceda99aa81eb6b72b0cc7b3982ed0ce044","declaration":"export const DEFAULT_INGRESS_RETRY_MAX_ATTEMPTS: 8;","entrypoint":"channel-outbound","exportName":"DEFAULT_INGRESS_RETRY_MAX_ATTEMPTS","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"const","recordType":"export"}
{"closureHash":"38c735a14c65067aa7825390d1c5c8876c651d0603e84980dfaf947f5235747a","declaration":"export const INGRESS_CLAIM_PROCESS_ID: string;","entrypoint":"channel-outbound","exportName":"INGRESS_CLAIM_PROCESS_ID","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"const","recordType":"export"}
{"closureHash":"2887dec3a9c4ee96e2d46f8dd7a18894b8e3179f45c2bf634343df93012a55b4","declaration":"export const deliverInboundReplyWithMessageSendContext: (params: DurableInboundReplyDeliveryParams) => Promise<{ status: \"not_applicable\"; reason: \"non_final\";} | { status: \"unsupported\"; reason: \"missing_channel\" | \"missing_target\" | \"missing_outbound_handler\" | \"capability_mismatch\"; capability?: DurableFinalDeliveryRequirement;} | { status: \"handled_visible\"; delivery: ChannelDeliveryResult;} | { status: \"handled_no_send\"; reason: \"no_visible_result\"; delivery: ChannelDeliveryResult;} | { status: \"failed\"; error: unknown; sentBeforeError?: true;}>;","entrypoint":"channel-outbound","exportName":"deliverInboundReplyWithMessageSendContext","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"const","recordType":"export"}
{"closureHash":"879bf9f1b156e597b1138ee3576f48860b0cb572294aaed088ea2cf0bacfe021","declaration":"export const deliverInboundReplyWithMessageSendContext: (params: DurableInboundReplyDeliveryParams) => Promise<{ status: \"not_applicable\"; reason: \"non_final\";} | { status: \"unsupported\"; reason: \"missing_channel\" | \"missing_target\" | \"missing_outbound_handler\" | \"capability_mismatch\"; capability?: DurableFinalDeliveryRequirement;} | { status: \"handled_visible\"; delivery: ChannelDeliveryResult;} | { status: \"handled_no_send\"; reason: \"no_visible_result\"; delivery: ChannelDeliveryResult;} | { status: \"failed\"; error: unknown; sentBeforeError?: true;}>;","entrypoint":"channel-outbound","exportName":"deliverInboundReplyWithMessageSendContext","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"const","recordType":"export"}
{"closureHash":"2c52eff200a5b9bd2d93ee72209c2626bbe165f59b538591db661b94773023b0","declaration":"export type AgentPlanStep = AgentPlanStep;","entrypoint":"channel-outbound","exportName":"AgentPlanStep","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"1e8bcb2c8d8f5327f5b81b8c217f722f090dccba21ba3943324010f4f80a5a50","declaration":"export type AgentPlanStepStatus = AgentPlanStepStatus;","entrypoint":"channel-outbound","exportName":"AgentPlanStepStatus","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"b036fc26e5330dfd7da1af8839bb3c23e85283b9e16e252a659dd4bb0c35cd5e","declaration":"export type ChannelDeliveryStreamingConfig = ChannelDeliveryStreamingConfig;","entrypoint":"channel-outbound","exportName":"ChannelDeliveryStreamingConfig","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
@@ -1247,9 +1247,9 @@
{"closureHash":"f55e61d3efa488a6ddf6dcceebef7259df98883ecfc5fda904b09754f199ee1a","declaration":"export type ChannelMessageUnknownSendContext<TConfig = OpenClawConfig> = ChannelMessageUnknownSendContext<TConfig>;","entrypoint":"channel-outbound","exportName":"ChannelMessageUnknownSendContext","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"e3bde4b77d2c764a8d8236b5739523240f594f484825ac9ea4205cacdb100960","declaration":"export type ChannelMessageUnknownSendReconciliationResult = ChannelMessageUnknownSendReconciliationResult;","entrypoint":"channel-outbound","exportName":"ChannelMessageUnknownSendReconciliationResult","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"67f3a704195e12f66ff1b8633639dc4de4af9769891b13e7ba7a575ca1efcdc6","declaration":"export type ChannelPreviewStreamingConfig = ChannelPreviewStreamingConfig;","entrypoint":"channel-outbound","exportName":"ChannelPreviewStreamingConfig","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"70fac0ae1a73d61c1cc6ed001c7cae94ccafcf7547e6c53f833c87566a6f8d88","declaration":"export type ChannelProgressDraftCompositorLine = ChannelProgressDraftCompositorLine;","entrypoint":"channel-outbound","exportName":"ChannelProgressDraftCompositorLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"39e6a4ced74b0ecb12a41e703947469ba72d0dbcc4686dce968ccb541d0e71a5","declaration":"export type ChannelProgressDraftCompositorSnapshot = Readonly<{ lines: readonly ChannelProgressDraftCompositorLine[]; statusHeadline?: string; plan?: readonly AgentPlanStep[]; planExplanation?: string;}>;","entrypoint":"channel-outbound","exportName":"ChannelProgressDraftCompositorSnapshot","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"7a6eeb19346d69b173c5206d5f07414d44d551f38a285d06660a418f3905abd1","declaration":"export type ChannelProgressDraftLine = ChannelProgressDraftLine;","entrypoint":"channel-outbound","exportName":"ChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"0e770e84db0236d956e70398054333f16395d5522bebbb7122d65ade2f64e44a","declaration":"export type ChannelProgressDraftCompositorLine = ChannelProgressDraftCompositorLine;","entrypoint":"channel-outbound","exportName":"ChannelProgressDraftCompositorLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"b7c76761bd56e44d2ae0e3c54f8880a1ae4897c2c1b28bc5704367f841c18b06","declaration":"export type ChannelProgressDraftCompositorSnapshot = Readonly<{ lines: readonly ChannelProgressDraftCompositorLine[]; statusHeadline?: string; plan?: readonly AgentPlanStep[]; planExplanation?: string;}>;","entrypoint":"channel-outbound","exportName":"ChannelProgressDraftCompositorSnapshot","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"a9ec1f82184ba85d82bfdb8b4ebb8b8280e6dd0c63f08a61e55e92c6df005fcc","declaration":"export type ChannelProgressDraftLine = ChannelProgressDraftLine;","entrypoint":"channel-outbound","exportName":"ChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"de6224d5ef3d05e9e25fadc96c00f75c3df158ef94345e7c9f102b7234926fb7","declaration":"export type ChannelStreamingBlockConfig = ChannelStreamingBlockConfig;","entrypoint":"channel-outbound","exportName":"ChannelStreamingBlockConfig","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"c3269be226828d9e407cadb848af626a7a01949ce921c44494542eb676217d67","declaration":"export type ChannelStreamingProgressConfig = ChannelStreamingProgressConfig;","entrypoint":"channel-outbound","exportName":"ChannelStreamingProgressConfig","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"closureHash":"fc7e4c04e9bb74b8ab367534651361c243c839d563677621540793eed89c61bf","declaration":"export type DurableMessageBatchSendResult = DurableMessageBatchSendResult;","entrypoint":"channel-outbound","exportName":"DurableMessageBatchSendResult","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
@@ -1269,13 +1269,13 @@
{"closureHash":"424d0b4b21b078d07a49a7bc52c3b63250be032a3e17f47c0cc824178b828ded","declaration":"export type TextChunkMode = TextChunkMode;","entrypoint":"channel-outbound","exportName":"TextChunkMode","importSpecifier":"openclaw/plugin-sdk/channel-outbound","kind":"type","recordType":"export"}
{"category":"channel","entrypoint":"channel-pairing","importSpecifier":"openclaw/plugin-sdk/channel-pairing","recordType":"module"}
{"closureHash":"3d2325df85dcb397e7df5c9f380c5d6c517976527acbe7d94d59df8777810d1f","declaration":"export function createChannelPairingChallengeIssuer(params: { channel: ChannelId; accountId?: string; upsertPairingRequest: Parameters<typeof issuePairingChallenge>[0][\"upsertPairingRequest\"]; }): (challenge: Omit<Parameters<typeof issuePairingChallenge>[0], \"channel\" | \"accountId\" | \"upsertPairingRequest\">) => Promise<{ created: boolean; code?: string; }>;","entrypoint":"channel-pairing","exportName":"createChannelPairingChallengeIssuer","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"2626359f9b56d0dcf678ffa7a9ba8c90bdc1e47959ff4158e386603e0253153a","declaration":"export function createChannelPairingController(params: { core: PluginRuntime; channel: ChannelId; accountId: string; }): ChannelPairingController;","entrypoint":"channel-pairing","exportName":"createChannelPairingController","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"ad83e030117e619ae227e479db7a5de9450e82602600c3183bdabb40f5d61459","declaration":"export function createChannelPairingController(params: { core: PluginRuntime; channel: ChannelId; accountId: string; }): ChannelPairingController;","entrypoint":"channel-pairing","exportName":"createChannelPairingController","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"39648d8f2d5ec14a204569c6266100fef1e455dd53dd6b05ae3034dc98986875","declaration":"export function createLoggedPairingApprovalNotifier(format: string | ((params: PairingNotifyParams) => string), log?: (message: string) => void): NonNullable<ChannelPairingAdapter[\"notifyApproval\"]>;","entrypoint":"channel-pairing","exportName":"createLoggedPairingApprovalNotifier","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"d5198bb50f3f1c60b384feb93ae07621ceeca6f7d7f7c729ec96dabe984eca10","declaration":"export function createPairingPrefixStripper(prefixRe: RegExp, map?: (entry: string) => string): NonNullable<ChannelPairingAdapter[\"normalizeAllowEntry\"]>;","entrypoint":"channel-pairing","exportName":"createPairingPrefixStripper","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"b914a433d104666e368d9e2c85d328e0015168b8ad3ade34bc993d3cc7141513","declaration":"export function createTextPairingAdapter(params: { idLabel: string; message: string; normalizeAllowEntry?: ChannelPairingAdapter[\"normalizeAllowEntry\"]; notify: (params: PairingNotifyParams & { message: string; }) => Promise<void> | void; }): ChannelPairingAdapter;","entrypoint":"channel-pairing","exportName":"createTextPairingAdapter","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"ec2b230fc869584bf4114bc30b34546f3e3e9369d7b6f49d9ff3bc8b19dd1989","declaration":"export function readChannelAllowFromStore(channel: PairingChannel, env?: NodeJS.ProcessEnv, accountId?: string): Promise<string[]>;","entrypoint":"channel-pairing","exportName":"readChannelAllowFromStore","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"efe4915252d6eb26af5b1c52dadf22e05b4a13f1668a10cc508c0aa4bae11e39","declaration":"export function readChannelAllowFromStoreSync(channel: PairingChannel, env?: NodeJS.ProcessEnv, accountId?: string): string[];","entrypoint":"channel-pairing","exportName":"readChannelAllowFromStoreSync","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"function","recordType":"export"}
{"closureHash":"1d5ea267edae4ab479fc7d26eca1287676011fd0810f06b6c687f86f09d9c4e1","declaration":"export type ChannelPairingController = ChannelPairingController;","entrypoint":"channel-pairing","exportName":"ChannelPairingController","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"type","recordType":"export"}
{"closureHash":"e5203a2762f370690bb04f41091d342e36fe77ad2bcbdfe9e27db9796e8b34b6","declaration":"export type ChannelPairingController = ChannelPairingController;","entrypoint":"channel-pairing","exportName":"ChannelPairingController","importSpecifier":"openclaw/plugin-sdk/channel-pairing","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"channel-plugin-common","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","recordType":"module"}
{"closureHash":"19a3d4c1fdad2b565e7428da26e0dafa76f08498bcf06ac3df098486ff4afc2c","declaration":"export function applyAccountNameToChannelSection(params: { cfg: OpenClawConfig; channelKey: string; accountId: string; name?: string; alwaysUseAccounts?: boolean; }): OpenClawConfig;","entrypoint":"channel-plugin-common","exportName":"applyAccountNameToChannelSection","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"function","recordType":"export"}
{"closureHash":"e97ff96104ab3b7f8462f20d39d2596908a59cb03a634c6c2fb0d7ff80e5bb54","declaration":"export function buildChannelConfigSchema(schema: ZodTypeAny, options?: BuildChannelConfigSchemaOptions): ChannelConfigSchema;","entrypoint":"channel-plugin-common","exportName":"buildChannelConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"function","recordType":"export"}
@@ -1291,8 +1291,8 @@
{"closureHash":"cd6b0d3f962c8cb40d405e92bb06bb8e9285b386200897f550d21036022262c1","declaration":"export const PAIRING_APPROVED_MESSAGE: \"✅ OpenClaw access approved. Send a message to start chatting.\";","entrypoint":"channel-plugin-common","exportName":"PAIRING_APPROVED_MESSAGE","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"const","recordType":"export"}
{"closureHash":"712435252d2fe5135542ca6b5a4375a6edea24e83829338011dc6ae7e9802fbb","declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"channel-plugin-common","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"type","recordType":"export"}
{"closureHash":"4dd12b961fc300d388143ed5d8dc990e759c382b949c337c8f28ac83ca65aae7","declaration":"export type ChannelPlugin<ResolvedAccount = any, Probe = unknown, Audit = unknown> = ChannelPlugin<ResolvedAccount, Probe, Audit>;","entrypoint":"channel-plugin-common","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"type","recordType":"export"}
{"closureHash":"baddda61cd7c006909d5364a531fc1d362afca4d789674b0af5f5175f339af9c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"channel-plugin-common","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"type","recordType":"export"}
{"closureHash":"2cea6ec6d79e6fd4291233833057d122a7e96e2838c06409312f57d55734d4ad","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"channel-plugin-common","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"type","recordType":"export"}
{"closureHash":"adad7f6d6c8f37f73c803f8decd56bc9db755e3449b59059de4cbef52f90f116","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"channel-plugin-common","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"type","recordType":"export"}
{"closureHash":"ee07774fb1d0711bbe9a5d9f49bde457bfb0169000423e58c5a4da432d68f888","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"channel-plugin-common","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/channel-plugin-common","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"channel-policy","importSpecifier":"openclaw/plugin-sdk/channel-policy","recordType":"module"}
{"closureHash":"017ab29d16d0f3d02d60f3513e65a373868d26496bc93d020d8fc8c17fd875f4","declaration":"export function buildAccountScopedDmSecurityPolicy(params: { cfg: OpenClawConfig; channelKey: string; accountId?: string | null; fallbackAccountId?: string | null; policy?: string | null; allowFrom?: Array<string | number> | null; defaultPolicy?: string; allowFromPathSuffix?: string; policyPathSuffix?: string; approveChannelId?: string; approveHint?: string; normalizeEntry?: (raw: string) => string; inheritSharedDefaultsFromDefaultAccount?: boolean; }): ChannelSecurityDmPolicy;","entrypoint":"channel-policy","exportName":"buildAccountScopedDmSecurityPolicy","importSpecifier":"openclaw/plugin-sdk/channel-policy","kind":"function","recordType":"export"}
{"closureHash":"628863a501a389d1fee7ab465a4e9da1751189011e9086a54ab22bfc1f970c8a","declaration":"export function buildChannelGroupsScopeTree(cfg: OpenClawConfig, channel: ChannelId, accountId?: string | null): ScopeTree;","entrypoint":"channel-policy","exportName":"buildChannelGroupsScopeTree","importSpecifier":"openclaw/plugin-sdk/channel-policy","kind":"function","recordType":"export"}
@@ -1352,16 +1352,16 @@
{"closureHash":"65423417d7f3e51cb00d21a96c5426a4494abeceb7bc07707a6b7b8131192f27","declaration":"export type ScopePath = ScopePath;","entrypoint":"channel-policy","exportName":"ScopePath","importSpecifier":"openclaw/plugin-sdk/channel-policy","kind":"type","recordType":"export"}
{"closureHash":"eb70a2d51551dbaeb3585e0efc18b37e1dcfbaa1f6f4e8564e0e9ca9968e7559","declaration":"export type ScopeTree = ScopeTree;","entrypoint":"channel-policy","exportName":"ScopeTree","importSpecifier":"openclaw/plugin-sdk/channel-policy","kind":"type","recordType":"export"}
{"category":"channel","entrypoint":"channel-reply-pipeline","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","recordType":"module"}
{"closureHash":"a66afb6e59691c75f1e5a773fc33bf13859385f6a984743dd0e1f18ad0ab4b05","declaration":"export function createChannelReplyPipeline(params: CreateChannelReplyPipelineParams): ChannelReplyPipeline;","entrypoint":"channel-reply-pipeline","exportName":"createChannelReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"5bc1d0180c6325ad014aa58a9810aaab97994ead19dcff59df1d1cefe1444ed8","declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixContextBundle;","entrypoint":"channel-reply-pipeline","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"e264e9ecf7fe1bab36ba506d03b4654a099a0b3db7b706b5ddcf953427516707","declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixOptions;","entrypoint":"channel-reply-pipeline","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"aee1b9be43b42ac3b4c398fd9819d5ccc01b365e127d97535c07355557566d20","declaration":"export function createChannelReplyPipeline(params: CreateChannelReplyPipelineParams): ChannelReplyPipeline;","entrypoint":"channel-reply-pipeline","exportName":"createChannelReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"f5e0146088171cb3d54ff40d309ad33782c545405db40ddf4415ef080cc18033","declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixContextBundle;","entrypoint":"channel-reply-pipeline","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"5ce1bcf4ed49156404455d981ad4ed663423b1ce1c747936ba53325b84943d72","declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string; accountId?: string; }): ReplyPrefixOptions;","entrypoint":"channel-reply-pipeline","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"1c08a759db76abcefee8ee1bab6313a396d321f42a105176b5705bef8ffa94ad","declaration":"export function createTypingCallbacks(params: CreateTypingCallbacksParams): TypingCallbacks;","entrypoint":"channel-reply-pipeline","exportName":"createTypingCallbacks","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"19053f3926d4ac878570b38581176d868c1db0562405f63c2b4c8ebe05d8c16b","declaration":"export function resolveChannelSourceReplyDeliveryMode(params: { cfg: OpenClawConfig; ctx: SourceReplyDeliveryModeContext; requested?: SourceReplyDeliveryMode; messageToolAvailable?: boolean; }): SourceReplyDeliveryMode;","entrypoint":"channel-reply-pipeline","exportName":"resolveChannelSourceReplyDeliveryMode","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"function","recordType":"export"}
{"closureHash":"4d6f1fc0c2ea2c255a36a841565ab99e76c82419d3e764331f01a215552e2761","declaration":"export type ChannelReplyPipeline = ChannelReplyPipeline;","entrypoint":"channel-reply-pipeline","exportName":"ChannelReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"aaf64b6f9273863f18f923a0a192cc50d0aa9df33291fb7e3293c1a94bac8e83","declaration":"export type ChannelReplyPipeline = ChannelReplyPipeline;","entrypoint":"channel-reply-pipeline","exportName":"ChannelReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"81452f2eddc8652fc02b84e6e7c8e52e24bdef551a33c500efd052214906ac9e","declaration":"export type CreateTypingCallbacksParams = CreateTypingCallbacksParams;","entrypoint":"channel-reply-pipeline","exportName":"CreateTypingCallbacksParams","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"f1b07a793b699be10e616ca2c2bd54ea3eed52c07791a60075287d358b4c0a69","declaration":"export type ReplyPrefixContext = ResponsePrefixContext;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"618ec4877f5bb84b2dce58e2e084970e7be3da1cde25a36e0e011055ad7744cc","declaration":"export type ReplyPrefixContextBundle = ReplyPrefixContextBundle;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixContextBundle","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"ae40eb9ad96d191e83474ca3938f3dec007892869204dda9e4648ce3469031d3","declaration":"export type ReplyPrefixOptions = ReplyPrefixOptions;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"198e99899dec38470a64d1646a31a8c8b630d8a83a82bceac0207ed08bfebc86","declaration":"export type ReplyPrefixContext = ResponsePrefixContext;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"286cc325d914e8b9ca3c220f1120233876a734a3c8a6fd47f97ef1beb2406459","declaration":"export type ReplyPrefixContextBundle = ReplyPrefixContextBundle;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixContextBundle","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"979600602042454b66cd19915ab6beae8c8e8abfeb4ac70f4ec5e36986312df0","declaration":"export type ReplyPrefixOptions = ReplyPrefixOptions;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"abf24938da5bcaf723794c1b4cdd2d0fcb6697df4cd49898bcccec19cdff77b5","declaration":"export type SourceReplyDeliveryMode = SourceReplyDeliveryMode;","entrypoint":"channel-reply-pipeline","exportName":"SourceReplyDeliveryMode","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"closureHash":"32be4db788d5dd3933981b01175e6146942936f81fd1933534e9cba67fe2ec0a","declaration":"export type TypingCallbacks = TypingCallbacks;","entrypoint":"channel-reply-pipeline","exportName":"TypingCallbacks","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"channel-runtime-context","importSpecifier":"openclaw/plugin-sdk/channel-runtime-context","recordType":"module"}
@@ -1458,20 +1458,20 @@
{"closureHash":"c89a0fcbee06b693597cdddc74c52a9234960e112fc76c0353bfcbe93450a8a8","declaration":"export function resolveConfiguredFromRequiredCredentialStatuses(account: unknown, requiredKeys: CredentialStatusKey[]): boolean | undefined;","entrypoint":"channel-status","exportName":"resolveConfiguredFromRequiredCredentialStatuses","importSpecifier":"openclaw/plugin-sdk/channel-status","kind":"function","recordType":"export"}
{"closureHash":"cd6b0d3f962c8cb40d405e92bb06bb8e9285b386200897f550d21036022262c1","declaration":"export const PAIRING_APPROVED_MESSAGE: \"✅ OpenClaw access approved. Send a message to start chatting.\";","entrypoint":"channel-status","exportName":"PAIRING_APPROVED_MESSAGE","importSpecifier":"openclaw/plugin-sdk/channel-status","kind":"const","recordType":"export"}
{"category":null,"entrypoint":"channel-streaming","importSpecifier":"openclaw/plugin-sdk/channel-streaming","recordType":"module"}
{"closureHash":"a5114e7a8616a7c7fb200dcfdac6514bf35d8588697105a91d87d2214bbc43f4","declaration":"export function buildChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-streaming","exportName":"buildChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"aeef6b8d581ff1e87780ad2a88c60ce458cbaa14ff36bf40ffde1459b37ef104","declaration":"export function buildChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-streaming","exportName":"buildChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"1529cd8c4498338811b4d3bc1d52f2e89a4d8eeae35db526f79ff7914d889fe2","declaration":"export function buildChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-streaming","exportName":"buildChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"3f938b19f99e8206c1c9be21620614d99dc5b642ac129de3b04999333ebd62bb","declaration":"export function buildChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): ChannelProgressDraftLine | undefined;","entrypoint":"channel-streaming","exportName":"buildChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"44c199920938c7a282e44d36eea187f1f8ce1d09bfb845180e1844124f497a3c","declaration":"export function createChannelProgressDraftGate(params: { onStart: () => void | Promise<void>; initialDelayMs?: number; onStartError?: (error: unknown) => void; setTimeoutFn?: typeof setTimeout; clearTimeoutFn?: typeof clearTimeout; }): { readonly hasStarted: boolean; readonly workEvents: number; noteWork(): Promise<boolean>; startNow(): Promise<void>; cancel(): void; reset(): void; };","entrypoint":"channel-streaming","exportName":"createChannelProgressDraftGate","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"4181ce4435cd74d55cde1a2f81498084856202c1c6fddee8148654a1c86fa6ff","declaration":"export function formatChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-streaming","exportName":"formatChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"b567c796ddd84b4a95788291ffd3673ffd4762932a6186529c304cb084b34f42","declaration":"export function formatChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-streaming","exportName":"formatChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"ee056fe27cb960789fbf068f28b71def2a6d16ca495803733457755eecdb994d","declaration":"export function formatChannelProgressDraftText(params: { entry?: StreamingCompatEntry | null; lines: Array<string | ChannelProgressDraftLine>; seed?: string; random?: () => number; formatLine?: (line: string) => string; bullet?: string; narration?: string; plan?: readonly AgentPlanStep[]; }): string;","entrypoint":"channel-streaming","exportName":"formatChannelProgressDraftText","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"fe3b2cc123400a9b7dfb51f69aa0ddc88675b983e772852cb7d902a528dcd055","declaration":"export function formatChannelProgressDraftLine(input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-streaming","exportName":"formatChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"df25d6ffb817eb32f8b4b670057c2c5e4d42512f416f99351e2345a09371226d","declaration":"export function formatChannelProgressDraftLineForEntry(entry: StreamingCompatEntry | null | undefined, input: ChannelProgressDraftLineInput, options?: ChannelProgressLineOptions): string | undefined;","entrypoint":"channel-streaming","exportName":"formatChannelProgressDraftLineForEntry","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"ad582c3d988c6ba71760e6ccf10f896c98034a70ed5bed6924087b898de61d3e","declaration":"export function formatChannelProgressDraftText(params: { entry?: StreamingCompatEntry | null; lines: Array<string | ChannelProgressDraftLine>; seed?: string; random?: () => number; formatLine?: (line: string) => string; bullet?: string; narration?: string; plan?: readonly AgentPlanStep[]; }): string;","entrypoint":"channel-streaming","exportName":"formatChannelProgressDraftText","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"d54d2cfdcb9d85947f0ce5380faa272a982ab558b483cd2cd67a4cd4ced16fbb","declaration":"export function formatPlanChecklistLines(steps: readonly AgentPlanStep[], options: { maxLines: number; maxLineChars: number; }): string[];","entrypoint":"channel-streaming","exportName":"formatPlanChecklistLines","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"72ef52a7a184703e0ac9fec319b40f650c6ffc488153ebc1ff2d4c5ef0d2fe63","declaration":"export function getChannelStreamingConfigObject(entry: StreamingCompatEntry | null | undefined): ChannelStreamingConfig | undefined;","entrypoint":"channel-streaming","exportName":"getChannelStreamingConfigObject","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"a3392a9a24bc265b97c030d5e44169bf0b3a59738aae7ee2d3589c8840aa701a","declaration":"export function isChannelProgressDraftWorkToolName(name: string | null | undefined): boolean;","entrypoint":"channel-streaming","exportName":"isChannelProgressDraftWorkToolName","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"aff483a25d6521e170700a916357251285dfdb9a3592ac9031972e95be45fc5c","declaration":"export function isCommandToolName(name: string | undefined): boolean;","entrypoint":"channel-streaming","exportName":"isCommandToolName","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"ef5bf99c6a2812c4f53a4571747212cedd772a112fd40a0c7bbcb26f6392f0b5","declaration":"export function isPotentialTruncatedFinal(finalText: string): boolean;","entrypoint":"channel-streaming","exportName":"isPotentialTruncatedFinal","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"6afbf0355ecf5eb0ba8f89322eb73b19cce9dd021bfff3ca1ab1d018154e7680","declaration":"export function mergeChannelProgressDraftLine<TLine extends string | ChannelProgressDraftLine>(lines: TLine[], line: TLine, params: { maxLines: number; }): TLine[];","entrypoint":"channel-streaming","exportName":"mergeChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"63de02df0263b3534b1c84a1e45aad5201c859d04c49dcbe9cbe64131f9704be","declaration":"export function mergeChannelProgressDraftLine<TLine extends string | ChannelProgressDraftLine>(lines: TLine[], line: TLine, params: { maxLines: number; }): TLine[];","entrypoint":"channel-streaming","exportName":"mergeChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"844a3251dcba84a9735c855d7b6c930570cc486f3a1c5fc49b541572d52bb7d7","declaration":"export function normalizeAgentPlanSteps(value: unknown): AgentPlanStep[] | undefined;","entrypoint":"channel-streaming","exportName":"normalizeAgentPlanSteps","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"2458fcb3c1632a3d75c6ed4225937a65323729dc25fc000c643ecf8dbea743bf","declaration":"export function normalizeChannelProgressDraftLineIdentity(line: string | ChannelProgressDraftLine | undefined): string;","entrypoint":"channel-streaming","exportName":"normalizeChannelProgressDraftLineIdentity","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"b19d38e15e2054e826fd132198c606165fc369fb5a96f4e6bbbf7b89bee35ac2","declaration":"export function normalizeChannelProgressDraftLineIdentity(line: string | ChannelProgressDraftLine | undefined): string;","entrypoint":"channel-streaming","exportName":"normalizeChannelProgressDraftLineIdentity","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"68a1685dc820e99df49502335f46968732601db520530d33f360d5cb91006013","declaration":"export function resolveChannelPreviewStreamMode(entry: StreamingCompatEntry | null | undefined, defaultMode: StreamingMode): StreamingMode;","entrypoint":"channel-streaming","exportName":"resolveChannelPreviewStreamMode","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"c5a13690584bd18a166d82f922e922bf878093fa5718ab97522e368ecded3594","declaration":"export function resolveChannelProgressDraftConfig(entry: StreamingCompatEntry | null | undefined): ChannelStreamingProgressConfig;","entrypoint":"channel-streaming","exportName":"resolveChannelProgressDraftConfig","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
{"closureHash":"466f135f91ab8835a89f60d85a4b07b8779a077599d85578554bb416fa2818af","declaration":"export function resolveChannelProgressDraftLabel(params: { entry?: StreamingCompatEntry | null; seed?: string; random?: () => number; }): string | undefined;","entrypoint":"channel-streaming","exportName":"resolveChannelProgressDraftLabel","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"function","recordType":"export"}
@@ -1498,9 +1498,9 @@
{"closureHash":"1e8bcb2c8d8f5327f5b81b8c217f722f090dccba21ba3943324010f4f80a5a50","declaration":"export type AgentPlanStepStatus = AgentPlanStepStatus;","entrypoint":"channel-streaming","exportName":"AgentPlanStepStatus","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"b036fc26e5330dfd7da1af8839bb3c23e85283b9e16e252a659dd4bb0c35cd5e","declaration":"export type ChannelDeliveryStreamingConfig = ChannelDeliveryStreamingConfig;","entrypoint":"channel-streaming","exportName":"ChannelDeliveryStreamingConfig","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"67f3a704195e12f66ff1b8633639dc4de4af9769891b13e7ba7a575ca1efcdc6","declaration":"export type ChannelPreviewStreamingConfig = ChannelPreviewStreamingConfig;","entrypoint":"channel-streaming","exportName":"ChannelPreviewStreamingConfig","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"7a6eeb19346d69b173c5206d5f07414d44d551f38a285d06660a418f3905abd1","declaration":"export type ChannelProgressDraftLine = ChannelProgressDraftLine;","entrypoint":"channel-streaming","exportName":"ChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"c12b7e4cc3a993975e019731b33bb61788c570f915bb8bcb47957acd5112ab9a","declaration":"export type ChannelProgressDraftLineInput = ChannelProgressDraftLineInput;","entrypoint":"channel-streaming","exportName":"ChannelProgressDraftLineInput","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"53f64903f695dae063b9ad8ac74bbf6f24b17b0cd49e6cac5959366d587006c6","declaration":"export type ChannelProgressDraftLineKind = \"plan\" | \"tool\" | \"approval\" | \"patch\" | \"item\" | \"command-output\";","entrypoint":"channel-streaming","exportName":"ChannelProgressDraftLineKind","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"a9ec1f82184ba85d82bfdb8b4ebb8b8280e6dd0c63f08a61e55e92c6df005fcc","declaration":"export type ChannelProgressDraftLine = ChannelProgressDraftLine;","entrypoint":"channel-streaming","exportName":"ChannelProgressDraftLine","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"ff6c88eb7712cce2e0dd15c28c701a2c69b98f57155177c3fc624ff15547c2cc","declaration":"export type ChannelProgressDraftLineInput = ChannelProgressDraftLineInput;","entrypoint":"channel-streaming","exportName":"ChannelProgressDraftLineInput","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"2e63277f6176b51ecf26ad5b4a7ef14e94cc07dba09b4ed79f3d230b04789320","declaration":"export type ChannelProgressDraftLineKind = \"plan\" | \"tool\" | \"approval\" | \"patch\" | \"item\" | \"command-output\";","entrypoint":"channel-streaming","exportName":"ChannelProgressDraftLineKind","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"6c1d950cac70c6109a7fbc2af26e2c26ef13adcffba965a6f85fb93a02e87570","declaration":"export type ChannelProgressDraftRenderMode = ChannelProgressDraftRenderMode;","entrypoint":"channel-streaming","exportName":"ChannelProgressDraftRenderMode","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"4eac0e0bb29f83a8f9f884c37ea64774ee87d6996edd4d97b5ef5e5702005e01","declaration":"export type ChannelProgressLineOptions = ChannelProgressLineOptions;","entrypoint":"channel-streaming","exportName":"ChannelProgressLineOptions","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
{"closureHash":"de6224d5ef3d05e9e25fadc96c00f75c3df158ef94345e7c9f102b7234926fb7","declaration":"export type ChannelStreamingBlockConfig = ChannelStreamingBlockConfig;","entrypoint":"channel-streaming","exportName":"ChannelStreamingBlockConfig","importSpecifier":"openclaw/plugin-sdk/channel-streaming","kind":"type","recordType":"export"}
@@ -1890,8 +1890,8 @@
{"closureHash":"c26bfcd8451627b0eb75f7837e281b58dc127d19591d7c030691ca9bbe0edbf4","declaration":"export function createChatChannelPlugin<TResolvedAccount extends { accountId?: string | null; }, Probe = unknown, Audit = unknown>(params: { base: ChatChannelPluginBase<TResolvedAccount, Probe, Audit>; security?: ChannelSecurityAdapter<TResolvedAccount> | ChatChannelSecurityOptions<TResolvedAccount>; pairing?: ChannelPairingAdapter | ChatChannelPairingOptions; threading?: ChannelThreadingAdapter | ChatChannelThreadingOptions<TResolvedAccount>; outbound?: ChannelOutboundAdapter | ChatChannelAttachedOutboundOptions; }): ChannelPlugin<TResolvedAccount, Probe, Audit>;","entrypoint":"core","exportName":"createChatChannelPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"785b0f750c5bd20f9f3ca081886a5af79ee0e4d2c38f78f769bf994b234f5076","declaration":"export function createDedupeCache(options: DedupeCacheOptions): DedupeCache;","entrypoint":"core","exportName":"createDedupeCache","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"e2df8d235401aebf58eb71652fbeaedb42ca00aaa5042a76909ff2c48ba6fd54","declaration":"export function createSubsystemLogger(subsystem: string): SubsystemLogger;","entrypoint":"core","exportName":"createSubsystemLogger","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"b71327e7ce28ebadd8059c6ace39bff225972322d0991f5c5d26d3d5b22e53ea","declaration":"export function defineChannelPluginEntry<TPlugin>({ id, name, description, plugin, configSchema, setRuntime, registerCliMetadata, registerFull, registerCapabilities, }: DefineChannelPluginEntryOptions<TPlugin>): DefinedChannelPluginEntry<TPlugin>;","entrypoint":"core","exportName":"defineChannelPluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"8994a6476adc60e63744c8d6e69b1d702893a27354c4c07d293a560ec312405b","declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, reload, nodeHostCommands, securityAuditCollectors, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"core","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"a569ea024508826e0ec5d7d9222b23e2a522a4ed51d46833181838a2ee079f06","declaration":"export function defineChannelPluginEntry<TPlugin>({ id, name, description, plugin, configSchema, setRuntime, registerCliMetadata, registerFull, registerCapabilities, }: DefineChannelPluginEntryOptions<TPlugin>): DefinedChannelPluginEntry<TPlugin>;","entrypoint":"core","exportName":"defineChannelPluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"c331cbee6ea746b6e32557afff60143b600e330708763688396f28a4d86e5b8c","declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, reload, nodeHostCommands, securityAuditCollectors, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"core","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"0e0a9f6b22c433bdb1165e7707b1f9a1ddac1a544a8add00b503048cf157921f","declaration":"export function defineSetupPluginEntry<TPlugin>(plugin: TPlugin): { plugin: TPlugin; };","entrypoint":"core","exportName":"defineSetupPluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"3c5ce0c3733cbb038aeb914af1df5d701f362f0521921b8abd0c9214db9cc4b8","declaration":"export function delegateCompactionToRuntime(params: Parameters<ContextEngine[\"compact\"]>[0]): Promise<CompactResult>;","entrypoint":"core","exportName":"delegateCompactionToRuntime","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"2c282e0e308f9442bca7cdeb8e89a097531b1d54a692c9d86e5f39a8db1c2537","declaration":"export function deleteAccountFromConfigSection(params: { cfg: OpenClawConfig; sectionKey: string; accountId: string; clearBaseFields?: string[]; }): OpenClawConfig;","entrypoint":"core","exportName":"deleteAccountFromConfigSection","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
@@ -1938,7 +1938,7 @@
{"closureHash":"2e6ce1f4c1692270a00dc0cf08e2752a26739c3143f8091cb270063c6034605d","declaration":"export function tryReadSecretFileSync(filePath: string | undefined, label: string, options: CredentialFileReadOptions): string | undefined;\nexport function tryReadSecretFileSync(filePath: string | undefined, label: string, options?: FsSafeSecretFileReadOptions): string | undefined;\nexport function tryReadSecretFileSync(filePath: string, label: string, options: FsSafeSecretFileReadOptions | undefined, diagnostic: { configPath: string; }): ConfiguredCredentialResult<string>;\nexport function tryReadSecretFileSync(filePath: string | undefined, label: string, options: FsSafeSecretFileReadOptions | undefined, diagnostic: { configPath: string; }): CredentialResult<string>;","entrypoint":"core","exportName":"tryReadSecretFileSync","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export"}
{"closureHash":"b40933a11984425d14a7a479bda0d2cd14cbfa9371164774f39bebbf12861df7","declaration":"export const DEFAULT_ACCOUNT_ID: \"default\";","entrypoint":"core","exportName":"DEFAULT_ACCOUNT_ID","importSpecifier":"openclaw/plugin-sdk/core","kind":"const","recordType":"export"}
{"closureHash":null,"declaration":"export const DEFAULT_SECRET_FILE_MAX_BYTES: number;","entrypoint":"core","exportName":"DEFAULT_SECRET_FILE_MAX_BYTES","importSpecifier":"openclaw/plugin-sdk/core","kind":"const","recordType":"export"}
{"closureHash":"069afe164b45b50b6a4df310f4b257eff482dcd6ca93b1f9a5dcf08724eb44c2","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"core","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"d3f58785b718226c2b2b6ed6b27f196eebbc7fee2a8366a1b95aa0961dfb5a87","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"core","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"d2ff4de9ee3fd111c2cc64a3ee7e557d9f161af1b6b437ee7886bcb16e426317","declaration":"export type AgentPromptGuidance = AgentPromptGuidance;","entrypoint":"core","exportName":"AgentPromptGuidance","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"2841127a90e04467adfea8126cbf03655f44ddb089ad9e0d48833c2beea39cbd","declaration":"export type AgentPromptGuidanceEntry = AgentPromptGuidanceEntry;","entrypoint":"core","exportName":"AgentPromptGuidanceEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"aa0412acefe62caff12e5271ead0545504874e824380dc21cfc0566388a05f33","declaration":"export type AgentPromptSurfaceKind = \"openclaw_main\" | \"pi_main\" | \"codex_app_server\" | \"cli_backend\" | \"acp_backend\" | \"subagent\";","entrypoint":"core","exportName":"AgentPromptSurfaceKind","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
@@ -1970,10 +1970,10 @@
{"closureHash":"54ea426dde51859b572b4c1079d2b70b412096f73da2b8c265f2749d9f01cbb5","declaration":"export type NormalizedLocation = NormalizedLocation;","entrypoint":"core","exportName":"NormalizedLocation","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"8054ffbe71b91afced900ef8a06f5e368ac10c4f99ffc1c6f538a802856f61c6","declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"core","exportName":"OpenClawConfig","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"5189698d102b8b064eefe1442b008312973c3994fd6b203d2205725d7ee9d118","declaration":"export type OpenClawPluginActiveModelContext = OpenClawPluginActiveModelContext;","entrypoint":"core","exportName":"OpenClawPluginActiveModelContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"baddda61cd7c006909d5364a531fc1d362afca4d789674b0af5f5175f339af9c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"core","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"adad7f6d6c8f37f73c803f8decd56bc9db755e3449b59059de4cbef52f90f116","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"core","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"ef00c46e3e0d28e13b764ac1e513c26fd6c37fe2735409ec667b4a1c53f67f71","declaration":"export type OpenClawPluginCommandDefinition = OpenClawPluginCommandDefinition;","entrypoint":"core","exportName":"OpenClawPluginCommandDefinition","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"365beb5cee974639c2f35fc7a39088721ca8e9c618442830298b98033e9c768c","declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"core","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"97da01764d78d0f70235a550c8b07cfc43f847536728c366bc0ee813de5a38fb","declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"core","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"cbb6ea3c708ee0c18f8f9e33ff5f9faa8bc6c5a1c04b8ef4c5a9eacdaff46ea8","declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"core","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"a7ed83f0924f818b23cecb5a1f3591ff28b9499ccac9667a2b8505c2bc608ea9","declaration":"export type OpenClawPluginGatewayEventScope = OpenClawPluginGatewayEventScope;","entrypoint":"core","exportName":"OpenClawPluginGatewayEventScope","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"f81f224d9b837e6353b7a546c5a76b124bcf568fd1f1fd0c6881fda30c53120a","declaration":"export type OpenClawPluginGatewayEvents = OpenClawPluginGatewayEvents;","entrypoint":"core","exportName":"OpenClawPluginGatewayEvents","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"ddc2738dd0ece94ddde9a7c655f92c15ec6416645ecf932d4aa404c7b7761159","declaration":"export type OpenClawPluginService = OpenClawPluginService;","entrypoint":"core","exportName":"OpenClawPluginService","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
@@ -1994,7 +1994,7 @@
{"closureHash":"83237187559904a1350b07bfcaa20eb473e397884361e9543ccdaeddd6c2c12e","declaration":"export type PluginHeartbeatPromptContributionEvent = PluginHeartbeatPromptContributionEvent;","entrypoint":"core","exportName":"PluginHeartbeatPromptContributionEvent","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"34a5e1c2e9aa7908826a1b066f7b8556c277a1c8360d7f08ddb3f360f65752b5","declaration":"export type PluginHeartbeatPromptContributionResult = PluginHeartbeatPromptContributionResult;","entrypoint":"core","exportName":"PluginHeartbeatPromptContributionResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"919371e99b1060f63e326213daf09ccdb13783c6f338572061604fd00830630b","declaration":"export type PluginHookReplyDispatchContext = PluginHookReplyDispatchContext;","entrypoint":"core","exportName":"PluginHookReplyDispatchContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"e07bc6fe78f27730ce5a3bd178081944af763ad1017dd26873d27c5bb2cc48db","declaration":"export type PluginHookReplyDispatchEvent = PluginHookReplyDispatchEvent;","entrypoint":"core","exportName":"PluginHookReplyDispatchEvent","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"2f25d0e730ddaa24928b0499123759eefbcbe2762acb2732fd8524c1132adc47","declaration":"export type PluginHookReplyDispatchEvent = PluginHookReplyDispatchEvent;","entrypoint":"core","exportName":"PluginHookReplyDispatchEvent","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"95e984db261a1253a06a4a4ca1b7c46aec0c5db0f0f02342c28c6234a316d0cf","declaration":"export type PluginHookReplyDispatchResult = PluginHookReplyDispatchResult;","entrypoint":"core","exportName":"PluginHookReplyDispatchResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"f2ecb76f6e2927301caf2d2033095172a2dbb2ec490d9c84d04f34d1fbe9214e","declaration":"export type PluginHookReplyPayload = PluginHookReplyPayload;","entrypoint":"core","exportName":"PluginHookReplyPayload","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"b4b5a737d86be332e93717362f95a2359677a3ca4008d89d72121dbeba12fdfb","declaration":"export type PluginHookReplyPayloadSendingContext = PluginHookMessageContext;","entrypoint":"core","exportName":"PluginHookReplyPayloadSendingContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
@@ -2007,7 +2007,7 @@
{"closureHash":"f361587d79916f3d1cb73b4d296e1f37f86d799a641ce4a590ee784413d0b7ef","declaration":"export type PluginNextTurnInjectionRecord = PluginNextTurnInjectionRecord;","entrypoint":"core","exportName":"PluginNextTurnInjectionRecord","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"e4f6093e70826c8c7c02433082b9ac1b91755640096339111331fc45a494ca88","declaration":"export type PluginRunContextGetParams = PluginRunContextGetParams;","entrypoint":"core","exportName":"PluginRunContextGetParams","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"f9d14d70abca2a8771c0763736871361e4c223a8e4cbe3ae5c7a17751630b68e","declaration":"export type PluginRunContextPatch = PluginRunContextPatch;","entrypoint":"core","exportName":"PluginRunContextPatch","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"2cea6ec6d79e6fd4291233833057d122a7e96e2838c06409312f57d55734d4ad","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"core","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"ee07774fb1d0711bbe9a5d9f49bde457bfb0169000423e58c5a4da432d68f888","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"core","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"4a005fd56ceaa1de7ff2c6b45f08a48f48d7ff30e21d0e88d783d86a49e274f4","declaration":"export type PluginRuntimeLifecycleRegistration = PluginRuntimeLifecycleRegistration;","entrypoint":"core","exportName":"PluginRuntimeLifecycleRegistration","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"c599fdbfd9439bdcbbbf621dca995d2d6f87c7aba9606dc1970e1205dfea6357","declaration":"export type PluginSessionActionContext = PluginSessionActionContext;","entrypoint":"core","exportName":"PluginSessionActionContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
{"closureHash":"85a706fb9b56d5c5f41756729736cd4581b98d5cb0ab9a693b8261e4d936e499","declaration":"export type PluginSessionActionRegistration = PluginSessionActionRegistration;","entrypoint":"core","exportName":"PluginSessionActionRegistration","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export"}
@@ -2208,8 +2208,8 @@
{"closureHash":"0db968dad99d84ecef5202167daadd092e3b4f456270283d3fd61585ac2bbd5a","declaration":"export type DiscordComponentSendResult = DiscordComponentSendResult;","entrypoint":"discord","exportName":"DiscordComponentSendResult","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"084b46d7dd510eb182a4705559251e824220b57dbfa6dc54392507b72ba1815e","declaration":"export type DiscordOutboundTargetResolution = DiscordOutboundTargetResolution;","entrypoint":"discord","exportName":"DiscordOutboundTargetResolution","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"8054ffbe71b91afced900ef8a06f5e368ac10c4f99ffc1c6f538a802856f61c6","declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"discord","exportName":"OpenClawConfig","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"baddda61cd7c006909d5364a531fc1d362afca4d789674b0af5f5175f339af9c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"discord","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"2cea6ec6d79e6fd4291233833057d122a7e96e2838c06409312f57d55734d4ad","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"discord","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"adad7f6d6c8f37f73c803f8decd56bc9db755e3449b59059de4cbef52f90f116","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"discord","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"ee07774fb1d0711bbe9a5d9f49bde457bfb0169000423e58c5a4da432d68f888","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"discord","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"6b9967e919c1cd420c8356b4f9d40dbc81932b4b15a733eecdcfb2ad84f8e5d8","declaration":"export type ResolvedDiscordAccount = ResolvedDiscordAccount;","entrypoint":"discord","exportName":"ResolvedDiscordAccount","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"6bed5ca896b7034117e4757e2c6b4111dd5293dbad9416e3828dd6afa4e858ce","declaration":"export type ThreadBindingRecord = ThreadBindingRecord;","entrypoint":"discord","exportName":"ThreadBindingRecord","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
{"closureHash":"eaabd6155d6f25cbba09ef3c8f2b306f2202affdca4b47e5d67311ff4073fb0d","declaration":"export type ThreadBindingTargetKind = ThreadBindingTargetKind;","entrypoint":"discord","exportName":"ThreadBindingTargetKind","importSpecifier":"openclaw/plugin-sdk/discord","kind":"type","recordType":"export"}
@@ -2327,7 +2327,7 @@
{"closureHash":"4e9774b442212bd9346cf95095a42ece3c0e1df29f25e1a81e857981503b4a82","declaration":"export function deriveInboundMessageHookContext(ctx: FinalizedMsgContext, overrides?: { content?: string; messageId?: string; }): CanonicalInboundMessageHookContext;","entrypoint":"hook-runtime","exportName":"deriveInboundMessageHookContext","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
{"closureHash":"9bb995aaaf485864e8c02dc5cc71fe5bff42e4d202c20554efc2f3d2d5c2576d","declaration":"export function fireAndForgetBoundedHook(task: () => Promise<unknown>, label: string, logger?: (message: string) => void, options?: FireAndForgetBoundedHookOptions): void;","entrypoint":"hook-runtime","exportName":"fireAndForgetBoundedHook","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
{"closureHash":"46f0ed9dbb3fb5cd6d3898f8dd762508eb93dac3255841d96ae9b25d2ed84c96","declaration":"export function fireAndForgetHook(task: Promise<unknown>, label: string, logger?: (message: string) => void): void;","entrypoint":"hook-runtime","exportName":"fireAndForgetHook","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
{"closureHash":"49df47b1e22b1bf233f60af2ea7fcbd3f40306fe5449e464d088e8565701fb97","declaration":"export function initializeGlobalHookRunner(registry: GlobalHookRunnerRegistry): void;","entrypoint":"hook-runtime","exportName":"initializeGlobalHookRunner","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
{"closureHash":"111c671b6f4c7fbc3a6fed7581e7be7e61f69c0da1a2fe9935618fb60d5d58f2","declaration":"export function initializeGlobalHookRunner(registry: GlobalHookRunnerRegistry): void;","entrypoint":"hook-runtime","exportName":"initializeGlobalHookRunner","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
{"closureHash":"05bb072b6ae34d0271798d98d9083ec8290d4123c349862722097a7e87866d07","declaration":"export function registerInternalHook(eventKey: string, handler: InternalHookHandler): void;","entrypoint":"hook-runtime","exportName":"registerInternalHook","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
{"closureHash":"f573a2f2542169912da9757a6aac432d067434e759cf40035079ea1d107b7e38","declaration":"export function resetGlobalHookRunner(): void;","entrypoint":"hook-runtime","exportName":"resetGlobalHookRunner","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
{"closureHash":"e26c70aedd4d93db7a26367de5a935f8335b657b6333f34797a5349f04589b20","declaration":"export function toInternalMessageReceivedContext(canonical: CanonicalInboundMessageHookContext): MessageReceivedHookContext;","entrypoint":"hook-runtime","exportName":"toInternalMessageReceivedContext","importSpecifier":"openclaw/plugin-sdk/hook-runtime","kind":"function","recordType":"export"}
@@ -2343,21 +2343,21 @@
{"category":null,"entrypoint":"inbound-event-delivery","importSpecifier":"openclaw/plugin-sdk/inbound-event-delivery","recordType":"module"}
{"closureHash":"bd8acef57a602ffc7a70848afb14bad6e37c892ded35b20ba0d3452336088830","declaration":"export function createInboundEventDeliveryCorrelation(params: { targetsMatch: (expected: string, actual: string) => boolean; }): { begin(sessionKey: string | undefined, event: ActiveInboundEvent, options?: { inboundEventKind?: string; }): () => void; notify(notification: InboundEventDeliveryNotification): void; };","entrypoint":"inbound-event-delivery","exportName":"createInboundEventDeliveryCorrelation","importSpecifier":"openclaw/plugin-sdk/inbound-event-delivery","kind":"function","recordType":"export"}
{"category":null,"entrypoint":"inbound-reply-dispatch","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","recordType":"module"}
{"closureHash":"9e88cbd2dceec5532df844f561b1950553b16867ef124ab1264cb4060a4637b1","declaration":"export function dispatchChannelInboundReply(params: AssembledInboundReply): Promise<ChannelTurnResult>;","entrypoint":"inbound-reply-dispatch","exportName":"dispatchChannelInboundReply","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"e865ef489b7339894e781918fa1a7d0f40605a9d1a60046ba2f7265b0f189b4c","declaration":"export function dispatchInboundReplyWithBase(params: BuildInboundReplyDispatchBaseParams & Pick<RecordInboundSessionAndDispatchReplyParams, \"deliver\" | \"durable\" | \"onRecordError\" | \"onDispatchError\" | \"replyOptions\">): Promise<void>;","entrypoint":"inbound-reply-dispatch","exportName":"dispatchInboundReplyWithBase","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"223b7cf0db02a8db31985c199faa1168e84fd3d6e45727254545ecf2684608ed","declaration":"export function dispatchChannelInboundReply(params: AssembledInboundReply): Promise<ChannelTurnResult>;","entrypoint":"inbound-reply-dispatch","exportName":"dispatchChannelInboundReply","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"d9e22719939ee559c1540e8fa07c04625260d2d3a925979f9578c6000628f899","declaration":"export function dispatchInboundReplyWithBase(params: BuildInboundReplyDispatchBaseParams & Pick<RecordInboundSessionAndDispatchReplyParams, \"deliver\" | \"durable\" | \"onRecordError\" | \"onDispatchError\" | \"replyOptions\">): Promise<void>;","entrypoint":"inbound-reply-dispatch","exportName":"dispatchInboundReplyWithBase","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"8a142089acc4d9428ed552977f90f17b2283c109cd1c66b91b51b3653d455eea","declaration":"export function hasFinalInboundReplyDispatch(result: ChannelTurnDispatchResultLike, signals?: Pick<ChannelTurnVisibleDeliverySignals, \"fallbackDelivered\" | \"deliverySummaryDelivered\">): boolean;","entrypoint":"inbound-reply-dispatch","exportName":"hasFinalInboundReplyDispatch","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"bb4c861ed6a9b1d70200aea7f6356a65a71491b098f8f3e8866241e5481f9aec","declaration":"export function hasVisibleInboundReplyDispatch(result: ChannelTurnDispatchResultLike, signals?: ChannelTurnVisibleDeliverySignals): boolean;","entrypoint":"inbound-reply-dispatch","exportName":"hasVisibleInboundReplyDispatch","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"65f5f2725c1124096e437bcf5894983eee1023f7033be886f1a506044b77c58e","declaration":"export function recordChannelBotPairLoopAndCheckSuppression(params: ChannelBotLoopProtectionFacts): PairLoopGuardResult;","entrypoint":"inbound-reply-dispatch","exportName":"recordChannelBotPairLoopAndCheckSuppression","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"33b4280a69de6a4a87acf915c6d694b9ee41fc4f0262a1bb9836c46d53fe337c","declaration":"export function recordDroppedChannelInboundHistory(params: { input: NormalizedTurnInput; preflight: PreflightFacts; admission?: ChannelTurnAdmission; }): Promise<void>;","entrypoint":"inbound-reply-dispatch","exportName":"recordDroppedChannelInboundHistory","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"33b4280a69de6a4a87acf915c6d694b9ee41fc4f0262a1bb9836c46d53fe337c","declaration":"export function recordDroppedChannelTurnHistory(params: { input: NormalizedTurnInput; preflight: PreflightFacts; admission?: ChannelTurnAdmission; }): Promise<void>;","entrypoint":"inbound-reply-dispatch","exportName":"recordDroppedChannelTurnHistory","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"98e0cc16352b7dfcceb4957f8cd2acfe3c2b3acb223c42a5cfb885e088fcb04c","declaration":"export function resolveInboundReplyDispatchCounts(result: ChannelTurnDispatchResultLike): Record<ReplyDispatchKind, number>;","entrypoint":"inbound-reply-dispatch","exportName":"resolveInboundReplyDispatchCounts","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"8924950cb2ab1f70ab55bb8d44587dc2d246e06c10684e81c7776c74ed87a2d8","declaration":"export function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: RunChannelTurnParams<TRaw, TDispatchResult, ChannelProviderOwnedMessageSendingDeliveryAdapter>): Promise<ChannelTurnResult<TDispatchResult>>;\nexport function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: ChannelInboundEventRunnerParams<TRaw, TDispatchResult>): Promise<ChannelTurnResult<TDispatchResult>>;","entrypoint":"inbound-reply-dispatch","exportName":"runChannelInboundEvent","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"6162750b963f3e70be551f4eb4515932b6d108d9dd9d4dc1d18ee7096ecab3f1","declaration":"export function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: RunChannelTurnParams<TRaw, TDispatchResult, ChannelProviderOwnedMessageSendingDeliveryAdapter>): Promise<ChannelTurnResult<TDispatchResult>>;\nexport function runChannelInboundEvent<TRaw, TDispatchResult = DispatchFromConfigResult>(params: ChannelInboundEventRunnerParams<TRaw, TDispatchResult>): Promise<ChannelTurnResult<TDispatchResult>>;","entrypoint":"inbound-reply-dispatch","exportName":"runChannelInboundEvent","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"2c68496a174872b31aaf1ac8fad2789deb79d490c5ffbcb157325f1c95d1b51f","declaration":"export function runPreparedInboundReply<TDispatchResult>(params: PreparedChannelTurn<TDispatchResult>): Promise<ChannelTurnResult<TDispatchResult>>;","entrypoint":"inbound-reply-dispatch","exportName":"runPreparedInboundReply","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"function","recordType":"export"}
{"closureHash":"2887dec3a9c4ee96e2d46f8dd7a18894b8e3179f45c2bf634343df93012a55b4","declaration":"export const deliverInboundReplyWithMessageSendContext: (params: DurableInboundReplyDeliveryParams) => Promise<{ status: \"not_applicable\"; reason: \"non_final\";} | { status: \"unsupported\"; reason: \"missing_channel\" | \"missing_target\" | \"missing_outbound_handler\" | \"capability_mismatch\"; capability?: DurableFinalDeliveryRequirement;} | { status: \"handled_visible\"; delivery: ChannelDeliveryResult;} | { status: \"handled_no_send\"; reason: \"no_visible_result\"; delivery: ChannelDeliveryResult;} | { status: \"failed\"; error: unknown; sentBeforeError?: true;}>;","entrypoint":"inbound-reply-dispatch","exportName":"deliverInboundReplyWithMessageSendContext","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"const","recordType":"export"}
{"closureHash":"e1642fb62352886de78856a9c6d9fdefcbf53a8dd54702f7de402c60fcaab4bb","declaration":"export type AssembledInboundReply = AssembledChannelTurn;","entrypoint":"inbound-reply-dispatch","exportName":"AssembledInboundReply","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"879bf9f1b156e597b1138ee3576f48860b0cb572294aaed088ea2cf0bacfe021","declaration":"export const deliverInboundReplyWithMessageSendContext: (params: DurableInboundReplyDeliveryParams) => Promise<{ status: \"not_applicable\"; reason: \"non_final\";} | { status: \"unsupported\"; reason: \"missing_channel\" | \"missing_target\" | \"missing_outbound_handler\" | \"capability_mismatch\"; capability?: DurableFinalDeliveryRequirement;} | { status: \"handled_visible\"; delivery: ChannelDeliveryResult;} | { status: \"handled_no_send\"; reason: \"no_visible_result\"; delivery: ChannelDeliveryResult;} | { status: \"failed\"; error: unknown; sentBeforeError?: true;}>;","entrypoint":"inbound-reply-dispatch","exportName":"deliverInboundReplyWithMessageSendContext","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"const","recordType":"export"}
{"closureHash":"5de6d107d40b06837a6b1d69d87411950714ad38aa80270120c2bf72f9f933b2","declaration":"export type AssembledInboundReply = AssembledChannelTurn;","entrypoint":"inbound-reply-dispatch","exportName":"AssembledInboundReply","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"3de0d6d1bb8f9a83bd1c6e57aa8618e3fea71054236cd530c555e348bd0b7702","declaration":"export type ChannelBotLoopProtectionFacts = ChannelBotLoopProtectionFacts;","entrypoint":"inbound-reply-dispatch","exportName":"ChannelBotLoopProtectionFacts","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"f0da845bbdf49b30f6718a4b7ff012a0536deb98f65418583555dc90825797ca","declaration":"export type ChannelInboundDroppedHistoryOptions = ChannelTurnDroppedHistoryOptions;","entrypoint":"inbound-reply-dispatch","exportName":"ChannelInboundDroppedHistoryOptions","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"b909039017728e976e5ce869d4d153562a184b792ff6d208ee5eab13eee40c6c","declaration":"export type ChannelInboundEventRunnerParams<TRaw, TDispatchResult = DispatchFromConfigResult> = ChannelInboundEventRunnerParams<TRaw, TDispatchResult>;","entrypoint":"inbound-reply-dispatch","exportName":"ChannelInboundEventRunnerParams","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"413bb9a5c066b3eee5e30d22d8d047d9c0fe05576551f1f992f07b95f6690b56","declaration":"export type ChannelInboundEventRunnerParams<TRaw, TDispatchResult = DispatchFromConfigResult> = ChannelInboundEventRunnerParams<TRaw, TDispatchResult>;","entrypoint":"inbound-reply-dispatch","exportName":"ChannelInboundEventRunnerParams","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"f0da845bbdf49b30f6718a4b7ff012a0536deb98f65418583555dc90825797ca","declaration":"export type ChannelTurnDroppedHistoryOptions = ChannelTurnDroppedHistoryOptions;","entrypoint":"inbound-reply-dispatch","exportName":"ChannelTurnDroppedHistoryOptions","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"b145a01f8a24a98b66e723274b24f5a87c3b7034ac7d5c551a92b0cfdb041d51","declaration":"export type ChannelTurnRecordOptions = ChannelTurnRecordOptions;","entrypoint":"inbound-reply-dispatch","exportName":"ChannelTurnRecordOptions","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
{"closureHash":"4c1290dcec6d7fac7aec703ccec8b6b790ebbd4fa12c3c3c1d07f55b86075b5e","declaration":"export type DurableInboundReplyDeliveryParams = DurableInboundReplyDeliveryParams;","entrypoint":"inbound-reply-dispatch","exportName":"DurableInboundReplyDeliveryParams","importSpecifier":"openclaw/plugin-sdk/inbound-reply-dispatch","kind":"type","recordType":"export"}
@@ -3185,34 +3185,34 @@
{"closureHash":"0a8eee30ac3d7beb17a67ed364602e375580d8fe64711e4a88bb77eabb1354f0","declaration":"export function addMeetingSetupCheck(status: MeetingSetupStatus, check: MeetingSetupCheck): MeetingSetupStatus;","entrypoint":"meeting-runtime","exportName":"addMeetingSetupCheck","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"a4294716c3bb64b8732f33b331506a14e4f2fba59f382699961c9db8677e6774","declaration":"export function asMeetingBrowserTabs(result: unknown): MeetingBrowserCandidateTab[];","entrypoint":"meeting-runtime","exportName":"asMeetingBrowserTabs","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"b39bf4bdb91f0aeabac8cbd0ee8dc21afceae20faf463c6a2657258f2aa07976","declaration":"export function buildMeetingSoxAudioCommands(params: MeetingSoxAudioCommandParams): { inputCommand: string[]; outputCommand: string[]; };","entrypoint":"meeting-runtime","exportName":"buildMeetingSoxAudioCommands","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"c095b6b95837e7e337439bd0e67447de11fc82a7e5367d35916a626fda182954","declaration":"export function callMeetingBrowserProxyOnNode(params: { runtime: PluginRuntime; adapter: NodeAdapter; nodeId: string; } & MeetingBrowserRequestParams): Promise<unknown>;","entrypoint":"meeting-runtime","exportName":"callMeetingBrowserProxyOnNode","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"a3a8a340d44f582824cea41687149fbc3bc485339d1c7e9f88fd6ac7ed8f705f","declaration":"export function callMeetingBrowserProxyOnNode(params: { runtime: PluginRuntime; adapter: NodeAdapter; nodeId: string; } & MeetingBrowserRequestParams): Promise<unknown>;","entrypoint":"meeting-runtime","exportName":"callMeetingBrowserProxyOnNode","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"c5fcd1d157edcb4773235adfaf8051e3ec7ca428cb7916b6d55f2511affab56c","declaration":"export function convertMeetingBridgeAudioForStt(audio: Buffer, audioFormat: MeetingRealtimeAudioFormat): Buffer;","entrypoint":"meeting-runtime","exportName":"convertMeetingBridgeAudioForStt","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"aa9063c27c5ff714d3653571c4a2a71e9d2eea5609b161f03e4738e15411358b","declaration":"export function convertMeetingTtsAudioForBridge(audio: Buffer, sampleRate: number, audioFormat: MeetingRealtimeAudioFormat, outputFormat?: string, platformName?: string): Buffer;","entrypoint":"meeting-runtime","exportName":"convertMeetingTtsAudioForBridge","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"2ce324817beb6f1084905740c0e7f6f0b502a00bc9b671692281efa393fbee06","declaration":"export function createLocalMeetingRealtimeAudioTransport(params: { inputCommand: string[]; outputCommand: string[]; bargeInInputCommand?: string[]; bargeInRmsThreshold: number; bargeInPeakThreshold: number; bargeInCooldownMs: number; logger: RuntimeLogger; logScope: string; audioFormat?: MeetingRealtimeAudioFormat; spawn?: MeetingRealtimeAudioSpawn; }): MeetingRealtimeAudioTransport;","entrypoint":"meeting-runtime","exportName":"createLocalMeetingRealtimeAudioTransport","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"3f377fa6544ae8a2c1cf3d590d7ead61ef0c30db19d0eab3119ce621686d2c20","declaration":"export function createMeetingBrowserNodeCaller(params: { runtime: PluginRuntime; adapter: NodeAdapter; nodeId: string; }): MeetingBrowserRequestCaller;","entrypoint":"meeting-runtime","exportName":"createMeetingBrowserNodeCaller","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"730955718e569e9288a3578f07a92342c711430eb81506061ae199935da8c69a","declaration":"export function createLocalMeetingRealtimeAudioTransport(params: { inputCommand: string[]; outputCommand: string[]; bargeInInputCommand?: string[]; bargeInRmsThreshold: number; bargeInPeakThreshold: number; bargeInCooldownMs: number; logger: RuntimeLogger; logScope: string; audioFormat?: MeetingRealtimeAudioFormat; spawn?: MeetingRealtimeAudioSpawn; }): MeetingRealtimeAudioTransport;","entrypoint":"meeting-runtime","exportName":"createLocalMeetingRealtimeAudioTransport","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"1c1ca21af6a58610b36bbb7b6366f94f63026d04ca8f787065ea3a38e0fae2fa","declaration":"export function createMeetingBrowserNodeCaller(params: { runtime: PluginRuntime; adapter: NodeAdapter; nodeId: string; }): MeetingBrowserRequestCaller;","entrypoint":"meeting-runtime","exportName":"createMeetingBrowserNodeCaller","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"f244ca8c47f556c9f388953cf9a7581c7d4d413af93e0dfa1462779e6a687a7c","declaration":"export function createMeetingBrowserNodeInvokePolicy(options: MeetingBrowserNodePolicyOptions): OpenClawPluginNodeInvokePolicy;","entrypoint":"meeting-runtime","exportName":"createMeetingBrowserNodeInvokePolicy","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"1aa4e3ff39a2cbe162421c62b1fa4a362973381d4d9ff15c671249b1ebd566bc","declaration":"export function createMeetingNodeHost(options: MeetingNodeHostOptions): { handleCommand(paramsJSON?: string | null): Promise<string>; };","entrypoint":"meeting-runtime","exportName":"createMeetingNodeHost","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"eaa8ed5419843d8a9e1172d3f1ca1d555242d88fcc979e5894fc68449b69cda6","declaration":"export function createMeetingRealtimeEngineBindings(params: { platform: MeetingPlatformRuntimeMetadata; config: { realtime: { agentId?: string; toolPolicy: RealtimeVoiceAgentConsultToolPolicy; }; }; fullConfig: OpenClawConfig; runtime: PluginRuntime; logger: RuntimeLogger; }): { platform: MeetingRuntimePlatform; consultAgent: (consult: MeetingAgentConsultParams) => Promise<{ text: string; }>; tools: RealtimeVoiceTool[]; handleToolCall: (call: MeetingRealtimeToolCallParams) => Promise<void>; };","entrypoint":"meeting-runtime","exportName":"createMeetingRealtimeEngineBindings","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"db5d945a741b28a20bc85cf43d02d0db7507a107e4e90c608d45db602c7b670f","declaration":"export function createMeetingRealtimeEngineBindings(params: { platform: MeetingPlatformRuntimeMetadata; config: { realtime: { agentId?: string; toolPolicy: RealtimeVoiceAgentConsultToolPolicy; }; }; fullConfig: OpenClawConfig; runtime: PluginRuntime; logger: RuntimeLogger; }): { platform: MeetingRuntimePlatform; consultAgent: (consult: MeetingAgentConsultParams) => Promise<{ text: string; }>; tools: RealtimeVoiceTool[]; handleToolCall: (call: MeetingRealtimeToolCallParams) => Promise<void>; };","entrypoint":"meeting-runtime","exportName":"createMeetingRealtimeEngineBindings","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"9124db05923060c467edb149bd8abdc8be1d00d00f867cf84600972923a58489","declaration":"export function createMeetingSession<TTransport extends string, TMode extends string, TToolPolicy extends string>(params: { platform: MeetingPlatformRuntimeMetadata; config: { realtime: { provider?: string; voiceProvider?: string; transcriptionProvider?: string; model?: string; toolPolicy: TToolPolicy; }; }; resolved: MeetingResolvedJoin<TTransport, TMode>; createdAt: string; }): MeetingSessionRecord<TTransport, TMode, { enabled: boolean; strategy: string; provider: string | undefined; model: string | undefined; transcriptionProvider: string | undefined; toolPolicy: TToolPolicy; }>;","entrypoint":"meeting-runtime","exportName":"createMeetingSession","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"fb276e07e395ab19177b3d7967fd0a8fcda79130883f15092a4a306b826481b9","declaration":"export function createMeetingSetupStatus(checks: MeetingSetupCheck[]): MeetingSetupStatus;","entrypoint":"meeting-runtime","exportName":"createMeetingSetupStatus","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"1afc7dd07d0ee47bbf81cc04ddf413ab16ed86dc50128dd8d1facfbd18235b0a","declaration":"export function createMeetingVoiceCallGateway(params: { config: MeetingVoiceCallConfig; runtime: PluginRuntime; surface: MeetingVoiceCallSurface; connectClient: (params: { config: MeetingVoiceCallConfig; surface: MeetingVoiceCallSurface; }) => Promise<MeetingVoiceCallGatewayClient>; }): MeetingVoiceCallGateway;","entrypoint":"meeting-runtime","exportName":"createMeetingVoiceCallGateway","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"1dbabe0009591d1ce190b4a0f41354d7f5252b5f11e07eae4b3ce2658494b569","declaration":"export function createNodeMeetingRealtimeAudioTransport(params: { runtime: PluginRuntime; nodeId: string; bridgeId: string; logger: RuntimeLogger; commandName: string; logScope: string; logPrefix: string; audioFormat?: MeetingRealtimeAudioFormat; }): MeetingRealtimeAudioTransport;","entrypoint":"meeting-runtime","exportName":"createNodeMeetingRealtimeAudioTransport","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"be1012b211d000f3aef944050b3c8273f95c68b0b7912b50f32bb411e442f8ae","declaration":"export function createMeetingVoiceCallGateway(params: { config: MeetingVoiceCallConfig; runtime: PluginRuntime; surface: MeetingVoiceCallSurface; connectClient: (params: { config: MeetingVoiceCallConfig; surface: MeetingVoiceCallSurface; }) => Promise<MeetingVoiceCallGatewayClient>; }): MeetingVoiceCallGateway;","entrypoint":"meeting-runtime","exportName":"createMeetingVoiceCallGateway","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"262ceb116cf3323327183ea38bc18556966f80a9b68265ce4c65fe975e770e58","declaration":"export function createNodeMeetingRealtimeAudioTransport(params: { runtime: PluginRuntime; nodeId: string; bridgeId: string; logger: RuntimeLogger; commandName: string; logScope: string; logPrefix: string; audioFormat?: MeetingRealtimeAudioFormat; }): MeetingRealtimeAudioTransport;","entrypoint":"meeting-runtime","exportName":"createNodeMeetingRealtimeAudioTransport","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"c0987b15a391a92d53d3e4e12b61eb122f9547fcf4f45478cdd3c5a8973a3e52","declaration":"export function endMeetingVoiceCallGatewayCall(params: { gateway: MeetingVoiceCallGateway; callId: string; }): Promise<void>;","entrypoint":"meeting-runtime","exportName":"endMeetingVoiceCallGatewayCall","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"b3ebc10fe7ab372e1317eaa8f78621cf277bba1e33fda57acf2254f6759d1e9d","declaration":"export function getMeetingVoiceCallGatewayCall(params: { gateway: MeetingVoiceCallGateway; callId: string; }): Promise<MeetingVoiceCallStatusResult>;","entrypoint":"meeting-runtime","exportName":"getMeetingVoiceCallGatewayCall","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"aac088df8e80d9ce89c45feccdb04ace3ae4417b3fcdd0f058410ddf25c96b46","declaration":"export function isMeetingVoiceCallMissingError(error: unknown): boolean;","entrypoint":"meeting-runtime","exportName":"isMeetingVoiceCallMissingError","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"63227ecc5473ba68e77a4ee0dd5c19a43aadc9db16ddd4734d125ada56e4de2c","declaration":"export function joinMeetingViaVoiceCallGateway(params: { config: MeetingVoiceCallConfig; gateway: MeetingVoiceCallGateway; surface: MeetingVoiceCallSurface; dialInNumber: string; dtmfSequence?: string; logger?: RuntimeLogger; message?: string; requesterSessionKey?: string; agentId?: string; sessionKey?: string; }): Promise<MeetingVoiceCallJoinResult>;","entrypoint":"meeting-runtime","exportName":"joinMeetingViaVoiceCallGateway","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"ea027d81a8e6d2c4eaa3a082b7b1e485c907ac5185cd98bf6ba8f0a915e77816","declaration":"export function joinMeetingViaVoiceCallGateway(params: { config: MeetingVoiceCallConfig; gateway: MeetingVoiceCallGateway; surface: MeetingVoiceCallSurface; dialInNumber: string; dtmfSequence?: string; logger?: RuntimeLogger; message?: string; requesterSessionKey?: string; agentId?: string; sessionKey?: string; }): Promise<MeetingVoiceCallJoinResult>;","entrypoint":"meeting-runtime","exportName":"joinMeetingViaVoiceCallGateway","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"bac9621cd025754fbcd4c21409b06eb0503405db81f35cac993aaf0b881ab3e1","declaration":"export function leaveMeetingWithBrowser<Session, Mode extends string, Health extends MeetingBrowserHealth, Transcript extends MeetingTranscriptSnapshot>(params: { adapter: BrowserAdapter<Session, Mode, Health, Transcript>; callBrowser: MeetingBrowserRequestCaller; launch: boolean; meetingSessionId?: string; meetingUrl: string; tab: MeetingBrowserTab; timeoutMs: number; }): Promise<{ left: boolean; note: string; }>;","entrypoint":"meeting-runtime","exportName":"leaveMeetingWithBrowser","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"c7b1aeac134b2070d053adf33026d876998b852ccd65cd2c9667119b1a1abee2","declaration":"export function openMeetingWithBrowser<Session extends MeetingBrowserJoinSession<Mode>, Mode extends string, Health extends MeetingBrowserHealth & { browserTitle?: string; browserUrl?: string; notes?: string[]; }, Transcript extends MeetingTranscriptSnapshot>(params: { adapter: BrowserAdapter<Session, Mode, Health, Transcript>; callBrowser: MeetingBrowserRequestCaller; config: MeetingBrowserControllerConfig; session: Session; }): Promise<{ launched: boolean; browser?: Health; tab?: MeetingBrowserTab; }>;","entrypoint":"meeting-runtime","exportName":"openMeetingWithBrowser","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"34858979bd248799c2215d9c7bdd5d4a6b27660c9173bfca2e50dd4373ac27db","declaration":"export function readMeetingBrowserTab(result: unknown): MeetingBrowserCandidateTab | undefined;","entrypoint":"meeting-runtime","exportName":"readMeetingBrowserTab","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"566d131fb9ec888fb5441ac6e7ae1623e8f5d12a2870d3fc94db607d57f70205","declaration":"export function readMeetingTranscriptWithBrowser<Session, Mode extends string, Health extends MeetingBrowserHealth, Transcript extends MeetingTranscriptSnapshot>(params: { adapter: BrowserAdapter<Session, Mode, Health, Transcript>; callBrowser: MeetingBrowserRequestCaller; finalize: boolean; meetingUrl: string; meetingSessionId: string; tab: MeetingBrowserTab; timeoutMs: number; }): Promise<Transcript>;","entrypoint":"meeting-runtime","exportName":"readMeetingTranscriptWithBrowser","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"0b42493cc0197096c4847c2d6e149c5581580abdda448d07eb1c6d77a775bc4a","declaration":"export function recoverMeetingBrowserTab<Session, Mode extends string, Health extends MeetingBrowserHealth & { browserTitle?: string; browserUrl?: string; notes?: string[]; }, Transcript extends MeetingTranscriptSnapshot>(params: { adapter: BrowserAdapter<Session, Mode, Health, Transcript>; allowSessionAdoption?: boolean; autoJoin?: boolean; callBrowser: MeetingBrowserRequestCaller; captureCaptions?: boolean; config: MeetingBrowserControllerConfig; locationLabel: string; meetingSessionId?: string; mode: Mode; requestedMeetingUrl: string | undefined; readOnly?: boolean; timeoutMs?: number; trackedMeetingUrl: string | undefined; trackedTargetId: string | undefined; }): Promise<{ found: boolean; targetId?: string; tab?: MeetingBrowserCandidateTab; browser?: Health; message: string; }>;","entrypoint":"meeting-runtime","exportName":"recoverMeetingBrowserTab","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"5ab9dd272d8c051757a6c819d4eca7ed31aa8c5f875af8a3bb89179a0edd7199","declaration":"export function resolveLocalMeetingBrowserRequest(runtime: PluginRuntime): Promise<MeetingBrowserRequestCaller>;","entrypoint":"meeting-runtime","exportName":"resolveLocalMeetingBrowserRequest","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"fa38cc4d1d86906683a1560c0ea440c917d87c09e7a9e993635ca40bd04be06e","declaration":"export function resolveMeetingBrowserNode(params: { runtime: PluginRuntime; adapter: NodeAdapter; requestedNode?: string; }): Promise<string>;","entrypoint":"meeting-runtime","exportName":"resolveMeetingBrowserNode","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"665fea9971e019a354b7190ef40192f88614552ad8b7f21e0419d4a6fd35afb0","declaration":"export function resolveMeetingBrowserNodeInfo(params: { runtime: PluginRuntime; adapter: NodeAdapter; requestedNode?: string; }): Promise<MeetingBrowserNodeInfo>;","entrypoint":"meeting-runtime","exportName":"resolveMeetingBrowserNodeInfo","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"d4ddcb7c9f58a74c43e059242b11468ba511e30f16ea8d4658ede47afd11c37b","declaration":"export function resolveLocalMeetingBrowserRequest(runtime: PluginRuntime): Promise<MeetingBrowserRequestCaller>;","entrypoint":"meeting-runtime","exportName":"resolveLocalMeetingBrowserRequest","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"796837e579418f2dd65b458cf95b2db280a16296c38bf4bf3b4ee5a7cbf03825","declaration":"export function resolveMeetingBrowserNode(params: { runtime: PluginRuntime; adapter: NodeAdapter; requestedNode?: string; }): Promise<string>;","entrypoint":"meeting-runtime","exportName":"resolveMeetingBrowserNode","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"e1520bc6b6628f7c3b3f6d013c76e61124226ae9dc060ace210009fba4c6c637","declaration":"export function resolveMeetingBrowserNodeInfo(params: { runtime: PluginRuntime; adapter: NodeAdapter; requestedNode?: string; }): Promise<MeetingBrowserNodeInfo>;","entrypoint":"meeting-runtime","exportName":"resolveMeetingBrowserNodeInfo","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"f21196c9ea8ab90248ffdcdef3e942f1247ee2b9064ddb9757fffe352362c779","declaration":"export function resolveMeetingRealtimeAudioFormat(audioFormat: MeetingRealtimeAudioFormat): RealtimeVoiceAudioFormat;","entrypoint":"meeting-runtime","exportName":"resolveMeetingRealtimeAudioFormat","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"521dc5c262524a709cdd27cdc88e95004073da8223537bcbc73d5d423172dc2b","declaration":"export function speakMeetingViaVoiceCallGateway(params: { gateway: MeetingVoiceCallGateway; callId: string; message: string; }): Promise<void>;","entrypoint":"meeting-runtime","exportName":"speakMeetingViaVoiceCallGateway","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"267c6ee7e2964f31fc3636d5ae4200deb8368b9cd7540c6a358c7d49f9ab8efc","declaration":"export function startMeetingAgentRealtimeEngine(params: { config: MeetingRealtimeEngineConfig; fullConfig: OpenClawConfig; runtime: PluginRuntime; platform: MeetingRuntimePlatform; meetingSessionId: string; requesterSessionKey?: string; logPrefix?: \"node\"; transport: MeetingRealtimeAudioTransport; logger: RuntimeLogger; providers?: RealtimeTranscriptionProviderPlugin[]; consultAgent: (params: MeetingAgentConsultParams) => Promise<{ text: string; }>; }): Promise<MeetingRealtimeAudioEngineHandle>;","entrypoint":"meeting-runtime","exportName":"startMeetingAgentRealtimeEngine","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"90370257fd10a15fa4c5ea1685b929f72557213fc558d6eff6cbb40c2245e674","declaration":"export function startMeetingRealtimeEngine(params: { config: MeetingRealtimeEngineConfig; fullConfig: OpenClawConfig; runtime: PluginRuntime; platform: MeetingRuntimePlatform; meetingSessionId: string; requesterSessionKey?: string; logPrefix?: \"node\"; talkSessionId?: string; talkContext?: { nodeId: string; bridgeId: string; }; transport: MeetingRealtimeAudioTransport; logger: RuntimeLogger; providers?: RealtimeVoiceProviderPlugin[]; consultAgent: (params: MeetingAgentConsultParams) => Promise<{ text: string; }>; tools: RealtimeVoiceTool[]; handleToolCall: (params: MeetingRealtimeToolCallParams) => Promise<void>; }): Promise<MeetingRealtimeAudioEngineHandle>;","entrypoint":"meeting-runtime","exportName":"startMeetingRealtimeEngine","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"412e3410e7882dba20e383a60a50d3fbdb9551d8d2fd414397f088852b439737","declaration":"export function startMeetingAgentRealtimeEngine(params: { config: MeetingRealtimeEngineConfig; fullConfig: OpenClawConfig; runtime: PluginRuntime; platform: MeetingRuntimePlatform; meetingSessionId: string; requesterSessionKey?: string; logPrefix?: \"node\"; transport: MeetingRealtimeAudioTransport; logger: RuntimeLogger; providers?: RealtimeTranscriptionProviderPlugin[]; consultAgent: (params: MeetingAgentConsultParams) => Promise<{ text: string; }>; }): Promise<MeetingRealtimeAudioEngineHandle>;","entrypoint":"meeting-runtime","exportName":"startMeetingAgentRealtimeEngine","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"d2405867b52cd43a022ab3ac72e7bb2d82d53315b5d735b21ed726cc93348e69","declaration":"export function startMeetingRealtimeEngine(params: { config: MeetingRealtimeEngineConfig; fullConfig: OpenClawConfig; runtime: PluginRuntime; platform: MeetingRuntimePlatform; meetingSessionId: string; requesterSessionKey?: string; logPrefix?: \"node\"; talkSessionId?: string; talkContext?: { nodeId: string; bridgeId: string; }; transport: MeetingRealtimeAudioTransport; logger: RuntimeLogger; providers?: RealtimeVoiceProviderPlugin[]; consultAgent: (params: MeetingAgentConsultParams) => Promise<{ text: string; }>; tools: RealtimeVoiceTool[]; handleToolCall: (params: MeetingRealtimeToolCallParams) => Promise<void>; }): Promise<MeetingRealtimeAudioEngineHandle>;","entrypoint":"meeting-runtime","exportName":"startMeetingRealtimeEngine","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"function","recordType":"export"}
{"closureHash":"663b9c77231b21af697efd5042e22d1c33e9ee972adeb312ad86d81a2b2e36f7","declaration":"export type MeetingAgentConsultParams = MeetingAgentConsultParams;","entrypoint":"meeting-runtime","exportName":"MeetingAgentConsultParams","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"adf0745c611bf737fc28978d766fc2a25b7104e71b6b2fed4e9b95e519c7b115","declaration":"export type MeetingBrowserCandidateTab = MeetingBrowserCandidateTab;","entrypoint":"meeting-runtime","exportName":"MeetingBrowserCandidateTab","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"59b1526172b7491b85f14f13c1ee26d8d6726f33093770748580c767b1689a17","declaration":"export type MeetingBrowserControllerConfig = MeetingBrowserControllerConfig;","entrypoint":"meeting-runtime","exportName":"MeetingBrowserControllerConfig","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
@@ -3244,7 +3244,7 @@
{"closureHash":"8244b408803f57cf2004157e96f2ce11bb036cdf864123b15ba2fac7f03b5d43","declaration":"export type MeetingSessionRuntimeHandles<THealth extends MeetingBrowserHealth> = MeetingSessionRuntimeHandles<THealth>;","entrypoint":"meeting-runtime","exportName":"MeetingSessionRuntimeHandles","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"aa8054fc2c442891197e89bdad61e79999ea15d813c4b127fb6150607b9e67e7","declaration":"export type MeetingSessionRuntimeJoinContext<TSession extends MeetingSessionRecord<TTransport, TMode>, TTransport extends string, TMode extends string, THealth extends MeetingBrowserHealth, TTab extends MeetingBrowserTab> = MeetingSessionRuntimeJoinContext<TSession, TTransport, TMode, THealth, TTab>;","entrypoint":"meeting-runtime","exportName":"MeetingSessionRuntimeJoinContext","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"325241724edd38da439c5df03d225e2a7cb8e56d817e98ed7c37850656d3744b","declaration":"export type MeetingSessionRuntimeMessages<TSpeechBlockedReason extends string> = MeetingSessionRuntimeMessages<TSpeechBlockedReason>;","entrypoint":"meeting-runtime","exportName":"MeetingSessionRuntimeMessages","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"e128aaa911ef990ed5ec84269adc05d82db6f93e6c65daa25c697a3ed7a78bbc","declaration":"export type MeetingSessionRuntimeOptions<TSession extends MeetingSessionRecord<TTransport, TMode>, TRequest, TTransport extends string, TMode extends string, THealth extends MeetingBrowserHealth<TManualReason, TSpeechBlockedReason>, TTab extends MeetingBrowserTab, TManualReason extends string, TSpeechBlockedReason extends string> = MeetingSessionRuntimeOptions<TSession, TRequest, TTransport, TMode, THealth, TTab, TManualReason, TSpeechBlockedReason>;","entrypoint":"meeting-runtime","exportName":"MeetingSessionRuntimeOptions","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"a43116621815f2b2b3cbdacc0a47b9c3b8f248d8d9c8e5b5acbdbdaed9cafee6","declaration":"export type MeetingSessionRuntimeOptions<TSession extends MeetingSessionRecord<TTransport, TMode>, TRequest, TTransport extends string, TMode extends string, THealth extends MeetingBrowserHealth<TManualReason, TSpeechBlockedReason>, TTab extends MeetingBrowserTab, TManualReason extends string, TSpeechBlockedReason extends string> = MeetingSessionRuntimeOptions<TSession, TRequest, TTransport, TMode, THealth, TTab, TManualReason, TSpeechBlockedReason>;","entrypoint":"meeting-runtime","exportName":"MeetingSessionRuntimeOptions","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"d3c730cba02d30512c4cdae6e2367c662982e2c25671833ecd8701283924c642","declaration":"export type MeetingSessionState = MeetingSessionState;","entrypoint":"meeting-runtime","exportName":"MeetingSessionState","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"2496931157bf64fdb16013172ab9c023e60c5f85b98f46a3ee9532ce58d636d6","declaration":"export type MeetingSetupCheck = MeetingSetupCheck;","entrypoint":"meeting-runtime","exportName":"MeetingSetupCheck","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"f0aed6f7955a43fc387d8bbc072cb6276b0f2d18e7f829441a2ad45974bb3831","declaration":"export type MeetingSetupStatus = MeetingSetupStatus;","entrypoint":"meeting-runtime","exportName":"MeetingSetupStatus","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
@@ -3258,9 +3258,9 @@
{"closureHash":"20c70a94483aeddda4d1500cfcc5e71fab844b474ba4061c55d6c8693d40821b","declaration":"export type MeetingVoiceCallJoinResult = MeetingVoiceCallJoinResult;","entrypoint":"meeting-runtime","exportName":"MeetingVoiceCallJoinResult","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"4fb2c5928aa6f809dd4c604d71c5c99cdfe3e98b6e9c1662601c9b4ad9738162","declaration":"export type MeetingVoiceCallStatusResult = MeetingVoiceCallStatusResult;","entrypoint":"meeting-runtime","exportName":"MeetingVoiceCallStatusResult","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"5ef812397b6409a4ca228943dd1080661365959477b42e705a9aaa219757d14f","declaration":"export type MeetingVoiceCallSurface = MeetingVoiceCallSurface;","entrypoint":"meeting-runtime","exportName":"MeetingVoiceCallSurface","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"type","recordType":"export"}
{"closureHash":"79250cb14af760385910fb8a980200b8bccda18d65424af4bbc93c5df49e683c","declaration":"export interface MeetingPlatformAdapter<Session, Mode extends string, Health extends MeetingBrowserHealth, Transcript extends MeetingTranscriptSnapshot, CreateParams = never, CreateResult = never, DialInParams = never, DialInPlan = never> extends MeetingPlatformAdapterContract<Session, Mode, Health, Transcript, CreateParams, CreateResult, DialInParams, DialInPlan> {\n}","entrypoint":"meeting-runtime","exportName":"MeetingPlatformAdapter","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"interface","recordType":"export"}
{"closureHash":"78230dbc803e2b60abda108c6f952ca7dbff79bb1c5246593c4716d1e903d306","declaration":"export interface MeetingPlatformAdapter<Session, Mode extends string, Health extends MeetingBrowserHealth, Transcript extends MeetingTranscriptSnapshot, CreateParams = never, CreateResult = never, DialInParams = never, DialInPlan = never> extends MeetingPlatformAdapterContract<Session, Mode, Health, Transcript, CreateParams, CreateResult, DialInParams, DialInPlan> {\n}","entrypoint":"meeting-runtime","exportName":"MeetingPlatformAdapter","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"interface","recordType":"export"}
{"closureHash":"79884bd1df1ea0d07d5ceb4c62d93c1ee744b75d31c94c988845869c0f3cbd2d","declaration":"export interface MeetingRealtimeAudioTransport {\n onFatal(handler: () => void): void;\n startInput(onAudio: (audio: Buffer) => void): void;\n beginOutput?(): void;\n stop(): Promise<void>;\n writeOutput(audio: Buffer): Promise<void>;\n clearOutput(): Promise<void>;\n dispose(): Promise<void>;\n getHealth?(): MeetingRealtimeAudioTransportHealth;\n startBargeInMonitor?(onBargeIn: (audio: Buffer) => boolean): void;\n}","entrypoint":"meeting-runtime","exportName":"MeetingRealtimeAudioTransport","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"interface","recordType":"export"}
{"closureHash":"0da4784f3fc72c29d5c4b76f781f1ca31bcd50af3781dc568d12c9d18bf30908","declaration":"export class MeetingSessionRuntime<TSession extends MeetingSessionRecord<TTransport, TMode>, TRequest, TTransport extends string, TMode extends string, THealth extends MeetingBrowserHealth<TManualReason, TSpeechBlockedReason>, TTab extends MeetingBrowserTab, TManualReason extends string, TSpeechBlockedReason extends string> {\n readonly #sessions: Map<string, TSession>;\n readonly #sessionLeaves: Map<string, Promise<MeetingSessionLeaveResult<TSession>>>;\n readonly #sessionCleanup: MeetingSessionCleanupTracker;\n readonly #meetingLock: MeetingSessionJoinLock;\n readonly #sessionStops: Map<string, () => Promise<void>>;\n readonly #sessionSpeakers: Map<string, (instructions?: string) => void>;\n readonly #sessionHealth: Map<string, () => Partial<THealth>>;\n readonly #durableTranscripts: MeetingSessionDurableTranscripts<TSession>;\n readonly #transcriptStore: MeetingSessionTranscriptStore<TSession>;\n constructor(private readonly options: MeetingSessionRuntimeOptions<TSession, TRequest, TTransport, TMode, THealth, TTab, TManualReason, TSpeechBlockedReason>);\n list(): TSession[];\n getSession(sessionId: string): TSession | undefined;\n async status(sessionId?: string): Promise<{\n found: boolean;\n session?: TSession;\n sessions?: TSession[];\n }>;\n async transcript(sessionId: string, options: {\n sinceIndex?: number;\n }): Promise<{ found: boolean; sessionId?: string; startIndex?: number; nextIndex?: number; droppedLines?: number; evicted?: boolean; lines?: MeetingTranscriptLine[]; }>;\n async startTranscriptSource(request: TranscriptStartRequest): Promise<TranscriptsStartResult>;\n async stopTranscriptSource(request: TranscriptStopRequest): Promise<TranscriptsStopResult>;\n isReusableSession(session: TSession, resolved: MeetingResolvedJoin<TTransport, TMode>): boolean;\n async join(request: TRequest): Promise<{\n session: TSession;\n spoken?: boolean;\n }>;\n async leave(sessionId: string, options?: {\n keepBrowserTab?: boolean;\n }): Promise<MeetingSessionLeaveResult<TSession>>;\n async speak(sessionId: string, instructions?: string): Promise<{\n found: boolean;\n spoken: boolean;\n session?: TSession;\n }>;\n async speakWhenReady(session: TSession, instructions: string): Promise<boolean>;\n hasHealthHandle(sessionId: string): boolean;\n refreshHealth(sessionId?: string): void;\n async refreshBrowserHealth(session: TSession, options: {\n force?: boolean;\n readOnly?: boolean;\n }): Promise<void>;\n async refreshCaptionHealth(session: TSession): Promise<void>;\n refreshSpeechReadiness(session: TSession): {\n ready: boolean;\n reason?: TSpeechBlockedReason;\n message?: string;\n };\n markSessionEnded(session: TSession, reason: string): void;\n async #joinUnlocked(request: TRequest, resolved: MeetingResolvedJoin<TTransport, TMode>): Promise<{\n session: TSession;\n spoken?: boolean;\n }>;\n async #leaveUnlocked(sessionId: string, options?: {\n keepBrowserTab?: boolean;\n }): Promise<MeetingSessionLeaveResult<TSession>>;\n async #leaveSession(session: TSession, options?: {\n keepBrowserTab?: boolean;\n }): Promise<MeetingSessionLeaveResult<TSession>>;\n #meetingKey(transport: TTransport, url: string): string;\n #inheritBrowserTabOwnership(params: {\n session: TSession;\n transport: TTransport;\n nodeId?: string;\n meetingUrl: string;\n tab?: TTab;\n }): TTab | undefined;\n async #settleRetainedBrowserTabs(retained: Array<{\n session: TSession;\n tab: TTab;\n }>, adopted?: {\n transport: TTransport;\n nodeId?: string;\n tab: TTab;\n }): Promise<boolean>;\n async #rollbackFailedJoinSession(session: TSession): Promise<void>;\n async #settleRetainedBrowserTabsAfterFailure(retained: Array<{\n session: TSession;\n tab: TTab;\n }>): Promise<void>;\n #attachRuntimeHandles(session: TSession, handles: MeetingSessionRuntimeHandles<THealth>): void;\n #dropRuntimeHandles(sessionId: string): void;\n #isManagedBrowserSession(session: TSession): boolean;\n #evaluateSpeechReadiness(session: TSession): {\n ready: boolean;\n reason?: TSpeechBlockedReason;\n message?: string;\n };\n #noteSession(session: TSession, note: string): void;\n}","entrypoint":"meeting-runtime","exportName":"MeetingSessionRuntime","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"class","recordType":"export"}
{"closureHash":"f2102364a2f16bad6bdff4bb925e3baf1ae72fbcb894d3ac099012459e4f6f13","declaration":"export class MeetingSessionRuntime<TSession extends MeetingSessionRecord<TTransport, TMode>, TRequest, TTransport extends string, TMode extends string, THealth extends MeetingBrowserHealth<TManualReason, TSpeechBlockedReason>, TTab extends MeetingBrowserTab, TManualReason extends string, TSpeechBlockedReason extends string> {\n readonly #sessions: Map<string, TSession>;\n readonly #sessionLeaves: Map<string, Promise<MeetingSessionLeaveResult<TSession>>>;\n readonly #sessionCleanup: MeetingSessionCleanupTracker;\n readonly #meetingLock: MeetingSessionJoinLock;\n readonly #sessionStops: Map<string, () => Promise<void>>;\n readonly #sessionSpeakers: Map<string, (instructions?: string) => void>;\n readonly #sessionHealth: Map<string, () => Partial<THealth>>;\n readonly #durableTranscripts: MeetingSessionDurableTranscripts<TSession>;\n readonly #transcriptStore: MeetingSessionTranscriptStore<TSession>;\n constructor(private readonly options: MeetingSessionRuntimeOptions<TSession, TRequest, TTransport, TMode, THealth, TTab, TManualReason, TSpeechBlockedReason>);\n list(): TSession[];\n getSession(sessionId: string): TSession | undefined;\n async status(sessionId?: string): Promise<{\n found: boolean;\n session?: TSession;\n sessions?: TSession[];\n }>;\n async transcript(sessionId: string, options: {\n sinceIndex?: number;\n }): Promise<{ found: boolean; sessionId?: string; startIndex?: number; nextIndex?: number; droppedLines?: number; evicted?: boolean; lines?: MeetingTranscriptLine[]; }>;\n async startTranscriptSource(request: TranscriptStartRequest): Promise<TranscriptsStartResult>;\n async stopTranscriptSource(request: TranscriptStopRequest): Promise<TranscriptsStopResult>;\n isReusableSession(session: TSession, resolved: MeetingResolvedJoin<TTransport, TMode>): boolean;\n async join(request: TRequest): Promise<{\n session: TSession;\n spoken?: boolean;\n }>;\n async leave(sessionId: string, options?: {\n keepBrowserTab?: boolean;\n }): Promise<MeetingSessionLeaveResult<TSession>>;\n async speak(sessionId: string, instructions?: string): Promise<{\n found: boolean;\n spoken: boolean;\n session?: TSession;\n }>;\n async speakWhenReady(session: TSession, instructions: string): Promise<boolean>;\n hasHealthHandle(sessionId: string): boolean;\n refreshHealth(sessionId?: string): void;\n async refreshBrowserHealth(session: TSession, options: {\n force?: boolean;\n readOnly?: boolean;\n }): Promise<void>;\n async refreshCaptionHealth(session: TSession): Promise<void>;\n refreshSpeechReadiness(session: TSession): {\n ready: boolean;\n reason?: TSpeechBlockedReason;\n message?: string;\n };\n markSessionEnded(session: TSession, reason: string): void;\n async #joinUnlocked(request: TRequest, resolved: MeetingResolvedJoin<TTransport, TMode>): Promise<{\n session: TSession;\n spoken?: boolean;\n }>;\n async #leaveUnlocked(sessionId: string, options?: {\n keepBrowserTab?: boolean;\n }): Promise<MeetingSessionLeaveResult<TSession>>;\n async #leaveSession(session: TSession, options?: {\n keepBrowserTab?: boolean;\n }): Promise<MeetingSessionLeaveResult<TSession>>;\n #meetingKey(transport: TTransport, url: string): string;\n #inheritBrowserTabOwnership(params: {\n session: TSession;\n transport: TTransport;\n nodeId?: string;\n meetingUrl: string;\n tab?: TTab;\n }): TTab | undefined;\n async #settleRetainedBrowserTabs(retained: Array<{\n session: TSession;\n tab: TTab;\n }>, adopted?: {\n transport: TTransport;\n nodeId?: string;\n tab: TTab;\n }): Promise<boolean>;\n async #rollbackFailedJoinSession(session: TSession): Promise<void>;\n async #settleRetainedBrowserTabsAfterFailure(retained: Array<{\n session: TSession;\n tab: TTab;\n }>): Promise<void>;\n #attachRuntimeHandles(session: TSession, handles: MeetingSessionRuntimeHandles<THealth>): void;\n #dropRuntimeHandles(sessionId: string): void;\n #isManagedBrowserSession(session: TSession): boolean;\n #evaluateSpeechReadiness(session: TSession): {\n ready: boolean;\n reason?: TSpeechBlockedReason;\n message?: string;\n };\n #noteSession(session: TSession, note: string): void;\n}","entrypoint":"meeting-runtime","exportName":"MeetingSessionRuntime","importSpecifier":"openclaw/plugin-sdk/meeting-runtime","kind":"class","recordType":"export"}
{"category":null,"entrypoint":"memory-core-host-engine-foundation","importSpecifier":"openclaw/plugin-sdk/memory-core-host-engine-foundation","recordType":"module"}
{"closureHash":"e2df8d235401aebf58eb71652fbeaedb42ca00aaa5042a76909ff2c48ba6fd54","declaration":"export function createSubsystemLogger(subsystem: string): SubsystemLogger;","entrypoint":"memory-core-host-engine-foundation","exportName":"createSubsystemLogger","importSpecifier":"openclaw/plugin-sdk/memory-core-host-engine-foundation","kind":"function","recordType":"export"}
{"closureHash":null,"declaration":"export function isPathInside(root: string, target: string): boolean;","entrypoint":"memory-core-host-engine-foundation","exportName":"isPathInside","importSpecifier":"openclaw/plugin-sdk/memory-core-host-engine-foundation","kind":"function","recordType":"export"}
@@ -3387,9 +3387,9 @@
{"category":"core","entrypoint":"plugin-entry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","recordType":"module"}
{"closureHash":"3d27406644141af2733cfca6e8c1240fc62327910109f585ce9073cafd7fd89c","declaration":"export function buildJsonPluginConfigSchema(schema: JsonSchemaObject, options?: BuildJsonPluginConfigSchemaOptions): OpenClawPluginConfigSchema;","entrypoint":"plugin-entry","exportName":"buildJsonPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export"}
{"closureHash":"aff66c792d532642afb9c6e5a03c8d220f219250c3a8b49733f32058f22f98ca","declaration":"export function buildPluginConfigSchema(schema: ZodTypeAny, options?: BuildPluginConfigSchemaOptions): OpenClawPluginConfigSchema;","entrypoint":"plugin-entry","exportName":"buildPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export"}
{"closureHash":"8994a6476adc60e63744c8d6e69b1d702893a27354c4c07d293a560ec312405b","declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, reload, nodeHostCommands, securityAuditCollectors, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"plugin-entry","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export"}
{"closureHash":"c331cbee6ea746b6e32557afff60143b600e330708763688396f28a4d86e5b8c","declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, reload, nodeHostCommands, securityAuditCollectors, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"plugin-entry","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export"}
{"closureHash":"0ef1dfa3b5deeb456480e292c0e835c3cd6d13e7bb7059fc735546507da51594","declaration":"export function emptyPluginConfigSchema(): OpenClawPluginConfigSchema;","entrypoint":"plugin-entry","exportName":"emptyPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export"}
{"closureHash":"069afe164b45b50b6a4df310f4b257eff482dcd6ca93b1f9a5dcf08724eb44c2","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"plugin-entry","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"d3f58785b718226c2b2b6ed6b27f196eebbc7fee2a8366a1b95aa0961dfb5a87","declaration":"export type AgentHarness = AgentHarness;","entrypoint":"plugin-entry","exportName":"AgentHarness","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"d2ff4de9ee3fd111c2cc64a3ee7e557d9f161af1b6b437ee7886bcb16e426317","declaration":"export type AgentPromptGuidance = AgentPromptGuidance;","entrypoint":"plugin-entry","exportName":"AgentPromptGuidance","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"2841127a90e04467adfea8126cbf03655f44ddb089ad9e0d48833c2beea39cbd","declaration":"export type AgentPromptGuidanceEntry = AgentPromptGuidanceEntry;","entrypoint":"plugin-entry","exportName":"AgentPromptGuidanceEntry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"aa0412acefe62caff12e5271ead0545504874e824380dc21cfc0566388a05f33","declaration":"export type AgentPromptSurfaceKind = \"openclaw_main\" | \"pi_main\" | \"codex_app_server\" | \"cli_backend\" | \"acp_backend\" | \"subagent\";","entrypoint":"plugin-entry","exportName":"AgentPromptSurfaceKind","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
@@ -3399,16 +3399,16 @@
{"closureHash":"732f3c1b0e4942089773fad9da886d7b7bed41e7f1bb45d79c26deac15f6770b","declaration":"export type MigrationDetection = MigrationDetection;","entrypoint":"plugin-entry","exportName":"MigrationDetection","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"f40046e61c3037ec599a627e1088b8c78d1fe057d858e13cfaff1eab800e9f1f","declaration":"export type MigrationItem = MigrationItem;","entrypoint":"plugin-entry","exportName":"MigrationItem","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"934363b212df1e356365d44e0684401985228a2aeaf859aa13c840bae6e2190b","declaration":"export type MigrationPlan = MigrationPlan;","entrypoint":"plugin-entry","exportName":"MigrationPlan","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"80bce0128a2372b13f49f434e2350bbb2751d17d30dce0a09c6aa26620f95f70","declaration":"export type MigrationProviderContext = MigrationProviderContext;","entrypoint":"plugin-entry","exportName":"MigrationProviderContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"c413d3c68832fed3ef25fdace1ded97f5947605fc272bc7881b0d5728ee56512","declaration":"export type MigrationProviderPlugin = MigrationProviderPlugin;","entrypoint":"plugin-entry","exportName":"MigrationProviderPlugin","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"1ef164e7838a3603257be2c6c83086a782e12d7cd041a24ccc6f0bac94fe5d93","declaration":"export type MigrationProviderContext = MigrationProviderContext;","entrypoint":"plugin-entry","exportName":"MigrationProviderContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"f721dff9d3a47814035bfd30012b2c9178152e989a258604657f8934b3625998","declaration":"export type MigrationProviderPlugin = MigrationProviderPlugin;","entrypoint":"plugin-entry","exportName":"MigrationProviderPlugin","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"cea9632d824ebf247f131958f8db4916ae60a37d4d5493e06f789d883dab6574","declaration":"export type MigrationSummary = MigrationSummary;","entrypoint":"plugin-entry","exportName":"MigrationSummary","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"8054ffbe71b91afced900ef8a06f5e368ac10c4f99ffc1c6f538a802856f61c6","declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"plugin-entry","exportName":"OpenClawConfig","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"2f6e368fff73e942044cdf95c7c751b46c741e22ac0d2d4d97f45a3158f758ae","declaration":"export type OpenClawGatewayDiscoveryAdvertiseContext = OpenClawGatewayDiscoveryAdvertiseContext;","entrypoint":"plugin-entry","exportName":"OpenClawGatewayDiscoveryAdvertiseContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"b198058e0065e5c60b729a5bdf568f7e2436a006d8c4a7c63de764c7283f96ba","declaration":"export type OpenClawGatewayDiscoveryService = OpenClawGatewayDiscoveryService;","entrypoint":"plugin-entry","exportName":"OpenClawGatewayDiscoveryService","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"baddda61cd7c006909d5364a531fc1d362afca4d789674b0af5f5175f339af9c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"plugin-entry","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"adad7f6d6c8f37f73c803f8decd56bc9db755e3449b59059de4cbef52f90f116","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"plugin-entry","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"ef00c46e3e0d28e13b764ac1e513c26fd6c37fe2735409ec667b4a1c53f67f71","declaration":"export type OpenClawPluginCommandDefinition = OpenClawPluginCommandDefinition;","entrypoint":"plugin-entry","exportName":"OpenClawPluginCommandDefinition","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"365beb5cee974639c2f35fc7a39088721ca8e9c618442830298b98033e9c768c","declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"plugin-entry","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"97da01764d78d0f70235a550c8b07cfc43f847536728c366bc0ee813de5a38fb","declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"plugin-entry","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"cbb6ea3c708ee0c18f8f9e33ff5f9faa8bc6c5a1c04b8ef4c5a9eacdaff46ea8","declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"plugin-entry","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"a7ed83f0924f818b23cecb5a1f3591ff28b9499ccac9667a2b8505c2bc608ea9","declaration":"export type OpenClawPluginGatewayEventScope = OpenClawPluginGatewayEventScope;","entrypoint":"plugin-entry","exportName":"OpenClawPluginGatewayEventScope","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"f81f224d9b837e6353b7a546c5a76b124bcf568fd1f1fd0c6881fda30c53120a","declaration":"export type OpenClawPluginGatewayEvents = OpenClawPluginGatewayEvents;","entrypoint":"plugin-entry","exportName":"OpenClawPluginGatewayEvents","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
{"closureHash":"7470b211ac4d3449cd0fc353ee2eb48e9fbc2dbc9259d21c680d0203577aa94f","declaration":"export type OpenClawPluginHttpRouteHandler = OpenClawPluginHttpRouteHandler;","entrypoint":"plugin-entry","exportName":"OpenClawPluginHttpRouteHandler","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export"}
@@ -3555,22 +3555,22 @@
{"closureHash":"0c3a6112c7f680fed5c23a712088c1190973f4bb8d95cae4c334952f332159ad","declaration":"export function createInteractiveConversationBindingHelpers(params: { registration: RegisteredInteractiveMetadata; senderId?: string; conversation: PluginBindingConversation; }): { requestConversationBinding: (binding?: PluginConversationBindingRequestParams) => Promise<PluginConversationBindingRequestResult>; detachConversationBinding: () => Promise<{ removed: boolean; }>; getCurrentConversationBinding: () => Promise<PluginConversationBinding | null>; };","entrypoint":"plugin-runtime","exportName":"createInteractiveConversationBindingHelpers","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"fb50ceec196dacc19da2cb48813071d009170fcb1663d646715a7cfce9d6d956","declaration":"export function dispatchPluginInteractiveHandler<TRegistration extends PluginInteractiveDispatchRegistration, TResult extends { handled?: boolean; } | void = void | { handled?: boolean; }>(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>>;","entrypoint":"plugin-runtime","exportName":"dispatchPluginInteractiveHandler","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"f8ae3946d9eb9191511eaaf22ea17039397f69810a84c2b1cc8f717aa3dd669f","declaration":"export function executePluginCommand(params: { command: RegisteredPluginCommand; args?: string; senderId?: string; channel: string; channelId?: PluginCommandContext[\"channelId\"]; isAuthorizedSender: boolean; senderIsOwner?: boolean; gatewayClientScopes?: PluginCommandContext[\"gatewayClientScopes\"]; 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>;","entrypoint":"plugin-runtime","exportName":"executePluginCommand","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"2874fe60764b5057ddfce11bd60762e56c459e209a4231cf51e83841bd2538c8","declaration":"export function getGlobalHookRunner(): HookRunner | null;","entrypoint":"plugin-runtime","exportName":"getGlobalHookRunner","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"7e75fc04d621dc8d12f459d5b5b0c039a39b77c30c2b51af481e123c352f57b8","declaration":"export function getGlobalHookRunner(): HookRunner | null;","entrypoint":"plugin-runtime","exportName":"getGlobalHookRunner","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"db6583607237e4081814e2c5d4f8fb6f216ad3bbfe623bf16fc1a9c09c15f64b","declaration":"export function getPluginCommandSpecs(provider?: string, options?: PluginCommandSpecOptions): Array<{ name: string; description: string; descriptionLocalizations?: Record<string, string>; acceptsArgs: boolean; }>;","entrypoint":"plugin-runtime","exportName":"getPluginCommandSpecs","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"91c613217cbb338e0e730c4f6c38f90e3e8be2fa13e297aaa9367ced0f7175cf","declaration":"export function getPluginRuntimeGatewayRequestScope(): PluginRuntimeGatewayRequestScope | undefined;","entrypoint":"plugin-runtime","exportName":"getPluginRuntimeGatewayRequestScope","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"9c258677db44aada8ecab3489c6f5447a3185f81720fb046716b9bbbc82671d3","declaration":"export function getPluginRuntimeGatewayRequestScope(): PluginRuntimeGatewayRequestScope | undefined;","entrypoint":"plugin-runtime","exportName":"getPluginRuntimeGatewayRequestScope","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"cfe277ce6de0c6ed50f1f54b66c889f6c95e91b058e8bcdc27aa37317a93a447","declaration":"export function listRegisteredPluginAgentPromptGuidance(params?: { surface?: AgentPromptSurfaceKind; includeLegacyGlobalGuidance?: boolean; }): string[];","entrypoint":"plugin-runtime","exportName":"listRegisteredPluginAgentPromptGuidance","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"4c5a738a44f00a08922564b9aeb35fe95015ea70f267d91f9a5da5de5308506e","declaration":"export function matchPluginCommand(commandBody: string, options?: { channel?: string; }): { command: RegisteredPluginCommand; args?: string; } | null;","entrypoint":"plugin-runtime","exportName":"matchPluginCommand","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"176b66826a142ae9ae4ecd0b9c44146ab484755f08b9baed4aa697b618484a41","declaration":"export function registerPluginCommand(pluginId: string, command: OpenClawPluginCommandDefinition, opts?: { pluginName?: string; pluginRoot?: string; allowReservedCommandNames?: boolean; allowOwnerStatusExposure?: boolean; }): CommandRegistrationResult;","entrypoint":"plugin-runtime","exportName":"registerPluginCommand","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"16986e5d431f584c2d5053289eca3d2225bbe47a92cdfbbc2af91b264a165846","declaration":"export function registerPluginInteractiveHandler(pluginId: string, registration: PluginInteractiveHandlerRegistration, opts?: { pluginName?: string; pluginRoot?: string; }): InteractiveRegistrationResult;","entrypoint":"plugin-runtime","exportName":"registerPluginInteractiveHandler","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"f20c07a48e2c949fbc889e7a32760f4e52339d9f6d3eab49e00ff249266e2396","declaration":"export 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>;","entrypoint":"plugin-runtime","exportName":"startLazyPluginServiceModule","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"function","recordType":"export"}
{"closureHash":"bad43ffe69d1d9d6c92c79df4c388b3dda685013a92392daef456f1622ade659","declaration":"export type LazyPluginServiceHandle = LazyPluginServiceHandle;","entrypoint":"plugin-runtime","exportName":"LazyPluginServiceHandle","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"baddda61cd7c006909d5364a531fc1d362afca4d789674b0af5f5175f339af9c","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"plugin-runtime","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"adad7f6d6c8f37f73c803f8decd56bc9db755e3449b59059de4cbef52f90f116","declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"plugin-runtime","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"365beb5cee974639c2f35fc7a39088721ca8e9c618442830298b98033e9c768c","declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"plugin-runtime","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"f06379ada10ce0eca4e66bdf978db2c0035e054a135dc044c6d831ac7797c08f","declaration":"export type PluginConversationBinding = PluginConversationBinding;","entrypoint":"plugin-runtime","exportName":"PluginConversationBinding","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"a1223d674b2b66918a576ae05b04318d7b8cbe9b1d3bc6dd7a08d1a4fa79b291","declaration":"export type PluginConversationBindingRequestParams = PluginConversationBindingRequestParams;","entrypoint":"plugin-runtime","exportName":"PluginConversationBindingRequestParams","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"93c034724a937bb1239a3b4a386a20ac75fbcf66229842cc4c702c3360409e4c","declaration":"export type PluginConversationBindingRequestResult = PluginConversationBindingRequestResult;","entrypoint":"plugin-runtime","exportName":"PluginConversationBindingRequestResult","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"590c148a7b82d14242a172bee5027840ddd5366025200e48704ef4ae8f4bf0ee","declaration":"export type PluginInteractiveRegistration<TContext = unknown, TChannel extends string = string, TResult = PluginInteractiveHandlerResult> = PluginInteractiveRegistration<TContext, TChannel, TResult>;","entrypoint":"plugin-runtime","exportName":"PluginInteractiveRegistration","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"2cea6ec6d79e6fd4291233833057d122a7e96e2838c06409312f57d55734d4ad","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"plugin-runtime","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"ee07774fb1d0711bbe9a5d9f49bde457bfb0169000423e58c5a4da432d68f888","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"plugin-runtime","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"closureHash":"f16f4b33d2dd78e5d5da7b1aaeee0441ab35cd232b032e8a33219def7cf65f0f","declaration":"export type RuntimeLogger = RuntimeLogger;","entrypoint":"plugin-runtime","exportName":"RuntimeLogger","importSpecifier":"openclaw/plugin-sdk/plugin-runtime","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"provider-auth","importSpecifier":"openclaw/plugin-sdk/provider-auth","recordType":"module"}
{"closureHash":"d5f31c750f1d545b3a51177ba4a008d6cf646165a8fc0c0c1328fa9999b8d6e2","declaration":"export function applyAuthProfileConfig(cfg: OpenClawConfig, params: { profileId: string; provider: string; mode: \"api_key\" | \"aws-sdk\" | \"oauth\" | \"token\"; email?: string; displayName?: string; preferProfileFirst?: boolean; }): OpenClawConfig;","entrypoint":"provider-auth","exportName":"applyAuthProfileConfig","importSpecifier":"openclaw/plugin-sdk/provider-auth","kind":"function","recordType":"export"}
@@ -3654,10 +3654,10 @@
{"closureHash":"e66adcb55dec79be73a52bc76594b7e9210fd93c69a85b56098fbb58cecbb354","declaration":"export type WriteOAuthCredentialsOptions = WriteOAuthCredentialsOptions;","entrypoint":"provider-auth","exportName":"WriteOAuthCredentialsOptions","importSpecifier":"openclaw/plugin-sdk/provider-auth","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"provider-catalog-runtime","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","recordType":"module"}
{"closureHash":"b5665596a3f011454a5614681513516acd50b6c749536c43842d811980cf7ad3","declaration":"export function augmentModelCatalogWithProviderPlugins(params: { config?: OpenClawConfig; workspaceDir?: string; env?: NodeJS.ProcessEnv; metadataSnapshot?: PluginMetadataSnapshot; context: ProviderAugmentModelCatalogContext; }): Promise<ModelCatalogEntry[]>;","entrypoint":"provider-catalog-runtime","exportName":"augmentModelCatalogWithProviderPlugins","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"eebb18d58e8df44f277612353bb06d4754d5e8488798a133c41193167ca94a0f","declaration":"export function isPluginProvidersLoadInFlight(params: Parameters<typeof resolvePluginProviders>[0]): boolean;","entrypoint":"provider-catalog-runtime","exportName":"isPluginProvidersLoadInFlight","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"87d7c11a6995f68fd86bf61db893883a0a9667275fac77e1dcdb7f33b94d842a","declaration":"export function resolveCatalogHookProviderPluginIds(params: { config?: PluginLoadOptions[\"config\"]; workspaceDir?: string; env?: PluginLoadOptions[\"env\"]; metadataSnapshot?: ProviderManifestLoadParams[\"metadataSnapshot\"]; }): string[];","entrypoint":"provider-catalog-runtime","exportName":"resolveCatalogHookProviderPluginIds","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"84dd18db4c2caa760eeb31f8f85f35990d122979c6f250d38a1a58954c725d23","declaration":"export function resolveOwningPluginIdsForProvider(params: { provider: string; config?: PluginLoadOptions[\"config\"]; workspaceDir?: string; env?: PluginLoadOptions[\"env\"]; manifestRegistry?: PluginManifestRegistry; metadataSnapshot?: Pick<PluginMetadataSnapshot, \"owners\" | \"manifestRegistry\" | \"byPluginId\">; }): string[] | undefined;","entrypoint":"provider-catalog-runtime","exportName":"resolveOwningPluginIdsForProvider","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"9e84b00a32bcecae4c70f529f2e8e6e15851494eda86cbd4ba06ade6d71ba06e","declaration":"export function resolvePluginProviders(params: { config?: PluginLoadOptions[\"config\"]; workspaceDir?: string; env?: PluginLoadOptions[\"env\"]; bundledProviderVitestCompat?: boolean; onlyPluginIds?: string[]; providerRefs?: readonly string[]; modelRefs?: readonly string[]; activate?: boolean; cache?: boolean; applyAutoEnable?: boolean; pluginSdkResolution?: PluginLoadOptions[\"pluginSdkResolution\"]; mode?: \"runtime\" | \"setup\"; includeUntrustedWorkspacePlugins?: boolean; pluginMetadataSnapshot?: PluginMetadataRegistryView; skipIfLoadInFlight?: boolean; }): ProviderPlugin[];","entrypoint":"provider-catalog-runtime","exportName":"resolvePluginProviders","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"d9c83bb902e9d3831ac9a6ca19b522eeb868adf0e5aff3408e18809ebcd10eb2","declaration":"export function isPluginProvidersLoadInFlight(params: Parameters<typeof resolvePluginProviders>[0]): boolean;","entrypoint":"provider-catalog-runtime","exportName":"isPluginProvidersLoadInFlight","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"8d602ec42aad0237037a6945df410074ff6869142b1df77d82ed0320ab878186","declaration":"export function resolveCatalogHookProviderPluginIds(params: { config?: PluginLoadOptions[\"config\"]; workspaceDir?: string; env?: PluginLoadOptions[\"env\"]; metadataSnapshot?: ProviderManifestLoadParams[\"metadataSnapshot\"]; }): string[];","entrypoint":"provider-catalog-runtime","exportName":"resolveCatalogHookProviderPluginIds","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"2b4d962f3c4fc7411481bd475510d3ca03515f395624b78466d75125bf39ff08","declaration":"export function resolveOwningPluginIdsForProvider(params: { provider: string; config?: PluginLoadOptions[\"config\"]; workspaceDir?: string; env?: PluginLoadOptions[\"env\"]; manifestRegistry?: PluginManifestRegistry; metadataSnapshot?: Pick<PluginMetadataSnapshot, \"owners\" | \"manifestRegistry\" | \"byPluginId\">; }): string[] | undefined;","entrypoint":"provider-catalog-runtime","exportName":"resolveOwningPluginIdsForProvider","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"closureHash":"c2ec61c0a40f4fa3ec78b9f77938fbda98ac23347131172022ac5c6877f84ba5","declaration":"export function resolvePluginProviders(params: { config?: PluginLoadOptions[\"config\"]; workspaceDir?: string; env?: PluginLoadOptions[\"env\"]; bundledProviderVitestCompat?: boolean; onlyPluginIds?: string[]; providerRefs?: readonly string[]; modelRefs?: readonly string[]; activate?: boolean; cache?: boolean; applyAutoEnable?: boolean; pluginSdkResolution?: PluginLoadOptions[\"pluginSdkResolution\"]; mode?: \"runtime\" | \"setup\"; includeUntrustedWorkspacePlugins?: boolean; pluginMetadataSnapshot?: PluginMetadataRegistryView; skipIfLoadInFlight?: boolean; }): ProviderPlugin[];","entrypoint":"provider-catalog-runtime","exportName":"resolvePluginProviders","importSpecifier":"openclaw/plugin-sdk/provider-catalog-runtime","kind":"function","recordType":"export"}
{"category":null,"entrypoint":"proxy-capture","importSpecifier":"openclaw/plugin-sdk/proxy-capture","recordType":"module"}
{"closureHash":"d0e4e026d736bc00b1758d1089c44c3c5f3a09c7254291584de8cb297365804c","declaration":"export function acquireDebugProxyCaptureStore(dbPath: string, blobDir: string): { store: LegacyDebugProxyCaptureStore; release: () => void; };\nexport function acquireDebugProxyCaptureStore(options?: DebugProxyCaptureStoreOptions): { store: SharedDebugProxyCaptureStore; release: () => void; };","entrypoint":"proxy-capture","exportName":"acquireDebugProxyCaptureStore","importSpecifier":"openclaw/plugin-sdk/proxy-capture","kind":"function","recordType":"export"}
{"closureHash":"d41cbb9de51b7aee1c6cf8c713b0bc44f27ac926fbb6422c05726f196d11964e","declaration":"export function captureHttpExchange(params: { url: string; method: string; requestHeaders?: Headers | Record<string, string> | undefined; requestBody?: BodyInit | Buffer | string | null; response: Response; transport?: \"http\" | \"sse\"; flowId?: string; meta?: Record<string, unknown>; }, resolved?: DebugProxySettings, deps?: DebugProxyCaptureRuntimeDeps): void;","entrypoint":"proxy-capture","exportName":"captureHttpExchange","importSpecifier":"openclaw/plugin-sdk/proxy-capture","kind":"function","recordType":"export"}
@@ -3693,11 +3693,11 @@
{"closureHash":"d75cb355b23e89fd45f6948ffa5df92b066be54cfd71e78f7db7a3419bfa7114","declaration":"export function finalizeInboundContext<T extends Record<string, unknown>>(ctx: T, opts?: FinalizeInboundContextOptions): T & FinalizedMsgContext & CanonicalInboundText;","entrypoint":"reply-dispatch-runtime","exportName":"finalizeInboundContext","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"function","recordType":"export"}
{"closureHash":"b3f4adaa19f9703051c85d1f567f8f01e7ba8ca4444c826d3cf9c60bf2f8dbec","declaration":"export function generateConversationLabel(params: ConversationLabelParams): Promise<string | null>;","entrypoint":"reply-dispatch-runtime","exportName":"generateConversationLabel","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"function","recordType":"export"}
{"closureHash":"00b39d28eb3338c9356418e4914c4d8a1bee35e3b160f12ad9bd434912055da1","declaration":"export function resolveChunkMode(cfg: OpenClawConfig | undefined, provider?: TextChunkProvider, accountId?: string | null): ChunkMode;","entrypoint":"reply-dispatch-runtime","exportName":"resolveChunkMode","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"function","recordType":"export"}
{"closureHash":"b5d6c3cf9be4548750a54daf182228b93cfa692ef7264f8c4fbbe8d72c6ebee7","declaration":"export const dispatchReplyWithBufferedBlockDispatcher: DispatchReplyWithBufferedBlockDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"dispatchReplyWithBufferedBlockDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"const","recordType":"export"}
{"closureHash":"9e7009e664d98665dea101360fcdad9ba3733983c41a7cb726dc4f5a82446cd1","declaration":"export const dispatchReplyWithDispatcher: DispatchReplyWithDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"dispatchReplyWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"const","recordType":"export"}
{"closureHash":"252130d0c836fbc608878c2d7d7cc07dd05f4dac30ec10a63cf6c1c8e9c82c47","declaration":"export const dispatchReplyWithBufferedBlockDispatcher: DispatchReplyWithBufferedBlockDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"dispatchReplyWithBufferedBlockDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"const","recordType":"export"}
{"closureHash":"42fc7032e02d778b417c4a73d5a7649312782be73d66a973348190967fecfc8c","declaration":"export const dispatchReplyWithDispatcher: DispatchReplyWithDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"dispatchReplyWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"const","recordType":"export"}
{"closureHash":"6c907ee25b775b850dfb0961e1505f88e85159971379eb0e00d5eea51b284635","declaration":"export type CommandTurnContext = CommandTurnContext;","entrypoint":"reply-dispatch-runtime","exportName":"CommandTurnContext","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"type","recordType":"export"}
{"closureHash":"8b71571673ed9333cfbfd53d2438f4cc122bbd1e8525910902c91a79ec2788d8","declaration":"export type DispatchReplyWithBufferedBlockDispatcher = DispatchReplyWithBufferedBlockDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"DispatchReplyWithBufferedBlockDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"type","recordType":"export"}
{"closureHash":"e85eaa1b297d0cc738e601f2378f781887ab4dfcd604e4405932d31822ad8d46","declaration":"export type DispatchReplyWithDispatcher = DispatchReplyWithDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"DispatchReplyWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"type","recordType":"export"}
{"closureHash":"a46d7384b6e2aa0cdc3a6c0a3f9e4b76360eb35863366939a3f2613a5483a2be","declaration":"export type DispatchReplyWithBufferedBlockDispatcher = DispatchReplyWithBufferedBlockDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"DispatchReplyWithBufferedBlockDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"type","recordType":"export"}
{"closureHash":"310356bdd7855436d8839b0a738240d1a1d8f600e211d2dc83009edc92c6ab1d","declaration":"export type DispatchReplyWithDispatcher = DispatchReplyWithDispatcher;","entrypoint":"reply-dispatch-runtime","exportName":"DispatchReplyWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"type","recordType":"export"}
{"closureHash":"0d3bf245385d3b70f6d85138ad89f9bbe9c43df378b27c18c6f8168ad7caec93","declaration":"export type ReplyPayload = ReplyPayload;","entrypoint":"reply-dispatch-runtime","exportName":"ReplyPayload","importSpecifier":"openclaw/plugin-sdk/reply-dispatch-runtime","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"reply-history","importSpecifier":"openclaw/plugin-sdk/reply-history","recordType":"module"}
{"closureHash":"e903bc1c38ce4fc1b15cec63e7355300c4ce71783fc766da7cf2dd18a9de5fc7","declaration":"export function buildHistoryContext(params: { historyText: string; currentMessage: string; lineBreak?: string; }): string;","entrypoint":"reply-history","exportName":"buildHistoryContext","importSpecifier":"openclaw/plugin-sdk/reply-history","kind":"function","recordType":"export"}
@@ -3762,14 +3762,14 @@
{"closureHash":"1a1372e0024b162bf51e36c9d85157d67b2bf185b82a704a85eb9b3b1999a1ba","declaration":"export function chunkTextWithMode(text: string, limit: number, mode: ChunkMode): string[];","entrypoint":"reply-runtime","exportName":"chunkTextWithMode","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"d2a3f9dd1ffc16941bb39360012138d3a3cbcf5e8beb08106182831b1c269054","declaration":"export function createInboundDebouncer<T>(params: InboundDebounceCreateParams<T>): { enqueue: (item: T) => Promise<void>; flushKey: (key: string) => Promise<void>; cancelKey: (key: string) => boolean; drain: () => Promise<void>; };","entrypoint":"reply-runtime","exportName":"createInboundDebouncer","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"a29840f2fa36fb88ccf967b5b3a1e6a7d3a113310ad63daa878dd907bb1fe316","declaration":"export function createReplyDispatcher(options: ReplyDispatcherOptions): ReplyDispatcher;","entrypoint":"reply-runtime","exportName":"createReplyDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"89090f6cf823e1e389885d0ee127f15632c20917afc956be061d6ab19960d2da","declaration":"export function createReplyDispatcherWithTyping(options: ReplyDispatcherWithTypingOptions): ReplyDispatcherWithTypingResult;","entrypoint":"reply-runtime","exportName":"createReplyDispatcherWithTyping","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"b59da57b5873618a5c24671fe7bfe12c53c46caf9c9d21441ff1546b9b4c41a5","declaration":"export function createReplyDispatcherWithTyping(options: ReplyDispatcherWithTypingOptions): ReplyDispatcherWithTypingResult;","entrypoint":"reply-runtime","exportName":"createReplyDispatcherWithTyping","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"0278a79e0d38060a68e7a421fe438d438964fd3516146c2361bdb771e22bad8c","declaration":"export function createReplyReferencePlanner(options: { replyToMode: ReplyToMode; existingId?: string; startId?: string; allowReference?: boolean; hasReplied?: boolean; }): ReplyReferencePlanner;","entrypoint":"reply-runtime","exportName":"createReplyReferencePlanner","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"54baaca24f6455583cf922eb56b39b67222b21b3a7b8176244a7bb16fb8c8052","declaration":"export function dispatchInboundMessage(params: { ctx: MsgContext | FinalizedMsgContext; cfg: OpenClawConfig; dispatcher: ReplyDispatcher; toolsAllow?: string[]; replyOptions?: InternalDispatchReplyOptions; replyResolver?: InternalGetReplyFromConfig; onSessionMetadataChanges?: (changes: CommandSessionMetadataChange[]) => void; replyPayloadRunState?: ReplyPayloadRunState; outboundHooks?: \"enabled\" | \"disabled\"; onSettled?: () => void | Promise<void>; }): Promise<DispatchInboundResult>;","entrypoint":"reply-runtime","exportName":"dispatchInboundMessage","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"a129c8bf1be02d2cdbb61b4be831cb941785e05fcca8ad8b17a04304b3b07817","declaration":"export function dispatchInboundMessageWithBufferedDispatcher(params: BufferedInboundDispatcherParams): Promise<DispatchInboundResult>;","entrypoint":"reply-runtime","exportName":"dispatchInboundMessageWithBufferedDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"3e83d167dd848e2d6d17daccf1bdbacfb3d03f0f51232b0c812d863bf9735593","declaration":"export function dispatchInboundMessageWithDispatcher(params: { ctx: MsgContext | FinalizedMsgContext; cfg: OpenClawConfig; dispatcherOptions: ReplyDispatcherOptions; toolsAllow?: string[]; replyOptions?: InternalDispatchReplyOptions; replyResolver?: InternalGetReplyFromConfig; }): Promise<DispatchInboundResult>;","entrypoint":"reply-runtime","exportName":"dispatchInboundMessageWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"4fca7d8aa2ebbc4552fa6c52ec3f41cff2940006adb99b2d82fc8055d7784dc2","declaration":"export function dispatchInboundMessage(params: { ctx: MsgContext | FinalizedMsgContext; cfg: OpenClawConfig; dispatcher: ReplyDispatcher; toolsAllow?: string[]; replyOptions?: InternalDispatchReplyOptions; replyResolver?: InternalGetReplyFromConfig; onSessionMetadataChanges?: (changes: CommandSessionMetadataChange[]) => void; replyPayloadRunState?: ReplyPayloadRunState; outboundHooks?: \"enabled\" | \"disabled\"; onSettled?: () => void | Promise<void>; }): Promise<DispatchInboundResult>;","entrypoint":"reply-runtime","exportName":"dispatchInboundMessage","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"1c2858f8132d7646672dcf7ae0d62f3de73a6acda8f0d7297d96d6cfada1b74c","declaration":"export function dispatchInboundMessageWithBufferedDispatcher(params: BufferedInboundDispatcherParams): Promise<DispatchInboundResult>;","entrypoint":"reply-runtime","exportName":"dispatchInboundMessageWithBufferedDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"b8ed1173038e7e11ee88b34c79c2bb86630c66d3400ee8ed198a4f4e745a4ac2","declaration":"export function dispatchInboundMessageWithDispatcher(params: { ctx: MsgContext | FinalizedMsgContext; cfg: OpenClawConfig; dispatcherOptions: ReplyDispatcherOptions; toolsAllow?: string[]; replyOptions?: InternalDispatchReplyOptions; replyResolver?: InternalGetReplyFromConfig; }): Promise<DispatchInboundResult>;","entrypoint":"reply-runtime","exportName":"dispatchInboundMessageWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"d75cb355b23e89fd45f6948ffa5df92b066be54cfd71e78f7db7a3419bfa7114","declaration":"export function finalizeInboundContext<T extends Record<string, unknown>>(ctx: T, opts?: FinalizeInboundContextOptions): T & FinalizedMsgContext & CanonicalInboundText;","entrypoint":"reply-runtime","exportName":"finalizeInboundContext","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"b3f4adaa19f9703051c85d1f567f8f01e7ba8ca4444c826d3cf9c60bf2f8dbec","declaration":"export function generateConversationLabel(params: ConversationLabelParams): Promise<string | null>;","entrypoint":"reply-runtime","exportName":"generateConversationLabel","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"689ff0e44c6a8f34b1fec27388e216fc19631a70a1aa179a27f48ea59c5dc815","declaration":"export function getReplyFromConfig(ctx: MsgContext, opts?: GetReplyOptions, configOverride?: OpenClawConfig): Promise<ReplyPayload | ReplyPayload[] | undefined>;","entrypoint":"reply-runtime","exportName":"getReplyFromConfig","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"8cf4877f12b40420e618fb29e1c43c3d252ae5f8080a4ba00509ff505fb42a75","declaration":"export function getReplyFromConfig(ctx: MsgContext, opts?: GetReplyOptions, configOverride?: OpenClawConfig): Promise<ReplyPayload | ReplyPayload[] | undefined>;","entrypoint":"reply-runtime","exportName":"getReplyFromConfig","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"bb9481f2e5ccbae9b15c55081812cde0775fd240bc6c71770778d6db8d6c4a2d","declaration":"export function isAbortRequestText(text?: string, options?: CommandNormalizeOptions): boolean;","entrypoint":"reply-runtime","exportName":"isAbortRequestText","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"5db5d6c2dc280183c8c2ad484483dbd65275a6ef5488cb3c25dce017e871b6c2","declaration":"export function isBtwRequestText(text?: string, options?: CommandNormalizeOptions): boolean;","entrypoint":"reply-runtime","exportName":"isBtwRequestText","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
{"closureHash":"413880c53d03b5799fd79633b5f24dd7d5076976535b98550ddaac121b00d700","declaration":"export function isSilentReplyText(text: string | undefined, token?: string): boolean;","entrypoint":"reply-runtime","exportName":"isSilentReplyText","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"function","recordType":"export"}
@@ -3787,15 +3787,15 @@
{"closureHash":"be781caf196c49db72b18eaf346d967c09cc0fe0c410496f2bfc1bf2f6f8eef7","declaration":"export const HEARTBEAT_PROMPT: \"Follow the heartbeat monitor scratch context when provided. Recurring tasks are automations; create or change their schedules with the automations tool, not heartbeat scratch. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.\";","entrypoint":"reply-runtime","exportName":"HEARTBEAT_PROMPT","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"const","recordType":"export"}
{"closureHash":"d6230a363d069736f57476bc7371b93fe8f68f57a4edc3bdff025c7669629743","declaration":"export const HEARTBEAT_TOKEN: \"HEARTBEAT_OK\";","entrypoint":"reply-runtime","exportName":"HEARTBEAT_TOKEN","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"const","recordType":"export"}
{"closureHash":"c8d9faa79ecc7382a0a292d949fea76b3ee2a6308b0fd7d87da84d7847ed805b","declaration":"export const SILENT_REPLY_TOKEN: \"NO_REPLY\";","entrypoint":"reply-runtime","exportName":"SILENT_REPLY_TOKEN","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"const","recordType":"export"}
{"closureHash":"b5d6c3cf9be4548750a54daf182228b93cfa692ef7264f8c4fbbe8d72c6ebee7","declaration":"export const dispatchReplyWithBufferedBlockDispatcher: DispatchReplyWithBufferedBlockDispatcher;","entrypoint":"reply-runtime","exportName":"dispatchReplyWithBufferedBlockDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"const","recordType":"export"}
{"closureHash":"9e7009e664d98665dea101360fcdad9ba3733983c41a7cb726dc4f5a82446cd1","declaration":"export const dispatchReplyWithDispatcher: DispatchReplyWithDispatcher;","entrypoint":"reply-runtime","exportName":"dispatchReplyWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"const","recordType":"export"}
{"closureHash":"252130d0c836fbc608878c2d7d7cc07dd05f4dac30ec10a63cf6c1c8e9c82c47","declaration":"export const dispatchReplyWithBufferedBlockDispatcher: DispatchReplyWithBufferedBlockDispatcher;","entrypoint":"reply-runtime","exportName":"dispatchReplyWithBufferedBlockDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"const","recordType":"export"}
{"closureHash":"42fc7032e02d778b417c4a73d5a7649312782be73d66a973348190967fecfc8c","declaration":"export const dispatchReplyWithDispatcher: DispatchReplyWithDispatcher;","entrypoint":"reply-runtime","exportName":"dispatchReplyWithDispatcher","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"const","recordType":"export"}
{"closureHash":"637e2c34a20cf4a423372af22cd046bde2dd8aebc042835882f9cc15cdde8572","declaration":"export type BlockReplyContext = BlockReplyContext;","entrypoint":"reply-runtime","exportName":"BlockReplyContext","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"abd46ad532e63ff006c75f1e73913aaefe11578e4ba7237ca7683526cae150bd","declaration":"export type ChannelStructuredContextEntry = ChannelStructuredContextEntry;","entrypoint":"reply-runtime","exportName":"ChannelStructuredContextEntry","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"4c544030d69a87c7592778a4063380509d30ed980ea58d45eb08bb7d34803166","declaration":"export type ChunkMode = ChunkMode;","entrypoint":"reply-runtime","exportName":"ChunkMode","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"6c907ee25b775b850dfb0961e1505f88e85159971379eb0e00d5eea51b284635","declaration":"export type CommandTurnContext = CommandTurnContext;","entrypoint":"reply-runtime","exportName":"CommandTurnContext","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"64c5a26b9f26819ed1f3b6d9fc42f237a42e0c452b0465e8934fe5a647a7d7ee","declaration":"export type ConversationLabelParams = ConversationLabelParams;","entrypoint":"reply-runtime","exportName":"ConversationLabelParams","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"6a0c40c48573373ed610ee26d100a0e36d57d6783b8330ab86cb62540f90af5b","declaration":"export type FinalizedMsgContext = FinalizedMsgContext;","entrypoint":"reply-runtime","exportName":"FinalizedMsgContext","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"571e132d48da104c9d4f9f0c943042c4722236ecbd93192abbab0ead016ae2e5","declaration":"export type GetReplyOptions = GetReplyOptions;","entrypoint":"reply-runtime","exportName":"GetReplyOptions","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"6a65a814ed7defa1b694b2ab5168e6fb587ee6fbc64e5d81b4609f07109032c7","declaration":"export type GetReplyOptions = GetReplyOptions;","entrypoint":"reply-runtime","exportName":"GetReplyOptions","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"736871c9e9023147d056eb727db94e0a32c54feb199e433f4051f16d9055a823","declaration":"export type MsgContext = MsgContext;","entrypoint":"reply-runtime","exportName":"MsgContext","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"ad76450daee096e3e34c580699444b2282d097b933d298b75863fe3c2605d9ce","declaration":"export type ReplyDispatchBeforeDeliverOptions = ReplyDispatchBeforeDeliverOptions;","entrypoint":"reply-runtime","exportName":"ReplyDispatchBeforeDeliverOptions","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
{"closureHash":"bdf80393f17af29918794f79f532906f2cbaf3e6f10aea84fac884be7b38e049","declaration":"export type ReplyDispatchKind = ReplyDispatchKind;","entrypoint":"reply-runtime","exportName":"ReplyDispatchKind","importSpecifier":"openclaw/plugin-sdk/reply-runtime","kind":"type","recordType":"export"}
@@ -3906,7 +3906,7 @@
{"closureHash":"47c7a11095835696862fe7b72fccf28736af6308347543c26b5b2f538d76860b","declaration":"export const GROUP_POLICY_BLOCKED_LABEL: { readonly group: \"group messages\"; readonly guild: \"guild messages\"; readonly room: \"room messages\"; readonly channel: \"channel messages\"; readonly space: \"space messages\";};","entrypoint":"runtime-group-policy","exportName":"GROUP_POLICY_BLOCKED_LABEL","importSpecifier":"openclaw/plugin-sdk/runtime-group-policy","kind":"const","recordType":"export"}
{"category":"runtime","entrypoint":"runtime-store","importSpecifier":"openclaw/plugin-sdk/runtime-store","recordType":"module"}
{"closureHash":"e11d2c2694b927c79b6e07789be6bb56269d5ef1ec95b395a6e9c46f43883cbc","declaration":"export function createPluginRuntimeStore<T>(errorMessage: string): { setRuntime: (next: T) => void; clearRuntime: () => void; tryGetRuntime: () => T | null; getRuntime: () => T; };\nexport function createPluginRuntimeStore<T>(options: PluginRuntimeStoreOptions): { setRuntime: (next: T) => void; clearRuntime: () => void; tryGetRuntime: () => T | null; getRuntime: () => T; };","entrypoint":"runtime-store","exportName":"createPluginRuntimeStore","importSpecifier":"openclaw/plugin-sdk/runtime-store","kind":"function","recordType":"export"}
{"closureHash":"2cea6ec6d79e6fd4291233833057d122a7e96e2838c06409312f57d55734d4ad","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"runtime-store","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/runtime-store","kind":"type","recordType":"export"}
{"closureHash":"ee07774fb1d0711bbe9a5d9f49bde457bfb0169000423e58c5a4da432d68f888","declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"runtime-store","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/runtime-store","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"secret-file","importSpecifier":"openclaw/plugin-sdk/secret-file","recordType":"module"}
{"closureHash":null,"declaration":"export function createSecretFileAtomic(params: SecretFileWriteParams): Promise<void>;","entrypoint":"secret-file","exportName":"createSecretFileAtomic","importSpecifier":"openclaw/plugin-sdk/secret-file","kind":"function","recordType":"export"}
{"closureHash":null,"declaration":"export function readSecretFile(filePath: string, label: string, options?: SecretFileReadOptions): Promise<string>;","entrypoint":"secret-file","exportName":"readSecretFile","importSpecifier":"openclaw/plugin-sdk/secret-file","kind":"function","recordType":"export"}
@@ -4017,8 +4017,8 @@
{"closureHash":"a7a32cdc228b5a4b027448fe2e79e332d7b5c5ff50f2afdcb9684bf8eb3e1fce","declaration":"export function deleteSessionUpstreamLink(sessionKey: string, agentId: string, options?: OpenClawStateDatabaseOptions): void;","entrypoint":"session-catalog","exportName":"deleteSessionUpstreamLink","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"194cb8ed04679bd319517a0e228373ac6da06736200610a11a4d274339c92f87","declaration":"export function importSessionCatalogHistory(params: { catalogId: string; threadId: string; read: (params: { cursor?: string; limit: number; }) => Promise<SessionsCatalogReadResult>; sessionId: string; sessionKey: string; agentId: string; cwd?: string; config: OpenClawConfig; }): Promise<void>;","entrypoint":"session-catalog","exportName":"importSessionCatalogHistory","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"fb9a9c6a327c81eb3ccfb3550b0d6a3c4b62d7db43f5c248d41ff2abecf0bbc2","declaration":"export function isExternalUserText(probe: SessionUpstreamProbe, text: string | undefined): boolean;","entrypoint":"session-catalog","exportName":"isExternalUserText","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"47ca2cc5898cf14730a23a2646658faaa7919f9877e9f24692b2f1d94cb19151","declaration":"export function listAdoptedSessionCatalogSessions(params: { config: OpenClawConfig; pluginId: string; runtime: PluginRuntime; sessionEntries?: SessionCatalogEntrySnapshot; sourceFromEntry: (entry: SessionCatalogEntry) => SessionCatalogAdoptedSource | undefined; }): Map<string, string>;","entrypoint":"session-catalog","exportName":"listAdoptedSessionCatalogSessions","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"4b0972058d25569cda78e1785aa0c1ea423936f8fc26c6c356be2eafae637966","declaration":"export function listSessionCatalogEntries(params: { config: OpenClawConfig; runtime: PluginRuntime; sessionEntries?: SessionCatalogEntrySnapshot; }): SessionCatalogAgentEntry[];","entrypoint":"session-catalog","exportName":"listSessionCatalogEntries","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"39a8a09c68cd567c0387d3563aacd9abc7b9f44240979dca0b4f58838142701d","declaration":"export function listAdoptedSessionCatalogSessions(params: { config: OpenClawConfig; pluginId: string; runtime: PluginRuntime; sessionEntries?: SessionCatalogEntrySnapshot; sourceFromEntry: (entry: SessionCatalogEntry) => SessionCatalogAdoptedSource | undefined; }): Map<string, string>;","entrypoint":"session-catalog","exportName":"listAdoptedSessionCatalogSessions","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"ab70fc15820a7c2ec431822f6dcd0dd66ce74114506a7e3fdf2c87296fb14644","declaration":"export function listSessionCatalogEntries(params: { config: OpenClawConfig; runtime: PluginRuntime; sessionEntries?: SessionCatalogEntrySnapshot; }): SessionCatalogAgentEntry[];","entrypoint":"session-catalog","exportName":"listSessionCatalogEntries","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"bcb164340d2d8ff229bd4bb7c68126cfc44cfb171a76f363ef7c78c1cdf16f37","declaration":"export function normalizeUserText(text: string): string;","entrypoint":"session-catalog","exportName":"normalizeUserText","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"7fdcd1b85ee1e56ea8faf0afba025d3a9be0a34a8b7fda9f5f9ead922729ecdc","declaration":"export function sessionCatalogAdoptedSessionKey(prefix: string, source: string): string;","entrypoint":"session-catalog","exportName":"sessionCatalogAdoptedSessionKey","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
{"closureHash":"1e09ce9731a5b5932ec01307e90f9ab93ec0a100616a2a6f3b6416b768e5170b","declaration":"export function sessionCatalogAdoptedSourceKey(hostId: string, threadId: string): string;","entrypoint":"session-catalog","exportName":"sessionCatalogAdoptedSourceKey","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"function","recordType":"export"}
@@ -4032,9 +4032,9 @@
{"closureHash":"1b1c2b933616e206af0fa0f9d5f50435c041013b9699e19891c1117af32f2d42","declaration":"export type SessionCatalogDescriptor = { id: string; capabilities: { createSession?: { startTerminal?: boolean | undefined; model: string; } | undefined; openTerminal?: boolean | undefined; archive: boolean; continueSession: boolean; }; label: string;};","entrypoint":"session-catalog","exportName":"SessionCatalogDescriptor","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"1c83786a73f37881bd0202129ee916e9d0204393584da802152ba83f5fc6d1ec","declaration":"export type SessionCatalogEntrySnapshot = SessionCatalogEntrySnapshot;","entrypoint":"session-catalog","exportName":"SessionCatalogEntrySnapshot","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"7761b7c4cccd9df93de1309fe9544bc17ed08fe87f1d833d621f335d52a78512","declaration":"export type SessionCatalogHost = { error?: { message: string; code: string; } | undefined; nodeId?: string | undefined; nextCursor?: string | undefined; sessions: { source?: string | undefined; name?: string | undefined; cwd?: string | undefined; sessionKey?: string | undefined; updatedAt?: number | undefined; createdActor?: { id?: string | undefined; label?: string | undefined; avatarUrl?: string | undefined; type: \"system\" | \"agent\" | \"human\"; } | undefined; createdAt?: number | undefined; modelProvider?: string | undefined; recencyAt?: number | undefined; cliVersion?: string | undefined; gitBranch?: string | undefined; customGroup?: string | undefined; pullRequest?: { state: \"open\" | \"draft\" | \"closed\" | \"merged\"; numbers: number[]; } | undefined; canOpenTerminal?: boolean | undefined; status: string; archived: boolean; threadId: string; canContinue: boolean; canArchive: boolean; }[]; kind: \"gateway\" | \"node\"; label: string; hostId: string; connected: boolean;};","entrypoint":"session-catalog","exportName":"SessionCatalogHost","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"c3bc8f81fc37853f9901164d2961392cf1b41a69ef0d133949d6a3ecd6da10ed","declaration":"export type SessionCatalogListProviderParams = SessionCatalogListProviderParams;","entrypoint":"session-catalog","exportName":"SessionCatalogListProviderParams","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"6793cb8a6b78b5245e38b696512a21ff01cda2cf96c782ee610f66c48db15370","declaration":"export type SessionCatalogListProviderParams = SessionCatalogListProviderParams;","entrypoint":"session-catalog","exportName":"SessionCatalogListProviderParams","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"1b8060a038d38a9dfcdb65119d42049deeb0fa9410a78298cd29bfd9639d2721","declaration":"export type SessionCatalogLocator = { threadId: string; catalogId: string; hostId: string;};","entrypoint":"session-catalog","exportName":"SessionCatalogLocator","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"5046bf829ce0ebda38e2d6929ae6d10980be80c68c0f12196a912fba0aa35fb2","declaration":"export type SessionCatalogProvider = SessionCatalogProvider;","entrypoint":"session-catalog","exportName":"SessionCatalogProvider","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"1d2eb6896b9d0ca494ab4fb1e93c0c025ed9eeb06e5cf7f320eb560451fff775","declaration":"export type SessionCatalogProvider = SessionCatalogProvider;","entrypoint":"session-catalog","exportName":"SessionCatalogProvider","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"031fa3a50e41f0c7d5672cfbfefe6b5f3a74d7b09824d3a0cf386ab08bdc2ce6","declaration":"export type SessionCatalogPullRequestSummary = { state: \"open\" | \"draft\" | \"closed\" | \"merged\"; numbers: number[];};","entrypoint":"session-catalog","exportName":"SessionCatalogPullRequestSummary","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"2fddff39ee355ab2f5efa463b1a2ff1fdce03da36515d6b4d21988ea28bcd45f","declaration":"export type SessionCatalogReadProviderParams = SessionCatalogReadProviderParams;","entrypoint":"session-catalog","exportName":"SessionCatalogReadProviderParams","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
{"closureHash":"c5e0c59d9f38e43b780d5d9cbf38ebd4299694e0f52221eee8c72e3a29d27e42","declaration":"export type SessionCatalogSession = { source?: string | undefined; name?: string | undefined; cwd?: string | undefined; sessionKey?: string | undefined; updatedAt?: number | undefined; createdActor?: { id?: string | undefined; label?: string | undefined; avatarUrl?: string | undefined; type: \"system\" | \"agent\" | \"human\"; } | undefined; createdAt?: number | undefined; modelProvider?: string | undefined; recencyAt?: number | undefined; cliVersion?: string | undefined; gitBranch?: string | undefined; customGroup?: string | undefined; pullRequest?: { state: \"open\" | \"draft\" | \"closed\" | \"merged\"; numbers: number[]; } | undefined; canOpenTerminal?: boolean | undefined; status: string; archived: boolean; threadId: string; canContinue: boolean; canArchive: boolean;};","entrypoint":"session-catalog","exportName":"SessionCatalogSession","importSpecifier":"openclaw/plugin-sdk/session-catalog","kind":"type","recordType":"export"}
@@ -4619,16 +4619,16 @@
{"closureHash":"e365d7ad911453b5139ba700931b061e560cff80b50d4cbe5e9615b5d7e13a52","declaration":"export type ScopedExpiringIdCache<TScope extends string | number, TId extends string | number> = ScopedExpiringIdCache<TScope, TId>;","entrypoint":"text-runtime","exportName":"ScopedExpiringIdCache","importSpecifier":"openclaw/plugin-sdk/text-runtime","kind":"type","recordType":"export"}
{"closureHash":"af5502c92594c2e9049a4b4994e17c00d3adee3f6d1e68edd818a539c74c8787","declaration":"export interface CodeRegion {\n start: number;\n end: number;\n}","entrypoint":"text-runtime","exportName":"CodeRegion","importSpecifier":"openclaw/plugin-sdk/text-runtime","kind":"interface","recordType":"export"}
{"category":null,"entrypoint":"tool-plugin","importSpecifier":"openclaw/plugin-sdk/tool-plugin","recordType":"module"}
{"closureHash":"25434a86e6b9fdb5bef6298333ebcccacc379ab355f8135565f3990345654781","declaration":"export function defineToolPlugin<TConfigSchema extends TSchema | undefined = undefined>(definition: DefineToolPluginOptions<TConfigSchema>): DefinedToolPluginEntry;","entrypoint":"tool-plugin","exportName":"defineToolPlugin","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"function","recordType":"export"}
{"closureHash":"371c9099df274b5fb3b306de18317900b0ef428fb5a67560eacb35bacc620ec3","declaration":"export function defineToolPlugin<TConfigSchema extends TSchema | undefined = undefined>(definition: DefineToolPluginOptions<TConfigSchema>): DefinedToolPluginEntry;","entrypoint":"tool-plugin","exportName":"defineToolPlugin","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"function","recordType":"export"}
{"closureHash":"36ef907ce20f885b5f3068cbf0475dc442a68da9652579bb5bf8fb83ad34c38b","declaration":"export function getToolPluginMetadata(entry: unknown): ToolPluginMetadata | undefined;","entrypoint":"tool-plugin","exportName":"getToolPluginMetadata","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"function","recordType":"export"}
{"closureHash":"bdc58154e36b2625fb3daccca3eab248d981077d04d747f0ad507cb2ff565198","declaration":"export const toolPluginMetadataSymbol: typeof toolPluginMetadataSymbol;","entrypoint":"tool-plugin","exportName":"toolPluginMetadataSymbol","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"const","recordType":"export"}
{"closureHash":"a3d51ecd49a4b7226511d05537aeafc2e485b3d9763295c6ad8ad04dcfdb0420","declaration":"export type DefineToolPluginOptions<TConfigSchema extends TSchema | undefined = undefined> = DefineToolPluginOptions<TConfigSchema>;","entrypoint":"tool-plugin","exportName":"DefineToolPluginOptions","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"63bbe2896f6c4d764a47df99d6f6894daf8aad15bb8a40e4216a4fc47466a5c6","declaration":"export type DefinedToolPluginEntry = DefinedToolPluginEntry;","entrypoint":"tool-plugin","exportName":"DefinedToolPluginEntry","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"669eb6bedb1e9171cef56e4f81622d88ff5039c070dc96511df27b257e2289c5","declaration":"export type ToolPluginExecutionContext = ToolPluginExecutionContext;","entrypoint":"tool-plugin","exportName":"ToolPluginExecutionContext","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"8bec7fed4dd5a21ee6367b4207c6c3c1d85e975d9a59f07ee197dd37cd6af993","declaration":"export type ToolPluginFactoryContext<TConfig> = ToolPluginFactoryContext<TConfig>;","entrypoint":"tool-plugin","exportName":"ToolPluginFactoryContext","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"dbf8bc758fe12359ade5122b187d23bdc2fe800ad989553df11dc9b1548c421f","declaration":"export type DefineToolPluginOptions<TConfigSchema extends TSchema | undefined = undefined> = DefineToolPluginOptions<TConfigSchema>;","entrypoint":"tool-plugin","exportName":"DefineToolPluginOptions","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"d7115ef440a9366663dcb7eae4e0837d96645d959ee0f95c3c354898b9efc1b7","declaration":"export type DefinedToolPluginEntry = DefinedToolPluginEntry;","entrypoint":"tool-plugin","exportName":"DefinedToolPluginEntry","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"744f9d8f00c1853de78a3d4112fd35010c0e69977fd3987a4b61edfde3b99423","declaration":"export type ToolPluginExecutionContext = ToolPluginExecutionContext;","entrypoint":"tool-plugin","exportName":"ToolPluginExecutionContext","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"7836e97241523cbcaec31a2af6a02c50f825500f1d1ac984c0f0f76013897205","declaration":"export type ToolPluginFactoryContext<TConfig> = ToolPluginFactoryContext<TConfig>;","entrypoint":"tool-plugin","exportName":"ToolPluginFactoryContext","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"f774bd092f51a31fbb34847213f9583234f585f66918d0af55e81bbbae40463b","declaration":"export type ToolPluginMetadata = ToolPluginMetadata;","entrypoint":"tool-plugin","exportName":"ToolPluginMetadata","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"414a89d0c80eaaf682dc25d306e7223c981c6fd25366adb973a106f4268a6a54","declaration":"export type ToolPluginStaticToolMetadata = ToolPluginStaticToolMetadata;","entrypoint":"tool-plugin","exportName":"ToolPluginStaticToolMetadata","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"89e2f03d58e6269e157d870c91d881fd71c33550f638fefdc7cb379c945c0ac8","declaration":"export type ToolPluginToolDefinition<TConfig, TParamsSchema extends TSchema> = ToolPluginToolDefinition<TConfig, TParamsSchema>;","entrypoint":"tool-plugin","exportName":"ToolPluginToolDefinition","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"closureHash":"f9627c31030283fcc39543c3d95c63fbd53ad98dc63739e4e10128f6b6006691","declaration":"export type ToolPluginToolDefinition<TConfig, TParamsSchema extends TSchema> = ToolPluginToolDefinition<TConfig, TParamsSchema>;","entrypoint":"tool-plugin","exportName":"ToolPluginToolDefinition","importSpecifier":"openclaw/plugin-sdk/tool-plugin","kind":"type","recordType":"export"}
{"category":null,"entrypoint":"tool-results","importSpecifier":"openclaw/plugin-sdk/tool-results","recordType":"module"}
{"closureHash":"c5b0951c3629834dff78f92317cf1421a6bbc0faf9307be1cabb915055665280","declaration":"export function jsonResult<TDetails>(payload: TDetails): AgentToolResult<TDetails>;","entrypoint":"tool-results","exportName":"jsonResult","importSpecifier":"openclaw/plugin-sdk/tool-results","kind":"function","recordType":"export"}
{"closureHash":"b9aefc637a694c74e028e92006004bef18185ed569af48ac43d36b646b0af2f3","declaration":"export function textResult<TDetails>(text: string, details: TDetails): AgentToolResult<TDetails>;","entrypoint":"tool-results","exportName":"textResult","importSpecifier":"openclaw/plugin-sdk/tool-results","kind":"function","recordType":"export"}
@@ -4662,9 +4662,9 @@
{"closureHash":"9f9174f1023a8a451232f5d97d1e922b7faa88b76b58cffbfbe246a1488e0ddd","declaration":"export function readJsonWebhookBodyOrReject(params: { req: IncomingMessage; res: ServerResponse; maxBytes?: number; timeoutMs?: number; profile?: WebhookBodyReadProfile; emptyObjectOnEmpty?: boolean; invalidJsonMessage?: string; }): Promise<{ ok: true; value: unknown; } | { ok: false; }>;","entrypoint":"webhook-ingress","exportName":"readJsonWebhookBodyOrReject","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"1bbddd5d1c8297e315275db4d5e1c8748ff09c0be7c37b0cf456db4fc69f8909","declaration":"export function readRequestBodyWithLimit(req: IncomingMessage, options: ReadRequestBodyOptions): Promise<string>;","entrypoint":"webhook-ingress","exportName":"readRequestBodyWithLimit","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"e8a1174cac83ce346a231fd25e82bb5f7618ffb57cdd9af6eaa208411f70646d","declaration":"export function readWebhookBodyOrReject(params: { req: IncomingMessage; res: ServerResponse; maxBytes?: number; timeoutMs?: number; profile?: WebhookBodyReadProfile; invalidBodyMessage?: string; }): Promise<{ ok: true; value: string; } | { ok: false; }>;","entrypoint":"webhook-ingress","exportName":"readWebhookBodyOrReject","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"f27524cd729442a01cb193649d99dc7b255a65fa252caa850b2c4a65ed977a0d","declaration":"export function registerPluginHttpRoute(params: { path?: string | null; fallbackPath?: string | null; handler: PluginHttpRouteHandler; auth: PluginHttpRouteRegistration[\"auth\"]; match?: PluginHttpRouteRegistration[\"match\"]; gatewayRuntimeScopeSurface?: PluginHttpRouteRegistration[\"gatewayRuntimeScopeSurface\"]; replaceExisting?: boolean; reuseExistingSameOwner?: boolean; throwOnFailure?: boolean; pluginId?: string; source?: string; accountId?: string; log?: (message: string) => void; registry?: PluginRegistry; }): () => void;","entrypoint":"webhook-ingress","exportName":"registerPluginHttpRoute","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"889f4c6bdcc3cab98b403fd0661558ee57c932355132fe7c5930c20cc3ceee6c","declaration":"export function registerPluginHttpRoute(params: { path?: string | null; fallbackPath?: string | null; handler: PluginHttpRouteHandler; auth: PluginHttpRouteRegistration[\"auth\"]; match?: PluginHttpRouteRegistration[\"match\"]; gatewayRuntimeScopeSurface?: PluginHttpRouteRegistration[\"gatewayRuntimeScopeSurface\"]; replaceExisting?: boolean; reuseExistingSameOwner?: boolean; throwOnFailure?: boolean; pluginId?: string; source?: string; accountId?: string; log?: (message: string) => void; registry?: PluginRegistry; }): () => void;","entrypoint":"webhook-ingress","exportName":"registerPluginHttpRoute","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"05835f2f66f906f736b82b332a84a9714bc3a6b211890a62d8fc4dbf9258a7d4","declaration":"export function registerWebhookTarget<T extends { path: string; }>(targetsByPath: Map<string, T[]>, target: T, opts?: RegisterWebhookTargetOptions<T>): RegisteredWebhookTarget<T>;","entrypoint":"webhook-ingress","exportName":"registerWebhookTarget","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"30ffd908f257de36bb11f8b5846dcab4f0803c70ebafc681e10621850a946032","declaration":"export function registerWebhookTargetWithPluginRoute<T extends { path: string; }>(params: { targetsByPath: Map<string, T[]>; target: T; route: RegisterWebhookPluginRouteOptions; onLastPathTargetRemoved?: RegisterWebhookTargetOptions<T>[\"onLastPathTargetRemoved\"]; }): RegisteredWebhookTarget<T>;","entrypoint":"webhook-ingress","exportName":"registerWebhookTargetWithPluginRoute","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"b0f06dfc6d9b2c006af264cb017a0031b1920bad626f1b2f8b43a998f3f2c2c5","declaration":"export function registerWebhookTargetWithPluginRoute<T extends { path: string; }>(params: { targetsByPath: Map<string, T[]>; target: T; route: RegisterWebhookPluginRouteOptions; onLastPathTargetRemoved?: RegisterWebhookTargetOptions<T>[\"onLastPathTargetRemoved\"]; }): RegisteredWebhookTarget<T>;","entrypoint":"webhook-ingress","exportName":"registerWebhookTargetWithPluginRoute","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"ec2f47e9bd7a075a3dd4302ac9e4c0bfe20630445db6735cf803f2d354275841","declaration":"export function requestBodyErrorToText(code: RequestBodyLimitErrorCode): string;","entrypoint":"webhook-ingress","exportName":"requestBodyErrorToText","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"5e1f3b468d56eb0f82104184077fdf4b6bd0c1444aa10b71a65fcaa2ec0298a2","declaration":"export function resolveRequestClientIp(req?: IncomingMessage, trustedProxies?: string[], allowRealIpFallback?: boolean): string | undefined;","entrypoint":"webhook-ingress","exportName":"resolveRequestClientIp","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
{"closureHash":"56c3e9868dfa6ee2a7a128eb02039a16b52696759adadbd3fe0a3bd7a6a07eeb","declaration":"export function resolveSingleWebhookTarget<T>(targets: readonly T[], isMatch: (target: T) => boolean): WebhookTargetMatchResult<T>;","entrypoint":"webhook-ingress","exportName":"resolveSingleWebhookTarget","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"function","recordType":"export"}
@@ -4682,7 +4682,7 @@
{"closureHash":"efb74e84339c15d6f607b38d1d477b0504d47d04ae78e77083a1893c756a0b54","declaration":"export const WEBHOOK_RATE_LIMIT_DEFAULTS: Readonly<{ windowMs: 60000; maxRequests: 120; maxTrackedKeys: 4096;}>;","entrypoint":"webhook-ingress","exportName":"WEBHOOK_RATE_LIMIT_DEFAULTS","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"const","recordType":"export"}
{"closureHash":"13b28ec9acae43c3bdcd683b9831154f88118dee8142e42b7eebfd59f08c602c","declaration":"export type BoundedCounter = BoundedCounter;","entrypoint":"webhook-ingress","exportName":"BoundedCounter","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"type","recordType":"export"}
{"closureHash":"9e737ae8c17038ef7becbd2bf1b756cfeaed571e2ded368c0fe3a446ebd1f666","declaration":"export type FixedWindowRateLimiter = FixedWindowRateLimiter;","entrypoint":"webhook-ingress","exportName":"FixedWindowRateLimiter","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"type","recordType":"export"}
{"closureHash":"14bd6dec23b67b9701ac134ef18b1321946ccb2afdb6e5eb023770cd434a2818","declaration":"export type RegisterWebhookPluginRouteOptions = RegisterWebhookPluginRouteOptions;","entrypoint":"webhook-ingress","exportName":"RegisterWebhookPluginRouteOptions","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"type","recordType":"export"}
{"closureHash":"7761d9e50101e1d676deb86237a53d237d19242e9fc0a24f32108e85d281d52d","declaration":"export type RegisterWebhookPluginRouteOptions = RegisterWebhookPluginRouteOptions;","entrypoint":"webhook-ingress","exportName":"RegisterWebhookPluginRouteOptions","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"type","recordType":"export"}
{"closureHash":"b3e98619854462acfac6538ac9a2d0cefb88704a0eac712563f0996b07364152","declaration":"export type RegisterWebhookTargetOptions<T extends {\n path: string;\n}> = RegisterWebhookTargetOptions<T>;","entrypoint":"webhook-ingress","exportName":"RegisterWebhookTargetOptions","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"type","recordType":"export"}
{"closureHash":"964c2bfd8f268c411ee7b982c9de02c207f4bec402dd62c9f998a59752bb9d1f","declaration":"export type RegisteredWebhookTarget<T> = RegisteredWebhookTarget<T>;","entrypoint":"webhook-ingress","exportName":"RegisteredWebhookTarget","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"type","recordType":"export"}
{"closureHash":"aa552e5bdaefc9eb94d3b5a5cdf8c413fad555d9f452c6a2a6af5a3ce695c9d1","declaration":"export type WebhookAnomalyTracker = WebhookAnomalyTracker;","entrypoint":"webhook-ingress","exportName":"WebhookAnomalyTracker","importSpecifier":"openclaw/plugin-sdk/webhook-ingress","kind":"type","recordType":"export"}
+2 -1
View File
@@ -371,8 +371,9 @@ Failure notifications follow a separate destination path:
- `openclaw automations edit` exposes per-job alert tuning: `--failure-alert`/`--no-failure-alert`, `--failure-alert-after <n>`, `--failure-alert-channel`, `--failure-alert-to`, `--failure-alert-cooldown`, `--failure-alert-include-skipped`/`--failure-alert-exclude-skipped`, `--failure-alert-mode`, and `--failure-alert-account-id`.
Chat failure notifications include the run start time in the agent's configured user timezone. Webhook message text stays stable; integrations can read the same instant from the structured `runAtMs` field.
Chat notifications show the normalized failure cause when one is available and keep raw commands, paths, and provider errors in automation history. Failure webhooks retain the structured raw error for diagnostic integrations.
Failure alerts are opt-in, but the scheduler also provides an unconditional safety backstop. A time-based recurring job is auto-disabled after 10 consecutive execution failures; a successful run resets that streak. Repeated schedule-computation failures auto-disable after 3 errors. The job records `state.autoDisabled.reason` as `consecutive-failures` or `schedule-errors`, and the owning agent receives a notification with the last error and recovery command. After fixing the cause, run `openclaw automations enable <jobId>`; enabling clears the recorded reason and failure streaks. Because disabled jobs are hidden by the default list, use `openclaw automations list --all` to inspect them.
Failure alerts are opt-in, but the scheduler also provides an unconditional safety backstop. A time-based recurring job is auto-disabled after 10 consecutive execution failures; a successful run resets that streak. Repeated schedule-computation failures auto-disable after 3 errors. The job records `state.autoDisabled.reason` as `consecutive-failures` or `schedule-errors`, and the owning agent receives a notification with a safe cause and recovery command. Raw errors stay in automation history. After fixing the cause, run `openclaw automations enable <jobId>`; enabling clears the recorded reason and failure streaks. Because disabled jobs are hidden by the default list, use `openclaw automations list --all` to inspect them.
### Output language
+1 -1
View File
@@ -728,7 +728,7 @@ See [Slash commands](/tools/slash-commands) for the command catalog and behavior
- `streaming.preview.toolProgress` and `streaming.progress.toolProgress` both default to `true` when preview streaming is active. Tool rows such as `🛠️ Bash: run tests` or `🔎 Web Search: for "query"` need no additional progress config; set either key to `false` to keep the status headline only.
- `streaming.progress.commentary` (default `false`) opts into raw assistant commentary in the temporary progress draft. The default preamble/narration status line is independent of this option. Commentary is cleaned before display, stays transient, and does not change final answer delivery.
- `streaming.progress.maxLineChars` controls the per-line progress preview budget. Prose is shortened on word boundaries; command and path details keep useful suffixes.
- `streaming.preview.commandText` / `streaming.progress.commandText` controls command/exec detail in compact progress lines: `raw` (default) or `status` (tool label only).
- `streaming.preview.commandText` / `streaming.progress.commandText` controls command/exec detail in compact progress lines: `status` (default, tool label only) or `raw` (explicit command text).
Hide raw command/exec text while keeping compact progress lines:
+1 -1
View File
@@ -1487,7 +1487,7 @@ The default scope (`"group-mentions"`) does not fire ack reactions in direct mes
- `block`: append chunked preview updates.
- `progress`: show progress status text while generating, then send final text.
- `streaming.preview.toolProgress`: when draft preview is active, route tool/progress updates into the same edited preview message (default: `true`). Set `false` to keep separate tool/progress messages.
- `streaming.preview.commandText` / `streaming.progress.commandText`: set to `status` to keep compact tool-progress lines while hiding raw command/exec text (default: `raw`).
- `streaming.preview.commandText` / `streaming.progress.commandText`: `status` keeps compact tool-progress lines while hiding raw command/exec text (default); set `raw` to opt into command text.
Hide raw command/exec text while keeping compact progress lines:
+1 -1
View File
@@ -351,7 +351,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- short initial answer previews are debounced, then materialized after a bounded delay if the run is still active
- `progress` keeps one editable status draft for tool progress, shows the stable status label when answer activity arrives before tool progress, clears it at completion, and sends the final answer as a normal message
- `streaming.preview.toolProgress` controls whether tool/progress updates reuse the same edited preview message (default: `true` when preview streaming is active)
- `streaming.preview.commandText` controls command/exec detail inside those lines: `raw` (default) or `status` (tool label only)
- `streaming.preview.commandText` controls command/exec detail inside those lines: `status` (default, tool label only) or `raw` (explicit command text)
- `streaming.progress.commentary` (default: `false`) opts into assistant commentary/preamble text in the temporary progress draft
- legacy `channels.telegram.streamMode`, boolean `streaming` values, and retired native draft preview keys are detected; run `openclaw doctor --fix` to migrate them
+7 -7
View File
@@ -225,9 +225,9 @@ OpenClaw uses the same formatter for progress drafts and `/verbose`:
```
`"explain"` is the default and keeps drafts stable with concise labels.
`"raw"` appends the underlying command when available, which is useful while
debugging but noisier in chat. For example, a `node --check /tmp/app.js` call
renders differently by mode:
`"raw"` appends underlying tool detail when available. Command text also
requires the explicit `streaming.progress.commandText: "raw"` opt-in below.
With that opt-in, a `node --check /tmp/app.js` call renders differently by mode:
| Mode | Progress line |
| --------- | --------------------------------------------------------------- |
@@ -236,10 +236,10 @@ renders differently by mode:
### Command/exec text
`streaming.progress.commandText` (default `"raw"`) controls how much command
`streaming.progress.commandText` (default `"status"`) controls how much command
detail shows next to exec/bash progress lines, independent of the detail mode
above. Set it to `"status"` to keep a tool-progress line visible while hiding
the command text entirely:
above. Set it to `"raw"` to opt into command text; keep `"status"` to show only
the tool-progress status:
```json5
{
@@ -248,7 +248,7 @@ the command text entirely:
streaming: {
mode: "progress",
progress: {
commandText: "status",
commandText: "raw",
},
},
},
+3 -3
View File
@@ -337,9 +337,9 @@ Supported surfaces:
`streaming.preview.toolProgress` or `streaming.progress.toolProgress` to
`false` for that channel (both default `true`, and both are honored in every
mode). To keep tool-progress lines visible while hiding command/exec text,
set `streaming.preview.commandText` to `"status"` or
`streaming.progress.commandText` to `"status"`; the default is `"raw"` to
preserve released behavior. This policy is shared by draft/progress channels
set `streaming.preview.commandText` or `streaming.progress.commandText` to
`"status"` (the default). Set either option to `"raw"` to opt into command
text. This policy is shared by draft/progress channels
that use OpenClaw's compact progress renderer, including Discord, Matrix,
Microsoft Teams, Mattermost, Slack draft previews, and Telegram. To disable
preview edits entirely, set `streaming.mode` to `off`.
+5 -4
View File
@@ -90,12 +90,13 @@ title: "Thinking levels"
- Authorized external channel senders may persist the session verbose override. Internal gateway/webchat clients need `operator.admin` to persist it.
- Inline directive affects only that message; session/global defaults apply otherwise.
- Send `/verbose` (or `/verbose:`) with no argument to see the current verbose level.
- When verbose is on, agents that emit structured tool results send each tool call back as its own metadata-only message, prefixed with `<emoji> <tool-name>: <arg>` when available. These tool summaries are sent as soon as each tool starts (separate bubbles), not as streaming deltas.
- When verbose is on, agents that emit structured tool results send each tool call back as its own safe metadata-only message. Shell tools show their label without command text. These tool summaries are sent as soon as each tool starts (separate bubbles), not as streaming deltas.
- Tool failure summaries remain visible in normal mode, but raw error detail suffixes are hidden unless verbose is `full`.
- When verbose is `full`, tool outputs are also forwarded after completion (separate bubble, truncated to a safe length). If you toggle `/verbose on|full|off` while a run is in-flight, subsequent tool bubbles honor the new setting.
- `agents.defaults.toolProgressDetail` controls the shape of `/verbose` tool summaries and progress-draft tool lines. Use `"explain"` (default) for compact human labels such as `🛠️ Exec: checking JS syntax`; use `"raw"` when you also want the raw command/detail appended for debugging. Per-agent `agents.entries.*.toolProgressDetail` overrides the default.
- `explain`: `🛠️ Exec: check JS syntax for /tmp/app.js`
- `raw`: `🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js`
- `agents.defaults.toolProgressDetail` controls the shape of `/verbose` tool summaries and progress-draft tool lines. Use `"explain"` (default) for compact human labels and `"raw"` for unabridged non-shell detail. Standalone shell summaries require `/verbose full` for command text; progress drafts require the channel's explicit `streaming.*.commandText: "raw"` opt-in. Per-agent `agents.entries.*.toolProgressDetail` overrides the default.
- `/verbose on`: `🛠️ Exec`
- `/verbose full` + `explain`: `🛠️ Exec: check JS syntax for /tmp/app.js`
- `/verbose full` + `raw`: `🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js`
## Plugin trace directives (/trace)
+2
View File
@@ -136,6 +136,7 @@ describe("acpx plugin", () => {
inboundAudio: false,
shouldRouteToOriginating: false,
shouldSendToolSummaries: true,
shouldSendFullToolDetails: false,
sendPolicy: "allow",
};
const ctx = {
@@ -202,6 +203,7 @@ describe("acpx plugin", () => {
inboundAudio: false,
shouldRouteToOriginating: false,
shouldSendToolSummaries: true,
shouldSendFullToolDetails: false,
sendPolicy: "allow",
},
{
+30 -7
View File
@@ -112,7 +112,7 @@ describe("createClickClackActivityPublisher", () => {
expect(bodies).toEqual(["before tool", "after tool"]);
});
it("dedupes lane-prefixed tool frames into one row and upgrades on longer bodies", async () => {
it("dedupes lane-prefixed command frames without exposing richer command text", async () => {
const { client, createActivityMessage, updateMessageBody } = createClientMock();
const publisher = createClickClackActivityPublisher({
client,
@@ -145,8 +145,31 @@ describe("createClickClackActivityPublisher", () => {
kind: "agent_tool",
body: "🛠️ Exec",
});
expect(updateMessageBody).toHaveBeenCalledTimes(1);
expect(updateMessageBody).toHaveBeenCalledWith("msg_1", "🛠️ ls -la");
expect(updateMessageBody).not.toHaveBeenCalled();
});
it("hides command metadata from item-only durable activity", async () => {
const { client, createActivityMessage } = createClientMock();
const publisher = createClickClackActivityPublisher({
client,
target: { channelId: "chn_1" },
turnId: "msg_turn",
});
publisher.onItemEvent({
itemId: "tool:toolu_1",
toolCallId: "toolu_1",
kind: "tool",
name: "server.exec",
meta: "echo private-sentinel",
commandBearing: true,
});
await publisher.finalize();
expect(createActivityMessage).toHaveBeenCalledWith(
expect.objectContaining({ body: "🧩 Server.exec", kind: "agent_tool" }),
);
expect(JSON.stringify(createActivityMessage.mock.calls)).not.toContain("private-sentinel");
});
it("posts the upgraded body directly when frames land before the first POST runs", async () => {
@@ -157,19 +180,19 @@ describe("createClickClackActivityPublisher", () => {
turnId: "msg_turn",
});
publisher.onItemEvent({ toolCallId: "toolu_1", kind: "tool", name: "exec" });
publisher.onItemEvent({ toolCallId: "toolu_1", kind: "tool", name: "read" });
publisher.onItemEvent({
toolCallId: "toolu_1",
kind: "tool",
name: "exec",
progressText: "ls -la",
name: "read",
progressText: "Done",
});
await publisher.finalize();
expect(createActivityMessage).toHaveBeenCalledTimes(1);
expect(createActivityMessage.mock.calls[0]?.[0]).toMatchObject({
kind: "agent_tool",
body: "🛠️ ls -la",
body: "📖 Read: Done",
});
expect(updateMessageBody).not.toHaveBeenCalled();
});
+2
View File
@@ -33,6 +33,7 @@ type ClickClackItemEventPayload = {
summary?: string;
progressText?: string;
meta?: string;
commandBearing?: boolean;
};
/** Destination for durable activity rows (channel or DM conversation). */
@@ -105,6 +106,7 @@ function activityBody(payload: ClickClackItemEventPayload): string {
summary: payload.summary,
progressText: payload.progressText,
meta: payload.meta,
commandBearing: payload.commandBearing,
})?.text?.trim();
if (line) {
return line;
@@ -90,6 +90,32 @@ describe("ClickClack native agent progress", () => {
});
});
it("hides command metadata from item-only native progress", async () => {
const publishEphemeral = vi.fn().mockResolvedValue(undefined);
const publisher = createClickClackAgentProgressPublisher({
client: { publishEphemeral },
target: { workspaceId: "ws_1", channelId: "chn_1" },
turnId: "msg_1",
});
publisher.start();
publisher.onItemEvent({
itemId: "tool_1",
kind: "tool",
name: "server.exec",
meta: "echo private-sentinel",
commandBearing: true,
phase: "end",
status: "completed",
});
await publisher.finalize();
expect(JSON.stringify(publishEphemeral.mock.calls)).not.toContain("private-sentinel");
expect(publishEphemeral.mock.calls[1]?.[0].payload).toMatchObject({
line: { text: "🧩 Server.exec" },
});
});
it("does not let a progress transport failure interrupt finalization", async () => {
const onError = vi.fn();
const publishEphemeral = vi
+2
View File
@@ -16,6 +16,7 @@ export type ClickClackItemEventPayload = {
summary?: string;
progressText?: string;
meta?: string;
commandBearing?: boolean;
};
type ClickClackProgressClient = {
@@ -62,6 +63,7 @@ function progressText(payload: ClickClackItemEventPayload): string {
summary: payload.summary,
progressText: payload.progressText,
meta: payload.meta,
commandBearing: payload.commandBearing,
})?.text?.trim();
if (line) {
return line;
@@ -9,6 +9,7 @@ import {
} from "./event-projector-items.js";
import {
itemMeta,
isCommandBearingToolItem,
itemToolArgs,
itemToolResult,
shouldSuppressChannelProgressForItem,
@@ -113,6 +114,9 @@ export class CodexEventProjection {
if (!kind) {
return;
}
const name = itemName(item);
const args = itemToolArgs(item);
const commandBearing = isCommandBearingToolItem(item, args);
const meta = itemMeta(item, this.toolProgress.toolProgressDetailMode());
const suppressChannelProgress = shouldSuppressChannelProgressForItem(item);
this.emitAgentEvent({
@@ -123,8 +127,9 @@ export class CodexEventProjection {
kind,
title: itemTitle(item),
status: params.phase === "start" ? "running" : itemStatus(item),
...(itemName(item) ? { name: itemName(item) } : {}),
...(name ? { name } : {}),
...(meta ? { meta } : {}),
...(commandBearing ? { commandBearing: true } : {}),
...(suppressChannelProgress ? { suppressChannelProgress: true } : {}),
},
});
@@ -144,6 +149,7 @@ export class CodexEventProjection {
}
const status = params.phase === "result" ? itemStatus(item) : "running";
const args = itemToolArgs(item);
const commandBearing = isCommandBearingToolItem(item, args);
const meta = itemMeta(item, this.toolProgress.toolProgressDetailMode());
this.toolTranscript.recordTrajectoryEvent({ phase: params.phase, item, name, args, status });
if (params.phase === "result") {
@@ -164,6 +170,7 @@ export class CodexEventProjection {
itemId: item.id,
toolCallId: item.id,
...(meta ? { meta } : {}),
...(commandBearing ? { commandBearing: true } : {}),
...(params.phase === "start" && args ? { args } : {}),
...(params.phase === "result"
? {
@@ -80,6 +80,16 @@ export function itemToolArgs(item: CodexThreadItem): Record<string, unknown> | u
return undefined;
}
export function isCommandBearingToolItem(
item: CodexThreadItem,
args: Record<string, unknown> | undefined,
): boolean {
if (item.type === "commandExecution") {
return true;
}
return typeof args?.command === "string" && args.command.trim().length > 0;
}
function webSearchToolArgs(item: CodexThreadItem): Record<string, unknown> {
const action = isJsonObject(item.action) ? item.action : undefined;
const actionType = action ? readNonEmptyString(action, "type") : undefined;
@@ -19,6 +19,7 @@ import {
itemOutputText,
itemToolArgs,
itemToolError,
isCommandBearingToolItem,
nativeToolActionFingerprint,
} from "./event-projector-tool-items.js";
import {
@@ -40,7 +41,10 @@ import type {
CodexThreadItem,
JsonObject,
} from "./protocol.js";
import { resolveCodexToolProgressDetailMode } from "./tool-progress-normalization.js";
import {
isCodexCommandBearingToolCall,
resolveCodexToolProgressDetailMode,
} from "./tool-progress-normalization.js";
const TRANSCRIPT_PROGRESS_SUPPRESSED_TOOL_NAMES = new Set([
"message",
@@ -304,13 +308,18 @@ export class CodexToolProgressProjection {
return;
}
const toolName = itemName(item);
if (!toolName || !shouldEmitTranscriptToolProgress(toolName, itemToolArgs(item))) {
const args = itemToolArgs(item);
if (!toolName || !shouldEmitTranscriptToolProgress(toolName, args)) {
return;
}
this.resultSummaryItemIds.add(item.id);
const meta =
this.shouldEmitToolOutput() || !isCommandBearingToolItem(item, args)
? itemMeta(item, this.toolProgressDetailMode())
: undefined;
this.emitToolResultMessage({
itemId: item.id,
text: formatToolSummary(toolName, itemMeta(item, this.toolProgressDetailMode())),
text: formatToolSummary(toolName, meta),
});
}
@@ -460,9 +469,12 @@ export class CodexToolProgressProjection {
}
this.transcriptProgressCallIds.add(params.id);
const args = normalizeToolTranscriptArguments(params.arguments);
const meta = inferToolMetaFromArgs(params.name, args, {
detailMode: this.toolProgressDetailMode(),
});
const meta =
this.shouldEmitToolOutput() || !isCodexCommandBearingToolCall(params.name, args)
? inferToolMetaFromArgs(params.name, args, {
detailMode: this.toolProgressDetailMode(),
})
: undefined;
if (
!this.params.onToolResult ||
!this.shouldEmitToolResult() ||
@@ -225,6 +225,45 @@ describe("CodexAppServerEventProjector replay safety and progress projection", (
expect(result.replayMetadata).toEqual({ hadPotentialSideEffects: true, replaySafe: false });
});
it("records command sensitivity on namespaced MCP item events", async () => {
const onAgentEvent = vi.fn();
const projector = await createProjector({ ...(await createParams()), onAgentEvent });
await projector.handleNotification(
forCurrentTurn("item/completed", {
item: {
id: "mcp-command-1",
type: "mcpToolCall",
server: "server",
tool: "exec",
status: "completed",
arguments: { command: "echo private-sentinel" },
result: { content: [{ type: "text", text: "done" }] },
},
}),
);
expect(
findAgentEvent(onAgentEvent, {
stream: "item",
phase: "end",
itemId: "mcp-command-1",
}).data,
).toMatchObject({
name: "server.exec",
commandBearing: true,
meta: expect.stringContaining("private-sentinel"),
});
expect(
findAgentEvent(onAgentEvent, {
stream: "tool",
phase: "result",
itemId: "mcp-command-1",
name: "server.exec",
}).data,
).toMatchObject({ commandBearing: true, isError: false });
});
it("treats native collaboration calls as side-effect evidence", async () => {
const projector = await createProjector();
@@ -22,7 +22,7 @@ import {
registerCodexEventProjectorTestLifecycle();
describe("CodexAppServerEventProjector verbose output and hook projection", () => {
it("emits verbose tool summaries through onToolResult", async () => {
it("hides command details from ordinary verbose tool summaries", async () => {
const onToolResult = vi.fn();
const projector = await createProjector({
...(await createParams()),
@@ -50,7 +50,7 @@ describe("CodexAppServerEventProjector verbose output and hook projection", () =
expect(onToolResult).toHaveBeenCalledTimes(1);
expect(onToolResult).toHaveBeenCalledWith({
text: "🛠️ `run tests (workspace)`",
text: "🛠️ Bash",
});
});
@@ -58,7 +58,7 @@ describe("CodexAppServerEventProjector verbose output and hook projection", () =
const onToolResult = vi.fn();
const projector = await createProjector({
...(await createParams()),
verboseLevel: "on",
verboseLevel: "full",
toolProgressDetail: "raw",
onToolResult,
});
@@ -90,7 +90,7 @@ describe("CodexAppServerEventProjector verbose output and hook projection", () =
const onToolResult = vi.fn();
const projector = await createProjector({
...(await createParams()),
verboseLevel: "on",
verboseLevel: "full",
toolProgressDetail: "raw",
onToolResult,
});
@@ -148,6 +148,34 @@ describe("CodexAppServerEventProjector verbose output and hook projection", () =
});
});
it("hides command arguments from dynamic tool summaries unless verbose is full", async () => {
const onToolResult = vi.fn();
const projector = await createProjector({
...(await createParams()),
verboseLevel: "on",
onToolResult,
});
await projector.handleNotification(
forCurrentTurn("item/started", {
item: {
type: "dynamicToolCall",
id: "tool-command-1",
namespace: null,
tool: "server.exec",
arguments: { command: "cat /private/operator-file" },
status: "inProgress",
contentItems: null,
success: null,
durationMs: null,
},
}),
);
expect(onToolResult).toHaveBeenCalledWith({ text: "🧩 Server.exec" });
expect(JSON.stringify(onToolResult.mock.calls)).not.toContain("private/operator-file");
});
it("emits completed tool output only when verbose full is enabled", async () => {
const onToolResult = vi.fn();
const projector = await createProjector({
@@ -29,6 +29,7 @@ import { toTranscriptToolResult } from "./run-attempt-tools.js";
import type { CodexAttemptTurnState } from "./run-attempt-turn-state.js";
import {
inferCodexDynamicToolMeta,
isCodexCommandBearingToolCall,
resolveCodexToolProgressDetailMode,
sanitizeCodexToolArguments,
} from "./tool-progress-normalization.js";
@@ -186,6 +187,7 @@ export function createCodexAttemptServerRequestController(
resolveCodexToolProgressDetailMode(params.toolProgressDetail),
);
const toolArgs = sanitizeCodexToolArguments(call.arguments);
const commandBearing = isCodexCommandBearingToolCall(call.tool, toolArgs);
const shouldEmitDynamicToolProgress = shouldEmitTranscriptToolProgress(call.tool, toolArgs);
if (shouldEmitDynamicToolProgress) {
void emitCodexAppServerEvent(params, {
@@ -196,6 +198,7 @@ export function createCodexAttemptServerRequestController(
toolCallId: call.callId,
...(toolMeta ? { meta: toolMeta } : {}),
...(toolArgs ? { args: toolArgs } : {}),
...(commandBearing ? { commandBearing: true } : {}),
},
});
}
@@ -275,6 +278,7 @@ export function createCodexAttemptServerRequestController(
name: call.tool,
toolCallId: call.callId,
...(toolMeta ? { meta: toolMeta } : {}),
...(commandBearing ? { commandBearing: true } : {}),
isError: !protocolResponse.success,
result: toTranscriptToolResult(progressResponse),
},
@@ -138,6 +138,7 @@ describe("runCodexAppServerAttempt dynamic tools", () => {
tool: "lookup",
arguments: {
action: "search",
command: "cat /private/operator-file",
token: "plain-secret-value-12345",
text: "hello",
},
@@ -160,6 +161,7 @@ describe("runCodexAppServerAttempt dynamic tools", () => {
const agentEvents = onRunAgentEvent.mock.calls.map(([event]) => event) as Array<{
data?: {
args?: Record<string, unknown>;
commandBearing?: boolean;
isError?: boolean;
name?: string;
phase?: string;
@@ -178,6 +180,7 @@ describe("runCodexAppServerAttempt dynamic tools", () => {
expect(startEvent?.data?.name).toBe("lookup");
expect(startEvent?.data?.toolCallId).toBe("call-1");
expect(startEvent?.data?.args?.action).toBe("search");
expect(startEvent?.data?.commandBearing).toBe(true);
expect(startEvent?.data?.args?.token).toBe("plain-…2345");
expect(startEvent?.data?.args?.text).toBe("hello");
const resultEvent = agentEvents.find(
@@ -187,6 +190,7 @@ describe("runCodexAppServerAttempt dynamic tools", () => {
event.data.result !== undefined,
);
expect(resultEvent?.data?.name).toBe("lookup");
expect(resultEvent?.data?.commandBearing).toBe(true);
expect(resultEvent?.data?.toolCallId).toBe("call-1");
expect(resultEvent?.data?.isError).toBe(true);
expect(resultEvent?.data?.result).not.toHaveProperty("success");
@@ -22,6 +22,19 @@ export function resolveCodexToolProgressDetailMode(
return value === "raw" ? "raw" : "explain";
}
export function isCodexCommandBearingToolCall(
name: string | undefined,
args: Record<string, unknown> | undefined,
): boolean {
const normalizedName = name?.trim().toLowerCase();
return (
normalizedName === "exec" ||
normalizedName === "bash" ||
normalizedName === "shell" ||
(typeof args?.command === "string" && args.command.trim().length > 0)
);
}
/** Recursively redacts sensitive strings and handles circular values in event payloads. */
function sanitizeCodexAgentEventValue(value: unknown, seen = new WeakSet<object>()): unknown {
if (typeof value === "string") {
+1 -1
View File
@@ -33,7 +33,7 @@ export const discordChannelConfigUiHints = {
"preview.toolProgress":
"Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active.",
"preview.commandText":
'Command/exec detail in preview tool-progress lines: "raw" preserves released behavior; "status" shows only the tool label.',
'Command/exec detail in preview tool-progress lines: "status" is the safe default; "raw" opts into command text.',
},
progress: { includeCommentary: true },
}),
@@ -125,7 +125,7 @@ export function createDiscordDraftPreviewController(params: {
reasoningGate: previewToolProgressEnabled,
commentaryItalics: false,
buildProgressEventLine: (input, options) =>
input.event === "tool" || input.event === "item"
input.event === "tool" || input.event === "item" || input.event === "command-output"
? buildChannelProgressDraftLineForEntry(params.discordConfig, input, options)
: buildChannelProgressDraftLine(input, options),
update: async (previewText, options) => {
@@ -750,6 +750,7 @@ describe("processDiscordMessage draft streaming progress", () => {
mode: "progress",
progress: {
label: "Shelling",
commandText: "raw",
},
},
},
@@ -795,6 +796,41 @@ describe("processDiscordMessage draft streaming progress", () => {
expect(draftStream.update).toHaveBeenCalledWith("Shelling\n\n🛠️ Exec\n• done");
});
it("preserves command output text when raw Discord progress is configured", async () => {
const elapseProgressDraftStartDelay = useProgressDraftStartDelay();
const draftStream = createMockDraftStreamForTest();
dispatchInboundMessage.mockImplementationOnce(async (params?: DispatchInboundParams) => {
await params?.replyOptions?.onToolStart?.({
toolCallId: "call-1",
name: "exec",
phase: "start",
});
await params?.replyOptions?.onCommandOutput?.({
toolCallId: "call-1",
phase: "end",
title: "pnpm test -- --watch=false",
name: "exec",
exitCode: 0,
});
await elapseProgressDraftStartDelay();
return createNoQueuedDispatchResult();
});
const ctx = await createAutomaticSourceDeliveryContext({
discordConfig: {
streaming: {
mode: "progress",
progress: { label: "Shelling", commandText: "raw" },
},
},
});
await runProcessDiscordMessage(ctx);
expect(draftStream.update.mock.calls.flat().join("\n")).toContain("pnpm test -- --watch=false");
});
it("keeps Discord progress lines below the configured label", async () => {
const elapseProgressDraftStartDelay = useProgressDraftStartDelay();
const draftStream = createMockDraftStreamForTest();
+1 -1
View File
@@ -19,7 +19,7 @@ export const mattermostChannelConfigUiHints = {
"preview.toolProgress":
"Show tool/progress activity in the live draft preview post (default: true). Set false to hide interim tool updates while the draft preview stays active.",
"preview.commandText":
'Command/exec detail in preview tool-progress lines: "raw" preserves released behavior; "status" shows only the tool label.',
'Command/exec detail in preview tool-progress lines: "status" is the safe default; "raw" opts into command text.',
},
progress: {},
}),
@@ -609,6 +609,7 @@ describe("createMSTeamsReplyDispatcher", () => {
mode: "progress",
progress: {
label: "Working",
commandText: "raw",
},
},
});
@@ -634,6 +635,31 @@ describe("createMSTeamsReplyDispatcher", () => {
expect(lastUpdate).not.toContain("completed");
});
it("preserves command output text when raw command progress is configured", async () => {
vi.useFakeTimers();
const dispatcher = createDispatcher("personal", {
streaming: {
mode: "progress",
progress: {
label: "Working",
commandText: "raw",
},
},
});
await dispatcher.replyOptions.onCommandOutput?.({
phase: "end",
title: "pnpm test -- --watch=false",
name: "exec",
exitCode: 1,
});
await vi.advanceTimersByTimeAsync(5_000);
expect(getStreamMock().update).toHaveBeenLastCalledWith(
expect.stringContaining("pnpm test -- --watch=false"),
);
});
it("replaces reasoning progress snapshots in progress mode", async () => {
vi.useFakeTimers();
const dispatcher = createDispatcher("personal", {
+1 -1
View File
@@ -659,7 +659,7 @@ export function createMSTeamsReplyDispatcher(params: {
return false;
}
await streamController.pushProgressLine(
buildChannelProgressDraftLine({
buildChannelProgressDraftLineForEntry(msteamsCfg, {
event: "command-output",
...(typeof payload?.itemId === "string" ? { itemId: payload.itemId } : {}),
...(typeof payload?.toolCallId === "string"
+1 -1
View File
@@ -33,7 +33,7 @@ export const slackChannelConfigUiHints = {
"preview.toolProgress":
"Show tool/progress activity in the live draft preview message (default: true). Set false to hide interim tool updates while the draft preview stays active.",
"preview.commandText":
'Command/exec detail in preview tool-progress lines: "raw" preserves released behavior; "status" shows only the tool label.',
'Command/exec detail in preview tool-progress lines: "status" is the safe default; "raw" opts into command text.',
"progress.render":
'Progress draft renderer: "text" uses one portable text body; "rich" renders structured Slack Block Kit fields with the same text fallback.',
"progress.nativeTaskCards":
@@ -334,7 +334,7 @@ export function createSlackProgressRuntime(runtimeParams: {
reasoningGate: previewToolProgressEnabled,
commentaryItalics: true,
buildProgressEventLine: (input, options) =>
input.event === "tool" || input.event === "item"
input.event === "tool" || input.event === "item" || input.event === "command-output"
? buildChannelProgressDraftLineForEntry(account.config, input, options)
: buildChannelProgressDraftLine(input, options),
updateOnLineChange: useNativeProgressStreaming || useRichProgressDraft,
@@ -579,8 +579,31 @@ vi.mock("openclaw/plugin-sdk/channel-outbound", async (importOriginal) => {
summary?: string;
title?: string;
name?: string;
status?: string;
exitCode?: number | null;
},
) => {
if (params.event === "command-output") {
const status =
params.exitCode === 0
? "completed"
: params.exitCode != null
? `exit ${params.exitCode}`
: params.status;
const id = params.toolCallId ? `command:${params.toolCallId}` : params.itemId;
const raw =
(entry.streaming?.progress?.commandText ?? entry.streaming?.preview?.commandText) ===
"raw";
return {
kind: "command-output",
...(id ? { id } : {}),
text: raw && params.title ? params.title : (status ?? params.name ?? "exec"),
label: params.name ?? "exec",
...(raw && params.title ? { detail: params.title } : {}),
...(status ? { status } : {}),
toolName: params.name ?? "exec",
};
}
if (params.event === "tool") {
if (params.name === mockedEmptyProgressToolName) {
return undefined;
@@ -3801,6 +3824,36 @@ describe("dispatchPreparedSlackMessage preview fallback", () => {
expect(draftStream.update.mock.calls.flat().join("\n")).not.toContain("pnpm test");
});
it("preserves command output text when raw Slack progress is configured", async () => {
const draftStream = createDraftStreamStub();
createSlackDraftStreamMock.mockReturnValueOnce(draftStream);
mockedSlackStreamingMode = "progress";
mockedSlackDraftMode = "status_final";
mockedDispatchSequence = [];
mockedReplyOptionEvents = [
{
kind: "command_output",
phase: "end",
title: "pnpm test -- --watch=false",
name: "exec",
exitCode: 1,
},
];
await dispatchPreparedSlackMessage(
createPreparedSlackMessage({
accountConfig: {
streaming: {
mode: "progress",
progress: { label: "Shelling", commandText: "raw" },
},
},
}),
);
expect(draftStream.update.mock.calls.flat().join("\n")).toContain("pnpm test -- --watch=false");
});
it("suppresses standalone Slack tool progress when progress lines are disabled", async () => {
mockedSlackStreamingMode = "progress";
mockedSlackDraftMode = "status_final";
@@ -533,13 +533,10 @@ describeTelegramDispatch("dispatchTelegramMessage progress-summary", () => {
});
const lastUpdate = answerDraftStream.updatePreview.mock.calls.at(-1)?.[0];
expect(lastUpdate?.text).toContain("install dependencies");
expect(lastUpdate?.text).not.toContain("install dependencies");
expect(lastUpdate?.text).not.toContain("completed");
expect(lastUpdate).toEqual(
telegramProgressPreview(
"Shelling\n\n🛠️ install dependencies",
"<b>Shelling</b>\n<b>🛠️ Exec</b> <code>install dependencies</code>",
),
telegramProgressPreview("Shelling\n\n🛠️ Exec", "<b>Shelling</b>\n<b>🛠️ Exec</b>"),
);
} finally {
vi.useRealTimers();
+1 -1
View File
@@ -41,7 +41,7 @@ export const telegramChannelConfigUiHints = {
"preview.toolProgress":
"Show tool/progress activity in the live draft preview message (default: true when preview streaming is active). Set false to keep tool updates out of the edited Telegram preview.",
"preview.commandText":
'Command/exec detail in preview tool-progress lines: "raw" preserves released behavior; "status" shows only the tool label.',
'Command/exec detail in preview tool-progress lines: "status" is the safe default; "raw" opts into command text.',
},
progress: { includeCommentary: true, commentaryOrder: "after-command" },
}),
-2
View File
@@ -951,9 +951,7 @@ export async function runPreparedCliAgent(
): ReplyPayload[] => {
return buildEmbeddedRunPayloads({
assistantTexts: [],
toolMetas: [],
lastAssistant: undefined,
inlineToolResultsAllowed: false,
sessionKey: params.sessionKey ?? "",
provider: params.provider,
model: context.modelId,
@@ -74,7 +74,6 @@ describe("buildEmbeddedRunPayloads", () => {
function expectNoSyntheticCompletionForSession(sessionKey: string) {
expectNoPayloads({
sessionKey,
toolMetas: [{ toolName: "write", meta: "/tmp/out.md" }],
lastAssistant: makeAssistant({
stopReason: "stop",
errorMessage: undefined,
@@ -127,7 +126,6 @@ describe("buildEmbeddedRunPayloads", () => {
const payloads = buildPayloads({
assistantTexts: [errorJsonPretty],
lastAssistant: makeAssistant({ errorMessage: errorJson }),
inlineToolResultsAllowed: true,
verboseLevel: "on",
});
@@ -512,14 +510,6 @@ describe("buildEmbeddedRunPayloads", () => {
expectSinglePayloadText(payloads, "All good");
});
it("does not add synthetic completion text when tools run without final assistant text", () => {
expectNoPayloads({
sessionKey: "agent:main:discord:direct:u123",
toolMetas: [{ toolName: "write", meta: "/tmp/out.md" }],
lastAssistant: makeStoppedAssistant(),
});
});
it("does not add synthetic completion text for channel sessions", () => {
expectNoSyntheticCompletionForSession("agent:main:discord:channel:c123");
});
@@ -531,7 +521,6 @@ describe("buildEmbeddedRunPayloads", () => {
it("does not add synthetic completion text when messaging tool already delivered output", () => {
expectNoPayloads({
sessionKey: "agent:main:discord:direct:u123",
toolMetas: [{ toolName: "message_send", meta: "sent to #ops" }],
didSendViaMessagingTool: true,
lastAssistant: makeAssistant({
stopReason: "stop",
@@ -543,7 +532,6 @@ describe("buildEmbeddedRunPayloads", () => {
it("does not add synthetic completion text when the run still has a tool error", () => {
expectNoPayloads({
toolMetas: [{ toolName: "browser", meta: "open https://example.com" }],
lastToolError: { toolName: "browser", error: "url required" },
});
});
@@ -910,7 +898,25 @@ describe("buildEmbeddedRunPayloads", () => {
expectSinglePayloadSummary(payloads, { text: warningText ?? "" });
});
it("keeps exec failure labels outside markdown command text", () => {
it("hides exec command and cwd metadata without full verbosity", () => {
const payloads = buildPayloads({
lastToolError: {
toolName: "exec",
meta: "run python3 /path/to/daily-cost-audit.py (in /private/workspace)",
error: "Command exited with code 1",
mutatingAction: true,
},
toolResultFormat: "markdown",
verboseLevel: "off",
});
expectSinglePayloadSummary(payloads, {
text: "⚠️ 🛠️ Exec failed (exit 1)",
isError: true,
});
});
it("keeps full-verbose exec failure labels outside markdown command text", () => {
const payloads = buildPayloads({
lastToolError: {
toolName: "exec",
@@ -919,10 +925,11 @@ describe("buildEmbeddedRunPayloads", () => {
mutatingAction: true,
},
toolResultFormat: "markdown",
verboseLevel: "full",
});
expectSinglePayloadSummary(payloads, {
text: "⚠️ 🛠️ Exec failed: `python3 /path/to/daily-cost-audit.py` (exit 1)",
text: "⚠️ 🛠️ Exec failed: `python3 /path/to/daily-cost-audit.py`: Command exited with code 1",
isError: true,
});
expect(payloads[0]?.text).not.toContain("`run python3");
@@ -933,49 +940,51 @@ describe("buildEmbeddedRunPayloads", () => {
title: "prefers raw exec metadata when tool progress detail includes it",
meta: "run python3 /tmp/audit.py · `python3 /tmp/audit.py`",
toolResultFormat: "markdown",
expected: "⚠️ 🛠️ Exec failed: `python3 /tmp/audit.py` (exit 1)",
expected: "⚠️ 🛠️ Exec failed: `python3 /tmp/audit.py`: Command exited with code 1",
},
{
title: "prefers raw exec metadata when the literal command contains backticks",
meta: "run node inline script, `node -e 'console.log(1, `x`)'`",
toolResultFormat: "markdown",
expected: "⚠️ 🛠️ Exec failed: ``node -e 'console.log(1, `x`)'`` (exit 1)",
expected: "⚠️ 🛠️ Exec failed: ``node -e 'console.log(1, `x`)'``: Command exited with code 1",
},
{
title: "leaves exec metadata unwrapped for plain tool results",
meta: "run node inline script, `node -e 'console.log(1, `x`)'`",
toolResultFormat: "plain",
expected: "⚠️ 🛠️ Exec failed: node -e 'console.log(1, `x`)' (exit 1)",
expected: "⚠️ 🛠️ Exec failed: node -e 'console.log(1, `x`)': Command exited with code 1",
},
{
title: "preserves raw exec context before trailing raw command metadata",
meta: "run python3 /tmp/audit.py, node: mac-1, `python3 /tmp/audit.py`",
toolResultFormat: "markdown",
expected: "⚠️ 🛠️ Exec failed: `node: mac-1 · python3 /tmp/audit.py` (exit 1)",
expected:
"⚠️ 🛠️ Exec failed: `node: mac-1 · python3 /tmp/audit.py`: Command exited with code 1",
},
{
title: "does not promote display-summary commas into raw exec context",
meta: 'search "foo,bar" in src, `rg "foo,bar" src`',
toolResultFormat: "markdown",
expected: '⚠️ 🛠️ Exec failed: `rg "foo,bar" src` (exit 1)',
expected: '⚠️ 🛠️ Exec failed: `rg "foo,bar" src`: Command exited with code 1',
},
{
title: "does not treat parenthesized raw command arguments as cwd context",
meta: 'list files in (in progress) · `ls "(in progress)"`',
toolResultFormat: "markdown",
expected: '⚠️ 🛠️ Exec failed: `ls "(in progress)"` (exit 1)',
expected: '⚠️ 🛠️ Exec failed: `ls "(in progress)"`: Command exited with code 1',
},
{
title: "does not duplicate compact cwd labels already present in raw command arguments",
meta: 'print text (repo) · `printf "%s" "(repo)"`',
toolResultFormat: "markdown",
expected: '⚠️ 🛠️ Exec failed: `printf "%s" "(repo)"` (exit 1)',
expected: '⚠️ 🛠️ Exec failed: `printf "%s" "(repo)"`: Command exited with code 1',
},
{
title: "keeps arbitrary exec cwd suffixes inside markdown command text",
meta: "run python3 /tmp/audit.py (in /tmp/build @everyone)",
toolResultFormat: "markdown",
expected: "⚠️ 🛠️ Exec failed: `python3 /tmp/audit.py (in /tmp/build @everyone)` (exit 1)",
expected:
"⚠️ 🛠️ Exec failed: `python3 /tmp/audit.py (in /tmp/build @everyone)`: Command exited with code 1",
},
] as const)("$title", ({ meta, toolResultFormat, expected }) => {
const payloads = buildPayloads({
@@ -986,6 +995,7 @@ describe("buildEmbeddedRunPayloads", () => {
mutatingAction: true,
},
toolResultFormat,
verboseLevel: "full",
});
expectSinglePayloadSummary(payloads, {
@@ -1003,6 +1013,7 @@ describe("buildEmbeddedRunPayloads", () => {
mutatingAction: true,
},
toolResultFormat: "markdown",
verboseLevel: "full",
});
const workspaceNodePayloads = buildPayloads({
lastToolError: {
@@ -1012,6 +1023,7 @@ describe("buildEmbeddedRunPayloads", () => {
mutatingAction: true,
},
toolResultFormat: "markdown",
verboseLevel: "full",
});
const semanticCompactPayloads = buildPayloads({
lastToolError: {
@@ -1021,18 +1033,19 @@ describe("buildEmbeddedRunPayloads", () => {
mutatingAction: true,
},
toolResultFormat: "markdown",
verboseLevel: "full",
});
expectSinglePayloadSummary(cwdPayloads, {
text: "⚠️ 🛠️ Exec failed: `python3 audit.py (in /tmp/build)` (exit 1)",
text: "⚠️ 🛠️ Exec failed: `python3 audit.py (in /tmp/build)`: Command exited with code 1",
isError: true,
});
expectSinglePayloadSummary(workspaceNodePayloads, {
text: "⚠️ 🛠️ Exec failed: `node: mac-1 · python3 audit.py (workspace)` (exit 1)",
text: "⚠️ 🛠️ Exec failed: `node: mac-1 · python3 audit.py (workspace)`: Command exited with code 1",
isError: true,
});
expectSinglePayloadSummary(semanticCompactPayloads, {
text: "⚠️ 🛠️ Exec failed: `git status (repo)` (exit 1)",
text: "⚠️ 🛠️ Exec failed: `git status (repo)`: Command exited with code 1",
isError: true,
});
});
@@ -1042,49 +1055,52 @@ describe("buildEmbeddedRunPayloads", () => {
name: "strips a literal synthetic run prefix",
meta: "run make build",
error: "Command failed with exit code 2",
expected: "⚠️ 🛠️ Exec failed: `make build` (exit 2)",
expected: "⚠️ 🛠️ Exec failed: `make build`: Command failed with exit code 2",
},
{
name: "preserves a semantic test summary",
meta: "run tests",
error: "Command failed with exit code 1",
expected: "⚠️ 🛠️ Exec failed: `run tests` (exit 1)",
expected: "⚠️ 🛠️ Exec failed: `run tests`: Command failed with exit code 1",
},
{
name: "preserves a semantic deploy summary",
meta: "run deploy",
error: "Command failed with exit code 1",
expected: "⚠️ 🛠️ Exec failed: `run deploy` (exit 1)",
expected: "⚠️ 🛠️ Exec failed: `run deploy`: Command failed with exit code 1",
},
{
name: "preserves a compound summary",
meta: "run tests → install dependencies",
error: "Command failed with exit code 1",
expected: "⚠️ 🛠️ Exec failed: `run tests → install dependencies` (exit 1)",
expected:
"⚠️ 🛠️ Exec failed: `run tests → install dependencies`: Command failed with exit code 1",
},
{
name: "preserves an inline-script summary",
meta: "run node inline script",
error: "Command failed with exit code 1",
expected: "⚠️ 🛠️ Exec failed: `run node inline script` (exit 1)",
expected: "⚠️ 🛠️ Exec failed: `run node inline script`: Command failed with exit code 1",
},
{
name: "preserves a heredoc summary",
meta: "run python3 inline script (heredoc)",
error: "Command failed with exit code 1",
expected: "⚠️ 🛠️ Exec failed: `run python3 inline script (heredoc)` (exit 1)",
expected:
"⚠️ 🛠️ Exec failed: `run python3 inline script (heredoc)`: Command failed with exit code 1",
},
{
name: "preserves a sed summary",
meta: "run sed on file",
error: "Command failed with exit code 1",
expected: "⚠️ 🛠️ Exec failed: `run sed on file` (exit 1)",
expected: "⚠️ 🛠️ Exec failed: `run sed on file`: Command failed with exit code 1",
},
{
name: "preserves a pipeline summary",
meta: "run tests -> show first 3 lines",
error: "Command failed with exit code 1",
expected: "⚠️ 🛠️ Exec failed: `run tests -> show first 3 lines` (exit 1)",
expected:
"⚠️ 🛠️ Exec failed: `run tests -> show first 3 lines`: Command failed with exit code 1",
},
])("formats exec metadata: $name", ({ meta, error, expected }) => {
const payloads = buildPayloads({
@@ -1095,6 +1111,7 @@ describe("buildEmbeddedRunPayloads", () => {
mutatingAction: true,
},
toolResultFormat: "markdown",
verboseLevel: "full",
});
expectSinglePayloadSummary(payloads, { text: expected, isError: true });
@@ -1111,10 +1128,11 @@ describe("buildEmbeddedRunPayloads", () => {
mutatingAction: true,
},
toolResultFormat: "markdown",
verboseLevel: "full",
});
expectSinglePayloadSummary(payloads, {
text: "⚠️ 🛠️ Bash failed: `show matrix-progress-@room-@alice:matrix-qa.test-!room:matrix-qa.test.txt` (workspace) (exit 1)",
text: "⚠️ 🛠️ Bash failed: `show matrix-progress-@room-@alice:matrix-qa.test-!room:matrix-qa.test.txt` (workspace): Command exited with code 1",
isError: true,
});
});
@@ -17,9 +17,10 @@ describe("buildEmbeddedRunPayloads process-error warnings", () => {
const payloads = buildPayloads({ lastToolError, verboseLevel: "off" });
expectSingleToolErrorPayload(payloads, {
title: "Process: wild-lagoon",
title: "Process",
absentDetail: "SAFE_PROCESS_STDERR",
});
expect(payloads[0]?.text).not.toContain("wild-lagoon");
expect(payloads[0]?.text).not.toContain(dummyTelegramToken);
expect(payloads[0]?.text).toContain("exit 7");
expect(payloads[0]?.text).toContain("/verbose full");
@@ -11,7 +11,6 @@ export function buildPayloads(overrides: Partial<BuildPayloadParams> = {}) {
// verbose, tool-result, or current-assistant behavior explicitly.
return buildEmbeddedRunPayloads({
assistantTexts: [],
toolMetas: [],
lastAssistant: undefined,
currentAssistant:
overrides.currentAssistant === undefined
@@ -19,7 +18,6 @@ export function buildPayloads(overrides: Partial<BuildPayloadParams> = {}) {
: overrides.currentAssistant,
isCronTrigger: false,
sessionKey: "session:telegram",
inlineToolResultsAllowed: false,
verboseLevel: "off",
reasoningLevel: "off",
toolResultFormat: "plain",
@@ -596,7 +596,7 @@ describe("buildEmbeddedRunPayloads tool-error warnings", () => {
});
});
it("surfaces exec tool errors for cron sessions even when verbose mode is off", () => {
it("keeps timed-out cron exec failures compact when verbose mode is off", () => {
const payloads = buildPayloads({
lastToolError: {
toolName: "exec",
@@ -610,12 +610,12 @@ describe("buildEmbeddedRunPayloads tool-error warnings", () => {
expectSingleToolErrorPayload(payloads, {
title: "Exec",
detail:
absentDetail:
"Command timed out after 1800 seconds. The command was terminated, but external side effects may already have completed. Verify the resulting state before retrying. Do not automatically rerun non-idempotent commands. Use a higher timeout only when the command is known to be safe to retry.",
});
});
it("surfaces timed-out exec tool errors for cron-triggered custom session keys", () => {
it("keeps timed-out cron-trigger exec failures compact", () => {
const payloads = buildPayloads({
lastToolError: {
toolName: "exec",
@@ -629,11 +629,11 @@ describe("buildEmbeddedRunPayloads tool-error warnings", () => {
expectSingleToolErrorPayload(payloads, {
title: "Exec",
detail: "Command timed out after 1800 seconds.",
absentDetail: "Command timed out after 1800 seconds.",
});
});
it("surfaces heartbeat exec tool output details when the task run fails", () => {
it("keeps heartbeat exec commands and paths private without full verbosity", () => {
const payloads = buildPayloads({
lastToolError: {
toolName: "exec",
@@ -646,8 +646,8 @@ describe("buildEmbeddedRunPayloads tool-error warnings", () => {
});
expectSingleToolErrorPayload(payloads, {
title: "show last 20 lines",
detail: "No such file or directory",
title: "Exec",
absentDetail: "/home/user/.openclaw/workspace/memory/2026-06-04.md",
});
});
@@ -28,7 +28,6 @@ import { formatToolAggregate } from "../../../auto-reply/tool-meta.js";
import type { OpenClawConfig } from "../../../config/types.openclaw.js";
import { hasReplyPayloadContent } from "../../../interactive/payload.js";
import type { AssistantMessage } from "../../../llm/types.js";
import { isCronSessionKey } from "../../../routing/session-key.js";
import {
extractAssistantTextForPhase,
parseAssistantTextSignature,
@@ -38,7 +37,6 @@ import {
sanitizeAssistantFinalAnswerText,
sanitizeAssistantVisibleText,
} from "../../../shared/text/assistant-visible-text.js";
import { parseInlineDirectives } from "../../../utils/directive-tags.js";
import {
BILLING_ERROR_USER_MESSAGE,
formatAssistantErrorText,
@@ -63,7 +61,6 @@ import { isLikelyMutatingToolName } from "../../tool-mutation.js";
import { buildSourceReplyPayloadState } from "./source-reply-payloads.js";
import { hasExplicitMutatingToolFailureAcknowledgement } from "./tool-failure-acknowledgement.js";
type ToolMetaEntry = { toolName: string; meta?: string };
type ToolErrorWarningPolicy = {
showWarning: boolean;
includeDetails: boolean;
@@ -152,30 +149,6 @@ function normalizeReplyTextForComparison(text: string): string {
return normalizeTextForComparison(parseReplyDirectives(text).text ?? "");
}
function shouldIncludeToolErrorDetails(params: {
lastToolError: ToolErrorSummary;
isCronTrigger?: boolean;
isHeartbeatTrigger?: boolean;
sessionKey: string;
verboseLevel?: VerboseLevel;
}): boolean {
if (isVerboseToolDetailEnabled(params.verboseLevel)) {
return true;
}
if (!isExecLikeToolName(params.lastToolError.toolName)) {
return false;
}
// Heartbeat runs usually have no assistant reply to carry the command
// output, so keep exec details in the warning instead of a generic label.
if (params.isHeartbeatTrigger === true) {
return true;
}
return (
params.lastToolError.timedOut === true &&
(params.isCronTrigger === true || isCronSessionKey(params.sessionKey))
);
}
function shouldMarkNonTerminalToolErrorWarning(lastToolError: ToolErrorSummary): boolean {
return lastToolError.middlewareError === true;
}
@@ -187,9 +160,11 @@ function formatToolErrorWarningText(params: {
}): string {
const terminalDiagnostic = params.lastToolError.terminalDiagnostic;
if (terminalDiagnostic?.kind === "process") {
const toolLabel = formatToolAggregate("process", [terminalDiagnostic.sessionId], {
markdown: params.useMarkdown,
});
const toolLabel = formatToolAggregate(
"process",
params.includeDetails ? [terminalDiagnostic.sessionId] : undefined,
{ markdown: params.useMarkdown },
);
const reason =
terminalDiagnostic.reason.kind === "exit"
? `exit ${terminalDiagnostic.reason.exitCode}`
@@ -208,7 +183,9 @@ function formatToolErrorWarningText(params: {
const toolLabel = formatToolAggregate(params.lastToolError.toolName, undefined, {
markdown: params.useMarkdown,
});
const subject = formatExecLikeFailureSubject(params.lastToolError.meta, params.useMarkdown);
const subject = params.includeDetails
? formatExecLikeFailureSubject(params.lastToolError.meta, params.useMarkdown)
: "";
const conciseExitSuffix = params.includeDetails
? ""
: formatConciseExecExitSuffix(params.lastToolError.error);
@@ -221,7 +198,7 @@ function formatToolErrorWarningText(params: {
const toolSummary = formatToolAggregate(
params.lastToolError.toolName,
params.lastToolError.meta ? [params.lastToolError.meta] : undefined,
params.includeDetails && params.lastToolError.meta ? [params.lastToolError.meta] : undefined,
{ markdown: params.useMarkdown },
);
const errorSuffix =
@@ -455,9 +432,6 @@ function resolveToolErrorWarningPolicy(params: {
hasUserFacingFailureAcknowledgement: boolean;
suppressToolErrors: boolean;
suppressToolErrorWarnings?: boolean | (() => boolean | undefined);
isCronTrigger?: boolean;
isHeartbeatTrigger?: boolean;
sessionKey: string;
verboseLevel?: VerboseLevel;
}): ToolErrorWarningPolicy {
const normalizedToolName = normalizeOptionalLowercaseString(params.lastToolError.toolName) ?? "";
@@ -469,10 +443,8 @@ function resolveToolErrorWarningPolicy(params: {
} else {
toolErrorWarningOverride = params.suppressToolErrorWarnings;
}
const includeDetails = shouldIncludeToolErrorDetails({
...params,
verboseLevel: dynamicToolErrorWarningsDisabled ? "off" : params.verboseLevel,
});
const includeDetails =
!dynamicToolErrorWarningsDisabled && isVerboseToolDetailEnabled(params.verboseLevel);
const suppressToolErrorWarnings = toolErrorWarningOverride === true;
if (suppressToolErrorWarnings) {
return { showWarning: false, includeDetails };
@@ -523,7 +495,6 @@ export function buildEmbeddedRunPayloads(params: {
assistantMessageIndex?: number;
assistantTranscriptOwned?: boolean;
assistantTranscriptIdempotencyKey?: string;
toolMetas: ToolMetaEntry[];
lastAssistant: AssistantMessage | undefined;
currentAssistant?: AssistantMessage | null;
lastToolError?: ToolErrorSummary;
@@ -540,7 +511,6 @@ export function buildEmbeddedRunPayloads(params: {
thinkingLevel?: ThinkLevel;
toolResultFormat?: ToolResultFormat;
suppressToolErrorWarnings?: boolean | (() => boolean | undefined);
inlineToolResultsAllowed: boolean;
didSendViaMessagingTool?: boolean;
didDeliverSourceReplyViaMessageTool?: boolean;
messagingToolSentTargets?: MessagingToolSend[];
@@ -644,29 +614,6 @@ export function buildEmbeddedRunPayloads(params: {
if (errorText) {
replyItems.push({ text: errorText, isError: true });
}
const inlineToolResults =
params.inlineToolResultsAllowed && params.verboseLevel !== "off" && params.toolMetas.length > 0;
if (inlineToolResults) {
for (const { toolName, meta } of params.toolMetas) {
const agg = formatToolAggregate(toolName, meta ? [meta] : [], {
markdown: useMarkdown,
});
const parsedAggregate = parseInlineDirectives(agg, {
stripAudioTag: true,
stripReplyTags: true,
});
const cleanedText = parsedAggregate.text;
if (cleanedText) {
replyItems.push({
text: cleanedText,
audioAsVoice: parsedAggregate.audioAsVoice,
replyToId: parsedAggregate.replyToId,
replyToTag: parsedAggregate.hasReplyTag,
replyToCurrent: parsedAggregate.replyToCurrent,
});
}
}
}
const reasoningText =
suppressAssistantArtifacts || runAborted || lastAssistantNeedsErrorSurface
? ""
@@ -814,9 +761,6 @@ export function buildEmbeddedRunPayloads(params: {
hasUserFacingFailureAcknowledgement,
suppressToolErrors: Boolean(params.config?.messages?.suppressToolErrors),
suppressToolErrorWarnings: params.suppressToolErrorWarnings,
isCronTrigger: params.isCronTrigger,
isHeartbeatTrigger: params.isHeartbeatTrigger,
sessionKey: params.sessionKey,
verboseLevel: params.verboseLevel,
});
// Surface mutating failures unless the assistant explicitly acknowledged the failed action.
@@ -166,7 +166,6 @@ export function prepareEmbeddedRunTerminal(input: {
assistantMessageIndex: attempt.lastAssistantTextMessageIndex,
assistantTranscriptOwned: attempt.assistantTranscriptOwned,
assistantTranscriptIdempotencyKey: attempt.assistantTranscriptIdempotencyKey,
toolMetas: attempt.toolMetas,
lastAssistant: payloadAssistant,
currentAssistant: attempt.yieldDetected ? null : (payloadAssistant ?? null),
lastToolError: attempt.lastToolError,
@@ -184,7 +183,6 @@ export function prepareEmbeddedRunTerminal(input: {
thinkingLevel: runParams.thinkLevel,
toolResultFormat: input.resolvedToolResultFormat,
suppressToolErrorWarnings: runParams.suppressToolErrorWarnings,
inlineToolResultsAllowed: false,
didSendViaMessagingTool: attempt.didSendViaMessagingTool,
didDeliverSourceReplyViaMessageTool: attempt.didDeliverSourceReplyViaMessageTool === true,
messagingToolSentTargets: attempt.messagingToolSentTargets,
@@ -46,7 +46,6 @@ type ToolExecutionUpdateEvent = {
partialResult?: unknown;
hideFromChannelProgress?: boolean;
};
type PayloadToolMetas = Parameters<typeof buildEmbeddedRunPayloads>[0]["toolMetas"];
function startTool(ctx: ToolHandlerContext, event: ToolExecutionStartEvent) {
return handleToolExecutionStart(ctx, { type: "tool_execution_start", ...event });
@@ -228,19 +227,6 @@ function requireEvent(
return event;
}
function requirePayloadToolMetas(
toolMetas: ToolHandlerContext["state"]["toolMetas"],
): PayloadToolMetas {
return toolMetas.map((toolMeta) => {
if (!toolMeta.toolName) {
throw new Error("expected tool metadata to include toolName");
}
return toolMeta.meta === undefined
? { toolName: toolMeta.toolName }
: { toolName: toolMeta.toolName, meta: toolMeta.meta };
});
}
function requireString(value: unknown, label: string): string {
if (typeof value !== "string") {
throw new Error(`expected ${label}`);
@@ -1499,6 +1485,26 @@ describe("handleToolExecutionEnd mutating failure recovery", () => {
expect(JSON.stringify(onAgentEvent.mock.calls)).not.toContain("PTY_PLANTED_SECRET");
});
it("records command sensitivity on namespaced tool results", async () => {
const { ctx, onAgentEvent } = createTestContext();
await executeTool(ctx, {
toolName: "server.exec",
toolCallId: "tool-namespaced-exec",
args: { command: "echo private-sentinel" },
isError: false,
result: { ok: true },
});
expect(onAgentEvent).toHaveBeenCalledWith({
stream: "tool",
data: expect.objectContaining({
phase: "result",
commandBearing: true,
isError: false,
}),
});
});
it("does not export a validation-lookalike error from an executed tool", async () => {
const { ctx, onAgentEvent } = createTestContext();
const error =
@@ -2345,41 +2351,36 @@ describe("handleToolExecutionEnd timeout metadata", () => {
it.each([
{
name: "uses raw exec metadata for failed tool payload warnings",
name: "records raw exec metadata without exposing it in default payload warnings",
toolCallId: "tool-exec-raw-command",
args: { command: "python3 /tmp/audit.py" },
meta: "run python3 /tmp/audit.py, `python3 /tmp/audit.py`",
warning: "⚠️ 🛠️ Exec failed: `python3 /tmp/audit.py` (exit 1)",
},
{
name: "uses raw exec metadata for payload warnings when commands contain backticks",
name: "records backtick commands without exposing them in default payload warnings",
toolCallId: "tool-exec-raw-command-backticks",
args: { command: "node -e 'console.log(1, `x`)'" },
meta: "run node inline script, ``node -e 'console.log(1, `x`)'``",
warning: "⚠️ 🛠️ Exec failed: ``node -e 'console.log(1, `x`)'`` (exit 1)",
},
{
name: "preserves node context in raw exec metadata payload warnings",
name: "records node context without exposing it in default payload warnings",
toolCallId: "tool-exec-node-raw-command",
args: { command: "python3 /tmp/audit.py", host: "node", node: "mac-1" },
meta: "run python3 /tmp/audit.py, node: mac-1, `python3 /tmp/audit.py`",
warning: "⚠️ 🛠️ Exec failed: `node: mac-1 · python3 /tmp/audit.py` (exit 1)",
},
{
name: "preserves cwd context in raw exec metadata payload warnings",
name: "records cwd context without exposing it in default payload warnings",
toolCallId: "tool-exec-cwd-raw-command",
args: { command: "python3 audit.py", workdir: "/tmp/build" },
meta: "run python3 audit.py (in /tmp/build), `python3 audit.py`",
warning: "⚠️ 🛠️ Exec failed: `python3 audit.py (in /tmp/build)` (exit 1)",
},
{
name: "preserves compact cwd labels in semantic raw exec metadata payload warnings",
name: "records compact cwd labels without exposing them in default payload warnings",
toolCallId: "tool-exec-repo-raw-command",
args: { command: "git status", workdir: "/Users/agent/Projects/OpenClaw" },
meta: "check git status (repo), `git status`",
warning: "⚠️ 🛠️ Exec failed: `git status (repo)` (exit 1)",
},
])("$name", async ({ toolCallId, args, meta, warning }) => {
])("$name", async ({ toolCallId, args, meta }) => {
const { ctx } = createTestContext();
ctx.params.toolProgressDetail = "raw";
await executeTool(ctx, {
@@ -2396,14 +2397,12 @@ describe("handleToolExecutionEnd timeout metadata", () => {
expectRecordFields(ctx.state.lastToolError, "last tool error", { toolName: "exec", meta });
const payloads = buildEmbeddedRunPayloads({
assistantTexts: [],
toolMetas: requirePayloadToolMetas(ctx.state.toolMetas),
lastAssistant: undefined,
lastToolError: ctx.state.lastToolError,
sessionKey: "agent:unit-session",
toolResultFormat: "markdown",
inlineToolResultsAllowed: false,
});
expect(payloads[0]?.text).toBe(warning);
expect(payloads[0]?.text).toBe("⚠️ 🛠️ Exec failed (exit 1)");
});
it("records structured error codes for failed tool results", async () => {
@@ -2732,14 +2731,12 @@ describe("handleToolExecutionEnd exec approval prompts", () => {
});
const payloads = buildEmbeddedRunPayloads({
assistantTexts: [],
toolMetas: requirePayloadToolMetas(ctx.state.toolMetas),
lastAssistant: undefined,
lastToolError: ctx.state.lastToolError,
sessionKey: "agent:unit-session",
toolResultFormat: "markdown",
inlineToolResultsAllowed: false,
});
expect(payloads[0]?.text).toContain("approval prompt delivery");
expect(payloads[0]?.text).toBe("⚠️ 🛠️ Exec failed");
});
it("records an actionable failure when unavailable-approval notice delivery rejects", async () => {
@@ -94,6 +94,7 @@ import { parseExecApprovalResultText } from "./exec-approval-result.js";
import { buildAgentHarnessQuestionPromptPayload } from "./harness/user-input-bridge.js";
import { readMcpAppChannelView } from "./mcp-ui-resource.js";
import type { AgentEvent } from "./runtime/index.js";
import { isCommandBearingToolCall } from "./tool-display.js";
import {
createToolValidationErrorSummary,
summarizeToolValidationError,
@@ -430,6 +431,7 @@ function buildToolCallSummary(
const mutation = buildToolMutationState(toolName, args, meta);
return {
meta,
commandBearing: isCommandBearingToolCall(toolName, args),
instanceReplaySafe,
mutatingAction: mutation.mutatingAction,
replaySafe:
@@ -1208,10 +1210,8 @@ export function handleToolExecutionStart(
evt.replaySafe === true ||
ctx.params.replaySafeToolNames?.has(rawToolName) === true ||
ctx.params.replaySafeToolNames?.has(toolName) === true;
ctx.state.toolMetaById.set(
toolCallId,
buildToolCallSummary(toolName, args, meta, instanceReplaySafe, false),
);
const callSummary = buildToolCallSummary(toolName, args, meta, instanceReplaySafe, false);
ctx.state.toolMetaById.set(toolCallId, callSummary);
ctx.log.debug(
`embedded run tool start: runId=${ctx.params.runId} tool=${toolName} toolCallId=${toolCallId}`,
);
@@ -1236,9 +1236,13 @@ export function handleToolExecutionStart(
status: "running",
name: toolName,
meta,
commandBearing: callSummary.commandBearing,
toolCallId,
startedAt,
...(hideFromChannelProgress ? { hideFromChannelProgress: true } : {}),
...(callSummary.commandBearing && !isExecToolName(toolName)
? { suppressChannelProgress: true }
: {}),
};
emitTrackedItemEvent(ctx, itemData);
// Best-effort typing signal; do not block tool summaries on slow emitters.
@@ -1285,7 +1289,7 @@ export function handleToolExecutionStart(
!ctx.state.toolSummaryById.has(toolCallId)
) {
ctx.state.toolSummaryById.add(toolCallId);
ctx.emitToolSummary(toolName, meta);
ctx.emitToolSummary(toolName, meta, callSummary.commandBearing);
}
// Track messaging tool sends (pending until confirmed in tool_execution_end).
@@ -1420,7 +1424,11 @@ export function handleToolExecutionUpdate(
status: "running",
name: toolName,
toolCallId,
commandBearing: ctx.state.toolMetaById.get(toolCallId)?.commandBearing,
...(hideFromChannelProgress ? { hideFromChannelProgress: true } : {}),
...(ctx.state.toolMetaById.get(toolCallId)?.commandBearing && !isExecTool
? { suppressChannelProgress: true }
: {}),
...(toolProgress
? { progressText: toolProgress.text }
: { meta: ctx.state.toolMetaById.get(toolCallId)?.meta }),
@@ -1754,6 +1762,7 @@ export async function handleToolExecutionEnd(
toolCallId,
meta,
isError: isToolError,
commandBearing: callSummary.commandBearing,
result: eventResult,
...(toolErrorSummary ? { toolErrorSummary } : {}),
...(hideFromChannelProgress ? { hideFromChannelProgress: true } : {}),
@@ -1769,10 +1778,14 @@ export async function handleToolExecutionEnd(
status: isToolError ? "failed" : "completed",
name: toolName,
meta,
commandBearing: callSummary.commandBearing,
toolCallId,
startedAt: startData?.startTime,
endedAt,
...(hideFromChannelProgress ? { hideFromChannelProgress: true } : {}),
...(callSummary.commandBearing && !isExecToolName(toolName)
? { suppressChannelProgress: true }
: {}),
...(isToolError && extractToolErrorMessage(sanitizedResult)
? { error: extractToolErrorMessage(sanitizedResult) }
: {}),
@@ -1786,6 +1799,7 @@ export async function handleToolExecutionEnd(
toolCallId,
meta,
isError: isToolError,
commandBearing: callSummary.commandBearing,
...(toolErrorSummary ? { toolErrorSummary } : {}),
...(hideFromChannelProgress ? { hideFromChannelProgress: true } : {}),
},
@@ -46,6 +46,7 @@ type EmbeddedSubscribeLogger = {
/** Per-tool metadata tracked between tool start/update/end events. */
export type ToolCallSummary = {
meta?: string;
commandBearing: boolean;
instanceReplaySafe: boolean;
replaySafe: boolean;
mutatingAction: boolean;
@@ -225,7 +226,11 @@ export type EmbeddedAgentSubscribeContext = {
shouldEmitToolResult: () => boolean;
shouldEmitToolOutput: () => boolean;
emitToolSummary: (toolName?: string, meta?: string) => void;
emitToolSummary: (
toolName: string | undefined,
meta: string | undefined,
commandBearing: boolean,
) => void;
emitToolOutput: (toolName?: string, meta?: string, output?: string, result?: unknown) => void;
stripBlockTags: (
text: string,
@@ -377,7 +382,11 @@ export type ToolHandlerContext = {
flushBlockReplyBuffer: () => void | Promise<void>;
shouldEmitToolResult: () => boolean;
shouldEmitToolOutput: () => boolean;
emitToolSummary: (toolName?: string, meta?: string) => void;
emitToolSummary: (
toolName: string | undefined,
meta: string | undefined,
commandBearing: boolean,
) => void;
emitToolOutput: (toolName?: string, meta?: string, output?: string, result?: unknown) => void;
trimMessagingToolSent: () => void;
consumeToolSendReceipt?: (toolCallId: string) => unknown;
@@ -440,6 +440,32 @@ describe("subscribeEmbeddedAgentSession", () => {
expect(onToolResult).toHaveBeenCalledTimes(1);
});
it.each(["exec", "server.exec"])(
"hides command metadata for %s unless full verbose mode is enabled",
async (toolName) => {
const onToolResult = vi.fn();
const toolHarness = createSubscribedSessionHarness({
runId: "run-exec-on",
verboseLevel: "on",
onToolResult,
});
toolHarness.emit({
type: "tool_execution_start",
toolName,
toolCallId: "tool-exec-on",
args: { command: "echo private-sentinel" },
});
await Promise.resolve();
const payload = toolResultPayloadAt(onToolResult, 0);
expect(payload?.text).toContain(toolName === "exec" ? "Exec" : "Server.exec");
expect(payload?.text).not.toContain("private-sentinel");
},
);
it("includes browser action metadata in tool summaries", async () => {
const onToolResult = vi.fn();
+7 -2
View File
@@ -852,8 +852,13 @@ export function subscribeEmbeddedAgentSession(params: SubscribeEmbeddedAgentSess
}),
});
};
const emitToolSummary = (toolName?: string, meta?: string) => {
const agg = formatToolAggregate(toolName, meta ? [meta] : undefined, {
const emitToolSummary = (
toolName: string | undefined,
meta: string | undefined,
commandBearing: boolean,
) => {
const visibleMeta = params.verboseLevel === "full" || !commandBearing ? meta : undefined;
const agg = formatToolAggregate(toolName, visibleMeta ? [visibleMeta] : undefined, {
markdown: useMarkdown,
});
emitToolResultMessage(toolName, agg);
+14 -1
View File
@@ -3,7 +3,11 @@
*
* Builds redacted labels and compact details from tool metadata without affecting execution semantics.
*/
import { normalizeLowercaseStringOrEmpty } from "@openclaw/normalization-core/string-coerce";
import { asOptionalObjectRecord } from "@openclaw/normalization-core/record-coerce";
import {
normalizeLowercaseStringOrEmpty,
normalizeOptionalString,
} from "@openclaw/normalization-core/string-coerce";
import { redactToolDetail } from "../logging/redact.js";
import { shortenHomeInString } from "../utils.js";
import {
@@ -105,6 +109,15 @@ export function isShellToolDisplayName(name: string | undefined): boolean {
return normalized === "bash" || normalized === "exec" || normalized === "shell";
}
/** Provider-defined tool names are not enough: namespaced tools can carry executable commands. */
export function isCommandBearingToolCall(name: string | undefined, args?: unknown): boolean {
if (isShellToolDisplayName(name)) {
return true;
}
const command = asOptionalObjectRecord(args)?.command;
return typeof command === "string" && normalizeOptionalString(command) !== undefined;
}
/** Builds the compact one-line summary shown in transcripts and logs. */
export function formatToolSummary(display: ToolDisplay): string {
const detail = formatToolDetail(display);
@@ -41,14 +41,12 @@ describe("WebChat message tool internal source reply", () => {
const embeddedPayloads = buildEmbeddedRunPayloads({
assistantTexts: ["Visible automatic final reply."],
toolMetas: [],
lastAssistant: undefined,
currentAssistant: undefined,
sessionKey: "agent:main:webchat:dm:dashboard",
sourceReplyDeliveryMode: "automatic",
messagingToolSourceReplyPayloads: sourceReply ? [sourceReply] : [],
runId: "webchat-run",
inlineToolResultsAllowed: false,
verboseLevel: "off",
reasoningLevel: "off",
toolResultFormat: "plain",
@@ -230,6 +230,7 @@ export type GetReplyOptions = {
summary?: string;
progressText?: string;
meta?: string;
commandBearing?: boolean;
approvalId?: string;
approvalSlug?: string;
suppressDurableProgress?: true;
@@ -22,6 +22,7 @@ function createProjectorHarness(
onProgress?: () => void;
shouldSendToolSummaries?: boolean;
shouldSendToolSummariesNow?: () => boolean;
shouldSendFullToolDetails?: boolean;
},
) {
const deliveries: Delivery[] = [];
@@ -29,6 +30,7 @@ function createProjectorHarness(
cfg: createCfg(cfgOverrides),
shouldSendToolSummaries: opts?.shouldSendToolSummaries ?? true,
shouldSendToolSummariesNow: opts?.shouldSendToolSummariesNow,
shouldSendFullToolDetails: opts?.shouldSendFullToolDetails ?? false,
deliver: async (kind, payload) => {
deliveries.push({ kind, text: payload.text });
return true;
@@ -145,6 +147,35 @@ async function runHiddenBoundaryCase(params: {
}
describe("createAcpReplyProjector", () => {
it("shows execute details only in full verbose mode", async () => {
const summary = createLiveToolLifecycleHarness();
await emitTool(summary.projector, {
tag: "tool_call",
toolCallId: "call_execute_summary",
kind: "execute",
status: "in_progress",
title: "exec: cat /private/operator-file",
text: "exec: cat /private/operator-file (in_progress)",
});
expect(summary.deliveries[0]?.text).not.toContain("cat /private/operator-file");
expect(summary.deliveries[0]?.text).toContain("status=in_progress");
const full = createStreamHarness(
"live",
{ tagVisibility: { tool_call: true } },
{ shouldSendFullToolDetails: true },
);
await emitTool(full.projector, {
tag: "tool_call",
toolCallId: "call_execute_full",
kind: "execute",
status: "in_progress",
title: "exec: cat /private/operator-file",
text: "exec: cat /private/operator-file (in_progress)",
});
expect(full.deliveries[0]?.text).toContain("cat /private/operator-file");
});
it("reports progress for ACP runtime events before delivery filtering", async () => {
const onProgress = vi.fn();
const { projector } = createProjectorHarness(undefined, { onProgress });
+11 -4
View File
@@ -141,9 +141,14 @@ function shouldFlushLiveBufferOnIdle(text: string): boolean {
return false;
}
function renderToolSummaryText(event: Extract<AcpRuntimeEvent, { type: "tool_call" }>): string {
function renderToolSummaryText(
event: Extract<AcpRuntimeEvent, { type: "tool_call" }>,
shouldSendFullToolDetails: boolean,
): string {
const detailParts: string[] = [];
const title = normalizeOptionalString(event.title);
const commandBearing = normalizeOptionalLowercaseString(event.kind) === "execute";
const title =
shouldSendFullToolDetails || !commandBearing ? normalizeOptionalString(event.title) : undefined;
if (title) {
detailParts.push(title);
}
@@ -151,7 +156,8 @@ function renderToolSummaryText(event: Extract<AcpRuntimeEvent, { type: "tool_cal
if (status) {
detailParts.push(`status=${status}`);
}
const fallback = normalizeOptionalString(event.text);
const fallback =
shouldSendFullToolDetails || !commandBearing ? normalizeOptionalString(event.text) : undefined;
if (detailParts.length === 0 && fallback) {
detailParts.push(fallback);
}
@@ -171,6 +177,7 @@ export function createAcpReplyProjector(params: {
cfg: OpenClawConfig;
shouldSendToolSummaries: boolean;
shouldSendToolSummariesNow?: () => boolean;
shouldSendFullToolDetails: boolean;
deliver: (
kind: ReplyDispatchKind,
payload: ReplyPayload,
@@ -344,7 +351,7 @@ export function createAcpReplyProjector(params: {
return;
}
const renderedToolSummary = renderToolSummaryText(event);
const renderedToolSummary = renderToolSummaryText(event, params.shouldSendFullToolDetails);
const toolSummary = truncateText(renderedToolSummary, settings.maxSessionUpdateChars);
const hash = hashText(renderedToolSummary);
const toolCallId = normalizeOptionalString(event.toolCallId);
@@ -124,8 +124,10 @@ export async function runCliFallbackCandidate(params: {
const cliCurrentMessageId = isRestartSentinelContinuation
? turn.sessionCtx.ReplyToId
: (turn.sessionCtx.MessageSidFull ?? turn.sessionCtx.MessageSid);
const commandDetailsVisible = turn.resolvedVerboseLevel === "full";
const cliToolSummaryTracker = createCliToolSummaryTracker({
detailMode: turn.toolProgressDetail,
commandDetailsVisible,
shouldEmitToolResult: turn.shouldEmitToolResult,
shouldEmitToolOutput: turn.shouldEmitToolOutput,
deliver: async (payload) => {
@@ -136,21 +138,24 @@ export async function runCliFallbackCandidate(params: {
// so the terminal fact has to be projected here. The embedded path gets this
// from the shared agent-event handler; without it a failed CLI command renders
// exactly like one that succeeded.
const deliverCliCommandOutcome = async (payload: {
name: string | undefined;
phase: "start" | "update" | "result";
args: Record<string, unknown> | undefined;
toolCallId?: string;
isError?: boolean;
result?: unknown;
}) => {
const deliverCliCommandOutcome = async (
payload: {
name: string | undefined;
phase: "start" | "update" | "result";
args: Record<string, unknown> | undefined;
toolCallId?: string;
isError?: boolean;
result?: unknown;
},
commandBearing: boolean,
) => {
const onCommandOutput = turn.opts?.onCommandOutput;
if (!onCommandOutput) {
return;
}
const commandOutput = buildCommandOutputFromToolResultEvent({
stream: "tool",
data: { ...payload },
data: { ...payload, commandBearing },
});
if (commandOutput) {
await onCommandOutput(commandOutput);
@@ -244,9 +249,9 @@ export async function runCliFallbackCandidate(params: {
},
onToolEvent: async (payload) => {
if (!params.preserveProgressCallbackStartOrder) {
await cliToolSummaryTracker.noteToolEvent(payload);
const commandBearing = await cliToolSummaryTracker.noteToolEvent(payload);
if (payload.phase === "result") {
await deliverCliCommandOutcome(payload);
await deliverCliCommandOutcome(payload, commandBearing);
return;
}
const { name, phase, args, toolCallId } = payload;
@@ -264,8 +269,8 @@ export async function runCliFallbackCandidate(params: {
}
const summaryPromise = cliToolSummaryTracker.noteToolEvent(payload);
if (payload.phase === "result") {
await summaryPromise;
await deliverCliCommandOutcome(payload);
const commandBearing = await summaryPromise;
await deliverCliCommandOutcome(payload, commandBearing);
return;
}
const { name, phase, args, toolCallId } = payload;
@@ -734,25 +734,32 @@ describe("createCliToolSummaryTracker", () => {
result: { content: [{ type: "text", text: "Wed Jun 10 2026" }] },
};
it("delivers a tool summary for a result using meta captured at start", async () => {
const deliver = vi.fn();
const tracker = createCliToolSummaryTracker({
shouldEmitToolResult: () => true,
shouldEmitToolOutput: () => false,
deliver,
});
await tracker.noteToolEvent(startEvent);
await tracker.noteToolEvent(resultEvent);
expect(deliver).toHaveBeenCalledTimes(1);
const payload = deliver.mock.calls[0]?.[0] as { text: string; isError?: boolean };
expect(payload.text).toContain("date -u");
expect(payload.text).not.toContain("Wed Jun 10 2026");
expect(payload.isError).toBeUndefined();
});
it.each(["exec", "server.exec"])(
"delivers a safe %s summary using metadata captured at start",
async (name) => {
const deliver = vi.fn();
const tracker = createCliToolSummaryTracker({
commandDetailsVisible: false,
shouldEmitToolResult: () => true,
shouldEmitToolOutput: () => false,
deliver,
});
await tracker.noteToolEvent({ ...startEvent, name });
const commandBearing = await tracker.noteToolEvent({ ...resultEvent, name });
expect(commandBearing).toBe(true);
expect(deliver).toHaveBeenCalledTimes(1);
const payload = deliver.mock.calls[0]?.[0] as { text: string; isError?: boolean };
expect(payload.text).toContain(name === "exec" ? "Exec" : "Server.exec");
expect(payload.text).not.toContain("date -u");
expect(payload.text).not.toContain("Wed Jun 10 2026");
expect(payload.isError).toBeUndefined();
},
);
it("appends the tool output block when full verbose output is enabled", async () => {
const deliver = vi.fn();
const tracker = createCliToolSummaryTracker({
commandDetailsVisible: true,
shouldEmitToolResult: () => true,
shouldEmitToolOutput: () => true,
deliver,
@@ -767,6 +774,7 @@ describe("createCliToolSummaryTracker", () => {
it("renders top-level structured CLI results in full verbose output", async () => {
const deliver = vi.fn();
const tracker = createCliToolSummaryTracker({
commandDetailsVisible: true,
shouldEmitToolResult: () => true,
shouldEmitToolOutput: () => true,
deliver,
@@ -785,6 +793,7 @@ describe("createCliToolSummaryTracker", () => {
it("emits nothing while tool summaries are disabled", async () => {
const deliver = vi.fn();
const tracker = createCliToolSummaryTracker({
commandDetailsVisible: false,
shouldEmitToolResult: () => false,
shouldEmitToolOutput: () => false,
deliver,
@@ -797,6 +806,7 @@ describe("createCliToolSummaryTracker", () => {
it("propagates tool errors on the summary payload", async () => {
const deliver = vi.fn();
const tracker = createCliToolSummaryTracker({
commandDetailsVisible: false,
shouldEmitToolResult: () => true,
shouldEmitToolOutput: () => false,
deliver,
@@ -810,6 +820,7 @@ describe("createCliToolSummaryTracker", () => {
it("summarizes results without a tracked start event", async () => {
const deliver = vi.fn();
const tracker = createCliToolSummaryTracker({
commandDetailsVisible: false,
shouldEmitToolResult: () => true,
shouldEmitToolOutput: () => false,
deliver,
@@ -18,6 +18,7 @@ import {
resolveAgentRunAbortLifecycleFields,
resolveAgentRunErrorLifecycleFields,
} from "../../agents/run-termination.js";
import { isCommandBearingToolCall } from "../../agents/tool-display.js";
import { normalizeAgentPlanSteps } from "../../channels/streaming.js";
import type { SessionEntry } from "../../config/sessions.js";
import { updateSessionEntry } from "../../config/sessions/session-accessor.js";
@@ -301,33 +302,36 @@ function createToolEventBridge(params: {
*/
export function createCliToolSummaryTracker(params: {
detailMode?: "explain" | "raw";
commandDetailsVisible: boolean;
shouldEmitToolResult: () => boolean;
shouldEmitToolOutput: () => boolean;
deliver: (payload: { text: string; isError?: boolean }) => Promise<void> | void;
}) {
const metaByCallId = new Map<string, string | undefined>();
const toolByCallId = new Map<string, { meta?: string; commandBearing: boolean }>();
return {
noteToolEvent: async (payload: CliToolEventPayload): Promise<void> => {
noteToolEvent: async (payload: CliToolEventPayload): Promise<boolean> => {
if (payload.phase === "start") {
if (payload.toolCallId && payload.name) {
metaByCallId.set(
payload.toolCallId,
inferToolMetaFromArgs(payload.name, payload.args, {
toolByCallId.set(payload.toolCallId, {
meta: inferToolMetaFromArgs(payload.name, payload.args, {
detailMode: params.detailMode ?? "explain",
}),
);
commandBearing: isCommandBearingToolCall(payload.name, payload.args),
});
}
return;
return false;
}
if (payload.phase !== "result") {
return;
return false;
}
const meta = payload.toolCallId ? metaByCallId.get(payload.toolCallId) : undefined;
const storedTool = payload.toolCallId ? toolByCallId.get(payload.toolCallId) : undefined;
const meta =
params.commandDetailsVisible || !storedTool?.commandBearing ? storedTool?.meta : undefined;
if (payload.toolCallId) {
metaByCallId.delete(payload.toolCallId);
toolByCallId.delete(payload.toolCallId);
}
if (!params.shouldEmitToolResult()) {
return;
return storedTool?.commandBearing === true;
}
const aggregate = formatToolAggregate(payload.name, meta ? [meta] : undefined, {
markdown: true,
@@ -340,9 +344,10 @@ export function createCliToolSummaryTracker(params: {
}
}
if (!text.trim()) {
return;
return storedTool?.commandBearing === true;
}
await params.deliver({ text, ...(payload.isError === true ? { isError: true } : {}) });
return storedTool?.commandBearing === true;
},
};
}
@@ -48,6 +48,25 @@ describe("buildCommandOutputFromToolResultEvent", () => {
expect(buildFromCliResult({ isError: false, result: "alpha" })?.status).toBe("completed");
});
it("projects a safe terminal state from a namespaced command-bearing result", () => {
const built = buildCommandOutputFromToolResultEvent({
stream: "tool",
data: {
phase: "result",
name: "server.exec",
toolCallId: "call-1",
commandBearing: true,
isError: false,
},
});
expect(built).toMatchObject({
name: "server.exec",
status: "completed",
toolCallId: "call-1",
});
});
it("prefers an explicit status and structured fields when present", () => {
const built = buildCommandOutputFromToolResultEvent({
stream: "tool",
@@ -49,7 +49,8 @@ export function buildCommandOutputFromToolResultEvent(evt: {
return undefined;
}
const name = readStringValue(evt.data.name);
if (!name || !isCommandToolName(name)) {
const commandBearing = evt.data.commandBearing === true;
if (!name || (!commandBearing && !isCommandToolName(name))) {
return undefined;
}
const result = readRecordValue(evt.data.result);
@@ -82,6 +83,7 @@ export function buildCommandOutputFromToolResultEvent(evt: {
exitCode !== undefined ||
durationMs !== undefined ||
cwd !== undefined ||
(commandBearing && typeof evt.data.isError === "boolean") ||
(result !== undefined && Object.keys(result).length > 0);
if (!hasConcreteCommandResult) {
return undefined;
@@ -195,6 +195,7 @@ export function createAgentRunEventHandler(params: {
summary: readStringValue(evt.data.summary),
progressText: readStringValue(evt.data.progressText),
meta: readStringValue(evt.data.meta),
commandBearing: evt.data.commandBearing === true,
approvalId: readStringValue(evt.data.approvalId),
approvalSlug: readStringValue(evt.data.approvalSlug),
});
@@ -396,6 +396,7 @@ async function runDispatch(params: {
}
: {}),
shouldSendToolSummaries: true,
shouldSendFullToolDetails: false,
bypassForCommand: false,
toolsAllow: params.toolsAllow,
...(params.onReplyStart ? { onReplyStart: params.onReplyStart } : {}),
+2
View File
@@ -432,6 +432,7 @@ export async function tryDispatchAcpReply(params: {
originatingChatType?: ChatType;
shouldSendToolSummaries: boolean;
shouldSendToolSummariesNow?: () => boolean;
shouldSendFullToolDetails: boolean;
bypassForCommand: boolean;
onReplyStart?: () => Promise<void> | void;
recordProcessed: DispatchProcessedRecorder;
@@ -549,6 +550,7 @@ export async function tryDispatchAcpReply(params: {
cfg: params.cfg,
shouldSendToolSummaries: params.shouldSendToolSummaries,
shouldSendToolSummariesNow: params.shouldSendToolSummariesNow,
shouldSendFullToolDetails: params.shouldSendFullToolDetails,
deliver: delivery.deliver,
onProgress: markAcpProgress,
provider: params.ctx.Surface ?? params.ctx.Provider,
@@ -638,6 +638,7 @@ export async function chooseDispatchRoute(state: PrepareDispatchOperationReadySt
originatingThreadId: routeReplyThreadId,
originatingChatType: replyRoute.chatType,
shouldSendToolSummaries,
shouldSendFullToolDetails: state.shouldEmitFullVerboseProgress(),
sendPolicy: state.sendPolicy,
}),
{
@@ -681,6 +681,7 @@ export async function executeDispatch(state: PrepareDispatchExecutionReadyState)
originatingThreadId: state.routeReplyThreadId,
originatingChatType: replyRoute.chatType,
shouldSendToolSummaries: state.shouldSendToolSummaries,
shouldSendFullToolDetails: state.shouldEmitFullVerboseProgress(),
sendPolicy: state.sendPolicy,
isTailDispatch: true,
}),
@@ -449,6 +449,11 @@ describe("progress narration through reply options", () => {
phase: "start",
args: { command: "cat /etc/hosts" },
});
narrator.noteToolStart({
name: "server.exec",
phase: "start",
args: { command: "cat /etc/hosts" },
});
await flushNarrations();
narrator.noteCommandOutput({
name: "exec",
+4 -3
View File
@@ -4,10 +4,11 @@ import {
flushSessionActivityAssistantNote,
noteSessionActivityEvent,
} from "../../agents/session-activity-notes.js";
import { isCommandBearingToolCall } from "../../agents/tool-display.js";
import { resolveUtilityModelRefForAgent } from "../../agents/utility-model.js";
import { PROGRESS_STATUS_PREAMBLE_FRESH_MS } from "../../channels/progress-draft-compositor.js";
import { sanitizeProgressStatusText } from "../../channels/progress-draft-status-text.js";
import { isChannelProgressDraftWorkToolName, isCommandToolName } from "../../channels/streaming.js";
import { isChannelProgressDraftWorkToolName } from "../../channels/streaming.js";
import type { OpenClawConfig } from "../../config/types.openclaw.js";
import { logVerbose } from "../../globals.js";
import type { AgentEventPayload, AgentEventStream } from "../../infra/agent-events.js";
@@ -324,8 +325,8 @@ function createProgressNarrator(params: {
if (payload.phase !== "start" || !isChannelProgressDraftWorkToolName(payload.name)) {
return;
}
// Same command-tool set the draft formatter uses for commandText policy.
const hideDetail = params.hideCommandText === true && isCommandToolName(payload.name);
const hideDetail =
params.hideCommandText === true && isCommandBearingToolCall(payload.name, payload.args);
recordEvent("tool", {
phase: "start",
name: payload.name,
+81 -15
View File
@@ -3,6 +3,7 @@ import { inferToolMetaFromArgs } from "../agents/embedded-agent-utils.js";
import { formatToolAggregate } from "../auto-reply/tool-meta.js";
import {
buildChannelProgressDraftLine,
buildChannelProgressDraftLineForEntry,
formatChannelProgressDraftText,
formatPlanChecklistLines,
normalizeAgentPlanSteps,
@@ -103,6 +104,65 @@ describe("buildChannelProgressDraftLine", () => {
});
expect(line?.text).not.toContain("command false");
});
it("defaults entry-backed command progress to status and preserves explicit raw text", () => {
const input = {
event: "tool" as const,
name: "exec",
phase: "start",
args: { command: "echo private" },
};
expect(buildChannelProgressDraftLineForEntry(undefined, input)?.text).toBe("🛠️ Exec");
expect(
buildChannelProgressDraftLineForEntry(
{ streaming: { progress: { commandText: "raw" } } },
input,
{ detailMode: "raw" },
)?.text,
).toContain("echo private");
const commandOutput = {
event: "command-output" as const,
name: "exec",
phase: "end",
title: "echo private",
exitCode: 1,
};
expect(buildChannelProgressDraftLine(commandOutput)?.text).toBe("🛠️ exit 1");
expect(buildChannelProgressDraftLine(commandOutput, { commandText: "raw" })?.text).toContain(
"echo private",
);
const item = {
event: "item" as const,
itemKind: "command",
name: "exec",
phase: "start",
status: "running",
meta: "echo private",
};
expect(buildChannelProgressDraftLine(item)?.text).toBe("🛠️ Exec");
expect(buildChannelProgressDraftLine(item, { commandText: "raw" })?.text).toContain(
"echo private",
);
const namespaced = {
event: "tool" as const,
name: "server.exec",
phase: "start",
args: { command: "echo private" },
};
expect(buildChannelProgressDraftLineForEntry(undefined, namespaced)?.text).not.toContain(
"echo private",
);
expect(
buildChannelProgressDraftLineForEntry(
{ streaming: { progress: { commandText: "raw" } } },
namespaced,
)?.text,
).toContain("echo private");
});
});
// Claude CLI tool names arrive capitalized. Each tool call is described twice —
@@ -117,13 +177,16 @@ describe("backend tool-name casing", () => {
] as const;
it.each(CLI_TOOL_CALLS)("renders $name as one line", ({ name, args }) => {
const structured = buildChannelProgressDraftLine({
event: "tool",
toolCallId: "call-1",
name,
phase: "start",
args,
});
const structured = buildChannelProgressDraftLine(
{
event: "tool",
toolCallId: "call-1",
name,
phase: "start",
args,
},
{ commandText: "raw" },
);
const meta = inferToolMetaFromArgs(name, args, { detailMode: "explain" });
const summaryText = formatToolAggregate(name, meta ? [meta] : undefined, { markdown: true });
@@ -136,16 +199,19 @@ describe("backend tool-name casing", () => {
expect(merged).toHaveLength(1);
});
it("keeps the shell detail so renderers never fall back to prefixed text", () => {
it("keeps explicit raw shell detail so renderers never fall back to prefixed text", () => {
// Without detail, a renderer composing "<icon> <label>" then appending the
// line text prints the icon twice ("🛠️ Bash 🛠️ print text").
const line = buildChannelProgressDraftLine({
event: "tool",
toolCallId: "call-1",
name: "Bash",
phase: "start",
args: { command: "echo alpha", description: "print text" },
});
const line = buildChannelProgressDraftLine(
{
event: "tool",
toolCallId: "call-1",
name: "Bash",
phase: "start",
args: { command: "echo alpha", description: "print text" },
},
{ commandText: "raw" },
);
expect(line?.detail).toBe("print text");
expect(line?.text).toBe(`${line?.icon} print text`);
+11 -13
View File
@@ -5,6 +5,7 @@ import { normalizeOptionalLowercaseString } from "@openclaw/normalization-core/s
import { normalizeTrimmedStringList } from "@openclaw/normalization-core/string-normalization";
import {
formatToolDetail,
isCommandBearingToolCall,
isShellToolDisplayName,
resolveToolDisplay,
} from "../agents/tool-display.js";
@@ -238,6 +239,7 @@ export type ChannelProgressDraftLineInput =
summary?: string;
progressText?: string;
meta?: string;
commandBearing?: boolean;
}
| {
event: "plan";
@@ -381,13 +383,12 @@ function itemKindToToolName(kind: string | undefined): string | undefined {
/** Tools whose detail is raw command text; commandText policy applies to these. */
export function isCommandToolName(name: string | undefined): boolean {
const normalized = normalizeOptionalLowercaseString(name);
return normalized === "exec" || normalized === "shell" || normalized === "bash";
return isCommandBearingToolCall(name);
}
function isCommandProgressItem(input: Extract<ChannelProgressDraftLineInput, { event: "item" }>) {
const itemKind = normalizeOptionalLowercaseString(input.itemKind);
return itemKind === "command" || isCommandToolName(input.name);
return input.commandBearing === true || itemKind === "command" || isCommandToolName(input.name);
}
function resolveProgressDraftLineId(
@@ -444,7 +445,7 @@ function buildCommandOutputProgressLine(
): ChannelProgressDraftLine | undefined {
const name = input.name ?? "exec";
const correlationKey = resolveCommandProgressCorrelationKey(input);
const detail = options?.commandText === "status" ? [] : compactStrings([input.title]);
const detail = options?.commandText === "raw" ? compactStrings([input.title]) : [];
const line = buildNamedProgressLine(input.event, name, detail, options, {
correlationKey,
id: resolveProgressDraftLineId(input, { useToolCallIdFallback: true }),
@@ -532,20 +533,19 @@ export function buildChannelProgressDraftLine(
switch (input.event) {
case "tool": {
const itemId = input.itemId ?? (input.toolCallId ? `tool:${input.toolCallId}` : undefined);
const commandBearing = isCommandBearingToolCall(input.name, input.args);
return buildNamedProgressLine(
input.event,
input.name,
[
options?.commandText === "status" && isCommandToolName(input.name)
options?.commandText !== "raw" && commandBearing
? undefined
: inferToolMeta(input.name, input.args, options?.detailMode),
input.phase && !input.name ? input.phase : undefined,
],
options,
{
correlationKey: isCommandToolName(input.name)
? resolveCommandProgressCorrelationKey(input)
: undefined,
correlationKey: commandBearing ? resolveCommandProgressCorrelationKey(input) : undefined,
id: itemId,
},
);
@@ -553,11 +553,9 @@ export function buildChannelProgressDraftLine(
case "item": {
const name = input.name ?? itemKindToToolName(input.itemKind);
const meta =
input.meta ??
input.summary ??
(options?.commandText === "status" && isCommandProgressItem(input)
options?.commandText !== "raw" && isCommandProgressItem(input)
? undefined
: input.progressText);
: (input.meta ?? input.summary ?? input.progressText);
if (isEmptyReasoningProgressItem(input, meta)) {
return undefined;
}
@@ -876,7 +874,7 @@ export function resolveChannelStreamingProgressNarration(
export function resolveChannelStreamingPreviewCommandText(
entry: StreamingCompatEntry | null | undefined,
defaultValue: ChannelStreamingCommandTextMode = "raw",
defaultValue: ChannelStreamingCommandTextMode = "status",
): ChannelStreamingCommandTextMode {
const config = getChannelStreamingConfigObject(entry);
return (
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -66,7 +66,7 @@ export type ChannelStreamingProgressConfig = {
render?: "text" | "rich";
/** Include compact tool/task progress in the draft. Default: true. */
toolProgress?: boolean;
/** Command/exec progress detail in the draft. "raw" preserves released behavior; "status" shows only the tool label. Default: "raw". */
/** Command/exec progress detail in the draft. "raw" opts into command text; "status" shows only the tool label. Default: "status". */
commandText?: ChannelStreamingCommandTextMode;
/** Include assistant commentary/preamble text in the progress draft. Default: false. */
commentary?: boolean;
@@ -87,7 +87,7 @@ export type ChannelStreamingPreviewConfig = {
* Default: true.
*/
toolProgress?: boolean;
/** Command/exec progress detail in the preview. "raw" preserves released behavior; "status" shows only the tool label. Default: "raw". */
/** Command/exec progress detail in the preview. "raw" opts into command text; "status" shows only the tool label. Default: "status". */
commandText?: ChannelStreamingCommandTextMode;
};
+6
View File
@@ -0,0 +1,6 @@
import type { FailoverReason } from "../agents/failover/signal.js";
/** Keeps arbitrary runtime errors in automation history instead of chat copy. */
export function cronFailureDetailLines(errorReason: FailoverReason | undefined): string[] {
return errorReason ? [`Cause: ${errorReason}`] : ["Check automation history for details."];
}
@@ -144,7 +144,6 @@ export function formatTargetCronDeliveryFailureAwarenessText(params: {
channel: string;
to: string;
threadId?: string;
error: unknown;
partialDelivered?: boolean;
}): string {
const targetParts = [`${params.channel}:${params.to}`];
@@ -155,7 +154,7 @@ export function formatTargetCronDeliveryFailureAwarenessText(params: {
"A scheduled automation attempted to deliver to this channel, but delivery failed.",
`Job: ${params.job.name || params.job.id}`,
`Target: ${targetParts.join(" ")}`,
`Delivery error: ${formatErrorMessage(params.error)}`,
"Check automation history for delivery error details.",
params.partialDelivered
? "One or more scheduled message payloads may already have been delivered."
: "No scheduled message was delivered.",
@@ -2309,7 +2309,7 @@ describe("dispatchCronDelivery — double-announce guard", () => {
"A scheduled automation attempted to deliver to this channel, but delivery failed.",
"Job: Test Job",
"Target: telegram:123456",
"Delivery error: second payload stopped before final dispatch | connect ECONNREFUSED | ECONNREFUSED",
"Check automation history for delivery error details.",
"One or more scheduled message payloads may already have been delivered.",
].join("\n"),
{
@@ -2684,7 +2684,7 @@ describe("dispatchCronDelivery — double-announce guard", () => {
"A scheduled automation attempted to deliver to this channel, but delivery failed.",
"Job: Test Job",
"Target: telegram:123456 thread 42",
"Delivery error: Call to 'sendMessage' failed! (400: Bad Request: message thread not found)",
"Check automation history for delivery error details.",
"No scheduled message was delivered.",
].join("\n"),
{
@@ -2731,7 +2731,7 @@ describe("dispatchCronDelivery — double-announce guard", () => {
"A scheduled automation attempted to deliver to this channel, but delivery failed.",
"Job: Test Job",
"Target: telegram:123456",
"Delivery error: second payload failed",
"Check automation history for delivery error details.",
"One or more scheduled message payloads may already have been delivered.",
].join("\n"),
{
@@ -409,7 +409,6 @@ export async function dispatchCronDelivery(
channel: delivery.channel,
to: delivery.to,
threadId: stringifyRouteThreadId(delivery.threadId),
error: err,
partialDelivered: payloadMayHaveReachedRecipientBeforeFailure,
});
await queueCronAwarenessSystemEvent({
+15 -17
View File
@@ -622,8 +622,8 @@ describe("CronService failure alerts", () => {
if (typeof alertText !== "string") {
throw new Error("expected failure alert text");
}
expect(alertText).toMatch(
/Automation "gateway restart" skipped 2 times\nSkip reason: disabled/,
expect(alertText).toBe(
'Automation "gateway restart" skipped 2 times\nCheck automation history for details.',
);
const skippedJob = cron.getJob(job.id);
@@ -633,7 +633,7 @@ describe("CronService failure alerts", () => {
);
});
it("surfaces classified causes before raw errors in failure alerts", async () => {
it("keeps classified raw errors out of chat failure alerts", async () => {
await withFailureAlertCron(
{
failureAlert: { enabled: true, after: 1 },
@@ -648,11 +648,7 @@ describe("CronService failure alerts", () => {
await cron.run(job.id, "force");
expect(sendCronFailureAlert).toHaveBeenCalledTimes(1);
const alertText = alertCallArg(sendCronFailureAlert).text;
expect(alertText).toBe(
'Automation "timeout cause alert" failed 1 times\n' +
"Cause: timeout\n" +
"Last error: cron: job execution timed out",
);
expect(alertText).toBe('Automation "timeout cause alert" failed 1 times\nCause: timeout');
},
);
});
@@ -734,11 +730,7 @@ describe("CronService failure alerts", () => {
await cron.run(job.id, "force");
expect(sendCronFailureAlert).toHaveBeenCalledTimes(1);
const alertText = alertCallArg(sendCronFailureAlert).text;
expect(alertText).toBe(
'Automation "provider limit alert" failed 1 times\n' +
"Cause: billing\n" +
"Last error: 403 Key limit exceeded (monthly limit)",
);
expect(alertText).toBe('Automation "provider limit alert" failed 1 times\nCause: billing');
},
);
});
@@ -763,7 +755,7 @@ describe("CronService failure alerts", () => {
expect(sendCronFailureAlert).toHaveBeenCalledTimes(1);
expect(alertCallArg(sendCronFailureAlert).text).toBe(
'Automation "permanent script alert" failed 1 times\n' +
"Last error: cron script failed after a tool side effect: request timed out",
"Check automation history for details.",
);
},
);
@@ -785,7 +777,8 @@ describe("CronService failure alerts", () => {
expect(sendCronFailureAlert).toHaveBeenCalledTimes(1);
const alertText = alertCallArg(sendCronFailureAlert).text;
expect(alertText).toBe(
'Automation "skipped timeout" skipped 1 times\nSkip reason: cron: job execution timed out',
'Automation "skipped timeout" skipped 1 times\n' +
"Check automation history for details.",
);
},
);
@@ -811,12 +804,17 @@ describe("CronService failure alerts", () => {
);
});
it("truncates failure alert error text on UTF-16 code-point boundary", async () => {
it("truncates webhook failure alert error text on UTF-16 code-point boundary", async () => {
// 209 code units: emoji (surrogate pair) at positions 199-200 straddles the 200-unit boundary
const longError = `${"x".repeat(199)}🎉trailing`;
await withFailureAlertCron(
{
failureAlert: { enabled: true, after: 1 },
failureAlert: {
enabled: true,
after: 1,
mode: "webhook",
to: "https://alerts.example.test/failures",
},
runResult: { status: "error", error: longError },
},
async ({ cron, sendCronFailureAlert, addJob }) => {
+5 -5
View File
@@ -1,6 +1,7 @@
/** Shared state and owner-notification policy for cron auto-disable transitions. */
import { truncateUtf16Safe } from "@openclaw/normalization-core/utf16-slice";
import { parseAgentSessionKey } from "../../routing/session-key.js";
import { cronFailureDetailLines } from "../failure-notification-text.js";
import type { CronJob, CronJobState } from "../types.js";
import { normalizeOptionalAgentId } from "./normalize.js";
import type { CronServiceState, DeferredCronNotifications } from "./state.js";
@@ -24,7 +25,6 @@ export function autoDisableCronJob(params: {
reason: CronAutoDisableReason;
atMs: number;
consecutiveErrors: number;
error: unknown;
deferredNotifications?: DeferredCronNotifications;
}): boolean {
const { state, job } = params;
@@ -41,10 +41,11 @@ export function autoDisableCronJob(params: {
};
const name = truncateUtf16Safe((job.name || job.id).replace(/\s+/g, " ").trim(), 120);
const error = truncateUtf16Safe(String(params.error).trim() || "unknown reason", 200);
const errorReason =
params.reason === "consecutive-failures" ? job.state.lastErrorReason : undefined;
const text = [
`⚠️ Automation "${name}" (${job.id}) was auto-disabled after ${params.consecutiveErrors} consecutive ${autoDisableReasonLabel(params.reason)}.`,
`Last error: ${error}`,
`⚠️ Automation "${name}" was auto-disabled after ${params.consecutiveErrors} consecutive ${autoDisableReasonLabel(params.reason)}.`,
...cronFailureDetailLines(errorReason),
`Fix the underlying cause, then run \`openclaw automations enable ${job.id}\` to re-enable it.`,
].join("\n");
const notify = () => {
@@ -90,7 +91,6 @@ export function maybeAutoDisableCronJobAfterRunFailure(params: {
state: CronServiceState;
job: CronJob;
atMs: number;
error: unknown;
deferredNotifications?: DeferredCronNotifications;
}): boolean {
const consecutiveErrors = params.job.state.consecutiveErrors ?? 0;
+9 -3
View File
@@ -7,6 +7,7 @@ import type { ReplyPayload } from "../../auto-reply/reply-payload.js";
import { normalizeAnyChannelId } from "../../channels/registry-normalize.js";
import { resolveTargetPrefixedChannel } from "../../infra/outbound/channel-target-prefix.js";
import { normalizeTargetForProvider } from "../../infra/outbound/target-normalization.js";
import { cronFailureDetailLines } from "../failure-notification-text.js";
import type { CronFailureNotificationDelivery, CronJob, CronMessageChannel } from "../types.js";
import type { CronServiceState, DeferredCronNotifications } from "./state.js";
@@ -173,16 +174,21 @@ function emitFailureAlert(
},
) {
const safeJobName = params.job.name || params.job.id;
const truncatedError = truncateUtf16Safe(params.error?.trim() || "unknown reason", 200);
const errorReason = params.status === "error" ? params.errorReason : undefined;
// Keep alert bodies compact because they may route through chat channels
// with notification previews and provider-specific message limits.
const statusVerb = params.status === "skipped" ? "skipped" : "failed";
const detailLabel = params.status === "skipped" ? "Skip reason" : "Last error";
const detailLines =
params.mode === "webhook"
? [
...(errorReason ? [`Cause: ${errorReason}`] : []),
`${detailLabel}: ${truncateUtf16Safe(params.error?.trim() || "unknown reason", 200)}`,
]
: cronFailureDetailLines(errorReason);
const text = [
`Automation "${safeJobName}" ${statusVerb} ${params.consecutiveErrors} times`,
...(errorReason ? [`Cause: ${errorReason}`] : []),
`${detailLabel}: ${truncatedError}`,
...detailLines,
].join("\n");
const oauthRefreshFailure = params.error ? classifyOAuthRefreshFailure(params.error) : null;
const payload: ReplyPayload = {
-1
View File
@@ -394,7 +394,6 @@ export function recordScheduleComputeError(params: {
reason: "schedule-errors",
atMs: state.deps.nowMs(),
consecutiveErrors: errorCount,
error: errText,
deferredNotifications: params.deferredNotifications,
});
state.deps.log.error(
@@ -154,6 +154,9 @@ describe("cron schedule error isolation", () => {
expect.stringContaining("openclaw automations enable bad-job"),
expect.objectContaining({ contextKey: "cron:bad-job:auto-disabled" }),
);
const notification = vi.mocked(state.deps.enqueueSystemEvent).mock.calls[0]?.[0];
expect(notification).toContain("Check automation history for details.");
expect(notification).not.toContain("invalid configuration format");
});
it("clears scheduleErrorCount when schedule computation succeeds", () => {
@@ -38,6 +38,7 @@ describe("startup run repair auto-disable", () => {
nextRunAtMs: runningAtMs,
runningAtMs,
consecutiveErrors: 9,
lastErrorReason: "timeout",
},
};
const deferredNotifications: Array<() => void> = [];
@@ -67,6 +68,10 @@ describe("startup run repair auto-disable", () => {
deferredNotifications[0]?.();
expect(enqueueSystemEvent).toHaveBeenCalledOnce();
expect(enqueueSystemEvent.mock.calls[0]?.[0]).toContain(
"Check automation history for details.",
);
expect(enqueueSystemEvent.mock.calls[0]?.[0]).not.toContain("timeout");
expect(requestHeartbeat).toHaveBeenCalledOnce();
});
+1 -1
View File
@@ -82,6 +82,7 @@ export function markInterruptedStartupRun(params: {
job.state.lastRunStatus = "error";
job.state.lastStatus = "error";
job.state.lastError = STARTUP_INTERRUPTED_ERROR;
job.state.lastErrorReason = undefined;
job.state.lastDurationMs = Math.max(0, nowMs - runningAtMs);
job.state.consecutiveErrors = previousErrors + 1;
job.state.lastDelivered = false;
@@ -98,7 +99,6 @@ export function markInterruptedStartupRun(params: {
state: params.state,
job,
atMs: nowMs,
error: STARTUP_INTERRUPTED_ERROR,
deferredNotifications: params.deferredNotifications,
})
) {
-1
View File
@@ -329,7 +329,6 @@ export function applyJobResult(
state,
job,
atMs: result.endedAt,
error: result.error ?? "unknown run failure",
deferredNotifications: opts?.deferredNotifications,
})
) {
-1
View File
@@ -64,7 +64,6 @@ export function resolveNextRunAtMsOrDisable(params: {
reason: "schedule-errors",
atMs: params.state.deps.nowMs(),
consecutiveErrors: 1,
error: "next run is outside the supported Date range",
deferredNotifications: params.deferredNotifications,
});
return undefined;
@@ -384,7 +384,7 @@ describe("cron batch outcome finalization", () => {
job: structuredClone(job),
activeJobMarker: markCronJobActive(job.id),
status: "error",
error: "provider remained unavailable",
error: "cron: job execution timed out at /private/agent/work",
startedAt: dueAt,
endedAt: dueAt + 10,
},
@@ -404,7 +404,8 @@ describe("cron batch outcome finalization", () => {
expect(enqueueSystemEvent.mock.calls[0]?.[0]).toContain("Recurring report");
expect(enqueueSystemEvent.mock.calls[0]?.[0]).toContain(job.id);
expect(enqueueSystemEvent.mock.calls[0]?.[0]).toContain("10 consecutive run failures");
expect(enqueueSystemEvent.mock.calls[0]?.[0]).toContain("provider remained unavailable");
expect(enqueueSystemEvent.mock.calls[0]?.[0]).toContain("Cause: timeout");
expect(enqueueSystemEvent.mock.calls[0]?.[0]).not.toContain("/private/agent/work");
expect(resolveOriginDeliveryContext).toHaveBeenCalledWith({
agentId: "main",
sessionKey: undefined,
@@ -416,6 +417,7 @@ describe("cron batch outcome finalization", () => {
enabled: false,
state: {
consecutiveErrors: 10,
lastError: "cron: job execution timed out at /private/agent/work",
autoDisabled: {
reason: "consecutive-failures",
atMs: dueAt + 10,
@@ -488,6 +490,9 @@ describe("cron batch outcome finalization", () => {
expect(order).toEqual(["persist", "notify", "heartbeat"]);
expect(enqueueSystemEvent).toHaveBeenCalledOnce();
expect(enqueueSystemEvent.mock.calls[0]?.[0]).toContain(
"Check automation history for details.",
);
expect(enqueueSystemEvent.mock.calls[0]?.[0]).not.toContain(
"next run is outside the supported Date range",
);
expect(requestHeartbeat).toHaveBeenCalledOnce();
+29 -4
View File
@@ -622,7 +622,7 @@ describe("dispatchGatewayCronFinishedNotifications", () => {
await waitForFast(() => expect(getActiveGatewayRootWorkCount()).toBe(0));
});
it("adds the run start time to failure destination chat without changing webhook text", async () => {
it("uses the persisted run failure reason for chat without changing webhook text", async () => {
const runAtMs = Date.parse("2026-01-15T15:30:00.000Z");
const announceJob = createWebhookJob({
mode: "announce",
@@ -632,13 +632,15 @@ describe("dispatchGatewayCronFinishedNotifications", () => {
to: "-1001234567890",
},
});
announceJob.state.lastErrorReason = "auth";
announceJob.state.consecutiveErrors = 9;
dispatchGatewayCronFinishedNotifications({
evt: {
jobId: announceJob.id,
action: "finished",
status: "error",
error: "provider unavailable",
error: "provider overloaded",
runAtMs,
},
job: announceJob,
@@ -657,10 +659,31 @@ describe("dispatchGatewayCronFinishedNotifications", () => {
announceJob.id,
expect.anything(),
{
text: '⚠️ Automation "notification admission" failed: provider unavailable\nRun started: 2026-01-15 10:30 EST',
text:
'⚠️ Automation "notification admission" failed\n' +
"Cause: auth\n" +
"Run started: 2026-01-15 10:30 EST",
},
);
vi.clearAllMocks();
announceJob.state.lastErrorReason = undefined;
dispatchGatewayCronFinishedNotifications({
evt: {
jobId: announceJob.id,
action: "finished",
status: "error",
error: "script failed permanently after request timed out",
},
job: announceJob,
deps: {} as CliDeps,
logger: { warn: vi.fn() },
resolveCronAgent: () => ({ agentId: "main", cfg: {} }),
});
expect(mocks.sendFailureNotificationAnnounce.mock.calls[0]?.[5]).toEqual({
text: '⚠️ Automation "notification admission" failed\nCheck automation history for details.',
});
vi.clearAllMocks();
const webhookJob = createWebhookJob({
mode: "announce",
@@ -891,7 +914,9 @@ describe("dispatchGatewayCronFinishedNotifications", () => {
sessionKey: undefined,
inheritSessionThread: false,
},
{ text: '⚠️ Automation "channel fd no mode" failed: boom' },
{
text: '⚠️ Automation "channel fd no mode" failed\nCheck automation history for details.',
},
);
expect(logger.warn).not.toHaveBeenCalledWith(
expect.objectContaining({ jobId: job.id }),
+6 -5
View File
@@ -16,6 +16,7 @@ import {
sendCronAnnouncePayloadStrict,
sendFailureNotificationAnnounce,
} from "../cron/delivery.js";
import { cronFailureDetailLines } from "../cron/failure-notification-text.js";
import { retryTransientDirectCronDelivery } from "../cron/isolated-agent/delivery-dispatch-policy.js";
import type { CronEvent } from "../cron/service.js";
import { resolveCronDeliverySessionKey } from "../cron/session-target.js";
@@ -586,16 +587,16 @@ function dispatchCronFailureDestinationNotifications(params: {
}
const { agentId, cfg: runtimeConfig } = params.resolveCronAgent(job.agentId);
const failureAlertText = [
`Automation "${job.name}" failed`,
...cronFailureDetailLines(job.state.lastErrorReason),
].join("\n");
dispatchDetachedCronNotification({
jobId: job.id,
logger: params.logger,
deliver: () =>
sendFailureNotificationAnnounce(params.deps, runtimeConfig, agentId, job.id, announceTarget, {
text: appendCronRunStarted(
`⚠️ ${failurePayload.message}`,
params.evt.runAtMs,
runtimeConfig,
),
text: appendCronRunStarted(`⚠️ ${failureAlertText}`, params.evt.runAtMs, runtimeConfig),
}),
});
}
+8 -4
View File
@@ -405,7 +405,7 @@ function expectFailureAnnounceCall(params: {
if (params.includeRunStarted) {
const lines = expectDefined(payload.text, "failure reply text").split("\n");
expect(lines).toEqual([
params.message,
...params.message.split("\n"),
expect.stringMatching(/^Run started: \d{4}-\d{2}-\d{2} \d{2}:\d{2}(?::\d{2})? \S+$/),
]);
} else {
@@ -2044,7 +2044,9 @@ describe("gateway server cron", () => {
jobId,
channel: "last",
sessionKey: "agent:main:telegram:direct:123:thread:99",
message: '⚠️ Automation "primary delivery fallback" failed: unknown error',
message:
'⚠️ Automation "primary delivery fallback" failed\n' +
"Check automation history for details.",
includeRunStarted: true,
});
} finally {
@@ -2103,7 +2105,7 @@ describe("gateway server cron", () => {
to: "#alerts",
sessionKey: undefined,
inheritSessionThread: false,
message: '⚠️ Automation "channel fd no mode" failed: unknown error',
message: '⚠️ Automation "channel fd no mode" failed\nCheck automation history for details.',
includeRunStarted: true,
});
expect(fetchWithSsrFGuardMock).not.toHaveBeenCalled();
@@ -2156,7 +2158,9 @@ describe("gateway server cron", () => {
jobId,
channel: "last",
sessionKey: "agent:avery:feishu:direct:ou_founder",
message: '⚠️ Automation "session target failure fallback" failed: unknown error',
message:
'⚠️ Automation "session target failure fallback" failed\n' +
"Check automation history for details.",
includeRunStarted: true,
});
} finally {
+1
View File
@@ -16,6 +16,7 @@ export type AgentItemEventData = {
status: AgentItemEventStatus;
name?: string;
meta?: string;
commandBearing?: boolean;
toolCallId?: string;
startedAt?: number;
endedAt?: number;
+2
View File
@@ -37,6 +37,7 @@ const event = {
originatingChannel: undefined,
originatingTo: undefined,
shouldSendToolSummaries: true,
shouldSendFullToolDetails: false,
sendPolicy: "allow" as const,
};
@@ -263,6 +264,7 @@ describe("tryDispatchAcpReplyHook", () => {
expectDispatchPayloadFields({
shouldSendToolSummaries: true,
shouldSendFullToolDetails: false,
});
const [payload] = dispatchMock.mock.calls[0] ?? [];
const livePredicate = (payload as { shouldSendToolSummariesNow?: () => boolean })
+1
View File
@@ -100,6 +100,7 @@ export async function tryDispatchAcpReplyHook(
originatingChatType: event.originatingChatType,
shouldSendToolSummaries: event.shouldSendToolSummaries,
shouldSendToolSummariesNow: () => event.shouldSendToolSummaries,
shouldSendFullToolDetails: event.shouldSendFullToolDetails,
bypassForCommand,
onReplyStart: ctx.onReplyStart,
recordProcessed: ctx.recordProcessed,
+1 -1
View File
@@ -144,7 +144,7 @@ function createChannelProgressUiHints(params: {
: {}),
"streaming.progress.commandText": {
label: `${channelLabel} Progress Command Text`,
help: `Command/exec detail in progress${params.titleWording ? "" : " draft"} lines: "raw" preserves released behavior; "status" shows only the tool label.`,
help: `Command/exec detail in progress${params.titleWording ? "" : " draft"} lines: "status" is the safe default; "raw" opts into command text.`,
},
...(params.includeCommentary && params.commentaryOrder === "after-command"
? commentaryHint
+61 -37
View File
@@ -72,6 +72,15 @@ describe("channel-streaming", () => {
expect(resolveChannelStreamingPreviewCommandText(entry)).toBe("status");
});
it("defaults command progress to status while preserving the raw opt-in", () => {
expect(resolveChannelStreamingPreviewCommandText(undefined)).toBe("status");
expect(
resolveChannelStreamingPreviewCommandText({
streaming: { progress: { commandText: "raw" } },
}),
).toBe("raw");
});
it("keeps progress-only tool progress config out of normal preview modes", () => {
expect(
resolveChannelStreamingPreviewToolProgress({
@@ -361,7 +370,7 @@ describe("channel-streaming", () => {
"node scripts/check-something-with-a-very-long-path /tmp/openclaw/some/really/deep/path/that/keeps/going/and/going/index.ts --flag value",
},
},
{ detailMode: "raw" },
{ detailMode: "raw", commandText: "raw" },
);
const text = formatChannelProgressDraftText({
@@ -426,15 +435,18 @@ describe("channel-streaming", () => {
name: "exec",
args: { command: "pnpm test -- --watch=false" },
},
{ detailMode: "raw" },
{ detailMode: "raw", commandText: "raw" },
),
).toBe("🛠️ run tests, `pnpm test -- --watch=false`");
expect(
formatChannelProgressDraftLine({
event: "tool",
name: "bash",
args: { command: "sed -n '1,80p' extensions/discord/src/draft-stream.ts" },
}),
formatChannelProgressDraftLine(
{
event: "tool",
name: "bash",
args: { command: "sed -n '1,80p' extensions/discord/src/draft-stream.ts" },
},
{ commandText: "raw" },
),
).toBe("🛠️ print lines 1-80 from extensions/discord/src/draft-stream.ts");
expect(
formatChannelProgressDraftLine({
@@ -444,12 +456,15 @@ describe("channel-streaming", () => {
}),
).toBe('🔎 Web Search: for "Codex OAuth API key"');
expect(
formatChannelProgressDraftLine({
event: "item",
itemKind: "command",
name: "exec",
progressText: "raw command output",
}),
formatChannelProgressDraftLine(
{
event: "item",
itemKind: "command",
name: "exec",
progressText: "raw command output",
},
{ commandText: "raw" },
),
).toBe("🛠️ raw command output");
expect(
formatChannelProgressDraftLine(
@@ -537,30 +552,39 @@ describe("channel-streaming", () => {
});
it("keeps public command progress ids while replacing by command correlation", () => {
const toolLine = buildChannelProgressDraftLine({
event: "tool",
itemId: "tool:call-1",
toolCallId: "call-1",
name: "bash",
phase: "start",
});
const commandLine = buildChannelProgressDraftLine({
event: "command-output",
itemId: "tool:call-1-output",
toolCallId: "call-1",
name: "bash",
phase: "end",
exitCode: 0,
});
const itemLine = buildChannelProgressDraftLine({
event: "item",
itemId: "tool:call-1",
toolCallId: "call-1",
itemKind: "command",
name: "bash",
phase: "update",
progressText: "install dependencies",
});
const toolLine = buildChannelProgressDraftLine(
{
event: "tool",
itemId: "tool:call-1",
toolCallId: "call-1",
name: "bash",
phase: "start",
},
{ commandText: "raw" },
);
const commandLine = buildChannelProgressDraftLine(
{
event: "command-output",
itemId: "tool:call-1-output",
toolCallId: "call-1",
name: "bash",
phase: "end",
exitCode: 0,
},
{ commandText: "raw" },
);
const itemLine = buildChannelProgressDraftLine(
{
event: "item",
itemId: "tool:call-1",
toolCallId: "call-1",
itemKind: "command",
name: "bash",
phase: "update",
progressText: "install dependencies",
},
{ commandText: "raw" },
);
expect(toolLine).toMatchObject({ id: "tool:call-1", kind: "tool", toolName: "bash" });
expect(itemLine).toMatchObject({ id: "tool:call-1", kind: "item", toolName: "bash" });
+1
View File
@@ -564,6 +564,7 @@ export type PluginHookReplyDispatchEvent = {
originatingThreadId?: string | number;
originatingChatType?: ChatType;
shouldSendToolSummaries: boolean;
shouldSendFullToolDetails: boolean;
sendPolicy: "allow" | "deny";
isTailDispatch?: boolean;
};
@@ -11,6 +11,7 @@ const replyDispatchEvent = {
inboundAudio: false,
shouldRouteToOriginating: false,
shouldSendToolSummaries: true,
shouldSendFullToolDetails: false,
sendPolicy: "allow" as const,
};
@@ -296,9 +296,7 @@ export async function writeTuiPtyFixtureScript(dir: string) {
const sourceReplyPayloads = isSourceReplyProof
? buildEmbeddedRunPayloads({
assistantTexts: [],
toolMetas: [],
lastAssistant: undefined,
inlineToolResultsAllowed: false,
sessionKey: opts.sessionKey,
sourceReplyDeliveryMode: "message_tool_only",
messagingToolSourceReplyPayloads: [