@openclaw/feishu 2026.7.2-beta.7 → 2026.8.1-beta.3

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 (35) hide show
  1. package/dist/accounts-CCCdMen2.js +203 -0
  2. package/dist/api.js +61 -60
  3. package/dist/{channel-CScE82zY.js → channel-Ceq80_zP.js} +71 -42
  4. package/dist/channel-plugin-api.js +1 -1
  5. package/dist/{channel.runtime-B21e1E0r.js → channel.runtime-DnRyzGoU.js} +201 -152
  6. package/dist/{client-Dcbs6vml.js → client-Hp7uo_cl.js} +27 -16
  7. package/dist/contract-api.js +2 -2
  8. package/dist/{conversation-id-BeJL-wq7.js → conversation-id-VYgGQ-GX.js} +11 -15
  9. package/dist/doctor-contract-api.js +1 -1
  10. package/dist/doctor-contract-bEQXIXyP.js +158 -0
  11. package/dist/{drive-hSi_Utp0.js → drive-BVYM_Y4k.js} +325 -44
  12. package/dist/{media-CEUraFOR.js → media-BDouVaaM.js} +298 -182
  13. package/dist/{monitor-DngbaA6a.js → monitor-CZ8cDXrq.js} +3 -3
  14. package/dist/{monitor.account-BnTWCw55.js → monitor.account-Dq_voVMB.js} +263 -179
  15. package/dist/{monitor.startup-CqH2tiJq.js → monitor.startup-BGErejNH.js} +1 -1
  16. package/dist/{probe-p3POS2RN.js → probe-DVpy58s0.js} +2 -2
  17. package/dist/security-audit-D6Fz2h6p.js +23 -0
  18. package/dist/{send-result-B9_BpUPx.js → send-result-DEAycmOk.js} +18 -9
  19. package/dist/session-binding-contract-api.js +2 -2
  20. package/dist/{session-conversation-BksWrfzm.js → session-conversation-DFCIvQK-.js} +1 -1
  21. package/dist/session-key-api.js +1 -1
  22. package/dist/setup-api.js +1 -1
  23. package/dist/{subagent-hooks-Cx1cX7rW.js → subagent-hooks-KUi-7vUy.js} +4 -64
  24. package/dist/subagent-hooks-api.js +1 -1
  25. package/dist/{thread-bindings-N3wkgkIN.js → thread-bindings-CptM_YU6.js} +7 -9
  26. package/openclaw.plugin.json +143 -1
  27. package/package.json +4 -4
  28. package/skills/feishu-doc/SKILL.md +20 -195
  29. package/skills/feishu-doc/references/block-types.md +9 -14
  30. package/skills/feishu-drive/SKILL.md +16 -102
  31. package/skills/feishu-perm/SKILL.md +10 -110
  32. package/skills/feishu-wiki/SKILL.md +13 -109
  33. package/dist/accounts-u9X5Wsan.js +0 -469
  34. package/dist/doctor-contract-BiD9tyIv.js +0 -102
  35. package/dist/security-audit-D7WK_BHh.js +0 -11
@@ -1,5 +1,5 @@
1
1
  import { t as getFeishuRuntime } from "./runtime-C5JxBWZp.js";
2
- import { r as registerFeishuAiAgent, t as probeFeishu } from "./probe-p3POS2RN.js";
2
+ import { r as registerFeishuAiAgent, t as probeFeishu } from "./probe-DVpy58s0.js";
3
3
  import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
