@openclaw/imessage 2026.8.2 → 2026.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- import { _ as normalizeDirectChatIdentifier, f as resolveIMessageMessageId, n as sanitizeIMessageFinalOutboundText, o as createIMessageRpcClient } from "./sanitize-outbound-DKRlFQoD.js";
2
- import { i as runIMessageCliJsonCommand, n as authorizeIMessageResourceReference, t as withIMessageRemoteFile } from "./remote-file-CmdycSRk.js";
1
+ import { _ as normalizeDirectChatIdentifier, f as resolveIMessageMessageId, n as sanitizeIMessageFinalOutboundText, o as createIMessageRpcClient } from "./sanitize-outbound-CN3Hxbjy.js";
2
+ import { i as runIMessageCliJsonCommand, n as authorizeIMessageResourceReference, t as withIMessageRemoteFile } from "./remote-file-COTN7196.js";
3
3
  import { basename, parse, win32 } from "node:path";
4
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { asDateTimestampMs, parseStrictInteger, resolveExpiresAtMsFromDurationMs } from "openclaw/plugin-sdk/number-runtime";
package/dist/api.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount, r as listEnabledIMessageAccounts } from "./accounts-CCirBEIm.js";
2
- import { a as isAllowedIMessageSender, c as parseIMessageAllowTarget, g as IMESSAGE_ACTION_NAMES, h as IMESSAGE_ACTIONS, l as parseIMessageTarget, n as formatIMessageChatTarget, o as looksLikeIMessageExplicitTargetId, r as inferIMessageTargetChatType, s as normalizeIMessageHandle } from "./message-tool-api-CLWaomvw.js";
3
- import { p as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS } from "./sanitize-outbound-DKRlFQoD.js";
4
- import { a as normalizeIMessageAcpConversationId, c as normalizeIMessageMessagingTarget, f as probeIMessage, i as matchIMessageAcpConversation, n as resolveIMessageGroupToolPolicy, o as resolveIMessageConversationIdFromTarget, r as resolveIMessageInboundConversationId, s as looksLikeIMessageTargetId, t as resolveIMessageGroupRequireMention, v as imessageSetupContract } from "./group-policy-fYokgrgz.js";
5
- import { n as createIMessagePluginBase, r as imessageSetupWizard, t as imessagePlugin } from "./channel-B0wzN0uJ.js";
2
+ import { _ as IMESSAGE_ACTION_NAMES, a as isAllowedIMessageSender, c as parseIMessageAllowTarget, g as IMESSAGE_ACTIONS, l as parseIMessageTarget, n as formatIMessageChatTarget, o as looksLikeIMessageExplicitTargetId, r as inferIMessageTargetChatType, s as normalizeIMessageHandle } from "./message-tool-api-CUoFESHj.js";
3
+ import { p as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS } from "./sanitize-outbound-CN3Hxbjy.js";
4
+ import { a as normalizeIMessageAcpConversationId, c as normalizeIMessageMessagingTarget, f as probeIMessage, i as matchIMessageAcpConversation, n as resolveIMessageGroupToolPolicy, o as resolveIMessageConversationIdFromTarget, r as resolveIMessageInboundConversationId, s as looksLikeIMessageTargetId, t as resolveIMessageGroupRequireMention, v as imessageSetupContract } from "./group-policy-BWqG2esy.js";
5
+ import { n as createIMessagePluginBase, r as imessageSetupWizard, t as imessagePlugin } from "./channel-zDmMTHWD.js";
6
6
  import { t as createIMessageConversationBindingManager } from "./conversation-bindings-GDQ_Laxj.js";
