@openclaw/feishu 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.
- package/dist/api.js +119 -171
- package/dist/{channel-BtM7n79m.js → channel-DSYCNah8.js} +9 -159
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel.runtime-DmCiCQJE.js → channel.runtime-EfDl2Q8q.js} +14 -18
- package/dist/{chat-Cbr7P_JH.js → chat-CxXaPTuO.js} +2 -2
- package/dist/{client-vJJyfkxI.js → client-DMbIL3UH.js} +1 -5
- package/dist/{monitor-BVYpA9SO.js → monitor-DoMmOfaD.js} +2 -2
- package/dist/{monitor.account-CuOAmGJf.js → monitor.account-WFdlCDhR.js} +165 -177
- package/dist/{probe-Cs1s-qSS.js → probe-D_SatdZl.js} +1 -1
- package/dist/{reply-delivery-result-BIIeISPG.js → reply-delivery-result-CEFTDA3f.js} +183 -81
- package/dist/setup-api.js +1 -1
- package/dist/{subagent-hooks-BnO3ALWB.js → subagent-hooks-Buadpie_.js} +2 -5
- package/dist/subagent-hooks-api.js +1 -1
- package/dist/{targets-BUjQ1TcA.js → targets-BTQCYRZQ.js} +4 -4
- package/package.json +5 -4
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { a as resolveDefaultFeishuAccountId, i as listFeishuAccountIds, n as inspectFeishuCredentials, o as resolveFeishuAccount, r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount } from "./accounts-RwSyseKr.js";
|
|
2
|
-
import { i as resolveReceiveIdType, n as looksLikeFeishuId, r as normalizeFeishuTarget } from "./targets-
|
|
3
|
-
import {
|
|
2
|
+
import { i as resolveReceiveIdType, n as looksLikeFeishuId, r as normalizeFeishuTarget } from "./targets-BTQCYRZQ.js";
|
|
3
|
+
import { B as deliverCommentThreadText, Ct as resolveFeishuGroupToolPolicy, D as sendMessageFeishu, E as sendCardFeishu, Et as resolveFeishuChatType, F as createFeishuSendReceipt, J as cleanupAmbientCommentTypingReaction, L as buildFeishuMediaFallbackText, O as sendStructuredCardFeishu, S as chunkFeishuCardMarkdown, Tt as normalizeFeishuChatType, _ as resolveFeishuRichReply, a as FEISHU_PRESENTATION_CAPABILITIES, bt as resolveFeishuGroupConfig, c as buildFeishuPresentationCard, ct as materializeFeishuPostMarkdownSoftBreaks, d as isFeishuCardWithinEnvelope, dt as authorizeFeishuChatMemberRead, f as markRenderedFeishuCard, ft as canEnumerateAllFeishuGroups, gt as resolveFeishuChatReadPreliminaryAuthorization, h as renderFeishuPresentationPayload, ht as isFeishuGroupReadEnabled, it as readNativeFeishuCardJson, l as buildFeishuPresentationFallback, m as renderFeishuPresentationFallbackText, mt as isFeishuGroupReadAllowed, n as createFeishuReplyDeliveryResult, o as assertFeishuCardWithinEnvelope, ot as chunkFeishuMarkdown, p as readNativeFeishuCard, pt as canEnumerateAllFeishuPeers, rt as parseFeishuCommentTarget, s as buildFeishuPayloadCard, st as chunkFeishuPostMarkdown, t as createFeishuPartialReplyDeliveryError, u as consumeFeishuPresentationFallbackMarker, ut as assertFeishuChatReadAllowed, x as shouldSuppressFeishuTextForVoiceMedia, y as sendMediaFeishu, z as resolveFeishuIdentityHeaderTitle } from "./reply-delivery-result-CEFTDA3f.js";
|
|
4
4
|
import { n as normalizeCompatibilityConfig, o as normalizeFeishuExternalKey, r as FeishuChannelConfigSchema, t as legacyConfigRules } from "./doctor-contract-CQAuBotF.js";
|
|
5
5
|
import { a as parseFeishuTargetId, i as parseFeishuDirectConversationId, n as buildFeishuModelOverrideParentCandidates, o as resolveConfiguredFeishuGroupSessionScope, r as parseFeishuConversationId, t as buildFeishuConversationId } from "./conversation-id-VYgGQ-GX.js";
|
|
6
6
|
import { t as messageActionTargetAliases } from "./security-audit-DKfR4Cv3.js";
|
|
7
|
-
import { r as createFeishuClient } from "./client-
|
|
7
|
+
import { r as createFeishuClient } from "./client-DMbIL3UH.js";
|
|
8
8
|
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-BCpDLdg9.js";
|
|
9
9
|
import { t as collectFeishuSecurityAuditFindings } from "./security-audit-shared-CK5rVR-1.js";
|
|
10
10
|
import { t as resolveFeishuSessionConversation } from "./session-conversation-DFCIvQK-.js";
|
|
@@ -731,8 +731,6 @@ const feishuDoctor = {
|
|
|
731
731
|
};
|
|
732
732
|
//#endregion
|
|
733
733
|
//#region extensions/feishu/src/outbound.ts
|
|
734
|
-
const RENDERED_FEISHU_CARD = Symbol("openclaw.renderedFeishuCard");
|
|
735
|
-
const FEISHU_PRESENTATION_FALLBACK_MARKER = "__openclawPresentationFallback";
|
|
736
734
|
const FEISHU_PROPAGATE_MEDIA_UPLOAD_FAILURE_MARKER = "__openclawPropagateMediaUploadFailure";
|
|
737
735
|
const FEISHU_TEXT_CHUNK_LIMIT = 4e3;
|
|
738
736
|
function normalizePossibleLocalImagePath(text) {
|
|
@@ -764,22 +762,6 @@ function normalizePossibleLocalImagePath(text) {
|
|
|
764
762
|
function shouldUseCard(text) {
|
|
765
763
|
return /```[\s\S]*?```/.test(text) || /\|.+\|[\r\n]+\|[-:| ]+\|/.test(text);
|
|
766
764
|
}
|
|
767
|
-
function markRenderedFeishuCard(card) {
|
|
768
|
-
Object.defineProperty(card, RENDERED_FEISHU_CARD, {
|
|
769
|
-
value: true,
|
|
770
|
-
enumerable: false
|
|
771
|
-
});
|
|
772
|
-
return card;
|
|
773
|
-
}
|
|
774
|
-
function readNativeFeishuCard(payload) {
|
|
775
|
-
const feishuData = payload.channelData?.feishu;
|
|
776
|
-
if (!isRecord(feishuData)) return;
|
|
777
|
-
const card = feishuData.card ?? feishuData.interactiveCard;
|
|
778
|
-
if (!isRecord(card)) return;
|
|
779
|
-
if (card[RENDERED_FEISHU_CARD] === true) return card;
|
|
780
|
-
const sanitizedCard = sanitizeNativeFeishuCard(card);
|
|
781
|
-
return sanitizedCard ? markRenderedFeishuCard(sanitizedCard) : void 0;
|
|
782
|
-
}
|
|
783
765
|
function toFeishuOutboundResult(result) {
|
|
784
766
|
const { chatId, ...delivery } = result;
|
|
785
767
|
return {
|
|
@@ -814,23 +796,6 @@ function partialFeishuSendError(error, results) {
|
|
|
814
796
|
})
|
|
815
797
|
});
|
|
816
798
|
}
|
|
817
|
-
function consumeFeishuPresentationFallbackMarker(payload) {
|
|
818
|
-
const feishuData = isRecord(payload.channelData?.feishu) ? payload.channelData.feishu : void 0;
|
|
819
|
-
const presentationFallback = feishuData?.[FEISHU_PRESENTATION_FALLBACK_MARKER];
|
|
820
|
-
if (!isRecord(presentationFallback) || typeof presentationFallback.hasVisibleContent !== "boolean") return { payload };
|
|
821
|
-
const nextFeishuData = { ...feishuData };
|
|
822
|
-
delete nextFeishuData[FEISHU_PRESENTATION_FALLBACK_MARKER];
|
|
823
|
-
const nextChannelData = { ...payload.channelData };
|
|
824
|
-
if (Object.keys(nextFeishuData).length > 0) nextChannelData.feishu = nextFeishuData;
|
|
825
|
-
else delete nextChannelData.feishu;
|
|
826
|
-
return {
|
|
827
|
-
payload: {
|
|
828
|
-
...payload,
|
|
829
|
-
channelData: Object.keys(nextChannelData).length > 0 ? nextChannelData : void 0
|
|
830
|
-
},
|
|
831
|
-
presentationFallback: { hasVisibleContent: presentationFallback.hasVisibleContent }
|
|
832
|
-
};
|
|
833
|
-
}
|
|
834
799
|
function readFeishuPropagateMediaUploadFailure(payload) {
|
|
835
800
|
return (isRecord(payload.channelData?.feishu) ? payload.channelData.feishu : void 0)?.[FEISHU_PROPAGATE_MEDIA_UPLOAD_FAILURE_MARKER] === true;
|
|
836
801
|
}
|
|
@@ -838,83 +803,6 @@ function buildFeishuPropagationOnlyChannelData(payload) {
|
|
|
838
803
|
if ((isRecord(payload.channelData?.feishu) ? payload.channelData.feishu : void 0)?.["__openclawPropagateMediaUploadFailure"] !== true) return;
|
|
839
804
|
return { feishu: { [FEISHU_PROPAGATE_MEDIA_UPLOAD_FAILURE_MARKER]: true } };
|
|
840
805
|
}
|
|
841
|
-
function buildFeishuPayloadCard(params) {
|
|
842
|
-
const nativeCard = readNativeFeishuCard(params.payload);
|
|
843
|
-
if (nativeCard) {
|
|
844
|
-
assertFeishuCardWithinEnvelope(nativeCard, "Feishu native card");
|
|
845
|
-
return nativeCard;
|
|
846
|
-
}
|
|
847
|
-
const rawText = params.text ?? params.payload.text;
|
|
848
|
-
const textCard = readNativeFeishuCardJson(rawText);
|
|
849
|
-
const { interactive, presentation } = resolveFeishuRichReply(params.payload);
|
|
850
|
-
if (!presentation) {
|
|
851
|
-
if (!textCard) return;
|
|
852
|
-
assertFeishuCardWithinEnvelope(textCard, "Feishu native card");
|
|
853
|
-
return markRenderedFeishuCard(textCard);
|
|
854
|
-
}
|
|
855
|
-
const text = textCard ? void 0 : resolveLegacyInteractiveTextFallback({
|
|
856
|
-
text: rawText,
|
|
857
|
-
interactive
|
|
858
|
-
});
|
|
859
|
-
const elements = buildFeishuPresentationCardElements({
|
|
860
|
-
presentation,
|
|
861
|
-
fallbackText: text
|
|
862
|
-
});
|
|
863
|
-
const identityTitle = resolveFeishuIdentityHeaderTitle(params.identity);
|
|
864
|
-
const title = presentation?.title ?? identityTitle;
|
|
865
|
-
const template = resolveFeishuCardTemplate(presentation?.tone === "danger" ? "red" : presentation?.tone === "warning" ? "orange" : presentation?.tone === "success" ? "green" : "blue");
|
|
866
|
-
const card = markRenderedFeishuCard({
|
|
867
|
-
schema: "2.0",
|
|
868
|
-
config: { width_mode: "fill" },
|
|
869
|
-
...title ? { header: {
|
|
870
|
-
title: {
|
|
871
|
-
tag: "plain_text",
|
|
872
|
-
content: title
|
|
873
|
-
},
|
|
874
|
-
template: template ?? "blue"
|
|
875
|
-
} } : {},
|
|
876
|
-
body: { elements }
|
|
877
|
-
});
|
|
878
|
-
return isFeishuCardWithinEnvelope(card) ? card : void 0;
|
|
879
|
-
}
|
|
880
|
-
function renderFeishuPresentationPayload({ payload, presentation, ctx }) {
|
|
881
|
-
const textCard = readNativeFeishuCardJson(payload.text);
|
|
882
|
-
const { fallbackText, fallbackHasCommand } = buildFeishuPresentationFallback({
|
|
883
|
-
text: textCard ? void 0 : payload.text,
|
|
884
|
-
presentation,
|
|
885
|
-
textFormat: parseFeishuCommentTarget(ctx.to) ? "plain" : "markdown"
|
|
886
|
-
});
|
|
887
|
-
const card = buildFeishuPayloadCard({
|
|
888
|
-
payload,
|
|
889
|
-
text: payload.text,
|
|
890
|
-
identity: ctx.identity
|
|
891
|
-
});
|
|
892
|
-
const existingFeishuData = isRecord(payload.channelData?.feishu) ? payload.channelData.feishu : void 0;
|
|
893
|
-
if (!card) return {
|
|
894
|
-
...payload,
|
|
895
|
-
text: fallbackText,
|
|
896
|
-
channelData: {
|
|
897
|
-
...payload.channelData,
|
|
898
|
-
feishu: {
|
|
899
|
-
...existingFeishuData,
|
|
900
|
-
[FEISHU_PRESENTATION_FALLBACK_MARKER]: { hasVisibleContent: Boolean(renderFeishuPresentationFallbackText({ presentation }).trim()) },
|
|
901
|
-
...fallbackHasCommand ? { fallbackHasCommand: true } : {}
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
};
|
|
905
|
-
return {
|
|
906
|
-
...payload,
|
|
907
|
-
text: fallbackText,
|
|
908
|
-
channelData: {
|
|
909
|
-
...payload.channelData,
|
|
910
|
-
feishu: {
|
|
911
|
-
...existingFeishuData,
|
|
912
|
-
card,
|
|
913
|
-
...fallbackHasCommand ? { fallbackHasCommand: true } : {}
|
|
914
|
-
}
|
|
915
|
-
}
|
|
916
|
-
};
|
|
917
|
-
}
|
|
918
806
|
function resolveFeishuReplyMode(params) {
|
|
919
807
|
const replyToMessageId = params.replyToId?.trim();
|
|
920
808
|
if (replyToMessageId) return {
|
|
@@ -1112,26 +1000,7 @@ const feishuOutbound = {
|
|
|
1112
1000
|
chunker: chunkFeishuMarkdown,
|
|
1113
1001
|
chunkerMode: "markdown",
|
|
1114
1002
|
textChunkLimit: FEISHU_TEXT_CHUNK_LIMIT,
|
|
1115
|
-
presentationCapabilities:
|
|
1116
|
-
supported: true,
|
|
1117
|
-
buttons: true,
|
|
1118
|
-
selects: false,
|
|
1119
|
-
context: true,
|
|
1120
|
-
divider: true,
|
|
1121
|
-
limits: {
|
|
1122
|
-
actions: {
|
|
1123
|
-
maxActions: 20,
|
|
1124
|
-
maxActionsPerRow: 5,
|
|
1125
|
-
maxLabelLength: 40,
|
|
1126
|
-
maxValueBytes: 1024
|
|
1127
|
-
},
|
|
1128
|
-
text: {
|
|
1129
|
-
maxLength: FEISHU_TEXT_CHUNK_LIMIT,
|
|
1130
|
-
encoding: "characters",
|
|
1131
|
-
markdownDialect: "markdown"
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1134
|
-
},
|
|
1003
|
+
presentationCapabilities: FEISHU_PRESENTATION_CAPABILITIES,
|
|
1135
1004
|
renderPresentation: renderFeishuPresentationPayload,
|
|
1136
1005
|
sendPayload: async (ctx) => {
|
|
1137
1006
|
const { payload, presentationFallback } = consumeFeishuPresentationFallbackMarker(ctx.payload);
|
|
@@ -1863,7 +1732,7 @@ const feishuSetupWizard = {
|
|
|
1863
1732
|
});
|
|
1864
1733
|
let probeResult = null;
|
|
1865
1734
|
if (configured && account.configured) try {
|
|
1866
|
-
const { probeFeishu } = await import("./probe-
|
|
1735
|
+
const { probeFeishu } = await import("./probe-D_SatdZl.js").then((n) => n.n);
|
|
1867
1736
|
probeResult = await probeFeishu(account);
|
|
1868
1737
|
} catch {}
|
|
1869
1738
|
if (!configured) return [formatFeishuStatusLine("needs-credentials")];
|
|
@@ -2031,7 +1900,7 @@ const meta = {
|
|
|
2031
1900
|
order: 70,
|
|
2032
1901
|
preferSessionLookupForAnnounceTarget: true
|
|
2033
1902
|
};
|
|
2034
|
-
const loadFeishuChannelRuntime = createLazyRuntimeNamedExport(() => import("./channel.runtime-
|
|
1903
|
+
const loadFeishuChannelRuntime = createLazyRuntimeNamedExport(() => import("./channel.runtime-EfDl2Q8q.js"), "feishuChannelRuntime");
|
|
2035
1904
|
async function resolveFeishuMessageSender(params) {
|
|
2036
1905
|
try {
|
|
2037
1906
|
const sender = params.resolve(await loadFeishuChannelRuntime());
|
|
@@ -2095,7 +1964,7 @@ const feishuMessageAdapter = defineChannelMessageAdapter({
|
|
|
2095
1964
|
}
|
|
2096
1965
|
});
|
|
2097
1966
|
async function createFeishuActionClient(account) {
|
|
2098
|
-
const { createFeishuClient } = await import("./client-
|
|
1967
|
+
const { createFeishuClient } = await import("./client-DMbIL3UH.js").then((n) => n.t);
|
|
2099
1968
|
return createFeishuClient(account);
|
|
2100
1969
|
}
|
|
2101
1970
|
async function resolveFeishuChatTypeById(params) {
|
|
@@ -3155,7 +3024,7 @@ const feishuPlugin = createChatChannelPlugin({
|
|
|
3155
3024
|
})
|
|
3156
3025
|
}),
|
|
3157
3026
|
gateway: { startAccount: async (ctx) => {
|
|
3158
|
-
const { monitorFeishuProvider } = await import("./monitor-
|
|
3027
|
+
const { monitorFeishuProvider } = await import("./monitor-DoMmOfaD.js");
|
|
3159
3028
|
const account = resolveFeishuRuntimeAccount({
|
|
3160
3029
|
cfg: ctx.cfg,
|
|
3161
3030
|
accountId: ctx.accountId
|
|
@@ -3222,26 +3091,7 @@ const feishuPlugin = createChatChannelPlugin({
|
|
|
3222
3091
|
chunkerMode: "markdown",
|
|
3223
3092
|
textChunkLimit: 4e3,
|
|
3224
3093
|
sanitizeText: ({ text }) => sanitizeAssistantVisibleText(text),
|
|
3225
|
-
presentationCapabilities:
|
|
3226
|
-
supported: true,
|
|
3227
|
-
buttons: true,
|
|
3228
|
-
selects: false,
|
|
3229
|
-
context: true,
|
|
3230
|
-
divider: true,
|
|
3231
|
-
limits: {
|
|
3232
|
-
actions: {
|
|
3233
|
-
maxActions: 20,
|
|
3234
|
-
maxActionsPerRow: 5,
|
|
3235
|
-
maxLabelLength: 40,
|
|
3236
|
-
maxValueBytes: 1024
|
|
3237
|
-
},
|
|
3238
|
-
text: {
|
|
3239
|
-
maxLength: 4e3,
|
|
3240
|
-
encoding: "characters",
|
|
3241
|
-
markdownDialect: "markdown"
|
|
3242
|
-
}
|
|
3243
|
-
}
|
|
3244
|
-
},
|
|
3094
|
+
presentationCapabilities: FEISHU_PRESENTATION_CAPABILITIES,
|
|
3245
3095
|
...createRuntimeOutboundDelegates({
|
|
3246
3096
|
getRuntime: loadFeishuChannelRuntime,
|
|
3247
3097
|
renderPresentation: { resolve: (runtime) => runtime.feishuOutbound.renderPresentation },
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as feishuPlugin } from "./channel-
|
|
1
|
+
import { t as feishuPlugin } from "./channel-DSYCNah8.js";
|
|
2
2
|
export { feishuPlugin };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { o as resolveFeishuAccount, s as resolveFeishuRuntimeAccount } from "./accounts-RwSyseKr.js";
|
|
2
|
-
import { c as listFeishuDirectoryPeers, o as feishuOutbound, s as listFeishuDirectoryGroups } from "./channel-
|
|
3
|
-
import {
|
|
4
|
-
import { r as createFeishuClient } from "./client-
|
|
5
|
-
import { a as getFeishuMemberInfo, i as getChatMembers, n as buildFeishuDirectChatMembers, r as getChatInfo, t as assertFeishuChatMember } from "./chat-
|
|
6
|
-
import { t as probeFeishu } from "./probe-
|
|
2
|
+
import { c as listFeishuDirectoryPeers, o as feishuOutbound, s as listFeishuDirectoryGroups } from "./channel-DSYCNah8.js";
|
|
3
|
+
import { C as editMessageFeishu, D as sendMessageFeishu, E as sendCardFeishu, I as assertFeishuApiSuccess, b as sendStickerFeishu, w as getMessageFeishu } from "./reply-delivery-result-CEFTDA3f.js";
|
|
4
|
+
import { r as createFeishuClient } from "./client-DMbIL3UH.js";
|
|
5
|
+
import { a as getFeishuMemberInfo, i as getChatMembers, n as buildFeishuDirectChatMembers, r as getChatInfo, t as assertFeishuChatMember } from "./chat-CxXaPTuO.js";
|
|
6
|
+
import { t as probeFeishu } from "./probe-D_SatdZl.js";
|
|
7
7
|
import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
8
8
|
//#region extensions/feishu/src/directory.ts
|
|
9
9
|
const MAX_FEISHU_DIRECTORY_PAGES = 100;
|
|
@@ -84,9 +84,6 @@ async function listFeishuDirectoryGroupsLive(params) {
|
|
|
84
84
|
}
|
|
85
85
|
//#endregion
|
|
86
86
|
//#region extensions/feishu/src/pins.ts
|
|
87
|
-
function assertFeishuPinApiSuccess(response, action) {
|
|
88
|
-
if (response.code !== 0) throw new Error(`Feishu ${action} failed: ${response.msg || `code ${response.code}`}`);
|
|
89
|
-
}
|
|
90
87
|
function normalizePin(pin) {
|
|
91
88
|
return {
|
|
92
89
|
messageId: pin.message_id,
|
|
@@ -103,7 +100,7 @@ async function createPinFeishu(params) {
|
|
|
103
100
|
});
|
|
104
101
|
if (!account.configured) throw new Error(`Feishu account "${account.accountId}" not configured`);
|
|
105
102
|
const response = await createFeishuClient(account).im.pin.create({ data: { message_id: params.messageId } });
|
|
106
|
-
|
|
103
|
+
assertFeishuApiSuccess(response, "Feishu pin create failed");
|
|
107
104
|
return response.data?.pin ? normalizePin(response.data.pin) : null;
|
|
108
105
|
}
|
|
109
106
|
async function removePinFeishu(params) {
|
|
@@ -112,7 +109,8 @@ async function removePinFeishu(params) {
|
|
|
112
109
|
accountId: params.accountId
|
|
113
110
|
});
|
|
114
111
|
if (!account.configured) throw new Error(`Feishu account "${account.accountId}" not configured`);
|
|
115
|
-
|
|
112
|
+
const response = await createFeishuClient(account).im.pin.delete({ path: { message_id: params.messageId } });
|
|
113
|
+
assertFeishuApiSuccess(response, "Feishu pin delete failed");
|
|
116
114
|
}
|
|
117
115
|
async function listPinsFeishu(params) {
|
|
118
116
|
const account = resolveFeishuRuntimeAccount({
|
|
@@ -127,7 +125,7 @@ async function listPinsFeishu(params) {
|
|
|
127
125
|
...typeof params.pageSize === "number" ? { page_size: Math.max(1, Math.min(100, Math.floor(params.pageSize))) } : {},
|
|
128
126
|
...params.pageToken ? { page_token: params.pageToken } : {}
|
|
129
127
|
} });
|
|
130
|
-
|
|
128
|
+
assertFeishuApiSuccess(response, "Feishu pin list failed");
|
|
131
129
|
return {
|
|
132
130
|
chatId: params.chatId,
|
|
133
131
|
pins: (response.data?.items ?? []).map(normalizePin),
|
|
@@ -142,9 +140,6 @@ function resolveConfiguredFeishuClient(params) {
|
|
|
142
140
|
if (!account.configured) throw new Error(`Feishu account "${account.accountId}" not configured`);
|
|
143
141
|
return createFeishuClient(account);
|
|
144
142
|
}
|
|
145
|
-
function assertFeishuReactionApiSuccess(response, action) {
|
|
146
|
-
if (response.code !== 0) throw new Error(`Feishu ${action} failed: ${response.msg || `code ${response.code}`}`);
|
|
147
|
-
}
|
|
148
143
|
/**
|
|
149
144
|
* Add a reaction (emoji) to a message.
|
|
150
145
|
* @param emojiType - Feishu emoji type, e.g., "SMILE", "THUMBSUP", "HEART"
|
|
@@ -159,7 +154,7 @@ async function addReactionFeishu(params) {
|
|
|
159
154
|
path: { message_id: messageId },
|
|
160
155
|
data: { reaction_type: { emoji_type: emojiType } }
|
|
161
156
|
});
|
|
162
|
-
|
|
157
|
+
assertFeishuApiSuccess(response, "Feishu add reaction failed");
|
|
163
158
|
const reactionId = response.data?.reaction_id;
|
|
164
159
|
if (!reactionId) throw new Error("Feishu add reaction failed: no reaction_id returned");
|
|
165
160
|
return { reactionId };
|
|
@@ -169,13 +164,14 @@ async function addReactionFeishu(params) {
|
|
|
169
164
|
*/
|
|
170
165
|
async function removeReactionFeishu(params) {
|
|
171
166
|
const { cfg, messageId, reactionId, accountId } = params;
|
|
172
|
-
|
|
167
|
+
const response = await resolveConfiguredFeishuClient({
|
|
173
168
|
cfg,
|
|
174
169
|
accountId
|
|
175
170
|
}).im.messageReaction.delete({ path: {
|
|
176
171
|
message_id: messageId,
|
|
177
172
|
reaction_id: reactionId
|
|
178
|
-
} })
|
|
173
|
+
} });
|
|
174
|
+
assertFeishuApiSuccess(response, "Feishu remove reaction failed");
|
|
179
175
|
}
|
|
180
176
|
/**
|
|
181
177
|
* List all reactions for a message.
|
|
@@ -197,7 +193,7 @@ async function listReactionsFeishu(params) {
|
|
|
197
193
|
...pageToken ? { page_token: pageToken } : {}
|
|
198
194
|
} : void 0
|
|
199
195
|
});
|
|
200
|
-
|
|
196
|
+
assertFeishuApiSuccess(response, "Feishu list reactions failed");
|
|
201
197
|
for (const item of response.data?.items ?? []) reactions.push({
|
|
202
198
|
reactionId: item.reaction_id ?? "",
|
|
203
199
|
emojiType: item.reaction_type?.emoji_type ?? "",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { r as createFeishuClient } from "./client-
|
|
1
|
+
import { Et as resolveFeishuChatType, H as feishuExternalToolResult, K as resolveAnyEnabledFeishuToolsConfig, Q as formatFeishuApiError, dt as authorizeFeishuChatMemberRead, gt as resolveFeishuChatReadPreliminaryAuthorization, q as resolveFeishuToolAccount, ut as assertFeishuChatReadAllowed } from "./reply-delivery-result-CEFTDA3f.js";
|
|
2
|
+
import { r as createFeishuClient } from "./client-DMbIL3UH.js";
|
|
3
3
|
import { optionalPositiveIntegerSchema } from "openclaw/plugin-sdk/channel-actions";
|
|
4
4
|
import { readPositiveIntegerParam } from "openclaw/plugin-sdk/param-readers";
|
|
5
5
|
import { Type } from "typebox";
|
|
@@ -2,6 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
4
4
|
import * as Lark from "@larksuiteoapi/node-sdk";
|
|
5
|
+
import { bufferToBlobPart } from "openclaw/plugin-sdk/blob-runtime";
|
|
5
6
|
import { isRecord } from "openclaw/plugin-sdk/channel-secret-basic-runtime";
|
|
6
7
|
import { readPluginPackageVersion, resolveAmbientNodeProxyAgent } from "openclaw/plugin-sdk/extension-shared";
|
|
7
8
|
//#region extensions/feishu/src/client-timeout.ts
|
|
@@ -100,11 +101,6 @@ function stringifyMultipartFieldValue(value) {
|
|
|
100
101
|
default: return;
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
function bufferToBlobPart(value) {
|
|
104
|
-
const bytes = new Uint8Array(value.byteLength);
|
|
105
|
-
bytes.set(value);
|
|
106
|
-
return bytes;
|
|
107
|
-
}
|
|
108
104
|
function normalizeMultipartUploadData(opts) {
|
|
109
105
|
if (!isMultipartFormRequest(opts) || !isRecord(opts.data) || !isFeishuMessageMediaUploadRequest(opts, opts.data)) return opts;
|
|
110
106
|
const form = new FormData();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as listEnabledFeishuAccounts, s as resolveFeishuRuntimeAccount } from "./accounts-RwSyseKr.js";
|
|
2
2
|
import { t as getFeishuRuntime } from "./runtime-C5JxBWZp.js";
|
|
3
|
-
import { r as registerFeishuAiAgent, t as probeFeishu } from "./probe-
|
|
3
|
+
import { r as registerFeishuAiAgent, t as probeFeishu } from "./probe-D_SatdZl.js";
|
|
4
4
|
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
5
5
|
import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
|
|
6
6
|
import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
@@ -143,7 +143,7 @@ async function fetchBotIdentityForMonitor(account, options = {}) {
|
|
|
143
143
|
}
|
|
144
144
|
//#endregion
|
|
145
145
|
//#region extensions/feishu/src/monitor.ts
|
|
146
|
-
const loadMonitorAccountRuntime = createLazyRuntimeModule(() => import("./monitor.account-
|
|
146
|
+
const loadMonitorAccountRuntime = createLazyRuntimeModule(() => import("./monitor.account-WFdlCDhR.js"));
|
|
147
147
|
async function monitorFeishuProvider(opts = {}) {
|
|
148
148
|
const cfg = opts.config;
|
|
149
149
|
if (!cfg) throw new Error("Config is required for Feishu monitor");
|