@openclaw/imessage 2026.8.1-beta.2 → 2026.9.1-beta.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.
Files changed (151) hide show
  1. package/dist/{accounts-D00Njxg2.js → accounts-DIpGOIiN.js} +2 -2
  2. package/dist/{actions.runtime-DTFKDN5p.js → actions.runtime-BhggncbG.js} +3 -3
  3. package/dist/api.js +6 -5
  4. package/dist/{approval-handler.runtime-BtLs4gho.js → approval-handler.runtime-BC-YsgAf.js} +15 -9
  5. package/dist/approval-reactions-Cvwmdlev.js +566 -0
  6. package/dist/{catchup-D32oYNxR.js → catchup-Dh-Rv4Ur.js} +1 -1
  7. package/dist/{channel-lppmI51h.js → channel-CnKQ2MVB.js} +26 -20
  8. package/dist/channel-plugin-api.js +1 -1
  9. package/dist/{channel.runtime-5wpCKQb7.js → channel.runtime-BQLCh7bE.js} +6 -4
  10. package/dist/contract-api.js +1 -1
  11. package/dist/doctor-contract-api.js +4 -4
  12. package/dist/{group-policy-DF9xSdik.js → group-policy-BipELT2x.js} +19 -650
  13. package/dist/{media-contract-BEgdvYhW.js → media-contract-BVXuQHG2.js} +1 -1
  14. package/dist/media-contract-api.js +1 -1
  15. package/dist/{message-tool-api-CPDfJJoE.js → message-tool-api-BwIxJDoz.js} +7 -4
  16. package/dist/message-tool-api.js +1 -1
  17. package/dist/{monitor-DnxJ8pW9.js → monitor-DRD_Dnp9.js} +76 -107
  18. package/dist/{monitor-reply-cache-DKlYGd5x.js → monitor-reply-cache-BdeUQaHO.js} +6 -1
  19. package/dist/{persisted-echo-cache-BPWGUK-L.js → persisted-echo-cache-DGxy-J4t.js} +1 -1
  20. package/dist/{question-reactions-DVe50UhB.js → question-reactions-viP7ZcyG.js} +2 -1
  21. package/dist/reaction-context-BAYI7pz0.js +105 -0
  22. package/dist/{remote-file-DLwO9ved.js → remote-file-CyTTuRAt.js} +7 -3
  23. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  24. package/dist/runtime-api.js +9 -8
  25. package/dist/{sanitize-outbound-CoTZLXMw.js → sanitize-outbound-g651fIhi.js} +2 -2
  26. package/dist/{send-BUXW76tw.js → send-DVQY6M5M.js} +24 -24
  27. package/node_modules/typebox/build/format/date.d.mts +1 -1
  28. package/node_modules/typebox/build/format/date.mjs +1 -1
  29. package/node_modules/typebox/build/format/date_time.d.mts +2 -2
  30. package/node_modules/typebox/build/format/date_time.mjs +3 -3
  31. package/node_modules/typebox/build/format/email.d.mts +1 -1
  32. package/node_modules/typebox/build/format/email.mjs +2 -2
  33. package/node_modules/typebox/build/format/hostname.mjs +2 -10
  34. package/node_modules/typebox/build/format/idn_email.d.mts +1 -1
  35. package/node_modules/typebox/build/format/idn_email.mjs +3 -3
  36. package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -0
  37. package/node_modules/typebox/build/format/idn_hostname.mjs +3 -11
  38. package/node_modules/typebox/build/format/idna/format/bidi.d.mts +3 -0
  39. package/node_modules/typebox/build/format/idna/format/bidi.mjs +98 -0
  40. package/node_modules/typebox/build/format/idna/format/puny.d.mts +3 -0
  41. package/node_modules/typebox/build/format/idna/format/puny.mjs +144 -0
  42. package/node_modules/typebox/build/format/idna/hostname.d.mts +1 -0
  43. package/node_modules/typebox/build/format/idna/hostname.mjs +16 -0
  44. package/node_modules/typebox/build/format/idna/idn-hostname.d.mts +1 -0
  45. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +23 -0
  46. package/node_modules/typebox/build/format/idna/index.d.mts +2 -0
  47. package/node_modules/typebox/build/format/idna/index.mjs +2 -0
  48. package/node_modules/typebox/build/format/idna/label/ascii.d.mts +1 -0
  49. package/node_modules/typebox/build/format/idna/label/ascii.mjs +9 -0
  50. package/node_modules/typebox/build/format/idna/label/puny.d.mts +1 -0
  51. package/node_modules/typebox/build/format/idna/label/puny.mjs +28 -0
  52. package/node_modules/typebox/build/format/idna/label/unicode.d.mts +1 -0
  53. package/node_modules/typebox/build/format/idna/label/unicode.mjs +106 -0
  54. package/node_modules/typebox/build/format/idna/pattern/pattern.d.mts +30 -0
  55. package/node_modules/typebox/build/format/idna/pattern/pattern.mjs +70 -0
  56. package/node_modules/typebox/build/format/ipv4.d.mts +0 -1
  57. package/node_modules/typebox/build/format/ipv4.mjs +2 -32
  58. package/node_modules/typebox/build/format/ipv6.mjs +2 -61
  59. package/node_modules/typebox/build/format/iri.d.mts +2 -2
  60. package/node_modules/typebox/build/format/iri.mjs +26 -8
  61. package/node_modules/typebox/build/format/iri_reference.d.mts +2 -2
  62. package/node_modules/typebox/build/format/iri_reference.mjs +9 -55
  63. package/node_modules/typebox/build/format/regex.d.mts +1 -2
  64. package/node_modules/typebox/build/format/regex.mjs +2 -6
  65. package/node_modules/typebox/build/format/time.d.mts +2 -2
  66. package/node_modules/typebox/build/format/time.mjs +19 -14
  67. package/node_modules/typebox/build/format/uri.d.mts +1 -1
  68. package/node_modules/typebox/build/format/uri.mjs +3 -130
  69. package/node_modules/typebox/build/format/uri_reference.d.mts +1 -1
  70. package/node_modules/typebox/build/format/uri_reference.mjs +2 -3
  71. package/node_modules/typebox/build/format/uri_template.d.mts +2 -3
  72. package/node_modules/typebox/build/format/uri_template.mjs +4 -5
  73. package/node_modules/typebox/build/format/url.d.mts +3 -3
  74. package/node_modules/typebox/build/format/url.mjs +4 -5
  75. package/node_modules/typebox/build/guard/emit.d.mts +3 -1
  76. package/node_modules/typebox/build/guard/emit.mjs +12 -5
  77. package/node_modules/typebox/build/guard/guard.d.mts +8 -2
  78. package/node_modules/typebox/build/guard/guard.mjs +25 -4
  79. package/node_modules/typebox/build/guard/string.d.mts +2 -2
  80. package/node_modules/typebox/build/guard/string.mjs +7 -7
  81. package/node_modules/typebox/build/schema/engine/_context.mjs +3 -3
  82. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -2
  83. package/node_modules/typebox/build/schema/engine/_regexp.d.mts +2 -0
  84. package/node_modules/typebox/build/schema/engine/_regexp.mjs +4 -0
  85. package/node_modules/typebox/build/schema/engine/_stack.mjs +12 -13
  86. package/node_modules/typebox/build/schema/engine/additionalItems.mjs +17 -7
  87. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +4 -3
  88. package/node_modules/typebox/build/schema/engine/contains.mjs +18 -6
  89. package/node_modules/typebox/build/schema/engine/enum.mjs +1 -1
  90. package/node_modules/typebox/build/schema/engine/items.mjs +26 -6
  91. package/node_modules/typebox/build/schema/engine/maxContains.mjs +3 -3
  92. package/node_modules/typebox/build/schema/engine/minContains.mjs +14 -4
  93. package/node_modules/typebox/build/schema/engine/not.mjs +4 -2
  94. package/node_modules/typebox/build/schema/engine/oneOf.mjs +7 -6
  95. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -2
  96. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +4 -3
  97. package/node_modules/typebox/build/schema/engine/ref.mjs +1 -7
  98. package/node_modules/typebox/build/schema/engine/schema.mjs +13 -4
  99. package/node_modules/typebox/build/schema/engine/type.mjs +1 -1
  100. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +4 -1
  101. package/node_modules/typebox/build/schema/resolve/resolve.mjs +202 -1
  102. package/node_modules/typebox/build/schema/static/propertyNames.d.mts +5 -0
  103. package/node_modules/typebox/build/schema/static/propertyNames.mjs +3 -0
  104. package/node_modules/typebox/build/schema/static/schema.d.mts +3 -0
  105. package/node_modules/typebox/build/schema/types/index.d.mts +0 -2
  106. package/node_modules/typebox/build/schema/types/index.mjs +0 -2
  107. package/node_modules/typebox/build/system/memory/clone.mjs +14 -11
  108. package/node_modules/typebox/build/system/memory/discard.mjs +6 -5
  109. package/node_modules/typebox/build/system/settings/settings.d.mts +9 -0
  110. package/node_modules/typebox/build/system/settings/settings.mjs +2 -0
  111. package/node_modules/typebox/build/type/engine/call/distribute_arguments.d.mts +6 -1
  112. package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +16 -3
  113. package/node_modules/typebox/build/type/engine/call/instantiate.mjs +34 -4
  114. package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +5 -5
  115. package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +20 -26
  116. package/node_modules/typebox/build/type/engine/evaluate/compare.d.mts +6 -10
  117. package/node_modules/typebox/build/type/engine/evaluate/compare.mjs +9 -13
  118. package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +7 -4
  119. package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +12 -19
  120. package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +4 -20
  121. package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +8 -20
  122. package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +4 -4
  123. package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +11 -8
  124. package/node_modules/typebox/build/type/engine/evaluate/flatten.d.mts +1 -1
  125. package/node_modules/typebox/build/type/engine/evaluate/flatten.mjs +3 -4
  126. package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +17 -2
  127. package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +26 -6
  128. package/node_modules/typebox/build/type/engine/exclude/operation.mjs +3 -4
  129. package/node_modules/typebox/build/type/engine/extract/operation.d.mts +1 -1
  130. package/node_modules/typebox/build/type/engine/extract/operation.mjs +3 -4
  131. package/node_modules/typebox/build/type/engine/priority/priority.d.mts +2 -2
  132. package/node_modules/typebox/build/type/engine/priority/priority.mjs +3 -4
  133. package/node_modules/typebox/build/type/script/mapping.d.mts +32 -29
  134. package/node_modules/typebox/build/type/script/mapping.mjs +18 -25
  135. package/node_modules/typebox/build/type/script/parser.d.mts +19 -25
  136. package/node_modules/typebox/build/type/script/parser.mjs +27 -23
  137. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -2
  138. package/node_modules/typebox/build/value/errors/errors.mjs +1 -1
  139. package/node_modules/typebox/package.json +27 -27
  140. package/node_modules/typebox/readme.md +79 -82
  141. package/package.json +5 -5
  142. package/node_modules/typebox/build/format/_idna.d.mts +0 -2
  143. package/node_modules/typebox/build/format/_idna.mjs +0 -246
  144. package/node_modules/typebox/build/format/_puny.d.mts +0 -1
  145. package/node_modules/typebox/build/format/_puny.mjs +0 -77
  146. package/node_modules/typebox/build/schema/resolve/ref.d.mts +0 -3
  147. package/node_modules/typebox/build/schema/resolve/ref.mjs +0 -146
  148. package/node_modules/typebox/build/schema/types/contentEncoding.d.mts +0 -9
  149. package/node_modules/typebox/build/schema/types/contentEncoding.mjs +0 -13
  150. package/node_modules/typebox/build/schema/types/contentMediaType.d.mts +0 -9
  151. package/node_modules/typebox/build/schema/types/contentMediaType.mjs +0 -13
