@openclaw/imessage 2026.10.10-beta.5 → 2026.11.5-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.
- package/dist/.setup/{accounts-DacCvDBt.mjs → accounts-C1Ypv3Wn.mjs} +9 -13
- package/dist/.setup/{actions-762Azi-J.mjs → actions-qOuKy8To.mjs} +364 -116
- package/dist/.setup/{actions.runtime-DHiRiPHe.mjs → actions.runtime-Ccg9CARL.mjs} +12 -61
- package/dist/.setup/{api-Deyo8NDs.mjs → api-BXXuQQCS.mjs} +8 -9
- package/dist/.setup/{api-BFGXDHiC.mjs → api-DTbxSOPc.mjs} +9 -9
- package/dist/.setup/{approval-handler.runtime-fsSBf2jf.mjs → approval-handler.runtime-B6vrFfZx.mjs} +113 -133
- package/dist/.setup/{approval-reactions-CoAkCiwf.mjs → approval-reactions-DBBsqbRC.mjs} +156 -79
- package/dist/.setup/{channel-C61YdcZR.mjs → channel-CLaN4mQn.mjs} +151 -137
- package/dist/.setup/{channel.runtime-B5jle0g3.mjs → channel.runtime-XJGx1MIH.mjs} +236 -425
- package/dist/.setup/chat-context-fTfJVqAi.mjs +77 -0
- package/dist/.setup/chat-lookup-xtPsOBkl.mjs +50 -0
- package/dist/.setup/client-D_BaG8sC.mjs +367 -0
- package/dist/.setup/{config-schema-DXwa_3V5.mjs → config-schema-BjkQV5P5.mjs} +1 -4
- package/dist/.setup/{conversation-bindings-DR-dbHjs.mjs → conversation-bindings-8DjxoIYU.mjs} +10 -8
- package/dist/.setup/{media-contract-BwWs5PM7.mjs → media-contract-BErFBKV9.mjs} +2 -3
- package/dist/.setup/{message-tool-api-B5NfPnFL.mjs → message-tool-api-DtZ1wKbT.mjs} +6 -12
- package/dist/.setup/{outbound-send-deps-B-QEsLSM.mjs → outbound-send-deps-_da8jqeo.mjs} +1 -2
- package/dist/.setup/{remote-file-B94a787O.mjs → remote-file-DpK3GQFD.mjs} +12 -30
- package/dist/.setup/{rolldown-runtime-BBjsoOtd.mjs → rolldown-runtime-782esTHO.mjs} +1 -2
- package/dist/.setup/{sanitize-outbound-BtEY324R.mjs → sanitize-outbound-Dhjhz0a-.mjs} +25 -31
- package/dist/.setup/{send-BvxKNWzF.mjs → send-DhEW0gfe.mjs} +155 -236
- package/dist/.setup/{setup-core-BHyLkAEJ.mjs → setup-core-B1_P_t4T.mjs} +3 -4
- package/dist/.setup/{setup-surface-DPqiLGy0.mjs → setup-surface-CD28mXWK.mjs} +13 -29
- package/dist/.setup/{targets-B4oU7n-v.mjs → targets-C7CIWJ0k.mjs} +15 -9
- package/dist/.source-module-urls/929c518fa2986b0f85f66bceefead22868db0ab452dee914dc6a2bb86b2e60ad.json +1 -1
- package/dist/api.js +9 -9
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/contract-api.js +1 -1
- package/dist/doctor-contract-api.js +7 -13
- package/dist/index.js +1 -2
- package/dist/media-contract-api.js +1 -1
- package/dist/message-tool-api.js +1 -1
- package/dist/runtime-api.js +1 -3
- package/dist/secret-contract-api.js +1 -2
- package/dist/session-binding-contract-api.js +1 -1
- package/dist/setup-entry.js +2 -3
- package/dist/src/chat-db.worker.js +2 -3
- package/node_modules/typebox/build/format/duration.d.mts +2 -2
- package/node_modules/typebox/build/format/duration.mjs +2 -2
- package/node_modules/typebox/build/format/idn_email.d.mts +1 -0
- package/node_modules/typebox/build/format/idn_email.mjs +1 -0
- package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -1
- package/node_modules/typebox/build/format/idn_hostname.mjs +1 -1
- package/node_modules/typebox/build/format/ipv4.d.mts +2 -2
- package/node_modules/typebox/build/format/ipv4.mjs +2 -2
- package/node_modules/typebox/build/format/ipv6.d.mts +1 -1
- package/node_modules/typebox/build/format/ipv6.mjs +1 -1
- package/node_modules/typebox/build/format/relative_json_pointer.d.mts +2 -2
- package/node_modules/typebox/build/format/relative_json_pointer.mjs +2 -2
- package/node_modules/typebox/build/schema/build.mjs +1 -0
- package/node_modules/typebox/build/schema/engine/_unique.d.mts +4 -2
- package/node_modules/typebox/build/schema/engine/_unique.mjs +7 -3
- package/node_modules/typebox/build/schema/engine/additionalItems.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +0 -3
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +15 -17
- package/node_modules/typebox/build/schema/engine/contains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/index.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/index.mjs +1 -0
- package/node_modules/typebox/build/schema/engine/items.mjs +7 -4
- package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/minContains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/oneOf.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +2 -2
- package/node_modules/typebox/build/system/hashing/hash.mjs +63 -34
- package/node_modules/typebox/build/system/locale/en_US.mjs +2 -1
- package/node_modules/typebox/build/system/memory/assign.d.mts +2 -8
- package/node_modules/typebox/build/system/memory/assign.mjs +13 -6
- package/node_modules/typebox/build/system/memory/clone.d.mts +4 -5
- package/node_modules/typebox/build/system/memory/clone.mjs +8 -96
- package/node_modules/typebox/build/system/memory/create.d.mts +1 -5
- package/node_modules/typebox/build/system/memory/create.mjs +18 -13
- package/node_modules/typebox/build/system/memory/deep.d.mts +2 -0
- package/node_modules/typebox/build/system/memory/deep.mjs +108 -0
- package/node_modules/typebox/build/system/memory/discard.d.mts +1 -1
- package/node_modules/typebox/build/system/memory/discard.mjs +9 -8
- package/node_modules/typebox/build/system/memory/finalize.d.mts +4 -0
- package/node_modules/typebox/build/system/memory/finalize.mjs +30 -0
- package/node_modules/typebox/build/system/memory/keys.d.mts +2 -0
- package/node_modules/typebox/build/system/memory/keys.mjs +8 -0
- package/node_modules/typebox/build/system/memory/update.d.mts +1 -4
- package/node_modules/typebox/build/system/memory/update.mjs +43 -16
- package/node_modules/typebox/build/type/engine/call/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/call/index.mjs +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +2 -24
- package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +2 -29
- package/node_modules/typebox/build/type/engine/evaluate/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/index.mjs +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +5 -1
- package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +6 -1
- package/node_modules/typebox/build/type/engine/evaluate/property.d.mts +30 -0
- package/node_modules/typebox/build/type/engine/evaluate/property.mjs +29 -0
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/object/from_intersect.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/object/from_intersect.mjs +2 -2
- package/node_modules/typebox/build/type/engine/object/from_union.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/object/from_union.mjs +2 -2
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/this/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/this/index.mjs +1 -0
- package/node_modules/typebox/build/value/clone/clone.d.mts +4 -3
- package/node_modules/typebox/build/value/clone/clone.mjs +5 -7
- package/node_modules/typebox/build/value/repair/from_cyclic.d.mts +2 -0
- package/node_modules/typebox/build/value/repair/from_cyclic.mjs +6 -0
- package/node_modules/typebox/build/value/shared/union_priority_sort.mjs +25 -14
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +1 -1
- package/node_modules/zod/package.json +1 -1
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +6 -0
- package/node_modules/zod/src/v4/core/compile.ts +9 -0
- package/node_modules/zod/src/v4/core/schemas.ts +35 -1
- package/node_modules/zod/src/v4/core/util.ts +13 -0
- package/node_modules/zod/src/v4/core/versions.ts +1 -1
- package/node_modules/zod/v4/core/compile.cjs +8 -0
- package/node_modules/zod/v4/core/compile.js +8 -0
- package/node_modules/zod/v4/core/schemas.cjs +30 -0
- package/node_modules/zod/v4/core/schemas.d.cts +3 -1
- package/node_modules/zod/v4/core/schemas.d.ts +3 -1
- package/node_modules/zod/v4/core/schemas.js +30 -0
- package/node_modules/zod/v4/core/util.cjs +15 -0
- package/node_modules/zod/v4/core/util.d.cts +2 -0
- package/node_modules/zod/v4/core/util.d.ts +2 -0
- package/node_modules/zod/v4/core/util.js +14 -0
- package/node_modules/zod/v4/core/versions.cjs +1 -1
- package/node_modules/zod/v4/core/versions.js +1 -1
- package/openclaw.plugin.json +0 -30
- package/package.json +6 -6
- package/dist/.setup/client-CcROCvRq.mjs +0 -746
- package/dist/.setup/question-reactions-BD06B1Lx.mjs +0 -68
- package/dist/.setup/reaction-context-Q26DYzQH.mjs +0 -106
- package/dist/.setup/runtime-Cza4CY5T.mjs +0 -8
- package/node_modules/typebox/build/system/memory/freeze.d.mts +0 -4
- package/node_modules/typebox/build/system/memory/freeze.mjs +0 -6
|
@@ -1,66 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { n as
|
|
4
|
-
import {
|
|
1
|
+
import { i as runIMessageCliJsonCommand, n as createIMessageRpcClient } from "./client-D_BaG8sC.mjs";
|
|
2
|
+
import { s as resolveIMessageMessageId } from "./actions-qOuKy8To.mjs";
|
|
3
|
+
import { n as sanitizeIMessageFinalOutboundText } from "./sanitize-outbound-Dhjhz0a-.mjs";
|
|
4
|
+
import { resolveIMessageChat } from "./chat-lookup-xtPsOBkl.mjs";
|
|
5
|
+
import { n as authorizeIMessageResourceReference, t as withIMessageRemoteFile } from "./remote-file-DpK3GQFD.mjs";
|
|
5
6
|
import { basename, parse, win32 } from "node:path";
|
|
6
|
-
import { parseStrictInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
7
7
|
import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
8
8
|
import { captureChannelReadAuthority, captureEffectAuthority } from "openclaw/plugin-sdk/fetch-runtime";
|
|
9
9
|
import { sanitizeUntrustedFileName } from "openclaw/plugin-sdk/security-runtime";
|
|
10
10
|
import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
|
|
11
|
-
|
|
12
|
-
const CHAT_LIST_CACHE_TTL_MS = 3e4;
|
|
13
|
-
const chatListCache = /* @__PURE__ */ new Map();
|
|
14
|
-
function numberFromUnknown(value) {
|
|
15
|
-
return typeof value === "number" && Number.isFinite(value) ? value : parseStrictInteger(value);
|
|
16
|
-
}
|
|
17
|
-
function findChatGuid(chats, target) {
|
|
18
|
-
if (target.kind === "chat_id") {
|
|
19
|
-
for (const chat of chats) {
|
|
20
|
-
const id = numberFromUnknown(chat.id);
|
|
21
|
-
const guid = normalizeOptionalString(chat.guid);
|
|
22
|
-
if (id === target.chatId && guid) return guid;
|
|
23
|
-
}
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
const wanted = normalizeDirectChatIdentifier(target.chatIdentifier);
|
|
27
|
-
for (const chat of chats) {
|
|
28
|
-
const identifier = normalizeOptionalString(chat.identifier);
|
|
29
|
-
const guid = normalizeOptionalString(chat.guid);
|
|
30
|
-
if (guid && (identifier === target.chatIdentifier || guid === target.chatIdentifier || identifier && normalizeDirectChatIdentifier(identifier) === wanted || normalizeDirectChatIdentifier(guid) === wanted)) return guid;
|
|
31
|
-
}
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
async function resolveIMessageActionChatGuid(params) {
|
|
35
|
-
const { cliPath, dbPath, remoteHost } = params.options;
|
|
36
|
-
const key = `${cliPath}\0${dbPath ?? ""}\0${remoteHost ?? ""}`;
|
|
37
|
-
const cached = chatListCache.get(key);
|
|
38
|
-
if (cached && cached.expiresAt > Date.now()) return findChatGuid(cached.list, params.target);
|
|
39
|
-
chatListCache.delete(key);
|
|
40
|
-
const client = await createIMessageRpcClient(params.options);
|
|
41
|
-
try {
|
|
42
|
-
const result = await client.request("chats.list", { limit: 1e3 }, { timeoutMs: params.options.timeoutMs });
|
|
43
|
-
const list = isRecord(result) && Array.isArray(result.chats) ? result.chats.filter(isRecord) : [];
|
|
44
|
-
chatListCache.set(key, {
|
|
45
|
-
list,
|
|
46
|
-
expiresAt: Date.now() + CHAT_LIST_CACHE_TTL_MS
|
|
47
|
-
});
|
|
48
|
-
return findChatGuid(list, params.target);
|
|
49
|
-
} finally {
|
|
50
|
-
await client.stop();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//#endregion
|
|
54
|
-
//#region extensions/imessage/src/actions-transport.ts
|
|
55
|
-
var IMessageRemoteUnsupportedError = class extends Error {
|
|
56
|
-
constructor(message) {
|
|
57
|
-
super(message);
|
|
58
|
-
this.code = "IMESSAGE_REMOTE_UNSUPPORTED";
|
|
59
|
-
this.name = "IMessageRemoteUnsupportedError";
|
|
60
|
-
}
|
|
61
|
-
};
|
|
11
|
+
// extensions/imessage/src/actions-transport.ts
|
|
62
12
|
function throwIMessageRemoteUnsupported(message) {
|
|
63
|
-
throw new
|
|
13
|
+
throw Object.assign(/* @__PURE__ */ new Error(`iMessage Remote Mac limitation: ${message}`), {
|
|
14
|
+
code: "IMESSAGE_REMOTE_UNSUPPORTED",
|
|
15
|
+
name: "IMessageRemoteUnsupportedError"
|
|
16
|
+
});
|
|
64
17
|
}
|
|
65
18
|
async function runIMessageAction(options, method, params, args) {
|
|
66
19
|
if (!options.remoteHost) {
|
|
@@ -86,8 +39,7 @@ async function runIMessageAction(options, method, params, args) {
|
|
|
86
39
|
await client.stop();
|
|
87
40
|
}
|
|
88
41
|
}
|
|
89
|
-
|
|
90
|
-
//#region extensions/imessage/src/actions.runtime.ts
|
|
42
|
+
// extensions/imessage/src/actions.runtime.ts
|
|
91
43
|
/**
|
|
92
44
|
* Messages mints the option UUIDs, so the send response is the only place they
|
|
93
45
|
* appear before someone votes. Approval bindings key decisions off these ids
|
|
@@ -167,7 +119,7 @@ function participantAction(method, command) {
|
|
|
167
119
|
const imessageActionsRuntime = {
|
|
168
120
|
resolveIMessageMessageId,
|
|
169
121
|
authorizeMessageReference: authorizeIMessageResourceReference,
|
|
170
|
-
resolveChatGuidForTarget:
|
|
122
|
+
resolveChatGuidForTarget: async (params) => (await resolveIMessageChat(params))?.guid ?? null,
|
|
171
123
|
async sendReaction(params) {
|
|
172
124
|
await runMessageAction(params, "tapback", "tapback", {
|
|
173
125
|
reaction: params.reaction,
|
|
@@ -330,5 +282,4 @@ const imessageActionsRuntime = {
|
|
|
330
282
|
});
|
|
331
283
|
}
|
|
332
284
|
};
|
|
333
|
-
//#endregion
|
|
334
285
|
export { imessageActionsRuntime };
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import "./targets-
|
|
2
|
-
import "./accounts-
|
|
3
|
-
import "./message-tool-api-
|
|
4
|
-
import "./actions-
|
|
5
|
-
import { s as imessageSetupContract } from "./setup-core-
|
|
6
|
-
import { n as createIMessagePluginBase, r as imessageSetupWizard } from "./channel-
|
|
7
|
-
import "./conversation-bindings-
|
|
1
|
+
import "./targets-C7CIWJ0k.mjs";
|
|
2
|
+
import "./accounts-C1Ypv3Wn.mjs";
|
|
3
|
+
import "./message-tool-api-DtZ1wKbT.mjs";
|
|
4
|
+
import "./actions-qOuKy8To.mjs";
|
|
5
|
+
import { s as imessageSetupContract } from "./setup-core-B1_P_t4T.mjs";
|
|
6
|
+
import { n as createIMessagePluginBase, r as imessageSetupWizard } from "./channel-CLaN4mQn.mjs";
|
|
7
|
+
import "./conversation-bindings-8DjxoIYU.mjs";
|
|
8
8
|
import { createAllowedChatSenderMatcher as createAllowedChatSenderMatcher$1, parseChatAllowTargetPrefixes, parseChatTargetPrefixesOrThrow as parseChatTargetPrefixesOrThrow$1, resolveServicePrefixedAllowTarget, resolveServicePrefixedChatTarget as resolveServicePrefixedChatTarget$1, resolveServicePrefixedOrChatAllowTarget as resolveServicePrefixedOrChatAllowTarget$1, resolveServicePrefixedTarget } from "openclaw/plugin-sdk/channel-targets";
|
|
9
|
-
|
|
9
|
+
// extensions/imessage/src/channel.setup.ts
|
|
10
10
|
const imessageSetupPlugin = createIMessagePluginBase({
|
|
11
11
|
setupWizard: imessageSetupWizard,
|
|
12
12
|
setupContract: imessageSetupContract
|
|
13
13
|
});
|
|
14
|
-
//#endregion
|
|
15
14
|
export { resolveServicePrefixedChatTarget$1 as a, imessageSetupPlugin as c, resolveServicePrefixedAllowTarget as i, parseChatAllowTargetPrefixes as n, resolveServicePrefixedOrChatAllowTarget$1 as o, parseChatTargetPrefixesOrThrow$1 as r, resolveServicePrefixedTarget as s, createAllowedChatSenderMatcher$1 as t };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount, r as listEnabledIMessageAccounts } from "./accounts-
|
|
3
|
-
import { o as IMESSAGE_ACTIONS, s as IMESSAGE_ACTION_NAMES } from "./message-tool-api-
|
|
4
|
-
import {
|
|
5
|
-
import { n as probeIMessage } from "./actions-
|
|
6
|
-
import { c as matchIMessageAcpConversation, i as resolveIMessageGroupRequireMention, l as normalizeIMessageAcpConversationId, o as resolveIMessageGroupToolPolicy, s as resolveIMessageInboundConversationId, t as imessagePlugin, u as resolveIMessageConversationIdFromTarget } from "./channel-
|
|
7
|
-
import { n as createIMessageConversationBindingManagerV2, t as createIMessageConversationBindingManager } from "./conversation-bindings-
|
|
8
|
-
import { a as resolveServicePrefixedChatTarget, c as imessageSetupPlugin, i as resolveServicePrefixedAllowTarget, n as parseChatAllowTargetPrefixes, o as resolveServicePrefixedOrChatAllowTarget, r as parseChatTargetPrefixesOrThrow, s as resolveServicePrefixedTarget, t as createAllowedChatSenderMatcher } from "./api-
|
|
9
|
-
import { t as IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-send-deps-
|
|
1
|
+
import { a as isAllowedIMessageSender, c as parseIMessageAllowTarget, d as looksLikeIMessageTargetId, f as normalizeIMessageMessagingTarget, l as parseIMessageTarget, o as looksLikeIMessageExplicitTargetId, r as inferIMessageTargetChatType, s as normalizeIMessageHandle, t as formatIMessageChatTarget } from "./targets-C7CIWJ0k.mjs";
|
|
2
|
+
import { a as resolveDefaultIMessageAccountId, i as listIMessageAccountIds, o as resolveIMessageAccount, r as listEnabledIMessageAccounts } from "./accounts-C1Ypv3Wn.mjs";
|
|
3
|
+
import { o as IMESSAGE_ACTIONS, s as IMESSAGE_ACTION_NAMES } from "./message-tool-api-DtZ1wKbT.mjs";
|
|
4
|
+
import { a as DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS } from "./client-D_BaG8sC.mjs";
|
|
5
|
+
import { n as probeIMessage } from "./actions-qOuKy8To.mjs";
|
|
6
|
+
import { c as matchIMessageAcpConversation, i as resolveIMessageGroupRequireMention, l as normalizeIMessageAcpConversationId, o as resolveIMessageGroupToolPolicy, s as resolveIMessageInboundConversationId, t as imessagePlugin, u as resolveIMessageConversationIdFromTarget } from "./channel-CLaN4mQn.mjs";
|
|
7
|
+
import { n as createIMessageConversationBindingManagerV2, t as createIMessageConversationBindingManager } from "./conversation-bindings-8DjxoIYU.mjs";
|
|
8
|
+
import { a as resolveServicePrefixedChatTarget, c as imessageSetupPlugin, i as resolveServicePrefixedAllowTarget, n as parseChatAllowTargetPrefixes, o as resolveServicePrefixedOrChatAllowTarget, r as parseChatTargetPrefixesOrThrow, s as resolveServicePrefixedTarget, t as createAllowedChatSenderMatcher } from "./api-BXXuQQCS.mjs";
|
|
9
|
+
import { t as IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-send-deps-_da8jqeo.mjs";
|
|
10
10
|
export { DEFAULT_IMESSAGE_PROBE_TIMEOUT_MS, IMESSAGE_ACTIONS, IMESSAGE_ACTION_NAMES, IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS, createAllowedChatSenderMatcher, createIMessageConversationBindingManager, createIMessageConversationBindingManagerV2, formatIMessageChatTarget, imessagePlugin, imessageSetupPlugin, inferIMessageTargetChatType, isAllowedIMessageSender, listEnabledIMessageAccounts, listIMessageAccountIds, looksLikeIMessageExplicitTargetId, looksLikeIMessageTargetId, matchIMessageAcpConversation, normalizeIMessageAcpConversationId, normalizeIMessageHandle, normalizeIMessageMessagingTarget, parseChatAllowTargetPrefixes, parseChatTargetPrefixesOrThrow, parseIMessageAllowTarget, parseIMessageTarget, probeIMessage, resolveDefaultIMessageAccountId, resolveIMessageAccount, resolveIMessageConversationIdFromTarget, resolveIMessageGroupRequireMention, resolveIMessageGroupToolPolicy, resolveIMessageInboundConversationId, resolveServicePrefixedAllowTarget, resolveServicePrefixedChatTarget, resolveServicePrefixedOrChatAllowTarget, resolveServicePrefixedTarget };
|
package/dist/.setup/{approval-handler.runtime-fsSBf2jf.mjs → approval-handler.runtime-B6vrFfZx.mjs}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { o as resolveIMessageAccount } from "./accounts-
|
|
3
|
-
import { n as getCachedIMessagePrivateApiStatus } from "./message-tool-api-
|
|
4
|
-
import {
|
|
5
|
-
import { d as getIMessageApprovalApprovers } from "./channel-
|
|
6
|
-
import { i as extractMarkdownFormatRuns } from "./sanitize-outbound-
|
|
7
|
-
import {
|
|
8
|
-
import { a as iMessageApprovalPollTargets, i as buildApprovalPollOptions, o as mapSentPollOptionsToDecisions, t as sendMessageIMessage } from "./send-
|
|
1
|
+
import { f as normalizeIMessageMessagingTarget, l as parseIMessageTarget } from "./targets-C7CIWJ0k.mjs";
|
|
2
|
+
import { o as resolveIMessageAccount } from "./accounts-C1Ypv3Wn.mjs";
|
|
3
|
+
import { n as getCachedIMessagePrivateApiStatus } from "./message-tool-api-DtZ1wKbT.mjs";
|
|
4
|
+
import { b as normalizeIMessageMessageId } from "./actions-qOuKy8To.mjs";
|
|
5
|
+
import { d as getIMessageApprovalApprovers } from "./channel-CLaN4mQn.mjs";
|
|
6
|
+
import { i as extractMarkdownFormatRuns } from "./sanitize-outbound-Dhjhz0a-.mjs";
|
|
7
|
+
import { c as buildIMessageApprovalConversationKeyForTarget, i as unregisterIMessageApprovalReactionTarget, r as registerIMessageApprovalReactionTarget } from "./approval-reactions-DBBsqbRC.mjs";
|
|
8
|
+
import { a as iMessageApprovalPollTargets, i as buildApprovalPollOptions, o as mapSentPollOptionsToDecisions, t as sendMessageIMessage } from "./send-DhEW0gfe.mjs";
|
|
9
9
|
import { createLazyRuntimeNamedExport } from "openclaw/plugin-sdk/lazy-runtime";
|
|
10
10
|
import { createActionGate } from "openclaw/plugin-sdk/channel-actions";
|
|
11
11
|
import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
|
|
@@ -13,9 +13,9 @@ import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approva
|
|
|
13
13
|
import { buildApprovalNativeControlsPromptText, buildApprovalReactionPendingContent } from "openclaw/plugin-sdk/approval-reaction-runtime";
|
|
14
14
|
import { setTimeout } from "node:timers/promises";
|
|
15
15
|
import { buildChannelApprovalExpiredText, buildChannelApprovalResolvedText, createChannelApprovalNativeRuntimeAdapterAsync, resolvePreparedApprovalAccountId } from "openclaw/plugin-sdk/approval-handler-runtime";
|
|
16
|
-
|
|
16
|
+
// extensions/imessage/src/approval-handler.runtime.ts
|
|
17
17
|
const log = createSubsystemLogger("imessage/approvals");
|
|
18
|
-
const loadIMessageActionsRuntime = createLazyRuntimeNamedExport(() => import("./actions.runtime-
|
|
18
|
+
const loadIMessageActionsRuntime = createLazyRuntimeNamedExport(() => import("./actions.runtime-Ccg9CARL.mjs"), "imessageActionsRuntime");
|
|
19
19
|
const DEFAULT_PROBE_TIMEOUT_MS = 5e3;
|
|
20
20
|
const APPROVAL_POLL_ORDERING_DELAY_MS = 1100;
|
|
21
21
|
function classifyIMessageApprovalTargetTransport(params) {
|
|
@@ -33,113 +33,6 @@ function classifyIMessageApprovalTargetTransport(params) {
|
|
|
33
33
|
if (/^SMS;/i.test(conversationId)) return "sms";
|
|
34
34
|
return "unknown";
|
|
35
35
|
}
|
|
36
|
-
function canIMessageApprovalUsePoll(params) {
|
|
37
|
-
if (params.plannedTarget.surface !== "origin" && params.plannedTarget.surface !== "approver-dm") return false;
|
|
38
|
-
if (buildApprovalPollOptions({ allowedDecisions: params.allowedDecisions }).length < 2) return false;
|
|
39
|
-
try {
|
|
40
|
-
const account = resolveIMessageAccount({
|
|
41
|
-
cfg: params.cfg,
|
|
42
|
-
accountId: params.target.accountId
|
|
43
|
-
});
|
|
44
|
-
if (classifyIMessageApprovalTargetTransport({
|
|
45
|
-
cfg: params.cfg,
|
|
46
|
-
target: params.target
|
|
47
|
-
}) === "sms") return false;
|
|
48
|
-
if (!createActionGate(account.config.actions)("polls") || getIMessageApprovalApprovers({
|
|
49
|
-
cfg: params.cfg,
|
|
50
|
-
accountId: account.accountId
|
|
51
|
-
}).length === 0) return false;
|
|
52
|
-
const cliPath = account.config.cliPath?.trim() || "imsg";
|
|
53
|
-
const status = getCachedIMessagePrivateApiStatus(cliPath);
|
|
54
|
-
return status?.available === true && status?.selectors?.pollPayloadMessage === true && status.cliCapabilities?.pollSendSupportsNoComment === true;
|
|
55
|
-
} catch {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async function deliverIMessageApprovalPoll(params) {
|
|
60
|
-
const options = buildApprovalPollOptions({ allowedDecisions: params.allowedDecisions });
|
|
61
|
-
try {
|
|
62
|
-
const account = resolveIMessageAccount({
|
|
63
|
-
cfg: params.cfg,
|
|
64
|
-
accountId: params.target.accountId
|
|
65
|
-
});
|
|
66
|
-
const cliOptions = {
|
|
67
|
-
cliPath: account.config.cliPath?.trim() || "imsg",
|
|
68
|
-
dbPath: account.config.dbPath?.trim() || void 0,
|
|
69
|
-
timeoutMs: account.config.probeTimeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS
|
|
70
|
-
};
|
|
71
|
-
const target = parseIMessageTarget(params.target.to);
|
|
72
|
-
let chatGuid;
|
|
73
|
-
if (target.kind === "chat_guid") chatGuid = target.chatGuid;
|
|
74
|
-
else chatGuid = await (await loadIMessageActionsRuntime()).resolveChatGuidForTarget({
|
|
75
|
-
target: target.kind === "handle" ? {
|
|
76
|
-
kind: "chat_identifier",
|
|
77
|
-
chatIdentifier: `${target.service === "sms" ? "SMS" : "iMessage"};-;${target.to}`
|
|
78
|
-
} : target,
|
|
79
|
-
options: cliOptions,
|
|
80
|
-
conversationReadOrigin: "direct-operator"
|
|
81
|
-
});
|
|
82
|
-
if (!chatGuid || /^SMS;/i.test(chatGuid)) return null;
|
|
83
|
-
await setTimeout(APPROVAL_POLL_ORDERING_DELAY_MS);
|
|
84
|
-
const sent = await (await loadIMessageActionsRuntime()).sendPoll({
|
|
85
|
-
chatGuid,
|
|
86
|
-
question: extractMarkdownFormatRuns(params.question).text,
|
|
87
|
-
choices: options.map((option) => option.text),
|
|
88
|
-
suppressComment: true,
|
|
89
|
-
options: cliOptions
|
|
90
|
-
});
|
|
91
|
-
const pollGuid = normalizeIMessageMessageId(sent.messageId);
|
|
92
|
-
const optionDecisions = mapSentPollOptionsToDecisions({
|
|
93
|
-
requested: options,
|
|
94
|
-
sent: sent.pollOptions
|
|
95
|
-
});
|
|
96
|
-
if (optionDecisions.length !== options.length) {
|
|
97
|
-
log.error("imessage approvals: imsg poll response did not return a complete option mapping");
|
|
98
|
-
await iMessageApprovalPollTargets.registerTombstone({
|
|
99
|
-
accountId: resolveIMessageAccount({
|
|
100
|
-
cfg: params.cfg,
|
|
101
|
-
accountId: params.target.accountId
|
|
102
|
-
}).accountId,
|
|
103
|
-
conversation: { chatGuid },
|
|
104
|
-
...pollGuid ? { pollGuid } : {},
|
|
105
|
-
optionIds: sent.pollOptions.map((option) => option.id),
|
|
106
|
-
approvalId: params.approvalId
|
|
107
|
-
});
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
const accountId = resolveIMessageAccount({
|
|
111
|
-
cfg: params.cfg,
|
|
112
|
-
accountId: params.target.accountId
|
|
113
|
-
}).accountId;
|
|
114
|
-
if (!await iMessageApprovalPollTargets.register({
|
|
115
|
-
accountId,
|
|
116
|
-
conversation: { chatGuid },
|
|
117
|
-
...pollGuid ? { pollGuid } : {},
|
|
118
|
-
approvalId: params.approvalId,
|
|
119
|
-
approvalKind: params.approvalKind,
|
|
120
|
-
optionDecisions,
|
|
121
|
-
expiresAtMs: params.expiresAtMs
|
|
122
|
-
})) {
|
|
123
|
-
await iMessageApprovalPollTargets.registerTombstone({
|
|
124
|
-
accountId,
|
|
125
|
-
conversation: { chatGuid },
|
|
126
|
-
...pollGuid ? { pollGuid } : {},
|
|
127
|
-
optionIds: optionDecisions.map(([optionId]) => optionId),
|
|
128
|
-
approvalId: params.approvalId
|
|
129
|
-
});
|
|
130
|
-
log.error("imessage approvals: poll target could not be registered");
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
return {
|
|
134
|
-
...pollGuid ? { pollGuid } : {},
|
|
135
|
-
chatGuid,
|
|
136
|
-
optionDecisions
|
|
137
|
-
};
|
|
138
|
-
} catch (error) {
|
|
139
|
-
log.warn(`imessage approvals: poll send failed, falling back to tapbacks: ${String(error)}`);
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
36
|
/** Clear both controls together; a stale binding would resolve a dead approval. */
|
|
144
37
|
async function clearIMessageApprovalBindings(entry) {
|
|
145
38
|
const accountId = entry.accountId?.trim();
|
|
@@ -259,12 +152,30 @@ const imessageApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapterA
|
|
|
259
152
|
};
|
|
260
153
|
},
|
|
261
154
|
deliverPending: async ({ cfg, preparedTarget, plannedTarget, pendingPayload, view }) => {
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
155
|
+
const canUsePoll = (surface) => {
|
|
156
|
+
if (surface !== "origin" && surface !== "approver-dm") return false;
|
|
157
|
+
if (buildApprovalPollOptions({ allowedDecisions: pendingPayload.allowedDecisions }).length < 2) return false;
|
|
158
|
+
try {
|
|
159
|
+
const account = resolveIMessageAccount({
|
|
160
|
+
cfg,
|
|
161
|
+
accountId: preparedTarget.accountId
|
|
162
|
+
});
|
|
163
|
+
if (classifyIMessageApprovalTargetTransport({
|
|
164
|
+
cfg,
|
|
165
|
+
target: preparedTarget
|
|
166
|
+
}) === "sms") return false;
|
|
167
|
+
if (!createActionGate(account.config.actions)("polls") || getIMessageApprovalApprovers({
|
|
168
|
+
cfg,
|
|
169
|
+
accountId: account.accountId
|
|
170
|
+
}).length === 0) return false;
|
|
171
|
+
const cliPath = account.config.cliPath?.trim() || "imsg";
|
|
172
|
+
const status = getCachedIMessagePrivateApiStatus(cliPath);
|
|
173
|
+
return status?.available === true && status?.selectors?.pollPayloadMessage === true && status.cliCapabilities?.pollSendSupportsNoComment === true;
|
|
174
|
+
} catch {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const expectPoll = canUsePoll(plannedTarget.surface);
|
|
268
179
|
const conversation = buildIMessageApprovalConversationKeyForTarget(preparedTarget.to);
|
|
269
180
|
if (!conversation) return null;
|
|
270
181
|
const accountId = resolveIMessageAccount({
|
|
@@ -290,15 +201,85 @@ const imessageApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapterA
|
|
|
290
201
|
});
|
|
291
202
|
if (!result.guid) return null;
|
|
292
203
|
const confirmedTransport = result.service ?? (result.chatGuid && /^iMessage;/i.test(result.chatGuid) ? "imessage" : result.chatGuid && /^SMS;/i.test(result.chatGuid) ? "sms" : targetTransport);
|
|
293
|
-
const poll = expectPoll && confirmedTransport === "imessage" ? await
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
204
|
+
const poll = expectPoll && confirmedTransport === "imessage" ? await (async () => {
|
|
205
|
+
const { approvalId, approvalKind, expiresAtMs } = view;
|
|
206
|
+
const { pollText: question, allowedDecisions } = pendingPayload;
|
|
207
|
+
const options = buildApprovalPollOptions({ allowedDecisions });
|
|
208
|
+
try {
|
|
209
|
+
const account = resolveIMessageAccount({
|
|
210
|
+
cfg,
|
|
211
|
+
accountId: preparedTarget.accountId
|
|
212
|
+
});
|
|
213
|
+
const cliOptions = {
|
|
214
|
+
cliPath: account.config.cliPath?.trim() || "imsg",
|
|
215
|
+
dbPath: account.config.dbPath?.trim() || void 0,
|
|
216
|
+
timeoutMs: account.config.probeTimeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS
|
|
217
|
+
};
|
|
218
|
+
const target = parseIMessageTarget(preparedTarget.to);
|
|
219
|
+
let chatGuid;
|
|
220
|
+
if (target.kind === "chat_guid") chatGuid = target.chatGuid;
|
|
221
|
+
else chatGuid = await (await loadIMessageActionsRuntime()).resolveChatGuidForTarget({
|
|
222
|
+
target: target.kind === "handle" ? {
|
|
223
|
+
kind: "chat_identifier",
|
|
224
|
+
chatIdentifier: `${target.service === "sms" ? "SMS" : "iMessage"};-;${target.to}`
|
|
225
|
+
} : target,
|
|
226
|
+
options: cliOptions,
|
|
227
|
+
conversationReadOrigin: "direct-operator"
|
|
228
|
+
});
|
|
229
|
+
if (!chatGuid || /^SMS;/i.test(chatGuid)) return null;
|
|
230
|
+
await setTimeout(APPROVAL_POLL_ORDERING_DELAY_MS);
|
|
231
|
+
const sent = await (await loadIMessageActionsRuntime()).sendPoll({
|
|
232
|
+
chatGuid,
|
|
233
|
+
question: extractMarkdownFormatRuns(question).text,
|
|
234
|
+
choices: options.map((option) => option.text),
|
|
235
|
+
suppressComment: true,
|
|
236
|
+
options: cliOptions
|
|
237
|
+
});
|
|
238
|
+
const pollGuid = normalizeIMessageMessageId(sent.messageId);
|
|
239
|
+
const optionDecisions = mapSentPollOptionsToDecisions({
|
|
240
|
+
requested: options,
|
|
241
|
+
sent: sent.pollOptions
|
|
242
|
+
});
|
|
243
|
+
if (optionDecisions.length !== options.length) {
|
|
244
|
+
log.error("imessage approvals: imsg poll response did not return a complete option mapping");
|
|
245
|
+
await iMessageApprovalPollTargets.registerTombstone({
|
|
246
|
+
accountId: account.accountId,
|
|
247
|
+
conversation: { chatGuid },
|
|
248
|
+
...pollGuid ? { pollGuid } : {},
|
|
249
|
+
optionIds: sent.pollOptions.map((option) => option.id),
|
|
250
|
+
approvalId
|
|
251
|
+
});
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
if (!await iMessageApprovalPollTargets.register({
|
|
255
|
+
accountId: account.accountId,
|
|
256
|
+
conversation: { chatGuid },
|
|
257
|
+
...pollGuid ? { pollGuid } : {},
|
|
258
|
+
approvalId,
|
|
259
|
+
approvalKind,
|
|
260
|
+
optionDecisions,
|
|
261
|
+
expiresAtMs
|
|
262
|
+
})) {
|
|
263
|
+
await iMessageApprovalPollTargets.registerTombstone({
|
|
264
|
+
accountId: account.accountId,
|
|
265
|
+
conversation: { chatGuid },
|
|
266
|
+
...pollGuid ? { pollGuid } : {},
|
|
267
|
+
optionIds: optionDecisions.map(([optionId]) => optionId),
|
|
268
|
+
approvalId
|
|
269
|
+
});
|
|
270
|
+
log.error("imessage approvals: poll target could not be registered");
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
...pollGuid ? { pollGuid } : {},
|
|
275
|
+
chatGuid,
|
|
276
|
+
optionDecisions
|
|
277
|
+
};
|
|
278
|
+
} catch (error) {
|
|
279
|
+
log.warn(`imessage approvals: poll send failed, falling back to tapbacks: ${String(error)}`);
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
})() : null;
|
|
302
283
|
let hintMessageId;
|
|
303
284
|
if (expectPoll && !poll && !reactionFallbackVisible) try {
|
|
304
285
|
hintMessageId = (await sendMessageIMessage(preparedTarget.to, pendingPayload.text, {
|
|
@@ -363,5 +344,4 @@ const imessageApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapterA
|
|
|
363
344
|
log.error(`imessage approvals: failed to send request ${request.id}: ${String(error)}`);
|
|
364
345
|
} }
|
|
365
346
|
});
|
|
366
|
-
//#endregion
|
|
367
347
|
export { imessageApprovalNativeRuntime };
|