Removed compatibility surfaces
The July 2026 sweep removed the root SDK and compat barrels, the extension API bridge, the expired SDK subpath aliases, unused SDK subpaths, and typed-public access to bundled-only SDK modules. Private-local build mappings remain for repository owners, and production-private JavaScript exports support official plugin runtimes. Neither provides typed third-party SDK access.Process-global API-provider publication
registerApiProvider(...) and unregisterApiProviders(...) were removed from
openclaw/plugin-sdk/llm. They published API transports into process-global
state, which lifecycle-owned model runtimes then had to copy into each prepared
registry.
Provider plugins should register text-inference providers through
api.registerProvider(...). Host-owned code and tests that construct an
ApiRegistry should register directly on that registry so provider ownership
and teardown stay scoped to the prepared runtime.
Deactivate hook alias
Theapi.on("deactivate", handler) compatibility alias was removed. Register
the same shutdown cleanup with gateway_stop:
Private testing barrel
openclaw/plugin-sdk/testing was repo-local and excluded from shipped package
artifacts, so it was removed before its 2026-07-28 removeAfter date. Repository
tests use focused subpaths such as plugin-sdk/plugin-test-runtime,
plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing,
plugin-sdk/test-env, and plugin-sdk/test-fixtures.
Migration reference
These mappings cover both removed July 2026 surfaces and later-window active deprecations. A mapping is migration guidance, not evidence that the old surface remains available; consult the compatibility registry and removal timeline for current status.command-auth help builders -> command-status
command-auth help builders -> command-status
openclaw/plugin-sdk/command-auth): buildCommandsMessage,
buildCommandsMessagePaginated, buildHelpMessage.New (openclaw/plugin-sdk/command-status): same signatures, imported
from the narrower subpath. The command-auth compatibility re-exports
have been removed.Mention gating helpers -> resolveInboundMentionDecision
Mention gating helpers -> resolveInboundMentionDecision
resolveMentionGating(params) and
resolveMentionGatingWithBypass(params) from
openclaw/plugin-sdk/channel-inbound or
openclaw/plugin-sdk/channel-mention-gating.New: resolveInboundMentionDecision({ facts, policy }) - one decision
object instead of two split call shapes.Adopted across Discord, iMessage, Matrix, MS Teams, QQBot, Signal,
Telegram, WhatsApp, and Zalo. Slack’s own app_mention event model does
not use this helper.Channel runtime shim and channel actions helpers
Channel runtime shim and channel actions helpers
openclaw/plugin-sdk/channel-runtime has been removed. Use
openclaw/plugin-sdk/channel-runtime-context for registering runtime
objects.The native message schema helpers in openclaw/plugin-sdk/channel-actions
were removed alongside raw “actions” channel exports. Expose capabilities
through the semantic presentation surface instead - channel plugins
declare what they render (cards, buttons, selects) rather than which raw
action names they accept.Web search provider tool() helper -> createTool() on the plugin
Web search provider tool() helper -> createTool() on the plugin
tool() factory from openclaw/plugin-sdk/provider-web-search.New: implement createTool(...) directly on the provider plugin.
OpenClaw no longer needs the SDK helper to register the tool wrapper.Plaintext channel envelopes -> BodyForAgent
Plaintext channel envelopes -> BodyForAgent
api.runtime.channel.reply.formatInboundEnvelope(...) (and the
channelEnvelope field on inbound message objects) to build a flat
plaintext prompt envelope from inbound channel messages.New: BodyForAgent plus structured user-context blocks. Channel
plugins attach routing metadata (thread, topic, reply-to, reactions) as
typed fields instead of concatenating them into a prompt string. The
formatAgentEnvelope(...) helper is still supported for synthesized
assistant-facing envelopes, but inbound plaintext envelopes are on the way
out.Affected areas: inbound_claim, message_received, and any custom
channel plugin that post-processed the old envelope text.subagent_spawning hook -> core thread binding
subagent_spawning hook -> core thread binding
api.on("subagent_spawning", handler) returning
threadBindingReady or deliveryOrigin.New: let core prepare thread: true subagent bindings through the
channel session-binding adapter. Use api.on("subagent_spawned", handler)
only for post-launch observation.subagent_spawning hook and its event/result types were removed in
August 2026 after thread binding moved to the core session-binding path.Provider discovery types -> provider catalog types
Provider discovery types -> provider catalog types
ProviderCapabilities static bag have been
removed. Provider plugins
should use explicit provider hooks such as buildReplayPolicy,
normalizeToolSchemas, and wrapStreamFn rather than a static object.Thinking policy hooks -> resolveThinkingProfile
Thinking policy hooks -> resolveThinkingProfile
ProviderThinkingPolicy):
isBinaryThinking(ctx), supportsXHighThinking(ctx), and
resolveDefaultThinkingLevel(ctx).New: a single resolveThinkingProfile(ctx) that returns a
ProviderThinkingProfile with the canonical id, optional label, and a
ranked level list. OpenClaw downgrades stale stored values by profile rank
automatically.The context includes provider, modelId, optional merged reasoning,
and optional merged model compat facts. Provider plugins can use those
catalog facts to expose a model-specific profile only when the configured
request contract supports it.Implement one hook instead of three. The legacy hooks have been removed.External auth providers -> contracts.externalAuthProviders
External auth providers -> contracts.externalAuthProviders
contracts.externalAuthProviders in the plugin manifest
and implement resolveExternalAuthProfiles(...).Provider env-var lookup -> setup.providers[].envVars
Provider env-var lookup -> setup.providers[].envVars
providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.New: mirror the same env-var lookup into setup.providers[].envVars
on the manifest. This consolidates setup/status env metadata in one place
and avoids booting the plugin runtime just to answer env-var lookups.providerAuthEnvVars is no longer accepted.Memory plugin registration -> registerMemoryCapability
Memory plugin registration -> registerMemoryCapability
api.registerMemoryPromptSection(...),
api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).New: one call on the memory-state API -
registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).Same slots, single registration call. Additive prompt and corpus helpers
(registerMemoryPromptSupplement, registerMemoryCorpusSupplement) are
not affected.Memory embedding provider API
Memory embedding provider API
api.registerMemoryEmbeddingProvider(...) plus
contracts.memoryEmbeddingProviders.New: api.registerEmbeddingProvider(...) plus
contracts.embeddingProviders.The generic embedding provider contract is reusable outside memory and is
the supported path for every provider. The memory-specific registration API
and manifest contract were removed after the 2026-08-21 migration
deadline.Raw channel send results -> OutboundDeliveryResult
Raw channel send results -> OutboundDeliveryResult
{ ok, messageId, error } through
ChannelSendRawResult and normalize it with
createRawChannelSendResultAdapter(...).New: return OutboundDeliveryResult fields and attach the channel with
createAttachedChannelResultAdapter(...). Failed sends should throw instead
of returning an error string. Put the platform destination in
target: { kind: "chat" | "channel" | "room" | "conversation", id };
the old parallel chatId, channelId, roomId, and conversationId
result fields are no longer accepted. The raw result type remains available
until the next plugin-SDK major release.Subagent session messages types renamed
Subagent session messages types renamed
src/plugins/runtime/types.ts:readSession is deprecated in favor of
getSessionMessages. Same signature; the old method calls through to the
new one.Removed session and transcript file APIs
Removed session and transcript file APIs
sessions.json stores, JSONL transcript paths, or lists
of session files. Runtime plugins should use session identity and SDK runtime
helpers instead of resolving or mutating active files.v2026.7.1-beta.5 imported the four
deprecated helpers above. openclaw/plugin-sdk/session-store-runtime keeps
that exact bridge through 2026-10-12; new plugins must use the replacements.
resolveStorePath(...) remains a supported SDK helper and is not part of
this deprecation.openclaw plugins inspect --all --runtime reports non-bundled plugins whose
load errors or diagnostics still reference these removed file APIs. The
@openclaw/plugin-inspector advisory sweep must use version 0.3.17 or
newer so external package scans also flag whole-store session helpers,
session file-path helpers, legacy transcript file targets, and low-level
transcript helpers before release.Agent harness attempt params -> V2 host-capability contract
Agent harness attempt params -> V2 host-capability contract
AgentHarnessV2 and use
AgentHarnessAttemptParamsV2, EmbeddedRunAttemptParamsV2, or
AgentHarnessSideQuestionParamsV2. The V2 parameter types require
hostCapabilities, matching what core supplies at the selected-harness
boundary. A plugin that adopts these V2 contracts must declare
openclaw.compat.pluginApi: ">=2026.8.1" (or a newer floor) in its package
manifest so an older host rejects the plugin before loading it.Existing plugins may continue implementing AgentHarness and constructing
the legacy AgentHarnessAttemptParams, EmbeddedRunAttemptParams, or
AgentHarnessSideQuestionParams types without that field through
2026-10-12. Those contracts keep the capability optional only for source
compatibility; they do not create a capability-free runtime path. Migrate
by changing the imported type name and binding tool or native-action surfaces through
params.hostCapabilities.runtime.tasks.flow -> runtime.tasks.managedFlows
runtime.tasks.flow -> runtime.tasks.managedFlows
runtime.tasks.flow (singular) returned a live task-flow
accessor.New: runtime.tasks.managedFlows keeps the managed TaskFlow mutation
runtime for plugins that create, update, cancel, or run child tasks from a
flow. Use runtime.tasks.flows when the plugin only needs DTO-based
reads.Embedded extension factories -> agent tool-result middleware
Embedded extension factories -> agent tool-result middleware
api.registerEmbeddedExtensionFactory(...) path is replaced by
api.registerAgentToolResultMiddleware(...) with an explicit runtime list
in contracts.agentToolResultMiddleware.OpenClawSchemaType alias -> OpenClawConfig
OpenClawSchemaType alias -> OpenClawConfig
OpenClawSchemaType root-SDK alias was removed. Use the canonical
OpenClawConfig name.extensions/) are tracked inside their own api.ts and runtime-api.ts
barrels. They do not affect third-party plugin contracts and are not listed
here. If you consume a bundled plugin’s local barrel directly, read the
deprecation comments in that barrel before upgrading.