@@ -1,4 +1,4 @@
1
- import { f as getIMessageRuntime } from "./monitor-reply-cache-DKlYGd5x.js";
1
+ import { f as getIMessageRuntime } from "./monitor-reply-cache-BdeUQaHO.js";
2
2
  import { resolveIntegerOption } from "openclaw/plugin-sdk/number-runtime";
3
3
  import { createHash } from "node:crypto";
4
4
  import { KeyedAsyncQueue } from "openclaw/plugin-sdk/keyed-async-queue";
@@ -1,11 +1,14 @@
1
- import { F as imessageMessageActions, H as imessageSetupContract, N as getIMessageApprovalApprovers, P as imessageApprovalAuth, a as normalizeIMessageAcpConversationId, d as formatTrimmedAllowFromEntries$1, f as getChatChannelMeta, g as addIMessageApprovalReactionHintToText, h as normalizeIMessageMessagingTarget, i as matchIMessageAcpConversation, n as resolveIMessageGroupToolPolicy, o as resolveIMessageConversationIdFromTarget, s as DEFAULT_ACCOUNT_ID, t as resolveIMessageGroupRequireMention, u as collectStatusIssuesFromLastError, z as createIMessageSetupWizardProxy } from "./group-policy-DF9xSdik.js";
2
- import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount, t as collectIMessageDuplicateAccountSourceWarnings } from "./accounts-D00Njxg2.js";
3
- import { l as parseIMessageTarget, o as looksLikeIMessageExplicitTargetId, r as inferIMessageTargetChatType, s as normalizeIMessageHandle } from "./message-tool-api-CPDfJJoE.js";
4
- import { n as sanitizeIMessageFinalOutboundText, r as sanitizeOutboundText } from "./sanitize-outbound-CoTZLXMw.js";
1
+ import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount, t as collectIMessageDuplicateAccountSourceWarnings } from "./accounts-DIpGOIiN.js";
2
+ import { l as parseIMessageTarget, o as looksLikeIMessageExplicitTargetId, r as inferIMessageTargetChatType, s as normalizeIMessageHandle, u as isIMessagePhoneLikeHandle } from "./message-tool-api-BwIxJDoz.js";
3
+ import { v as resolveIMessageDirectChatService } from "./monitor-reply-cache-BdeUQaHO.js";
4
+ import { n as sanitizeIMessageFinalOutboundText, r as sanitizeOutboundText } from "./sanitize-outbound-g651fIhi.js";
5
+ 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-BipELT2x.js";
5
6
  import { t as createIMessageConversationBindingManager } from "./conversation-bindings-GDQ_Laxj.js";