7
7
  import { t as IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-send-deps-B-QEsLSM.js";
8
8
  import { createAllowedChatSenderMatcher, parseChatAllowTargetPrefixes, parseChatTargetPrefixesOrThrow, resolveServicePrefixedAllowTarget, resolveServicePrefixedChatTarget, resolveServicePrefixedOrChatAllowTarget, resolveServicePrefixedTarget } from "openclaw/plugin-sdk/channel-targets";
@@ -1,9 +1,9 @@
1
1
  import { o as resolveIMessageAccount } from "./accounts-CCirBEIm.js";
2
- import { f as getCachedIMessagePrivateApiStatus, l as parseIMessageTarget } from "./message-tool-api-CLWaomvw.js";
3
- import { i as extractMarkdownFormatRuns } from "./sanitize-outbound-DKRlFQoD.js";
4
- import { c as normalizeIMessageMessagingTarget, l as getIMessageApprovalApprovers } from "./group-policy-fYokgrgz.js";
5
- import { a as unregisterIMessageApprovalReactionTarget, c as buildIMessageApprovalConversationKeyForTarget, i as registerIMessageApprovalReactionTarget } from "./approval-reactions-B2-_97DN.js";
6
- import { a as iMessageApprovalPollTargets, c as iMessageApprovalControlBindings, i as buildApprovalPollOptions, o as mapSentPollOptionsToDecisions, t as sendMessageIMessage } from "./send-DxhFcMfW.js";
2
+ import { f as getCachedIMessagePrivateApiStatus, l as parseIMessageTarget } from "./message-tool-api-CUoFESHj.js";
3
+ import { i as extractMarkdownFormatRuns } from "./sanitize-outbound-CN3Hxbjy.js";
4
+ import { c as normalizeIMessageMessagingTarget, l as getIMessageApprovalApprovers } from "./group-policy-BWqG2esy.js";
5
+ import { a as unregisterIMessageApprovalReactionTarget, c as buildIMessageApprovalConversationKeyForTarget, i as registerIMessageApprovalReactionTarget } from "./approval-reactions-DcLRPx7O.js";
6
+ import { a as iMessageApprovalPollTargets, c as iMessageApprovalControlBindings, i as buildApprovalPollOptions, o as mapSentPollOptionsToDecisions, t as sendMessageIMessage } from "./send-v0blZfaI.js";
7
7
  import { createLazyRuntimeNamedExport } from "openclaw/plugin-sdk/lazy-runtime";
8
8
  import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
9
9
  import { createActionGate } from "openclaw/plugin-sdk/channel-actions";
@@ -13,7 +13,7 @@ import { buildChannelApprovalExpiredText, buildChannelApprovalResolvedText, crea
13
13
  import { setTimeout } from "node:timers/promises";
14
14
  //#region extensions/imessage/src/approval-handler.runtime.ts
15
15
  const log = createSubsystemLogger("imessage/approvals");
16
- const loadIMessageActionsRuntime = createLazyRuntimeNamedExport(() => import("./actions.runtime-UDLBuS_8.js"), "imessageActionsRuntime");
16
+ const loadIMessageActionsRuntime = createLazyRuntimeNamedExport(() => import("./actions.runtime-DCjNT81u.js"), "imessageActionsRuntime");
17
17
  const DEFAULT_PROBE_TIMEOUT_MS = 5e3;
18
18
  const APPROVAL_POLL_ORDERING_DELAY_MS = 1100;
19
19
  function buildPendingPayload(params) {
@@ -275,7 +275,11 @@ function bindIMessageApprovalEntry(params) {
275
275
  return reactionBound || pollBound ? true : null;
276
276
  }
277
277
  const imessageApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
278
- eventKinds: ["exec", "plugin"],
278
+ eventKinds: [
279
+ "exec",
280
+ "plugin",
281
+ "system-agent"
282
+ ],
279
283
  availability: {
280
284
  isConfigured: ({ context }) => Boolean(context),
281
285
  shouldHandle: ({ context }) => Boolean(context)
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { l as parseIMessageTarget, s as normalizeIMessageHandle } from "./message-tool-api-CLWaomvw.js";
3
- import { l as getIMessageApprovalApprovers, u as imessageApprovalAuth } from "./group-policy-fYokgrgz.js";
2
+ import { l as parseIMessageTarget, s as normalizeIMessageHandle } from "./message-tool-api-CUoFESHj.js";
3
+ import { l as getIMessageApprovalApprovers, u as imessageApprovalAuth } from "./group-policy-BWqG2esy.js";
4
4
  import { n as getOptionalIMessageRuntime } from "./runtime-Cza4CY5T.js";
5
5
  import { t as resolveIMessageReactionContext } from "./reaction-context-BAYI7pz0.js";
6
6
  import { createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
@@ -1,2 +1,2 @@
1
- import { t as imessagePlugin } from "./channel-B0wzN0uJ.js";
1
+ import { t as imessagePlugin } from "./channel-zDmMTHWD.js";
2
2
  export { imessagePlugin };
@@ -1,7 +1,7 @@
1
1
  import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount, t as collectIMessageDuplicateAccountSourceWarnings } from "./accounts-CCirBEIm.js";
2
- import { l as parseIMessageTarget, o as looksLikeIMessageExplicitTargetId, r as inferIMessageTargetChatType, s as normalizeIMessageHandle, u as isIMessagePhoneLikeHandle } from "./message-tool-api-CLWaomvw.js";
3
- import { n as sanitizeIMessageFinalOutboundText, r as sanitizeOutboundText, v as resolveIMessageDirectChatService } from "./sanitize-outbound-DKRlFQoD.js";
4
- import { a as normalizeIMessageAcpConversationId, c as normalizeIMessageMessagingTarget, d as imessageMessageActions, h as createIMessageSetupWizardProxy, i as matchIMessageAcpConversation, l as getIMessageApprovalApprovers, n as resolveIMessageGroupToolPolicy, o as resolveIMessageConversationIdFromTarget, t as resolveIMessageGroupRequireMention, u as imessageApprovalAuth, v as imessageSetupContract } from "./group-policy-fYokgrgz.js";
2
+ import { l as parseIMessageTarget, o as looksLikeIMessageExplicitTargetId, r as inferIMessageTargetChatType, s as normalizeIMessageHandle, u as isIMessagePhoneLikeHandle } from "./message-tool-api-CUoFESHj.js";
3
+ import { n as sanitizeIMessageFinalOutboundText, r as sanitizeOutboundText, v as resolveIMessageDirectChatService } from "./sanitize-outbound-CN3Hxbjy.js";
4
+ import { a as normalizeIMessageAcpConversationId, c as normalizeIMessageMessagingTarget, d as imessageMessageActions, h as createIMessageSetupWizardProxy, i as matchIMessageAcpConversation, l as getIMessageApprovalApprovers, n as resolveIMessageGroupToolPolicy, o as resolveIMessageConversationIdFromTarget, t as resolveIMessageGroupRequireMention, u as imessageApprovalAuth, v as imessageSetupContract } from "./group-policy-BWqG2esy.js";
5
5
  import { t as createIMessageConversationBindingManager } from "./conversation-bindings-GDQ_Laxj.js";
6
6
  import { t as IMessageChannelConfigSchema } from "./config-schema-DuGbA8Kp.js";
7
7
  import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots } from "./media-contract-pns3TSS5.js";
@@ -74,7 +74,11 @@ const imessageApproval = createApproverRestrictedNativeApprovalCapabilityFromFor
74
74
  }) }
