@larksuite/openclaw-lark 2026.7.9 → 2026.7.10-beta.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@larksuite/openclaw-lark",
3
- "version": "2026.7.9",
3
+ "version": "2026.7.10-beta.0",
4
4
  "description": "OpenClaw Lark/Feishu channel plugin",
5
5
  "exports": {
6
6
  ".": {
@@ -23,7 +23,7 @@ const log = (0, lark_logger_1.larkLogger)('channel/interactive-dispatch');
23
23
  function extractBasics(data) {
24
24
  try {
25
25
  const ev = data;
26
- const action = ev.action?.value?.action ?? ev.action?.name;
26
+ const action = ev.action?.value?.action ?? ev.action?.name ?? formSubmitActionName(ev);
27
27
  if (!action || typeof action !== 'string')
28
28
  return null;
29
29
  const openChatId = ev.open_chat_id ?? ev.context?.open_chat_id;
@@ -39,6 +39,12 @@ function extractBasics(data) {
39
39
  return null;
40
40
  }
41
41
  }
42
+ function formSubmitActionName(ev) {
43
+ const tag = ev.action?.tag;
44
+ if (tag !== 'form_submit')
45
+ return undefined;
46
+ return ev.action?.form_name;
47
+ }
42
48
  function buildMarkdownCard(text) {
43
49
  return {
44
50
  schema: '2.0',
@@ -173,13 +173,15 @@ function handleAskUserAction(data, _cfg, accountId) {
173
173
  openChatId = event.open_chat_id ?? event.context?.open_chat_id;
174
174
  const actionTag = event.action?.tag;
175
175
  const actionName = event.action?.name;
176
+ const formName = event.action?.form_name;
176
177
  formValue = event.action?.form_value;
177
178
  log.info(`card action received: tag=${actionTag}, name=${actionName}, chat=${openChatId}, ` +
178
179
  `sender=${senderOpenId}, hasFormValue=${!!formValue}, hasValue=${!!event.action?.value}`);
179
180
  // Extract action/operationId from button value (may not propagate for form submit)
180
181
  const val = event.action?.value;
181
182
  if (val && typeof val === 'object') {
182
- action = val.action;
183
+ const valueAction = val.action;
184
+ action = valueAction === ACTION_SUBMIT ? ACTION_SUBMIT : undefined;
183
185
  operationId = val.operation_id;
184
186
  }
185
187
  // Detect form submit by button name
@@ -196,7 +198,13 @@ function handleAskUserAction(data, _cfg, accountId) {
196
198
  action = ACTION_SUBMIT;
197
199
  }
198
200
  // Some SDK versions emit tag='form_submit' without button value/name.
199
- if (!action && actionTag === 'form_submit' && (!actionName || actionName.startsWith(SUBMIT_BUTTON_PREFIX))) {
201
+ // Business plugins also use form_submit; a form_name means it belongs to
202
+ // the named business form, while absent form_name keeps the old AskUser
203
+ // chat-scoped fallback for legacy callbacks.
204
+ if (!action &&
205
+ actionTag === 'form_submit' &&
206
+ !formName &&
207
+ (!actionName || actionName.startsWith(SUBMIT_BUTTON_PREFIX))) {
200
208
  action = ACTION_SUBMIT;
201
209
  if (!formValue && event.action) {
202
210
  formValue = event.action;