6
7
  import { t as IMessageChannelConfigSchema } from "./config-schema-DV0KP5nC.js";
7
- import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots } from "./media-contract-BEgdvYhW.js";
8
+ import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots } from "./media-contract-BVXuQHG2.js";
9
+ import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
8
10
  import { buildDmGroupAccountAllowlistAdapter } from "openclaw/plugin-sdk/allowlist-config-edit";
11
+ import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter, formatTrimmedAllowFromEntries } from "openclaw/plugin-sdk/channel-config-helpers";
9
12
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
10
13
  import { createMessageReceiptFromOutboundResults, defineChannelMessageAdapter, sanitizeForPlainText } from "openclaw/plugin-sdk/channel-outbound";
11
14
  import { buildPassiveProbedChannelStatusSummary } from "openclaw/plugin-sdk/extension-shared";
@@ -13,17 +16,17 @@ import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
13
16
  import { questionGatewayRuntime } from "openclaw/plugin-sdk/question-gateway-runtime";
14
17
  import { chunkMarkdownText } from "openclaw/plugin-sdk/reply-runtime";
15
18
  import { buildOutboundBaseSessionKey, normalizeAccountId, parseAgentSessionKey } from "openclaw/plugin-sdk/routing";
16
- import { createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
19
+ import { collectStatusIssuesFromLastError, createComputedAccountStatusAdapter, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
17
20
  import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
18
21
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
19
22
  import { createApproverRestrictedNativeApprovalCapabilityFromForwardingRoutes } from "openclaw/plugin-sdk/approval-delivery-runtime";
20
23
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
21
24
  import { shouldSuppressLocalNativeExecApprovalPrompt } from "openclaw/plugin-sdk/approval-native-runtime";
25
+ import { addApprovalReactionHintToText } from "openclaw/plugin-sdk/approval-reaction-runtime";
22
26
  import { buildTypedExecApprovalPendingReplyPayload, buildTypedPluginApprovalPendingReplyPayload } from "openclaw/plugin-sdk/approval-reply-runtime";
23
27
  import { getExecApprovalReplyMetadata, resolveExecApprovalCommandDisplay, resolveExecApprovalRequestAllowedDecisions } from "openclaw/plugin-sdk/approval-runtime";
24
- import { adaptScopedAccountAccessor, createScopedChannelConfigAdapter, formatTrimmedAllowFromEntries } from "openclaw/plugin-sdk/channel-config-helpers";
25
- import { createChannelPluginBase } from "openclaw/plugin-sdk/core";
26
28
  import { createRestrictSendersChannelSecurity } from "openclaw/plugin-sdk/channel-policy";
29
+ import { createChannelPluginBase, getChatChannelMeta } from "openclaw/plugin-sdk/core";
27
30
  //#region extensions/imessage/src/approval-text.ts
28
31
  function replaceApprovalIdPlaceholder(text, approvalId) {
29
32
  const safeApprovalId = approvalId.replace(/\$/g, "$$$$");
@@ -84,7 +87,7 @@ const imessageApproval = createApproverRestrictedNativeApprovalCapabilityFromFor
84
87
  approvalKind,
85
88
  request
86
89
  }),
87
- load: async () => (await import("./approval-handler.runtime-BtLs4gho.js")).imessageApprovalNativeRuntime
90
+ load: async () => (await import("./approval-handler.runtime-BC-YsgAf.js")).imessageApprovalNativeRuntime
88
91
  })