75
75
  },
76
76
  createNativeRuntime: (routing) => createLazyChannelApprovalNativeRuntimeAdapter({
77
- eventKinds: ["exec", "plugin"],
77
+ eventKinds: [
78
+ "exec",
79
+ "plugin",
80
+ "system-agent"
81
+ ],
78
82
  isConfigured: ({ cfg, accountId, context }) => Boolean(context) && routing.canAnyApprovalPotentiallyRouteToChannel({
79
83
  cfg,
80
84
  accountId,
@@ -86,7 +90,7 @@ const imessageApproval = createApproverRestrictedNativeApprovalCapabilityFromFor
86
90
  approvalKind,
87
91
  request
88
92
  }),
89
- load: async () => (await import("./approval-handler.runtime-ZaQQ2c4l.js")).imessageApprovalNativeRuntime
93
+ load: async () => (await import("./approval-handler.runtime-BReeID1z.js")).imessageApprovalNativeRuntime
90
94
  })
91
95
  });
92
96
  const imessageApprovalRouting = imessageApproval.routing;
@@ -201,7 +205,7 @@ const imessageDoctor = {
201
205
  //#region extensions/imessage/src/shared.ts
202
206
  const IMESSAGE_CHANNEL = "imessage";
203
207
  async function loadIMessageChannelRuntime$1() {
204
- return await import("./channel.runtime-lJfW7FBd.js");
208
+ return await import("./channel.runtime-qQBHCle8.js");
205
209
  }
206
210
  const imessageSetupWizard = createIMessageSetupWizardProxy(async () => (await loadIMessageChannelRuntime$1()).imessageSetupWizard);
207
211
  const imessageConfigAdapter = createScopedChannelConfigAdapter({
@@ -300,7 +304,7 @@ async function probeIMessageStatusAccount(params) {
300
304
  }
301
305
  //#endregion
302
306
  //#region extensions/imessage/src/channel.ts
303
- const loadIMessageChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-lJfW7FBd.js"));
307
+ const loadIMessageChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-qQBHCle8.js"));
304
308
  function toIMessageMessageSendResult(result, kind, replyToId) {
305
309
  const receipt = result.receipt ?? createMessageReceiptFromOutboundResults({
306
310
  results: result.messageId ? [{
@@ -316,7 +320,7 @@ function toIMessageMessageSendResult(result, kind, replyToId) {
316
320
  ...result.meta && Object.keys(result.meta).length > 0 ? { meta: result.meta } : {}
317
321
  };
318
322
  }
319
- const loadIMessageApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-B2-_97DN.js").then((n) => n.t));
323
+ const loadIMessageApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-DcLRPx7O.js").then((n) => n.t));
320
324
  const loadIMessageQuestionReactionsModule = createLazyRuntimeModule(() => import("./question-reactions-viP7ZcyG.js").then((n) => n.r));
321
325
  async function prepareForwardedIMessageApprovalPayload(params) {
322
326
  const prepared = (await loadIMessageApprovalReactionsModule()).addIMessageApprovalReactionHintToStructuredPayload(params);
@@ -1,8 +1,8 @@
1
1
  import { l as resolveIMessageRemoteHost, o as resolveIMessageAccount, r as listEnabledIMessageAccounts, s as resolveIMessageDuplicateSourceOwner } from "./accounts-CCirBEIm.js";
2
- import { _ as imessageDmPolicy, b as isAutoManagedIMessageCliPath, f as probeIMessage, g as imessageCompletionNote, m as createIMessageCliPathTextInput, p as IMESSAGE_INSTALL_COMMAND, x as normalizeIMessageCliPathForSetup, y as imessageSetupStatusBase } from "./group-policy-fYokgrgz.js";
2
+ import { _ as imessageDmPolicy, b as isAutoManagedIMessageCliPath, f as probeIMessage, g as imessageCompletionNote, m as createIMessageCliPathTextInput, p as IMESSAGE_INSTALL_COMMAND, x as normalizeIMessageCliPathForSetup, y as imessageSetupStatusBase } from "./group-policy-BWqG2esy.js";
3
3
  import { t as IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-send-deps-B-QEsLSM.js";
4
- import { t as sendMessageIMessage } from "./send-DxhFcMfW.js";
5
- import { t as monitorIMessageProvider } from "./monitor-CSTZ-GFU.js";
4
+ import { t as sendMessageIMessage } from "./send-v0blZfaI.js";
5
+ import { t as monitorIMessageProvider } from "./monitor-AmSj6QIH.js";
6
6
  import { createAccountStatusSink, resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
7
7
  import path from "node:path";
8
8
  import { resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/account-helpers";
@@ -76,7 +76,7 @@ const stateMigrations = [definePluginDoctorMigrationFromPlans({
76
76
  id: "imessage-legacy-state",
77
77
  label: "iMessage legacy state",
78
78
  resolvePlans: async (params) => {
79
- const { detectIMessageLegacyStateMigrations } = await import("./state-migrations-BhY4RwjU.js");
79
+ const { detectIMessageLegacyStateMigrations } = await import("./state-migrations-D-fyHVcb.js");
80
80
  return detectIMessageLegacyStateMigrations(params);
81
81
  }
82
82
  })];
@@ -1,6 +1,6 @@
1
1
  import { a as resolveDefaultIMessageAccountId, l as resolveIMessageRemoteHost, n as hasExclusiveIMessageLocalDatabase, o as resolveIMessageAccount, u as expandIMessageUserPath } from "./accounts-CCirBEIm.js";
2
- import { d as normalizeBareIMessageChatIdentifier, f as getCachedIMessagePrivateApiStatus, g as IMESSAGE_ACTION_NAMES, h as IMESSAGE_ACTIONS, l as parseIMessageTarget, m as setCachedIMessagePrivateApiStatus, p as imessageRpcSupportsMethod, s as normalizeIMessageHandle$1, t as describeIMessageMessageTool, u as isIMessagePhoneLikeHandle } from "./message-tool-api-CLWaomvw.js";
3
- import { c as isIMessageCurrentMessageInChat, h as chatContextFromIMessageTarget, o as createIMessageRpcClient, s as findLatestIMessageEntryForChat, u as rememberIMessageReplyCache } from "./sanitize-outbound-DKRlFQoD.js";
2
+ import { _ as IMESSAGE_ACTION_NAMES, d as normalizeBareIMessageChatIdentifier, f as getCachedIMessagePrivateApiStatus, g as IMESSAGE_ACTIONS, h as setCachedIMessagePrivateApiStatus, l as parseIMessageTarget, p as imessageRpcSupportsMethod, s as normalizeIMessageHandle$1, t as describeIMessageMessageTool, u as isIMessagePhoneLikeHandle } from "./message-tool-api-CUoFESHj.js";
3
+ import { c as isIMessageCurrentMessageInChat, h as chatContextFromIMessageTarget, o as createIMessageRpcClient, s as findLatestIMessageEntryForChat, u as rememberIMessageReplyCache } from "./sanitize-outbound-CN3Hxbjy.js";
4
4
  import { createLazyRuntimeNamedExport } from "openclaw/plugin-sdk/lazy-runtime";
5
5
  import path from "node:path";
6
6
  import { normalizeE164 } from "openclaw/plugin-sdk/account-resolution";
@@ -519,7 +519,7 @@ async function probeIMessage(timeoutMs, opts = {}) {
519
519
  }
520
520
  //#endregion
521
521
  //#region extensions/imessage/src/actions.ts
522
- const loadIMessageActionsRuntime = createLazyRuntimeNamedExport(() => import("./actions.runtime-UDLBuS_8.js"), "imessageActionsRuntime");
522
+ const loadIMessageActionsRuntime = createLazyRuntimeNamedExport(() => import("./actions.runtime-DCjNT81u.js"), "imessageActionsRuntime");
523
523
  const log = createSubsystemLogger("channels/imessage");
524
524
  const providerId = "imessage";
525
525
  const SUPPORTED_ACTIONS = /* @__PURE__ */ new Set([...IMESSAGE_ACTION_NAMES, "upload-file"]);
@@ -67,6 +67,9 @@ function getCachedIMessagePrivateApiStatus(cliPath) {
67
67
  }
68
68
  return entry.status;
69
69
  }
70
+ function invalidateCachedIMessagePrivateApiStatus(cliPath) {
71
+ bridgeStatusCache.delete(normalizeCliPath(cliPath));
72
+ }
70
73
  function setCachedIMessagePrivateApiStatus(cliPath, status, expiresAt = 0) {
71
74
  if (expiresAt !== 0 && asDateTimestampMs(expiresAt) === void 0) return;
72
75
  bridgeStatusCache.set(normalizeCliPath(cliPath), {
@@ -317,4 +320,4 @@ function describeIMessageMessageTool({ cfg, accountId, chatType, currentChannelI
317
320
  };
318
321
  }
319
322
  //#endregion
320
- export { isAllowedIMessageSender as a, parseIMessageAllowTarget as c, normalizeBareIMessageChatIdentifier as d, getCachedIMessagePrivateApiStatus as f, IMESSAGE_ACTION_NAMES as g, IMESSAGE_ACTIONS as h, isAllowedIMessageReplyContextSender as i, parseIMessageTarget as l, setCachedIMessagePrivateApiStatus as m, formatIMessageChatTarget as n, looksLikeIMessageExplicitTargetId as o, imessageRpcSupportsMethod as p, inferIMessageTargetChatType as r, normalizeIMessageHandle as s, describeIMessageMessageTool as t, isIMessagePhoneLikeHandle as u };
323
+ export { IMESSAGE_ACTION_NAMES as _, isAllowedIMessageSender as a, parseIMessageAllowTarget as c, normalizeBareIMessageChatIdentifier as d, getCachedIMessagePrivateApiStatus as f, IMESSAGE_ACTIONS as g, setCachedIMessagePrivateApiStatus as h, isAllowedIMessageReplyContextSender as i, parseIMessageTarget as l, invalidateCachedIMessagePrivateApiStatus as m, formatIMessageChatTarget as n, looksLikeIMessageExplicitTargetId as o, imessageRpcSupportsMethod as p, inferIMessageTargetChatType as r, normalizeIMessageHandle as s, describeIMessageMessageTool as t, isIMessagePhoneLikeHandle as u };
@@ -1,2 +1,2 @@
1
- import { t as describeIMessageMessageTool } from "./message-tool-api-CLWaomvw.js";
1
+ import { t as describeIMessageMessageTool } from "./message-tool-api-CUoFESHj.js";
2
2
  export { describeIMessageMessageTool as describeMessageTool };
@@ -1,12 +1,12 @@
1
1
  import { d as resolveIMessageChatDbLookupPath, f as resolveIMessageHomeDir, l as resolveIMessageRemoteHost, o as resolveIMessageAccount } from "./accounts-CCirBEIm.js";
2
- import { c as parseIMessageAllowTarget, f as getCachedIMessagePrivateApiStatus, i as isAllowedIMessageReplyContextSender, l as parseIMessageTarget, n as formatIMessageChatTarget, p as imessageRpcSupportsMethod, s as normalizeIMessageHandle } from "./message-tool-api-CLWaomvw.js";
3
- import { l as isKnownFromMeIMessageMessageId, o as createIMessageRpcClient, r as sanitizeOutboundText, u as rememberIMessageReplyCache, v as resolveIMessageDirectChatService } from "./sanitize-outbound-DKRlFQoD.js";
4
- import { f as probeIMessage, r as resolveIMessageInboundConversationId } from "./group-policy-fYokgrgz.js";
2
+ import { c as parseIMessageAllowTarget, f as getCachedIMessagePrivateApiStatus, i as isAllowedIMessageReplyContextSender, l as parseIMessageTarget, n as formatIMessageChatTarget, p as imessageRpcSupportsMethod, s as normalizeIMessageHandle } from "./message-tool-api-CUoFESHj.js";
3
+ import { l as isKnownFromMeIMessageMessageId, o as createIMessageRpcClient, r as sanitizeOutboundText, u as rememberIMessageReplyCache, v as resolveIMessageDirectChatService } from "./sanitize-outbound-CN3Hxbjy.js";
4
+ import { f as probeIMessage, r as resolveIMessageInboundConversationId } from "./group-policy-BWqG2esy.js";
5
5
  import { t as getIMessageRuntime } from "./runtime-Cza4CY5T.js";
6
6
  import { d as resolveIMessageEchoMediaKey, l as capFailureRetriesMap, t as IMESSAGE_CATCHUP_CURSOR_NAMESPACE, u as resolveIMessageCatchupCursorKey } from "./state-contract-DvahEY4X.js";
7
7
  import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots } from "./media-contract-pns3TSS5.js";
8
- import { i as registerIMessageApprovalReactionTarget, n as handleIMessageApprovalReaction, o as listPendingIMessageApprovalReactionPollTargets, r as maybeResolveIMessageApprovalReaction, s as buildIMessageApprovalConversationKeyForInbound } from "./approval-reactions-B2-_97DN.js";
9
- import { c as iMessageApprovalControlBindings, n as hasPersistedIMessageEcho, r as stripLeadingEchoTextCorruptionMarkers, s as maybeResolveIMessageApprovalPollVote, t as sendMessageIMessage } from "./send-DxhFcMfW.js";
8
+ import { i as registerIMessageApprovalReactionTarget, n as handleIMessageApprovalReaction, o as listPendingIMessageApprovalReactionPollTargets, r as maybeResolveIMessageApprovalReaction, s as buildIMessageApprovalConversationKeyForInbound } from "./approval-reactions-DcLRPx7O.js";
9
+ import { c as iMessageApprovalControlBindings, n as hasPersistedIMessageEcho, r as stripLeadingEchoTextCorruptionMarkers, s as maybeResolveIMessageApprovalPollVote, t as sendMessageIMessage } from "./send-v0blZfaI.js";
10
10
  import { t as resolveIMessageReactionContext } from "./reaction-context-BAYI7pz0.js";
11
11
  import { n as maybeResolveIMessageQuestionReaction, t as hasIMessageQuestionReactionTarget } from "./question-reactions-viP7ZcyG.js";
12
12
  import { bindIngressLifecycleToReplyOptions, createChannelIngressError, createChannelIngressMonitor, createChannelMessageReplyPipeline, createMessageReceiptFromOutboundResults, listMessageReceiptPlatformIds, resolveChannelStreamingBlockEnabled } from "openclaw/plugin-sdk/channel-outbound";
@@ -1,5 +1,5 @@
1
1
  import { p as resolveLocalIMessageChatDbPath, u as expandIMessageUserPath } from "./accounts-CCirBEIm.js";
2
- import { d as resolveIMessageCachedResourceBinding, f as resolveIMessageMessageId, g as isIMessageEmailChatIdentifier, h as chatContextFromIMessageTarget } from "./sanitize-outbound-DKRlFQoD.js";
2
+ import { d as resolveIMessageCachedResourceBinding, f as resolveIMessageMessageId, g as isIMessageEmailChatIdentifier, h as chatContextFromIMessageTarget } from "./sanitize-outbound-CN3Hxbjy.js";
3
3
  import path from "node:path";
4
4
  import { normalizeScpRemoteHost } from "openclaw/plugin-sdk/host-runtime";
5
5
  import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
@@ -1,9 +1,9 @@
1
1
  import { o as resolveIMessageAccount } from "./accounts-CCirBEIm.js";
2
- import { c as normalizeIMessageMessagingTarget, d as imessageMessageActions, f as probeIMessage, n as resolveIMessageGroupToolPolicy, s as looksLikeIMessageTargetId, t as resolveIMessageGroupRequireMention } from "./group-policy-fYokgrgz.js";
2
+ import { c as normalizeIMessageMessagingTarget, d as imessageMessageActions, f as probeIMessage, n as resolveIMessageGroupToolPolicy, s as looksLikeIMessageTargetId, t as resolveIMessageGroupRequireMention } from "./group-policy-BWqG2esy.js";
3
3
  import { r as setIMessageRuntime } from "./runtime-Cza4CY5T.js";
4
4
  import { n as IMessageConfigSchema } from "./config-schema-DuGbA8Kp.js";
5
- import { t as sendMessageIMessage } from "./send-DxhFcMfW.js";
6
- import { t as monitorIMessageProvider } from "./monitor-CSTZ-GFU.js";
5
+ import { t as sendMessageIMessage } from "./send-v0blZfaI.js";
6
+ import { t as monitorIMessageProvider } from "./monitor-AmSj6QIH.js";
7
7
  import { formatTrimmedAllowFromEntries } from "openclaw/plugin-sdk/channel-config-helpers";
8
8
  import { buildComputedAccountStatusSnapshot, collectStatusIssuesFromLastError } from "openclaw/plugin-sdk/status-helpers";
9
9
  import { resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/account-helpers";
@@ -1,4 +1,5 @@
1
1
  import { u as expandIMessageUserPath } from "./accounts-CCirBEIm.js";
2
+ import { m as invalidateCachedIMessagePrivateApiStatus } from "./message-tool-api-CUoFESHj.js";
2
3
  import { t as getIMessageRuntime } from "./runtime-Cza4CY5T.js";
3
4
  import { a as IMESSAGE_REPLY_CACHE_NAMESPACE, f as resolveIMessageReplyCacheEntryKey, i as IMESSAGE_REPLY_CACHE_MAX_ENTRIES, n as IMESSAGE_REPLY_CACHE_COUNTER_KEY, o as IMESSAGE_REPLY_CACHE_TTL_MS, r as IMESSAGE_REPLY_CACHE_COUNTER_NAMESPACE } from "./state-contract-DvahEY4X.js";
4
5
  import { normalizeE164 } from "openclaw/plugin-sdk/account-resolution";
@@ -356,6 +357,16 @@ var IMessageRpcRequestError = class extends Error {
356
357
  this.name = "IMessageRpcRequestError";
357
358
  }
358
359
  };
360
+ function isIMessageBridgeStall(error) {
361
+ if (!(error instanceof Error)) return false;
362
+ return error.message.includes("Timed out waiting for response");
363
+ }
364
+ const BRIDGE_STALL_GUIDANCE = "The imsg private API bridge stopped responding. Run `imsg launch` to re-inject the dylib, then `openclaw channels status --probe` to refresh capability detection.";
365
+ function describeIMessageBridgeStall(error) {
366
+ if (error instanceof IMessageRpcRequestError) return new IMessageRpcRequestError(`${error.message} ${BRIDGE_STALL_GUIDANCE}`, error.code, error.data);
367
+ if (error instanceof Error) return new Error(`${error.message} ${BRIDGE_STALL_GUIDANCE}`, { cause: error });
368
+ return error;
369
+ }
359
370
  const PUBLIC_IMESSAGE_FULL_DISK_ACCESS_ERROR = "imsg cannot access ~/Library/Messages/chat.db. Grant Full Disk Access to the Gateway/launcher process and restart Gateway.";
360
371
  const IMESSAGE_RPC_CLOSE_GRACE_MS = 500;
361
372
  function isTestEnv() {
@@ -381,7 +392,8 @@ var IMessageRpcClient = class {
381
392
  this.stderrDecoder = new StringDecoder("utf8");
382
393
  this.nextId = 1;
383
394
  this.publicProcessError = null;
384
- this.cliPath = expandIMessageUserPath(opts.cliPath?.trim() || "imsg");
395
+ this.configuredCliPath = opts.cliPath?.trim() || "imsg";
396
+ this.cliPath = expandIMessageUserPath(this.configuredCliPath);
385
397
  const dbPath = opts.dbPath?.trim();
386
398
  this.dbPath = dbPath ? opts.remoteHost?.trim() ? dbPath : resolveUserPath(dbPath) : void 0;
387
399
  this.runtime = opts.runtime;
@@ -466,7 +478,15 @@ var IMessageRpcClient = class {
466
478
  } catch (err) {
467
479
  this.failTransport(err, this.child);
468
480
  }
469
- return await response;
481
+ try {
482
+ return await response;
483
+ } catch (err) {
484
+ if (isIMessageBridgeStall(err)) {
485
+ invalidateCachedIMessagePrivateApiStatus(this.configuredCliPath);
486
+ throw describeIMessageBridgeStall(err);
487
+ }
488
+ throw err;
489
+ }
470
490
  }
471
491
  async stopChild(child) {
472
492
  try {
@@ -1,11 +1,11 @@
1
1
  import { d as resolveIMessageChatDbLookupPath, l as resolveIMessageRemoteHost, n as hasExclusiveIMessageLocalDatabase, o as resolveIMessageAccount } from "./accounts-CCirBEIm.js";
2
- import { l as parseIMessageTarget, n as formatIMessageChatTarget, s as normalizeIMessageHandle } from "./message-tool-api-CLWaomvw.js";
3
- import { a as IMessageRpcRequestError, h as chatContextFromIMessageTarget, n as sanitizeIMessageFinalOutboundText, o as createIMessageRpcClient, t as protectIMessageFencedRoleMarkers, u as rememberIMessageReplyCache, v as resolveIMessageDirectChatService } from "./sanitize-outbound-DKRlFQoD.js";
4
- import { l as getIMessageApprovalApprovers, u as imessageApprovalAuth } from "./group-policy-fYokgrgz.js";
2
+ import { l as parseIMessageTarget, n as formatIMessageChatTarget, s as normalizeIMessageHandle } from "./message-tool-api-CUoFESHj.js";
3
+ import { a as IMessageRpcRequestError, h as chatContextFromIMessageTarget, n as sanitizeIMessageFinalOutboundText, o as createIMessageRpcClient, t as protectIMessageFencedRoleMarkers, u as rememberIMessageReplyCache, v as resolveIMessageDirectChatService } from "./sanitize-outbound-CN3Hxbjy.js";
4
+ import { l as getIMessageApprovalApprovers, u as imessageApprovalAuth } from "./group-policy-BWqG2esy.js";
5
5
  import { n as getOptionalIMessageRuntime, t as getIMessageRuntime } from "./runtime-Cza4CY5T.js";
6
6
  import { c as IMESSAGE_SENT_ECHOES_TTL_MS, d as resolveIMessageEchoMediaKey, p as resolveIMessageSentEchoEntryKey, s as IMESSAGE_SENT_ECHOES_NAMESPACE } from "./state-contract-DvahEY4X.js";
7
- import { d as normalizeConversationKey, f as normalizeIMessageGuid, i as registerIMessageApprovalReactionTarget, l as enumerateApprovalTargetKeys, s as buildIMessageApprovalConversationKeyForInbound, u as enumerateConversationKeyForms } from "./approval-reactions-B2-_97DN.js";
8
- import { i as runIMessageCliJsonCommand, r as resolveAuthorizedIMessageReplyReference, t as withIMessageRemoteFile } from "./remote-file-CmdycSRk.js";
7
+ import { d as normalizeConversationKey, f as normalizeIMessageGuid, i as registerIMessageApprovalReactionTarget, l as enumerateApprovalTargetKeys, s as buildIMessageApprovalConversationKeyForInbound, u as enumerateConversationKeyForms } from "./approval-reactions-DcLRPx7O.js";
8
+ import { i as runIMessageCliJsonCommand, r as resolveAuthorizedIMessageReplyReference, t as withIMessageRemoteFile } from "./remote-file-COTN7196.js";
9
9
  import { createMessageReceiptFromOutboundResults } from "openclaw/plugin-sdk/channel-outbound";
10
10
  import { createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
11
11
  import { accessSync, constants } from "node:fs";
@@ -4,7 +4,7 @@ import fs from "node:fs";
4
4
  import path from "node:path";
5
5
  import { asFiniteNumber, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { createHash } from "node:crypto";
7
- import { fileExists } from "openclaw/plugin-sdk/security-runtime";
7
+ import { fileExists } from "openclaw/plugin-sdk/file-access-runtime";
8
8
  import { resolveStateDir } from "openclaw/plugin-sdk/state-paths";
9
9
  //#region extensions/imessage/src/state-migrations.ts
10
10
  function resolveMigrationStateDir(params) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/imessage",
3
- "version": "2026.8.2",
3
+ "version": "2026.9.1",
4
4
  "description": "OpenClaw iMessage channel plugin using imsg on a signed-in Mac",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,7 +12,7 @@
12
12
  "zod": "4.4.3"
13
13
  },
14
14
  "peerDependencies": {
15
- "openclaw": ">=2026.8.2"
15
+ "openclaw": ">=2026.9.1"
16
16
  },
17
17
  "peerDependenciesMeta": {
18
18
  "openclaw": {
@@ -92,10 +92,10 @@
92
92
  "allowInvalidConfigRecovery": true
93
93
  },
94
94
  "compat": {
95
- "pluginApi": ">=2026.8.2"
95
+ "pluginApi": ">=2026.9.1"
96
96
  },
97
97
  "build": {
98
- "openclawVersion": "2026.8.2",
98
+ "openclawVersion": "2026.9.1",
99
99
  "bundledDist": false
100
100
  },
101
101
  "release": {