@openclaw/imessage 2026.9.3 → 2026.9.4

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.
package/dist/api.js CHANGED
@@ -2,7 +2,7 @@ import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as
2
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
3
  import { m as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS } from "./sanitize-outbound-C6UF2cvr.js";
4
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-Duro87b4.js";
5
- import { n as createIMessagePluginBase, r as imessageSetupWizard, t as imessagePlugin } from "./channel-B6qtBfCj.js";
5
+ import { n as createIMessagePluginBase, r as imessageSetupWizard, t as imessagePlugin } from "./channel-BwKxE8Ge.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";
@@ -75,6 +75,7 @@ const imessageApproval = createApproverRestrictedNativeApprovalCapabilityFromFor
75
75
  }) }
76
76
  },
77
77
  createNativeRuntime: (routing) => createLazyChannelApprovalNativeRuntimeAdapter({
78
+ capabilityBoundary: true,
78
79
  eventKinds: [
79
80
  "exec",
80
81
  "plugin",
@@ -206,7 +207,7 @@ const imessageDoctor = {
206
207
  //#region extensions/imessage/src/shared.ts
207
208
  const IMESSAGE_CHANNEL = "imessage";
208
209
  async function loadIMessageChannelRuntime$1() {
209
- return await import("./channel.runtime-C2lcFXWn.js");
210
+ return await import("./channel.runtime-BGwNkU9Z.js");
210
211
  }
211
212
  const imessageSetupWizard = createIMessageSetupWizardProxy(async () => (await loadIMessageChannelRuntime$1()).imessageSetupWizard);
212
213
  const imessageConfigAdapter = createScopedChannelConfigAdapter({
@@ -308,7 +309,7 @@ async function probeIMessageStatusAccount(params) {
308
309
  }
309
310
  //#endregion
310
311
  //#region extensions/imessage/src/channel.ts
311
- const loadIMessageChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-C2lcFXWn.js"));
312
+ const loadIMessageChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-BGwNkU9Z.js"));
312
313
  function toIMessageMessageSendResult(result, kind, replyToId) {
313
314
  const receipt = result.receipt ?? createMessageReceiptFromOutboundResults({
314
315
  results: result.messageId ? [{
@@ -506,9 +507,12 @@ const imessagePlugin = createChatChannelPlugin({
506
507
  if (!to) return null;
507
508
  const chatType = inferIMessageTargetChatType(to);
508
509
  if (!chatType) return null;
510
+ const parsed = parseIMessageTarget(to);
511
+ const display = parsed.kind === "handle" && !isCanonicalIMessageDirectHandle(parsed.to, normalizeIMessageHandle(parsed.to)) ? parsed.to.trim() : void 0;
509
512
  return {
510
513
  to,
511
514
  kind: chatType === "direct" ? "user" : "group",
515
+ ...display ? { display } : {},
512
516
  source: "normalized"
513
517
  };
514
518
  }
@@ -1,2 +1,2 @@
1
- import { t as imessagePlugin } from "./channel-B6qtBfCj.js";
1
+ import { t as imessagePlugin } from "./channel-BwKxE8Ge.js";
2
2
  export { imessagePlugin };
@@ -2,7 +2,7 @@ import { l as resolveIMessageRemoteHost, o as resolveIMessageAccount, r as listE
2
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-Duro87b4.js";
3
3
  import { t as IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-send-deps-B-QEsLSM.js";
4
4
  import { t as sendMessageIMessage } from "./send-CIHiLtcY.js";
5
- import { t as monitorIMessageProvider } from "./monitor-Dj3TAimI.js";
5
+ import { t as monitorIMessageProvider } from "./monitor-xaD-9h0b.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";
@@ -585,7 +585,7 @@ function parseIMessageNotification(raw) {
585
585
  const maybeMessage = raw.message;
586
586
  if (!isRecord(maybeMessage)) return null;
587
587
  const message = maybeMessage;
588
- if (!isOptionalNumber(message.id) || !isOptionalString(message.guid) || !isOptionalNumber(message.chat_id) || !isOptionalString(message.sender) || !isOptionalString(message.destination_caller_id) || !isOptionalBoolean(message.is_from_me) || !isOptionalString(message.text) || !isOptionalString(message.thread_originator_guid) || !isOptionalString(message.reply_to_guid) || !isOptionalString(message.reply_to_text) || !isOptionalString(message.reply_to_sender) || !isOptionalString(message.created_at) || !isOptionalBoolean(message.is_reaction) || !isOptionalBoolean(message.is_tapback) || !isOptionalString(message.associated_message_guid) || !isOptionalNumber(message.associated_message_type) || !isOptionalString(message.reaction_type) || !isOptionalString(message.reaction_emoji) || !isOptionalBoolean(message.is_reaction_add) || !isOptionalString(message.reacted_to_guid) || !isOptionalAttachments(message.attachments) || !isOptionalString(message.chat_identifier) || !isOptionalString(message.chat_guid) || !isOptionalString(message.chat_name) || !isOptionalStringArray(message.participants) || !isOptionalBoolean(message.is_group)) return null;
588
+ if (!isOptionalNumber(message.id) || !isOptionalString(message.guid) || !isOptionalNumber(message.chat_id) || !isOptionalString(message.sender) || !isOptionalString(message.sender_name) || !isOptionalString(message.destination_caller_id) || !isOptionalBoolean(message.is_from_me) || !isOptionalString(message.text) || !isOptionalString(message.thread_originator_guid) || !isOptionalString(message.reply_to_guid) || !isOptionalString(message.reply_to_text) || !isOptionalString(message.reply_to_sender) || !isOptionalString(message.created_at) || !isOptionalBoolean(message.is_reaction) || !isOptionalBoolean(message.is_tapback) || !isOptionalString(message.associated_message_guid) || !isOptionalNumber(message.associated_message_type) || !isOptionalString(message.reaction_type) || !isOptionalString(message.reaction_emoji) || !isOptionalBoolean(message.is_reaction_add) || !isOptionalString(message.reacted_to_guid) || !isOptionalAttachments(message.attachments) || !isOptionalString(message.chat_identifier) || !isOptionalString(message.chat_guid) || !isOptionalString(message.chat_name) || !isOptionalStringArray(message.participants) || !isOptionalBoolean(message.is_group)) return null;
589
589
  return {
590
590
  ...message,
591
591
  text: typeof message.text === "string" ? stripImessageLengthPrefixedUtf8Text(message.text) : message.text,
@@ -1934,12 +1934,15 @@ async function buildIMessageInboundContext(params) {
1934
1934
  isFromMe: false
1935
1935
  }) : null)?.shortId || void 0;
1936
1936
  const replySuffix = decision.replyContext ? `\n\n[Replying to ${decision.replyContext.sender ?? "unknown sender"}${decision.replyContext.id ? ` id:${decision.replyContext.id}` : ""}]\n${decision.replyContext.body}\n[/Replying]` : "";
1937
+ const senderDisplayName = normalizeNonEmpty(params.message.sender_name ?? "");
1938
+ const directConversationName = senderDisplayName ?? normalizeNonEmpty(params.message.chat_name ?? "") ?? decision.senderNormalized;
1939
+ const conversationName = decision.isGroup ? normalizeNonEmpty(params.message.chat_name ?? "") ?? void 0 : directConversationName;
1937
1940
  const fromLabel = formatInboundFromLabel({
1938
1941
  isGroup: decision.isGroup,
1939
1942
  groupLabel: params.message.chat_name ?? void 0,
1940
1943
  groupId: chatId !== void 0 ? String(chatId) : "unknown",
1941
1944
  groupFallback: "Group",
1942
- directLabel: decision.senderNormalized,
1945
+ directLabel: directConversationName,
1943
1946
  directId: decision.sender
1944
1947
  });
1945
1948
  let combinedBody = formatInboundEnvelope({
@@ -1949,7 +1952,7 @@ async function buildIMessageInboundContext(params) {
1949
1952
  body: `${decision.agentBodyText ?? decision.bodyText}${replySuffix}`,
1950
1953
  chatType: decision.isGroup ? "group" : "direct",
1951
1954
  sender: {
1952
- name: decision.senderNormalized,
1955
+ name: senderDisplayName ?? decision.senderNormalized,
1953
1956
  id: decision.sender
1954
1957
  },
1955
1958
  previousTimestamp: params.previousTimestamp,
@@ -2001,7 +2004,7 @@ async function buildIMessageInboundContext(params) {
2001
2004
  from: imessageFrom,
2002
2005
  sender: {
2003
2006
  id: decision.sender,
2004
- name: decision.senderNormalized,
2007
+ name: senderDisplayName ?? decision.senderNormalized,
2005
2008
  isSelf: params.message.is_from_me === true
2006
2009
  },
2007
2010
  conversation: {
@@ -2011,7 +2014,7 @@ async function buildIMessageInboundContext(params) {
2011
2014
  kind: decision.isGroup ? "group" : "direct",
2012
2015
  id: decision.isGroup ? String(chatId) : decision.senderNormalized
2013
2016
  } },
2014
- label: fromLabel
2017
+ label: conversationName
2015
2018
  },
2016
2019
  route: {
2017
2020
  agentId: decision.route.agentId,
@@ -3,7 +3,7 @@ import { c as normalizeIMessageMessagingTarget, d as imessageMessageActions, f a
3
3
  import { r as setIMessageRuntime } from "./runtime-Cza4CY5T.js";
4
4
  import { n as IMessageConfigSchema } from "./config-schema-CCbTcJEV.js";
5
5
  import { t as sendMessageIMessage } from "./send-CIHiLtcY.js";
6
- import { t as monitorIMessageProvider } from "./monitor-Dj3TAimI.js";
6
+ import { t as monitorIMessageProvider } from "./monitor-xaD-9h0b.js";
7
7
  import { formatTrimmedAllowFromEntries } from "openclaw/plugin-sdk/channel-config-helpers";
8
8
  import { PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk/channel-status";
9
9
  import { buildComputedAccountStatusSnapshot, collectStatusIssuesFromLastError } from "openclaw/plugin-sdk/status-helpers";
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "id": "imessage",
3
+ "categories": [
4
+ "channels"
5
+ ],
3
6
  "name": "iMessage",
4
7
  "description": "OpenClaw iMessage channel plugin using imsg on a signed-in Mac.",
5
8
  "doctorContract": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/imessage",
3
- "version": "2026.9.3",
3
+ "version": "2026.9.4",
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.9.3"
15
+ "openclaw": ">=2026.9.4"
16
16
  },
17
17
  "peerDependenciesMeta": {
18
18
  "openclaw": {
@@ -92,10 +92,10 @@
92
92
  "allowInvalidConfigRecovery": true
93
93
  },
94
94
  "compat": {
95
- "pluginApi": ">=2026.9.3"
95
+ "pluginApi": ">=2026.9.4"
96
96
  },
97
97
  "build": {
98
- "openclawVersion": "2026.9.3",
98
+ "openclawVersion": "2026.9.4",
99
99
  "bundledDist": false
100
100
  },
101
101
  "release": {