89
92
  });
90
93
  const imessageApprovalRouting = imessageApproval.routing;
@@ -139,7 +142,7 @@ function shouldSuppressLocalIMessageExecApprovalPrompt(params) {
139
142
  });
140
143
  }
141
144
  function appendIMessageReactionHint(params) {
142
- return addIMessageApprovalReactionHintToText({
145
+ return addApprovalReactionHintToText({
143
146
  text: params.text ?? "",
144
147
  allowedDecisions: params.allowedDecisions
145
148
  });
@@ -159,6 +162,7 @@ function buildIMessageExecPendingPayload(params) {
159
162
  cwd: params.request.request.cwd ?? void 0,
160
163
  host: params.request.request.host === "node" ? "node" : "gateway",
161
164
  nodeId: params.request.request.nodeId ?? void 0,
165
+ scope: params.request.request.scope ?? void 0,
162
166
  sessionKey: params.request.request.sessionKey ?? null,
163
167
  expiresAtMs: params.request.expiresAtMs,
164
168
  nowMs: params.nowMs
@@ -198,7 +202,7 @@ const imessageDoctor = {
198
202
  //#region extensions/imessage/src/shared.ts
199
203
  const IMESSAGE_CHANNEL = "imessage";
200
204
  async function loadIMessageChannelRuntime$1() {
201
- return await import("./channel.runtime-5wpCKQb7.js");
205
+ return await import("./channel.runtime-BQLCh7bE.js");
202
206
  }
203
207
  const imessageSetupWizard = createIMessageSetupWizardProxy(async () => (await loadIMessageChannelRuntime$1()).imessageSetupWizard);
204
208
  const imessageConfigAdapter = createScopedChannelConfigAdapter({
@@ -227,6 +231,7 @@ const imessageSecurityAdapter = createRestrictSendersChannelSecurity({
227
231
  groupPolicyPath: "channels.imessage.groupPolicy",
228
232
  groupAllowFromPath: "channels.imessage.groupAllowFrom",
229
233
  mentionGated: false,
234
+ findingTitle: "iMessage security warning",
230
235
  policyPathSuffix: "dmPolicy"
231
236
  });
232
237
  function createIMessagePluginBase(params) {
@@ -296,7 +301,7 @@ async function probeIMessageStatusAccount(params) {
296
301
  }
297
302
  //#endregion
298
303
  //#region extensions/imessage/src/channel.ts
299
- const loadIMessageChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-5wpCKQb7.js"));
304
+ const loadIMessageChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-BQLCh7bE.js"));
300
305
  function toIMessageMessageSendResult(result, kind, replyToId) {
301
306
  const receipt = result.receipt ?? createMessageReceiptFromOutboundResults({
302
307
  results: result.messageId ? [{
@@ -312,8 +317,8 @@ function toIMessageMessageSendResult(result, kind, replyToId) {
312
317
  ...result.meta && Object.keys(result.meta).length > 0 ? { meta: result.meta } : {}
313
318
  };
314
319
  }
315
- const loadIMessageApprovalReactionsModule = createLazyRuntimeModule(() => import("./group-policy-DF9xSdik.js").then((n) => n.v));
316
- const loadIMessageQuestionReactionsModule = createLazyRuntimeModule(() => import("./question-reactions-DVe50UhB.js").then((n) => n.r));
320
+ const loadIMessageApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-Cvwmdlev.js").then((n) => n.t));
321
+ const loadIMessageQuestionReactionsModule = createLazyRuntimeModule(() => import("./question-reactions-viP7ZcyG.js").then((n) => n.r));
317
322
  async function prepareForwardedIMessageApprovalPayload(params) {
318
323
  const prepared = (await loadIMessageApprovalReactionsModule()).addIMessageApprovalReactionHintToStructuredPayload(params);
319
324
  if (prepared) Object.assign(params.payload, prepared);
@@ -386,7 +391,7 @@ function buildIMessageBaseSessionKey(params) {
386
391
  function isCanonicalIMessageDirectHandle(raw, normalized) {
387
392
  const trimmed = raw.trim();
388
393
  if (!trimmed || !normalized) return false;
389
- if (normalized.startsWith("+")) return /^[+\d\s().-]+$/.test(trimmed);
394
+ if (normalized.startsWith("+")) return isIMessagePhoneLikeHandle(trimmed);
390
395
  return /^[^\s@<>()[\]`]+@[^\s@<>()[\]`]+\.[^\s@<>()[\]`]+$/.test(trimmed);
391
396
  }
392
397
  function resolveIMessageOutboundSessionRoute(params) {
@@ -398,7 +403,7 @@ function resolveIMessageOutboundSessionRoute(params) {
398
403
  cfg: params.cfg,
399
404
  accountId: params.accountId
400
405
  });
401
- const directTarget = `${parsed.serviceExplicit || parsed.service !== "auto" ? parsed.service : account.config.service === "sms" ? "sms" : "imessage"}:${handle}`;
406
+ const directTarget = `${resolveIMessageDirectChatService(parsed.serviceExplicit ? parsed.service : account.config.service) ?? "auto"}:${handle}`;
402
407
  const peer = {
403
408
  kind: "direct",
404
409
  id: handle
@@ -451,7 +456,7 @@ const imessagePlugin = createChatChannelPlugin({
451
456
  allowlist: buildDmGroupAccountAllowlistAdapter({
452
457
  channelId: "imessage",
453
458
  resolveAccount: resolveIMessageAccount,
454
- normalize: ({ values }) => formatTrimmedAllowFromEntries$1(values),
459
+ normalize: ({ values }) => formatTrimmedAllowFromEntries(values),
455
460
  resolveDmAllowFrom: (account) => account.config.allowFrom,
456
461
  resolveGroupAllowFrom: (account) => account.config.groupAllowFrom,
457
462
  resolveDmPolicy: (account) => account.config.dmPolicy,
@@ -464,6 +469,7 @@ const imessagePlugin = createChatChannelPlugin({
464
469
  doctor: imessageDoctor,
465
470
  conversationBindings: {
466
471
  supportsCurrentConversationBinding: true,
472
+ bindingStore: "adapter",
467
473
  createManager: ({ cfg, accountId }) => createIMessageConversationBindingManager({
468
474
  cfg,
469
475
  accountId: accountId ?? void 0
@@ -486,9 +492,9 @@ const imessagePlugin = createChatChannelPlugin({
486
492
  resolveOutboundSessionRoute: (params) => resolveIMessageOutboundSessionRoute(params),
487
493
  targetResolver: {
488
494
  looksLikeId: looksLikeIMessageExplicitTargetId,
489
- hint: "<handle|chat_id:ID>",
490
- resolveTarget: async ({ normalized }) => {
491
- const to = normalized?.trim();
495
+ hint: "<phone|email|chat_id:ID|auto:contact|imessage:contact|sms:contact>",
496
+ resolveTarget: async ({ input }) => {
497
+ const to = normalizeIMessageMessagingTarget(input);
492
498
  if (!to) return null;
493
499
  const chatType = inferIMessageTargetChatType(to);
494
500
  if (!chatType) return null;
@@ -1,2 +1,2 @@
1
- import { t as imessagePlugin } from "./channel-lppmI51h.js";
1
+ import { t as imessagePlugin } from "./channel-CnKQ2MVB.js";
2
2
  export { imessagePlugin };
@@ -1,14 +1,16 @@
1
- import { B as imessageCompletionNote, G as normalizeIMessageCliPathForSetup, I as probeIMessage, L as IMESSAGE_INSTALL_COMMAND, R as createIMessageCliPathTextInput, U as imessageSetupStatusBase, V as imessageDmPolicy, W as isAutoManagedIMessageCliPath, c as PAIRING_APPROVED_MESSAGE, p as resolveChannelMediaMaxBytes } from "./group-policy-DF9xSdik.js";
2
- import { l as resolveIMessageRemoteHost, o as resolveIMessageAccount, r as listEnabledIMessageAccounts, s as resolveIMessageDuplicateSourceOwner } from "./accounts-D00Njxg2.js";
1
+ import { l as resolveIMessageRemoteHost, o as resolveIMessageAccount, r as listEnabledIMessageAccounts, s as resolveIMessageDuplicateSourceOwner } from "./accounts-DIpGOIiN.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-BipELT2x.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-BUXW76tw.js";
5
- import { t as monitorIMessageProvider } from "./monitor-DnxJ8pW9.js";
4
+ import { t as sendMessageIMessage } from "./send-DVQY6M5M.js";
5
+ import { t as monitorIMessageProvider } from "./monitor-DRD_Dnp9.js";
6
6
  import { createAccountStatusSink, resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs/promises";
9
+ import { resolveChannelMediaMaxBytes } from "openclaw/plugin-sdk/media-runtime";
9
10
  import { createDetectedBinaryStatus, setSetupChannelEnabled } from "openclaw/plugin-sdk/setup";
10
11
  import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
11
12
  import { detectBinary as detectBinary$1, resolveBrewExecutable } from "openclaw/plugin-sdk/setup-tools";
13
+ import { PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk/channel-status";
12
14
  import { runPluginCommandWithTimeout } from "openclaw/plugin-sdk/run-command";
13
15
  //#region extensions/imessage/src/install-imsg.ts
14
16
  async function resolveBrewIMessageCliPath(brewExe) {
@@ -1,3 +1,3 @@
1
- import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots, t as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS } from "./media-contract-BEgdvYhW.js";
1
+ import { n as resolveIMessageAttachmentRoots, r as resolveIMessageRemoteAttachmentRoots, t as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS } from "./media-contract-BVXuQHG2.js";
2
2
  import "./media-contract-api.js";
3
3
  export { DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, resolveIMessageAttachmentRoots, resolveIMessageAttachmentRoots as resolveInboundAttachmentRoots, resolveIMessageRemoteAttachmentRoots, resolveIMessageRemoteAttachmentRoots as resolveRemoteInboundAttachmentRoots };
@@ -1,7 +1,7 @@
1
- import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount } from "./accounts-D00Njxg2.js";
2
- import { d as resolveIMessageReplyCacheEntryKey, i as IMESSAGE_REPLY_CACHE_NAMESPACE, n as IMESSAGE_REPLY_CACHE_COUNTER_NAMESPACE, r as IMESSAGE_REPLY_CACHE_MAX_ENTRIES, t as IMESSAGE_REPLY_CACHE_COUNTER_KEY } from "./monitor-reply-cache-DKlYGd5x.js";
3
- import { o as resolveIMessageCatchupCursorKey, r as capFailureRetriesMap, t as IMESSAGE_CATCHUP_CURSOR_NAMESPACE } from "./catchup-D32oYNxR.js";
4
- import { n as IMESSAGE_SENT_ECHOES_TTL_MS, s as resolveIMessageSentEchoEntryKey, t as IMESSAGE_SENT_ECHOES_NAMESPACE } from "./persisted-echo-cache-BPWGUK-L.js";
1
+ import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount } from "./accounts-DIpGOIiN.js";
2
+ import { d as resolveIMessageReplyCacheEntryKey, i as IMESSAGE_REPLY_CACHE_NAMESPACE, n as IMESSAGE_REPLY_CACHE_COUNTER_NAMESPACE, r as IMESSAGE_REPLY_CACHE_MAX_ENTRIES, t as IMESSAGE_REPLY_CACHE_COUNTER_KEY } from "./monitor-reply-cache-BdeUQaHO.js";
3
+ import { o as resolveIMessageCatchupCursorKey, r as capFailureRetriesMap, t as IMESSAGE_CATCHUP_CURSOR_NAMESPACE } from "./catchup-Dh-Rv4Ur.js";
4
+ import { n as IMESSAGE_SENT_ECHOES_TTL_MS, s as resolveIMessageSentEchoEntryKey, t as IMESSAGE_SENT_ECHOES_NAMESPACE } from "./persisted-echo-cache-DGxy-J4t.js";
5
5
  import fs from "node:fs";
6
6
  import path from "node:path";
7
7
  import { asFiniteNumber, isRecord, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";