4
4
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { normalizeAccountId } from "openclaw/plugin-sdk/account-resolution";
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { r as createFeishuClient } from "./client-Dcbs6vml.js";
3
- import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs, resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
2
+ import { r as createFeishuClient } from "./client-Hp7uo_cl.js";
4
3
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
4
+ import { asDateTimestampMs, resolveExpiresAtMsFromDurationMs, resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
5
5
  import { createHash } from "node:crypto";
6
6
  //#region extensions/feishu/src/async.ts
7
7
  const RACE_TIMEOUT = Symbol("race-timeout");
@@ -0,0 +1,23 @@
1
+ import "./security-audit-shared-BgpY7AiJ.js";
2
+ //#region extensions/feishu/src/message-action-contract.ts
3
+ const FEISHU_NATIVE_CHAT_TARGET_ALIASES = [
4
+ "chatId",
5
+ "chat_id",
6
+ "channel_id"
7
+ ];
8
+ function createMessageMutationTargetAliases() {
9
+ return {
10
+ aliases: ["messageId", ...FEISHU_NATIVE_CHAT_TARGET_ALIASES],
11
+ deliveryTargetAliases: [...FEISHU_NATIVE_CHAT_TARGET_ALIASES]
12
+ };
13
+ }
14
+ const messageActionTargetAliases = {
15
+ read: { aliases: ["messageId"] },
16
+ edit: createMessageMutationTargetAliases(),
17
+ pin: createMessageMutationTargetAliases(),
18
+ unpin: createMessageMutationTargetAliases(),
19
+ "list-pins": { aliases: ["chatId"] },
20
+ "channel-info": { aliases: ["chatId"] }
21
+ };
22
+ //#endregion
23
+ export { messageActionTargetAliases as t };
@@ -1,4 +1,3 @@
1
- import { d as isRecord$1 } from "./accounts-u9X5Wsan.js";
2
1
  import { r as normalizeFeishuTarget, t as detectIdType } from "./targets-BUjQ1TcA.js";
3
2
  import { compileAllowlist, resolveAllowlistMatchByCandidates } from "openclaw/plugin-sdk/allow-from";
4
3
  import { ToolAuthorizationError } from "openclaw/plugin-sdk/channel-actions";
@@ -11,6 +10,7 @@ import { fromMarkdown } from "mdast-util-from-markdown";
11
10
  import { gfmTableFromMarkdown } from "mdast-util-gfm-table";
12
11
  import { gfmTable } from "micromark-extension-gfm-table";
13
12
  import { chunkMarkdownTextWithMode } from "openclaw/plugin-sdk/reply-chunking";
13
+ import { createChannelPartialDeliveryError } from "openclaw/plugin-sdk/channel-inbound";
14
14
  //#region extensions/feishu/src/card-interaction.ts
15
15
  const FEISHU_CARD_INTERACTION_VERSION = "ocf1";
16
16
  function isInteractionKind(value) {
@@ -27,7 +27,7 @@ function createFeishuCardInteractionEnvelope(envelope) {
27
27
  }
28
28
  function buildFeishuCardActionTextFallback(event) {
29
29
  const actionValue = event.action.value;
30
- if (isRecord$1(actionValue)) {
30
+ if (isRecord(actionValue)) {
31
31
  if (typeof actionValue.text === "string") return actionValue.text;
32
32
  if (typeof actionValue.command === "string") return actionValue.command;
33
33
  return JSON.stringify(actionValue);
@@ -37,7 +37,7 @@ function buildFeishuCardActionTextFallback(event) {
37
37
  function decodeFeishuCardAction(params) {
38
38
  const { event, now = Date.now() } = params;
39
39
  const actionValue = event.action.value;
40
- if (!isRecord$1(actionValue) || actionValue.oc !== "ocf1") return {
40
+ if (!isRecord(actionValue) || actionValue.oc !== "ocf1") return {
41
41
  kind: "legacy",
42
42
  text: buildFeishuCardActionTextFallback(event)
43
43
  };
@@ -50,7 +50,7 @@ function decodeFeishuCardAction(params) {
50
50
  reason: "malformed"
51
51
  };
52
52
  if (actionValue.m !== void 0) {
53
- if (!isRecord$1(actionValue.m)) return {
53
+ if (!isRecord(actionValue.m)) return {
54
54
  kind: "invalid",
55
55
  reason: "malformed"
56
56
  };
@@ -60,7 +60,7 @@ function decodeFeishuCardAction(params) {
60
60
  };
61
61
  }
62
62
  if (actionValue.c !== void 0) {
63
- if (!isRecord$1(actionValue.c)) return {
63
+ if (!isRecord(actionValue.c)) return {
64
64
  kind: "invalid",
65
65
  reason: "malformed"
66
66
  };
@@ -197,6 +197,7 @@ async function resolveFeishuDmIngressAccess(params) {
197
197
  kind: "direct",
198
198
  id: params.conversationId
199
199
  },
200
+ ...params.contextBinding ? { contextBinding: params.contextBinding } : {},
200
201
  event: { mayPair: params.mayPair },
201
202
  dmPolicy: normalizeFeishuDmPolicy(params.dmPolicy),
202
203
  groupPolicy: "disabled",
@@ -214,8 +215,10 @@ async function resolveFeishuGroupConversationIngressAccess(params) {
214
215
  subject: createFeishuIngressSubject({ primaryId: params.chatId }),
215
216
  conversation: {
216
217
  kind: "group",
217
- id: params.chatId
218
+ id: params.chatId,
219
+ threadId: params.threadId
218
220
  },
221
+ ...params.contextBinding ? { contextBinding: params.contextBinding } : {},
219
222
  dmPolicy: "disabled",
220
223
  groupPolicy,
221
224
  groupAllowFrom
@@ -233,8 +236,10 @@ async function resolveFeishuGroupSenderActivationIngressAccess(params) {
233
236
  }),
234
237
  conversation: {
235
238
  kind: "group",
236
- id: params.chatId
239
+ id: params.chatId,
240
+ threadId: params.threadId
237
241
  },
242
+ ...params.contextBinding ? { contextBinding: params.contextBinding } : {},
238
243
  dmPolicy: "disabled",
239
244
  groupPolicy: groupAllowFrom.length > 0 ? "allowlist" : "open",
240
245
  groupAllowFrom,
@@ -754,8 +759,12 @@ function createFeishuSendReceipt(params) {
754
759
  function assertFeishuMessageApiSuccess(response, errorPrefix) {
755
760
  if (response.code !== 0) throw new Error(`${errorPrefix}: ${response.msg || `code ${response.code}`}`);
756
761
  }
757
- function toFeishuSendResult(response, chatId, kind) {
758
- const messageId = response.data?.message_id ?? "unknown";
762
+ function toFeishuSendResult(response, chatId, kind, errorPrefix = "Feishu send failed") {
763
+ const messageId = response.data?.message_id?.trim();
764
+ if (!messageId) throw createChannelPartialDeliveryError(/* @__PURE__ */ new Error(`${errorPrefix}: no message_id returned`), {
765
+ messageIds: [],
766
+ visibleReplySent: true
767
+ });
759
768
  return {
760
769
  messageId,
761
770
  chatId,
@@ -1,2 +1,2 @@
1
- import { r as testing, t as createFeishuThreadBindingManager } from "./thread-bindings-N3wkgkIN.js";
2
- export { createFeishuThreadBindingManager, testing as feishuThreadBindingTesting };
1
+ import { t as createFeishuThreadBindingManager } from "./thread-bindings-CptM_YU6.js";
2
+ export { createFeishuThreadBindingManager };
@@ -1,4 +1,4 @@
1
- import { r as parseFeishuConversationId, t as buildFeishuConversationId } from "./conversation-id-BeJL-wq7.js";
1
+ import { r as parseFeishuConversationId, t as buildFeishuConversationId } from "./conversation-id-VYgGQ-GX.js";
2
2
  //#region extensions/feishu/src/session-conversation.ts
3
3
  function resolveFeishuParentConversationCandidates(rawId) {
4
4
  const parsed = parseFeishuConversationId({ conversationId: rawId });
@@ -1,2 +1,2 @@
1
- import { t as resolveFeishuSessionConversation } from "./session-conversation-BksWrfzm.js";
1
+ import { t as resolveFeishuSessionConversation } from "./session-conversation-DFCIvQK-.js";
2
2
  export { resolveFeishuSessionConversation as resolveSessionConversation };
package/dist/setup-api.js CHANGED
@@ -1,2 +1,2 @@
1
- import { i as feishuSetupAdapter, n as feishuSetupWizard, t as feishuPlugin } from "./channel-CScE82zY.js";
1
+ import { i as feishuSetupAdapter, n as feishuSetupWizard, t as feishuPlugin } from "./channel-Ceq80_zP.js";
2
2
  export { feishuPlugin, feishuSetupAdapter, feishuSetupWizard };
@@ -1,19 +1,13 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
2
  import { r as normalizeFeishuTarget } from "./targets-BUjQ1TcA.js";
3
- import { r as parseFeishuConversationId, t as buildFeishuConversationId } from "./conversation-id-BeJL-wq7.js";
4
- import { n as getFeishuThreadBindingManager } from "./thread-bindings-N3wkgkIN.js";
3
+ import { r as parseFeishuConversationId, t as buildFeishuConversationId } from "./conversation-id-VYgGQ-GX.js";
4
+ import { n as getFeishuThreadBindingManager } from "./thread-bindings-CptM_YU6.js";
5
5
  import { normalizeOptionalLowercaseString, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  //#region extensions/feishu/src/subagent-hooks.ts
7
7
  var subagent_hooks_exports = /* @__PURE__ */ __exportAll({
8
8
  handleFeishuSubagentDeliveryTarget: () => handleFeishuSubagentDeliveryTarget,
9
- handleFeishuSubagentEnded: () => handleFeishuSubagentEnded,
10
- handleFeishuSubagentSpawning: () => handleFeishuSubagentSpawning
9
+ handleFeishuSubagentEnded: () => handleFeishuSubagentEnded
11
10
  });
12
- function summarizeError(err) {
13
- if (err instanceof Error) return err.message;
14
- if (typeof err === "string") return err;
15
- return "error";
16
- }
17
11
  function stripProviderPrefix(raw) {
18
12
  return raw.replace(/^(feishu|lark):/i, "").trim();
19
13
  }
@@ -157,60 +151,6 @@ function resolveMatchingChildBinding(params) {
157
151
  }
158
152
  return childBindings.length === 1 ? childBindings[0] : null;
159
153
  }
160
- async function handleFeishuSubagentSpawning(event, ctx) {
161
- if (!event.threadRequested) return;
162
- if (normalizeOptionalLowercaseString(event.requester?.channel) !== "feishu") return;
163
- const manager = getFeishuThreadBindingManager(event.requester?.accountId);
164
- if (!manager) return {
165
- status: "error",
166
- error: "Feishu current-conversation binding is unavailable because the Feishu account monitor is not active."
167
- };
168
- const conversation = resolveFeishuRequesterConversation({
169
- accountId: event.requester?.accountId,
170
- to: event.requester?.to,
171
- threadId: event.requester?.threadId,
172
- requesterSessionKey: ctx.requesterSessionKey
173
- });
174
- if (!conversation) return {
175
- status: "error",
176
- error: "Feishu current-conversation binding is only available in direct messages or topic conversations."
177
- };
178
- try {
179
- const binding = manager.bindConversation({
180
- conversationId: conversation.conversationId,
181
- parentConversationId: conversation.parentConversationId,
182
- targetKind: "subagent",
183
- targetSessionKey: event.childSessionKey,
184
- metadata: {
185
- agentId: event.agentId,
186
- label: event.label,
187
- boundBy: "system",
188
- deliveryTo: event.requester?.to,
189
- deliveryThreadId: event.requester?.threadId != null && event.requester.threadId !== "" ? String(event.requester.threadId) : void 0
190
- }
191
- });
192
- if (!binding) return {
193
- status: "error",
194
- error: "Unable to bind this Feishu conversation to the spawned subagent session. Session mode is unavailable for this target."
195
- };
196
- return {
197
- status: "ok",
198
- threadBindingReady: true,
199
- deliveryOrigin: resolveFeishuDeliveryOrigin({
200
- conversationId: binding.conversationId,
201
- parentConversationId: binding.parentConversationId,
202
- accountId: binding.accountId,
203
- deliveryTo: binding.deliveryTo,
204
- deliveryThreadId: binding.deliveryThreadId
205
- })
206
- };
207
- } catch (err) {
208
- return {
209
- status: "error",
210
- error: `Feishu conversation bind failed: ${summarizeError(err)}`
211
- };
212
- }
213
- }
214
154
  function handleFeishuSubagentDeliveryTarget(event) {
215
155
  if (!event.expectsCompletionMessage) return;
216
156
  if (normalizeOptionalLowercaseString(event.requesterOrigin?.channel) !== "feishu") return;
@@ -236,4 +176,4 @@ function handleFeishuSubagentEnded(event) {
236
176
  getFeishuThreadBindingManager(event.accountId)?.unbindBySessionKey(event.targetSessionKey);
237
177
  }
238
178
  //#endregion
239
- export { subagent_hooks_exports as i, handleFeishuSubagentEnded as n, handleFeishuSubagentSpawning as r, handleFeishuSubagentDeliveryTarget as t };
179
+ export { handleFeishuSubagentEnded as n, subagent_hooks_exports as r, handleFeishuSubagentDeliveryTarget as t };
@@ -1,6 +1,6 @@
1
1
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
2
2
  //#region extensions/feishu/subagent-hooks-api.ts
3
- const loadFeishuSubagentHooksModule = createLazyRuntimeModule(() => import("./subagent-hooks-Cx1cX7rW.js").then((n) => n.i));
3
+ const loadFeishuSubagentHooksModule = createLazyRuntimeModule(() => import("./subagent-hooks-KUi-7vUy.js").then((n) => n.r));
4
4
  function registerFeishuSubagentHooks(api) {
5
5
  api.on("subagent_delivery_target", async (event) => {
6
6
  const { handleFeishuSubagentDeliveryTarget } = await loadFeishuSubagentHooksModule();
@@ -1,8 +1,8 @@
1
+ import { resolveSessionAgentId } from "openclaw/plugin-sdk/agent-scope-runtime";
1
2
  import { registerSessionBindingAdapter, resolveThreadBindingConversationIdFromBindingId, resolveThreadBindingIdleTimeoutMsForChannel, resolveThreadBindingMaxAgeMsForChannel, unregisterSessionBindingAdapter } from "openclaw/plugin-sdk/conversation-runtime";
2
3
  import { isFutureDateTimestampMs } from "openclaw/plugin-sdk/number-runtime";
3
4
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
- import { normalizeAccountId, resolveAgentIdFromSessionKey } from "openclaw/plugin-sdk/routing";
5
- import { resolveDefaultAgentId } from "openclaw/plugin-sdk/agent-runtime";
5
+ import { normalizeAccountId } from "openclaw/plugin-sdk/routing";
6
6
  //#region extensions/feishu/src/thread-bindings.ts
7
7
  const FEISHU_THREAD_BINDINGS_STATE_KEY = Symbol.for("openclaw.feishuThreadBindingsState");
8
8
  let state;
@@ -107,7 +107,10 @@ function createFeishuThreadBindingManager(params) {
107
107
  deliveryThreadId: typeof metadata?.deliveryThreadId === "string" && metadata.deliveryThreadId.trim() ? metadata.deliveryThreadId.trim() : existingLocal?.deliveryThreadId,
108
108
  targetKind: toFeishuTargetKind(targetKind),
109
109
  targetSessionKey: normalizedTargetSessionKey,
110
- agentId: typeof metadata?.agentId === "string" && metadata.agentId.trim() ? metadata.agentId.trim() : existingLocal?.agentId ?? resolveAgentIdFromSessionKey(normalizedTargetSessionKey, resolveDefaultAgentId(params.cfg)),
110
+ agentId: normalizeOptionalString(metadata?.agentId) ?? existingLocal?.agentId ?? resolveSessionAgentId({
111
+ config: params.cfg,
112
+ sessionKey: normalizedTargetSessionKey
113
+ }),
111
114
  label: typeof metadata?.label === "string" && metadata.label.trim() ? metadata.label.trim() : existingLocal?.label,
112
115
  boundBy: typeof metadata?.boundBy === "string" && metadata.boundBy.trim() ? metadata.boundBy.trim() : existingLocal?.boundBy,
113
116
  boundAt: now,
@@ -211,10 +214,5 @@ function createFeishuThreadBindingManager(params) {
211
214
  function getFeishuThreadBindingManager(accountId) {
212
215
  return getState().managersByAccountId.get(normalizeAccountId(accountId)) ?? null;
213
216
  }
214
- const testing = { resetFeishuThreadBindingsForTests() {
215
- for (const manager of getState().managersByAccountId.values()) manager.stop();
216
- getState().managersByAccountId.clear();
217
- getState().bindingsByAccountConversation.clear();
218
- } };
219
217
  //#endregion
220
- export { getFeishuThreadBindingManager as n, testing as r, createFeishuThreadBindingManager as t };
218
+ export { getFeishuThreadBindingManager as n, createFeishuThreadBindingManager as t };
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "id": "feishu",
3
+ "doctorContract": {
4
+ "configRepair": true
5
+ },
3
6
  "name": "Feishu/Lark",
4
7
  "description": "OpenClaw Feishu/Lark channel plugin for chats and workplace tools (community maintained by @m1heng).",
5
8
  "activation": {
@@ -310,7 +313,8 @@
310
313
  "enum": [
311
314
  "env",
312
315
  "file",
313
- "exec"
316
+ "exec",
317
+ "store"
314
318
  ]
315
319
  },
316
320
  "provider": {
@@ -580,6 +584,29 @@
580
584
  ],
581
585
  "additionalProperties": false
582
586
  },
587
+ {
588
+ "type": "object",
589
+ "properties": {
590
+ "source": {
591
+ "type": "string",
592
+ "const": "store"
593
+ },
594
+ "provider": {
595
+ "type": "string",
596
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
597
+ },
598
+ "id": {
599
+ "type": "string",
600
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
601
+ }
602
+ },
603
+ "required": [
604
+ "source",
605
+ "provider",
606
+ "id"
607
+ ],
608
+ "additionalProperties": false
609
+ },
583
610
  {
584
611
  "type": "object",
585
612
  "properties": {
@@ -658,6 +685,29 @@
658
685
  ],
659
686
  "additionalProperties": false
660
687
  },
688
+ {
689
+ "type": "object",
690
+ "properties": {
691
+ "source": {
692
+ "type": "string",
693
+ "const": "store"
694
+ },
695
+ "provider": {
696
+ "type": "string",
697
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
698
+ },
699
+ "id": {
700
+ "type": "string",
701
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
702
+ }
703
+ },
704
+ "required": [
705
+ "source",
706
+ "provider",
707
+ "id"
708
+ ],
709
+ "additionalProperties": false
710
+ },
661
711
  {
662
712
  "type": "object",
663
713
  "properties": {
@@ -736,6 +786,29 @@
736
786
  ],
737
787
  "additionalProperties": false
738
788
  },
789
+ {
790
+ "type": "object",
791
+ "properties": {
792
+ "source": {
793
+ "type": "string",
794
+ "const": "store"
795
+ },
796
+ "provider": {
797
+ "type": "string",
798
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
799
+ },
800
+ "id": {
801
+ "type": "string",
802
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
803
+ }
804
+ },
805
+ "required": [
806
+ "source",
807
+ "provider",
808
+ "id"
809
+ ],
810
+ "additionalProperties": false
811
+ },
739
812
  {
740
813
  "type": "object",
741
814
  "properties": {
@@ -1348,6 +1421,29 @@
1348
1421
  ],
1349
1422
  "additionalProperties": false
1350
1423
  },
1424
+ {
1425
+ "type": "object",
1426
+ "properties": {
1427
+ "source": {
1428
+ "type": "string",
1429
+ "const": "store"
1430
+ },
1431
+ "provider": {
1432
+ "type": "string",
1433
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1434
+ },
1435
+ "id": {
1436
+ "type": "string",
1437
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
1438
+ }
1439
+ },
1440
+ "required": [
1441
+ "source",
1442
+ "provider",
1443
+ "id"
1444
+ ],
1445
+ "additionalProperties": false
1446
+ },
1351
1447
  {
1352
1448
  "type": "object",
1353
1449
  "properties": {
@@ -1426,6 +1522,29 @@
1426
1522
  ],
1427
1523
  "additionalProperties": false
1428
1524
  },
1525
+ {
1526
+ "type": "object",
1527
+ "properties": {
1528
+ "source": {
1529
+ "type": "string",
1530
+ "const": "store"
1531
+ },
1532
+ "provider": {
1533
+ "type": "string",
1534
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1535
+ },
1536
+ "id": {
1537
+ "type": "string",
1538
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
1539
+ }
1540
+ },
1541
+ "required": [
1542
+ "source",
1543
+ "provider",
1544
+ "id"
1545
+ ],
1546
+ "additionalProperties": false
1547
+ },
1429
1548
  {
1430
1549
  "type": "object",
1431
1550
  "properties": {
@@ -1504,6 +1623,29 @@
1504
1623
  ],
1505
1624
  "additionalProperties": false
1506
1625
  },
1626
+ {
1627
+ "type": "object",
1628
+ "properties": {
1629
+ "source": {
1630
+ "type": "string",
1631
+ "const": "store"
1632
+ },
1633
+ "provider": {
1634
+ "type": "string",
1635
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1636
+ },
1637
+ "id": {
1638
+ "type": "string",
1639
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
1640
+ }
1641
+ },
1642
+ "required": [
1643
+ "source",
1644
+ "provider",
1645
+ "id"
1646
+ ],
1647
+ "additionalProperties": false
1648
+ },
1507
1649
  {
1508
1650
  "type": "object",
1509
1651
  "properties": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/feishu",
3
- "version": "2026.7.2-beta.7",
3
+ "version": "2026.8.1-beta.3",
4
4
  "description": "OpenClaw Feishu/Lark channel plugin for chats and workplace tools (community maintained by @m1heng).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,7 +16,7 @@
16
16
  "zod": "4.4.3"
17
17
  },
18
18
  "peerDependencies": {
19
- "openclaw": ">=2026.7.2-beta.7"
19
+ "openclaw": ">=2026.8.1-beta.3"
20
20
  },
21
21
  "peerDependenciesMeta": {
22
22
  "openclaw": {
@@ -60,10 +60,10 @@
60
60
  "minHostVersion": ">=2026.5.29"
61
61
  },
62
62
  "compat": {
63
- "pluginApi": ">=2026.7.2-beta.7"
63
+ "pluginApi": ">=2026.8.1-beta.3"
64
64
  },
65
65
  "build": {
66
- "openclawVersion": "2026.7.2-beta.7"
66
+ "openclawVersion": "2026.8.1-beta.3"
67
67
  },
68
68
  "release": {
69
69
  "publishToClawHub": true,