@larksuite/openclaw-lark 2025.7.15-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.
Files changed (426) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/bin/openclaw-lark.js +39 -0
  4. package/index.d.ts +36 -0
  5. package/index.js +188 -0
  6. package/openclaw.plugin.json +64 -0
  7. package/package.json +63 -0
  8. package/secret-contract-api.d.ts +15 -0
  9. package/secret-contract-api.js +78 -0
  10. package/skills/feishu-bitable/SKILL.md +248 -0
  11. package/skills/feishu-bitable/references/examples.md +813 -0
  12. package/skills/feishu-bitable/references/field-properties.md +763 -0
  13. package/skills/feishu-bitable/references/record-values.md +911 -0
  14. package/skills/feishu-calendar/SKILL.md +242 -0
  15. package/skills/feishu-channel-rules/SKILL.md +18 -0
  16. package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
  17. package/skills/feishu-create-doc/SKILL.md +719 -0
  18. package/skills/feishu-fetch-doc/SKILL.md +93 -0
  19. package/skills/feishu-im-read/SKILL.md +163 -0
  20. package/skills/feishu-task/SKILL.md +340 -0
  21. package/skills/feishu-troubleshoot/SKILL.md +70 -0
  22. package/skills/feishu-update-doc/SKILL.md +285 -0
  23. package/src/card/builder.d.ts +152 -0
  24. package/src/card/builder.js +794 -0
  25. package/src/card/card-error.d.ts +91 -0
  26. package/src/card/card-error.js +206 -0
  27. package/src/card/cardkit.d.ts +90 -0
  28. package/src/card/cardkit.js +203 -0
  29. package/src/card/flush-controller.d.ts +45 -0
  30. package/src/card/flush-controller.js +138 -0
  31. package/src/card/image-resolver.d.ts +45 -0
  32. package/src/card/image-resolver.js +116 -0
  33. package/src/card/markdown-style.d.ts +16 -0
  34. package/src/card/markdown-style.js +106 -0
  35. package/src/card/reasoning-utils.d.ts +14 -0
  36. package/src/card/reasoning-utils.js +64 -0
  37. package/src/card/reply-dispatcher-types.d.ts +132 -0
  38. package/src/card/reply-dispatcher-types.js +61 -0
  39. package/src/card/reply-dispatcher.d.ts +15 -0
  40. package/src/card/reply-dispatcher.js +447 -0
  41. package/src/card/reply-mode.d.ts +41 -0
  42. package/src/card/reply-mode.js +70 -0
  43. package/src/card/streaming-card-controller.d.ts +118 -0
  44. package/src/card/streaming-card-controller.js +1045 -0
  45. package/src/card/tool-use-config.d.ts +26 -0
  46. package/src/card/tool-use-config.js +76 -0
  47. package/src/card/tool-use-display.d.ts +37 -0
  48. package/src/card/tool-use-display.js +476 -0
  49. package/src/card/tool-use-trace-store.d.ts +51 -0
  50. package/src/card/tool-use-trace-store.js +271 -0
  51. package/src/card/unavailable-guard.d.ts +35 -0
  52. package/src/card/unavailable-guard.js +87 -0
  53. package/src/channel/abort-detect.d.ts +47 -0
  54. package/src/channel/abort-detect.js +219 -0
  55. package/src/channel/chat-queue.d.ts +41 -0
  56. package/src/channel/chat-queue.js +68 -0
  57. package/src/channel/config-adapter.d.ts +23 -0
  58. package/src/channel/config-adapter.js +107 -0
  59. package/src/channel/directory.d.ts +57 -0
  60. package/src/channel/directory.js +197 -0
  61. package/src/channel/event-handlers.d.ts +17 -0
  62. package/src/channel/event-handlers.js +380 -0
  63. package/src/channel/interactive-dispatch.d.ts +59 -0
  64. package/src/channel/interactive-dispatch.js +195 -0
  65. package/src/channel/monitor.d.ts +17 -0
  66. package/src/channel/monitor.js +140 -0
  67. package/src/channel/onboarding-config.d.ts +18 -0
  68. package/src/channel/onboarding-config.js +96 -0
  69. package/src/channel/onboarding-migrate.d.ts +25 -0
  70. package/src/channel/onboarding-migrate.js +70 -0
  71. package/src/channel/onboarding.d.ts +12 -0
  72. package/src/channel/onboarding.js +300 -0
  73. package/src/channel/plugin.d.ts +13 -0
  74. package/src/channel/plugin.js +310 -0
  75. package/src/channel/probe.d.ts +14 -0
  76. package/src/channel/probe.js +24 -0
  77. package/src/channel/types.d.ts +37 -0
  78. package/src/channel/types.js +8 -0
  79. package/src/commands/auth.d.ts +21 -0
  80. package/src/commands/auth.js +165 -0
  81. package/src/commands/diagnose.d.ts +69 -0
  82. package/src/commands/diagnose.js +848 -0
  83. package/src/commands/doctor.d.ts +27 -0
  84. package/src/commands/doctor.js +588 -0
  85. package/src/commands/index.d.ts +25 -0
  86. package/src/commands/index.js +219 -0
  87. package/src/commands/locale.d.ts +7 -0
  88. package/src/commands/locale.js +8 -0
  89. package/src/core/accounts.d.ts +51 -0
  90. package/src/core/accounts.js +219 -0
  91. package/src/core/agent-config.d.ts +100 -0
  92. package/src/core/agent-config.js +148 -0
  93. package/src/core/api-error.d.ts +48 -0
  94. package/src/core/api-error.js +117 -0
  95. package/src/core/app-owner-fallback.d.ts +22 -0
  96. package/src/core/app-owner-fallback.js +39 -0
  97. package/src/core/app-scope-checker.d.ts +87 -0
  98. package/src/core/app-scope-checker.js +198 -0
  99. package/src/core/auth-errors.d.ts +144 -0
  100. package/src/core/auth-errors.js +160 -0
  101. package/src/core/card-action-operator.d.ts +33 -0
  102. package/src/core/card-action-operator.js +30 -0
  103. package/src/core/chat-info-cache.d.ts +67 -0
  104. package/src/core/chat-info-cache.js +165 -0
  105. package/src/core/comment-target.d.ts +65 -0
  106. package/src/core/comment-target.js +100 -0
  107. package/src/core/config-schema.d.ts +490 -0
  108. package/src/core/config-schema.js +223 -0
  109. package/src/core/device-flow.d.ts +77 -0
  110. package/src/core/device-flow.js +217 -0
  111. package/src/core/domains.d.ts +18 -0
  112. package/src/core/domains.js +34 -0
  113. package/src/core/feishu-fetch.d.ts +18 -0
  114. package/src/core/feishu-fetch.js +28 -0
  115. package/src/core/footer-config.d.ts +24 -0
  116. package/src/core/footer-config.js +51 -0
  117. package/src/core/lark-client.d.ts +125 -0
  118. package/src/core/lark-client.js +468 -0
  119. package/src/core/lark-logger.d.ts +23 -0
  120. package/src/core/lark-logger.js +160 -0
  121. package/src/core/lark-ticket.d.ts +29 -0
  122. package/src/core/lark-ticket.js +40 -0
  123. package/src/core/message-unavailable.d.ts +53 -0
  124. package/src/core/message-unavailable.js +142 -0
  125. package/src/core/owner-policy.d.ts +32 -0
  126. package/src/core/owner-policy.js +55 -0
  127. package/src/core/permission-url.d.ts +22 -0
  128. package/src/core/permission-url.js +76 -0
  129. package/src/core/raw-request.d.ts +27 -0
  130. package/src/core/raw-request.js +90 -0
  131. package/src/core/runtime-store.d.ts +13 -0
  132. package/src/core/runtime-store.js +29 -0
  133. package/src/core/scope-manager.d.ts +168 -0
  134. package/src/core/scope-manager.js +224 -0
  135. package/src/core/sdk-compat.d.ts +20 -0
  136. package/src/core/sdk-compat.js +28 -0
  137. package/src/core/security-check.d.ts +72 -0
  138. package/src/core/security-check.js +184 -0
  139. package/src/core/shutdown-hooks.d.ts +22 -0
  140. package/src/core/shutdown-hooks.js +61 -0
  141. package/src/core/synthetic-target.d.ts +33 -0
  142. package/src/core/synthetic-target.js +40 -0
  143. package/src/core/targets.d.ts +60 -0
  144. package/src/core/targets.js +173 -0
  145. package/src/core/token-store.d.ts +54 -0
  146. package/src/core/token-store.js +326 -0
  147. package/src/core/tool-client.d.ts +176 -0
  148. package/src/core/tool-client.js +426 -0
  149. package/src/core/tool-scopes.d.ts +156 -0
  150. package/src/core/tool-scopes.js +344 -0
  151. package/src/core/tools-config.d.ts +55 -0
  152. package/src/core/tools-config.js +143 -0
  153. package/src/core/types.d.ts +91 -0
  154. package/src/core/types.js +12 -0
  155. package/src/core/uat-client.d.ts +46 -0
  156. package/src/core/uat-client.js +192 -0
  157. package/src/core/version.d.ts +31 -0
  158. package/src/core/version.js +69 -0
  159. package/src/messaging/converters/audio.d.ts +8 -0
  160. package/src/messaging/converters/audio.js +24 -0
  161. package/src/messaging/converters/calendar.d.ts +13 -0
  162. package/src/messaging/converters/calendar.js +56 -0
  163. package/src/messaging/converters/content-converter-helpers.d.ts +30 -0
  164. package/src/messaging/converters/content-converter-helpers.js +82 -0
  165. package/src/messaging/converters/content-converter.d.ts +24 -0
  166. package/src/messaging/converters/content-converter.js +40 -0
  167. package/src/messaging/converters/file.d.ts +8 -0
  168. package/src/messaging/converters/file.js +24 -0
  169. package/src/messaging/converters/folder.d.ts +8 -0
  170. package/src/messaging/converters/folder.js +24 -0
  171. package/src/messaging/converters/hongbao.d.ts +8 -0
  172. package/src/messaging/converters/hongbao.js +20 -0
  173. package/src/messaging/converters/image.d.ts +8 -0
  174. package/src/messaging/converters/image.js +22 -0
  175. package/src/messaging/converters/index.d.ts +8 -0
  176. package/src/messaging/converters/index.js +53 -0
  177. package/src/messaging/converters/interactive/card-converter.d.ts +76 -0
  178. package/src/messaging/converters/interactive/card-converter.js +1177 -0
  179. package/src/messaging/converters/interactive/card-utils.d.ts +9 -0
  180. package/src/messaging/converters/interactive/card-utils.js +47 -0
  181. package/src/messaging/converters/interactive/index.d.ts +8 -0
  182. package/src/messaging/converters/interactive/index.js +25 -0
  183. package/src/messaging/converters/interactive/legacy.d.ts +11 -0
  184. package/src/messaging/converters/interactive/legacy.js +60 -0
  185. package/src/messaging/converters/interactive/types.d.ts +23 -0
  186. package/src/messaging/converters/interactive/types.js +27 -0
  187. package/src/messaging/converters/location.d.ts +8 -0
  188. package/src/messaging/converters/location.js +23 -0
  189. package/src/messaging/converters/merge-forward.d.ts +32 -0
  190. package/src/messaging/converters/merge-forward.js +235 -0
  191. package/src/messaging/converters/post.d.ts +11 -0
  192. package/src/messaging/converters/post.js +235 -0
  193. package/src/messaging/converters/share.d.ts +9 -0
  194. package/src/messaging/converters/share.js +28 -0
  195. package/src/messaging/converters/sticker.d.ts +8 -0
  196. package/src/messaging/converters/sticker.js +22 -0
  197. package/src/messaging/converters/system.d.ts +12 -0
  198. package/src/messaging/converters/system.js +36 -0
  199. package/src/messaging/converters/text.d.ts +8 -0
  200. package/src/messaging/converters/text.js +18 -0
  201. package/src/messaging/converters/todo.d.ts +8 -0
  202. package/src/messaging/converters/todo.js +45 -0
  203. package/src/messaging/converters/types.d.ts +114 -0
  204. package/src/messaging/converters/types.js +8 -0
  205. package/src/messaging/converters/unknown.d.ts +8 -0
  206. package/src/messaging/converters/unknown.js +20 -0
  207. package/src/messaging/converters/utils.d.ts +22 -0
  208. package/src/messaging/converters/utils.js +57 -0
  209. package/src/messaging/converters/video-chat.d.ts +8 -0
  210. package/src/messaging/converters/video-chat.js +31 -0
  211. package/src/messaging/converters/video.d.ts +8 -0
  212. package/src/messaging/converters/video.js +35 -0
  213. package/src/messaging/converters/vote.d.ts +8 -0
  214. package/src/messaging/converters/vote.js +28 -0
  215. package/src/messaging/inbound/bot-content.d.ts +84 -0
  216. package/src/messaging/inbound/bot-content.js +117 -0
  217. package/src/messaging/inbound/bot-loop-guard.d.ts +48 -0
  218. package/src/messaging/inbound/bot-loop-guard.js +89 -0
  219. package/src/messaging/inbound/comment-context.d.ts +82 -0
  220. package/src/messaging/inbound/comment-context.js +353 -0
  221. package/src/messaging/inbound/comment-handler.d.ts +30 -0
  222. package/src/messaging/inbound/comment-handler.js +269 -0
  223. package/src/messaging/inbound/dedup.d.ts +59 -0
  224. package/src/messaging/inbound/dedup.js +121 -0
  225. package/src/messaging/inbound/dispatch-builders.d.ts +104 -0
  226. package/src/messaging/inbound/dispatch-builders.js +241 -0
  227. package/src/messaging/inbound/dispatch-commands.d.ts +22 -0
  228. package/src/messaging/inbound/dispatch-commands.js +131 -0
  229. package/src/messaging/inbound/dispatch-context.d.ts +67 -0
  230. package/src/messaging/inbound/dispatch-context.js +153 -0
  231. package/src/messaging/inbound/dispatch.d.ts +50 -0
  232. package/src/messaging/inbound/dispatch.js +477 -0
  233. package/src/messaging/inbound/enrich.d.ts +102 -0
  234. package/src/messaging/inbound/enrich.js +236 -0
  235. package/src/messaging/inbound/gate-effects.d.ts +23 -0
  236. package/src/messaging/inbound/gate-effects.js +46 -0
  237. package/src/messaging/inbound/gate.d.ts +91 -0
  238. package/src/messaging/inbound/gate.js +342 -0
  239. package/src/messaging/inbound/handler-registry.d.ts +25 -0
  240. package/src/messaging/inbound/handler-registry.js +23 -0
  241. package/src/messaging/inbound/handler.d.ts +37 -0
  242. package/src/messaging/inbound/handler.js +286 -0
  243. package/src/messaging/inbound/media-resolver.d.ts +32 -0
  244. package/src/messaging/inbound/media-resolver.js +91 -0
  245. package/src/messaging/inbound/mention-registry.d.ts +59 -0
  246. package/src/messaging/inbound/mention-registry.js +115 -0
  247. package/src/messaging/inbound/mention.d.ts +48 -0
  248. package/src/messaging/inbound/mention.js +102 -0
  249. package/src/messaging/inbound/parse-io.d.ts +50 -0
  250. package/src/messaging/inbound/parse-io.js +86 -0
  251. package/src/messaging/inbound/parse.d.ts +28 -0
  252. package/src/messaging/inbound/parse.js +128 -0
  253. package/src/messaging/inbound/permission.d.ts +17 -0
  254. package/src/messaging/inbound/permission.js +44 -0
  255. package/src/messaging/inbound/policy.d.ts +95 -0
  256. package/src/messaging/inbound/policy.js +168 -0
  257. package/src/messaging/inbound/reaction-handler.d.ts +62 -0
  258. package/src/messaging/inbound/reaction-handler.js +259 -0
  259. package/src/messaging/inbound/sentinel-store.d.ts +37 -0
  260. package/src/messaging/inbound/sentinel-store.js +98 -0
  261. package/src/messaging/inbound/synthetic-message.d.ts +26 -0
  262. package/src/messaging/inbound/synthetic-message.js +59 -0
  263. package/src/messaging/inbound/user-name-cache-store.d.ts +62 -0
  264. package/src/messaging/inbound/user-name-cache-store.js +236 -0
  265. package/src/messaging/inbound/user-name-cache.d.ts +78 -0
  266. package/src/messaging/inbound/user-name-cache.js +306 -0
  267. package/src/messaging/inbound/vc-meeting-invited-handler.d.ts +20 -0
  268. package/src/messaging/inbound/vc-meeting-invited-handler.js +236 -0
  269. package/src/messaging/inbound/vc-sender.d.ts +41 -0
  270. package/src/messaging/inbound/vc-sender.js +53 -0
  271. package/src/messaging/outbound/actions.d.ts +16 -0
  272. package/src/messaging/outbound/actions.js +329 -0
  273. package/src/messaging/outbound/bot-peer-context.d.ts +42 -0
  274. package/src/messaging/outbound/bot-peer-context.js +40 -0
  275. package/src/messaging/outbound/chat-manage.d.ts +64 -0
  276. package/src/messaging/outbound/chat-manage.js +117 -0
  277. package/src/messaging/outbound/deliver.d.ts +186 -0
  278. package/src/messaging/outbound/deliver.js +410 -0
  279. package/src/messaging/outbound/fetch.d.ts +12 -0
  280. package/src/messaging/outbound/fetch.js +17 -0
  281. package/src/messaging/outbound/forward.d.ts +26 -0
  282. package/src/messaging/outbound/forward.js +51 -0
  283. package/src/messaging/outbound/media-url-utils.d.ts +29 -0
  284. package/src/messaging/outbound/media-url-utils.js +172 -0
  285. package/src/messaging/outbound/media.d.ts +260 -0
  286. package/src/messaging/outbound/media.js +865 -0
  287. package/src/messaging/outbound/normalize-mentions.d.ts +50 -0
  288. package/src/messaging/outbound/normalize-mentions.js +166 -0
  289. package/src/messaging/outbound/outbound-mention.d.ts +41 -0
  290. package/src/messaging/outbound/outbound-mention.js +112 -0
  291. package/src/messaging/outbound/outbound.d.ts +79 -0
  292. package/src/messaging/outbound/outbound.js +195 -0
  293. package/src/messaging/outbound/reactions.d.ts +124 -0
  294. package/src/messaging/outbound/reactions.js +384 -0
  295. package/src/messaging/outbound/send.d.ts +153 -0
  296. package/src/messaging/outbound/send.js +417 -0
  297. package/src/messaging/outbound/typing.d.ts +60 -0
  298. package/src/messaging/outbound/typing.js +139 -0
  299. package/src/messaging/shared/message-lookup.d.ts +54 -0
  300. package/src/messaging/shared/message-lookup.js +120 -0
  301. package/src/messaging/types.d.ts +316 -0
  302. package/src/messaging/types.js +11 -0
  303. package/src/tools/ask-user-question.d.ts +32 -0
  304. package/src/tools/ask-user-question.js +922 -0
  305. package/src/tools/auto-auth.d.ts +57 -0
  306. package/src/tools/auto-auth.js +904 -0
  307. package/src/tools/helpers.d.ts +264 -0
  308. package/src/tools/helpers.js +389 -0
  309. package/src/tools/mcp/doc/create.d.ts +12 -0
  310. package/src/tools/mcp/doc/create.js +47 -0
  311. package/src/tools/mcp/doc/fetch.d.ts +12 -0
  312. package/src/tools/mcp/doc/fetch.js +39 -0
  313. package/src/tools/mcp/doc/index.d.ts +12 -0
  314. package/src/tools/mcp/doc/index.js +50 -0
  315. package/src/tools/mcp/doc/update.d.ts +12 -0
  316. package/src/tools/mcp/doc/update.js +64 -0
  317. package/src/tools/mcp/shared.d.ts +59 -0
  318. package/src/tools/mcp/shared.js +239 -0
  319. package/src/tools/oapi/bitable/app-table-field.d.ts +16 -0
  320. package/src/tools/oapi/bitable/app-table-field.js +225 -0
  321. package/src/tools/oapi/bitable/app-table-record.d.ts +20 -0
  322. package/src/tools/oapi/bitable/app-table-record.js +439 -0
  323. package/src/tools/oapi/bitable/app-table-view.d.ts +16 -0
  324. package/src/tools/oapi/bitable/app-table-view.js +172 -0
  325. package/src/tools/oapi/bitable/app-table.d.ts +17 -0
  326. package/src/tools/oapi/bitable/app-table.js +195 -0
  327. package/src/tools/oapi/bitable/app.d.ts +18 -0
  328. package/src/tools/oapi/bitable/app.js +189 -0
  329. package/src/tools/oapi/bitable/index.d.ts +9 -0
  330. package/src/tools/oapi/bitable/index.js +17 -0
  331. package/src/tools/oapi/calendar/calendar.d.ts +15 -0
  332. package/src/tools/oapi/calendar/calendar.js +125 -0
  333. package/src/tools/oapi/calendar/event-attendee.d.ts +14 -0
  334. package/src/tools/oapi/calendar/event-attendee.js +161 -0
  335. package/src/tools/oapi/calendar/event.d.ts +16 -0
  336. package/src/tools/oapi/calendar/event.js +712 -0
  337. package/src/tools/oapi/calendar/freebusy.d.ts +13 -0
  338. package/src/tools/oapi/calendar/freebusy.js +114 -0
  339. package/src/tools/oapi/calendar/index.d.ts +8 -0
  340. package/src/tools/oapi/calendar/index.js +15 -0
  341. package/src/tools/oapi/chat/chat.d.ts +16 -0
  342. package/src/tools/oapi/chat/chat.js +127 -0
  343. package/src/tools/oapi/chat/index.d.ts +10 -0
  344. package/src/tools/oapi/chat/index.js +23 -0
  345. package/src/tools/oapi/chat/members.d.ts +11 -0
  346. package/src/tools/oapi/chat/members.js +84 -0
  347. package/src/tools/oapi/common/get-user.d.ts +12 -0
  348. package/src/tools/oapi/common/get-user.js +109 -0
  349. package/src/tools/oapi/common/index.d.ts +6 -0
  350. package/src/tools/oapi/common/index.js +11 -0
  351. package/src/tools/oapi/common/search-user.d.ts +11 -0
  352. package/src/tools/oapi/common/search-user.js +76 -0
  353. package/src/tools/oapi/drive/doc-comments.d.ts +15 -0
  354. package/src/tools/oapi/drive/doc-comments.js +351 -0
  355. package/src/tools/oapi/drive/doc-media.d.ts +19 -0
  356. package/src/tools/oapi/drive/doc-media.js +371 -0
  357. package/src/tools/oapi/drive/file.d.ts +19 -0
  358. package/src/tools/oapi/drive/file.js +519 -0
  359. package/src/tools/oapi/drive/index.d.ts +12 -0
  360. package/src/tools/oapi/drive/index.js +45 -0
  361. package/src/tools/oapi/helpers.d.ts +183 -0
  362. package/src/tools/oapi/helpers.js +385 -0
  363. package/src/tools/oapi/im/format-messages.d.ts +50 -0
  364. package/src/tools/oapi/im/format-messages.js +169 -0
  365. package/src/tools/oapi/im/index.d.ts +10 -0
  366. package/src/tools/oapi/im/index.js +25 -0
  367. package/src/tools/oapi/im/message-read.d.ts +13 -0
  368. package/src/tools/oapi/im/message-read.js +419 -0
  369. package/src/tools/oapi/im/message.d.ts +16 -0
  370. package/src/tools/oapi/im/message.js +152 -0
  371. package/src/tools/oapi/im/resource.d.ts +13 -0
  372. package/src/tools/oapi/im/resource.js +186 -0
  373. package/src/tools/oapi/im/time-utils.d.ts +46 -0
  374. package/src/tools/oapi/im/time-utils.js +212 -0
  375. package/src/tools/oapi/im/user-name-uat.d.ts +26 -0
  376. package/src/tools/oapi/im/user-name-uat.js +143 -0
  377. package/src/tools/oapi/index.d.ts +11 -0
  378. package/src/tools/oapi/index.js +64 -0
  379. package/src/tools/oapi/sdk-types.d.ts +96 -0
  380. package/src/tools/oapi/sdk-types.js +13 -0
  381. package/src/tools/oapi/search/doc-search.d.ts +13 -0
  382. package/src/tools/oapi/search/doc-search.js +194 -0
  383. package/src/tools/oapi/search/index.d.ts +12 -0
  384. package/src/tools/oapi/search/index.js +37 -0
  385. package/src/tools/oapi/sheets/index.d.ts +12 -0
  386. package/src/tools/oapi/sheets/index.js +35 -0
  387. package/src/tools/oapi/sheets/sheet.d.ts +16 -0
  388. package/src/tools/oapi/sheets/sheet.js +688 -0
  389. package/src/tools/oapi/task/attachment.d.ts +18 -0
  390. package/src/tools/oapi/task/attachment.js +107 -0
  391. package/src/tools/oapi/task/comment.d.ts +15 -0
  392. package/src/tools/oapi/task/comment.js +149 -0
  393. package/src/tools/oapi/task/index.d.ts +11 -0
  394. package/src/tools/oapi/task/index.js +21 -0
  395. package/src/tools/oapi/task/section.d.ts +17 -0
  396. package/src/tools/oapi/task/section.js +293 -0
  397. package/src/tools/oapi/task/subtask.d.ts +14 -0
  398. package/src/tools/oapi/task/subtask.js +171 -0
  399. package/src/tools/oapi/task/task.d.ts +19 -0
  400. package/src/tools/oapi/task/task.js +512 -0
  401. package/src/tools/oapi/task/task_agent.d.ts +14 -0
  402. package/src/tools/oapi/task/task_agent.js +108 -0
  403. package/src/tools/oapi/task/tasklist.d.ts +19 -0
  404. package/src/tools/oapi/task/tasklist.js +276 -0
  405. package/src/tools/oapi/wiki/index.d.ts +12 -0
  406. package/src/tools/oapi/wiki/index.js +42 -0
  407. package/src/tools/oapi/wiki/space-node.d.ts +17 -0
  408. package/src/tools/oapi/wiki/space-node.js +233 -0
  409. package/src/tools/oapi/wiki/space.d.ts +15 -0
  410. package/src/tools/oapi/wiki/space.js +133 -0
  411. package/src/tools/oauth-batch-auth.d.ts +11 -0
  412. package/src/tools/oauth-batch-auth.js +150 -0
  413. package/src/tools/oauth-cards.d.ts +39 -0
  414. package/src/tools/oauth-cards.js +324 -0
  415. package/src/tools/oauth.d.ts +47 -0
  416. package/src/tools/oauth.js +592 -0
  417. package/src/tools/onboarding-auth.d.ts +27 -0
  418. package/src/tools/onboarding-auth.js +133 -0
  419. package/src/tools/tat/im/index.d.ts +15 -0
  420. package/src/tools/tat/im/index.js +22 -0
  421. package/src/tools/tat/im/resource.d.ts +15 -0
  422. package/src/tools/tat/im/resource.js +192 -0
  423. package/tsdown.config.d.ts +2 -0
  424. package/tsdown.config.js +25 -0
  425. package/vitest.config.d.ts +2 -0
  426. package/vitest.config.js +12 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Process-level chat task queue.
6
+ *
7
+ * Although located in channel/, this module is intentionally shared
8
+ * across channel, messaging, tools, and card layers as a process-level
9
+ * singleton. Consumers: monitor.ts, dispatch.ts, oauth.ts, auto-auth.ts.
10
+ *
11
+ * Ensures tasks targeting the same account+chat are executed serially.
12
+ * Used by both websocket inbound messages and synthetic message paths.
13
+ */
14
+ type QueueStatus = 'queued' | 'immediate';
15
+ export interface ActiveDispatcherEntry {
16
+ abortCard: () => Promise<void>;
17
+ abortController?: AbortController;
18
+ }
19
+ /**
20
+ * Append `:thread:{threadId}` suffix when threadId is present.
21
+ * Consistent with the SDK's `:thread:` separator convention.
22
+ */
23
+ export declare function threadScopedKey(base: string, threadId?: string): string;
24
+ export declare function buildQueueKey(accountId: string, chatId: string, threadId?: string): string;
25
+ export declare function registerActiveDispatcher(key: string, entry: ActiveDispatcherEntry): void;
26
+ export declare function unregisterActiveDispatcher(key: string): void;
27
+ export declare function getActiveDispatcher(key: string): ActiveDispatcherEntry | undefined;
28
+ /** Check whether the queue has an active task for the given key. */
29
+ export declare function hasActiveTask(key: string): boolean;
30
+ export declare function enqueueFeishuChatTask(params: {
31
+ accountId: string;
32
+ chatId: string;
33
+ threadId?: string;
34
+ task: () => Promise<void>;
35
+ }): {
36
+ status: QueueStatus;
37
+ promise: Promise<void>;
38
+ };
39
+ /** @internal Test-only: reset all queue and dispatcher state. */
40
+ export declare function _resetChatQueueState(): void;
41
+ export {};
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
4
+ * SPDX-License-Identifier: MIT
5
+ *
6
+ * Process-level chat task queue.
7
+ *
8
+ * Although located in channel/, this module is intentionally shared
9
+ * across channel, messaging, tools, and card layers as a process-level
10
+ * singleton. Consumers: monitor.ts, dispatch.ts, oauth.ts, auto-auth.ts.
11
+ *
12
+ * Ensures tasks targeting the same account+chat are executed serially.
13
+ * Used by both websocket inbound messages and synthetic message paths.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.threadScopedKey = threadScopedKey;
17
+ exports.buildQueueKey = buildQueueKey;
18
+ exports.registerActiveDispatcher = registerActiveDispatcher;
19
+ exports.unregisterActiveDispatcher = unregisterActiveDispatcher;
20
+ exports.getActiveDispatcher = getActiveDispatcher;
21
+ exports.hasActiveTask = hasActiveTask;
22
+ exports.enqueueFeishuChatTask = enqueueFeishuChatTask;
23
+ exports._resetChatQueueState = _resetChatQueueState;
24
+ const chatQueues = new Map();
25
+ const activeDispatchers = new Map();
26
+ /**
27
+ * Append `:thread:{threadId}` suffix when threadId is present.
28
+ * Consistent with the SDK's `:thread:` separator convention.
29
+ */
30
+ function threadScopedKey(base, threadId) {
31
+ return threadId ? `${base}:thread:${threadId}` : base;
32
+ }
33
+ function buildQueueKey(accountId, chatId, threadId) {
34
+ return threadScopedKey(`${accountId}:${chatId}`, threadId);
35
+ }
36
+ function registerActiveDispatcher(key, entry) {
37
+ activeDispatchers.set(key, entry);
38
+ }
39
+ function unregisterActiveDispatcher(key) {
40
+ activeDispatchers.delete(key);
41
+ }
42
+ function getActiveDispatcher(key) {
43
+ return activeDispatchers.get(key);
44
+ }
45
+ /** Check whether the queue has an active task for the given key. */
46
+ function hasActiveTask(key) {
47
+ return chatQueues.has(key);
48
+ }
49
+ function enqueueFeishuChatTask(params) {
50
+ const { accountId, chatId, threadId, task } = params;
51
+ const key = buildQueueKey(accountId, chatId, threadId);
52
+ const prev = chatQueues.get(key) ?? Promise.resolve();
53
+ const status = chatQueues.has(key) ? 'queued' : 'immediate';
54
+ const taskPromise = prev.then(task, task);
55
+ chatQueues.set(key, taskPromise);
56
+ const cleanup = () => {
57
+ if (chatQueues.get(key) === taskPromise) {
58
+ chatQueues.delete(key);
59
+ }
60
+ };
61
+ taskPromise.then(cleanup, cleanup);
62
+ return { status, promise: taskPromise };
63
+ }
64
+ /** @internal Test-only: reset all queue and dispatcher state. */
65
+ function _resetChatQueueState() {
66
+ chatQueues.clear();
67
+ activeDispatchers.clear();
68
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Configuration merge helpers for Feishu account management.
6
+ *
7
+ * Centralises the pattern of merging a partial configuration patch
8
+ * into the Feishu section of the top-level ClawdbotConfig, handling
9
+ * both the default account (top-level fields) and named accounts
10
+ * (nested under `accounts`).
11
+ */
12
+ import type { ClawdbotConfig } from 'openclaw/plugin-sdk';
13
+ /** Set the `enabled` flag on a Feishu account. */
14
+ export declare function setAccountEnabled(cfg: ClawdbotConfig, accountId: string, enabled: boolean): ClawdbotConfig;
15
+ /** Apply an arbitrary config patch to a Feishu account. */
16
+ export declare function applyAccountConfig(cfg: ClawdbotConfig, accountId: string, patch: Record<string, unknown>): ClawdbotConfig;
17
+ /** Delete a Feishu account entry from the config. */
18
+ export declare function deleteAccount(cfg: ClawdbotConfig, accountId: string): ClawdbotConfig;
19
+ /** Collect security warnings for a Feishu account. */
20
+ export declare function collectFeishuSecurityWarnings(params: {
21
+ cfg: ClawdbotConfig;
22
+ accountId: string;
23
+ }): string[];
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
4
+ * SPDX-License-Identifier: MIT
5
+ *
6
+ * Configuration merge helpers for Feishu account management.
7
+ *
8
+ * Centralises the pattern of merging a partial configuration patch
9
+ * into the Feishu section of the top-level ClawdbotConfig, handling
10
+ * both the default account (top-level fields) and named accounts
11
+ * (nested under `accounts`).
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.setAccountEnabled = setAccountEnabled;
15
+ exports.applyAccountConfig = applyAccountConfig;
16
+ exports.deleteAccount = deleteAccount;
17
+ exports.collectFeishuSecurityWarnings = collectFeishuSecurityWarnings;
18
+ const account_id_1 = require("openclaw/plugin-sdk/account-id");
19
+ const accounts_1 = require("../core/accounts.js");
20
+ const security_check_1 = require("../core/security-check.js");
21
+ /** Generic Feishu account config merge. */
22
+ function mergeFeishuAccountConfig(cfg, accountId, patch) {
23
+ const isDefault = !accountId || accountId === account_id_1.DEFAULT_ACCOUNT_ID;
24
+ if (isDefault) {
25
+ return {
26
+ ...cfg,
27
+ channels: {
28
+ ...cfg.channels,
29
+ feishu: { ...cfg.channels?.feishu, ...patch },
30
+ },
31
+ };
32
+ }
33
+ const feishuCfg = cfg.channels?.feishu;
34
+ return {
35
+ ...cfg,
36
+ channels: {
37
+ ...cfg.channels,
38
+ feishu: {
39
+ ...feishuCfg,
40
+ accounts: {
41
+ ...feishuCfg?.accounts,
42
+ [accountId]: { ...feishuCfg?.accounts?.[accountId], ...patch },
43
+ },
44
+ },
45
+ },
46
+ };
47
+ }
48
+ /** Set the `enabled` flag on a Feishu account. */
49
+ function setAccountEnabled(cfg, accountId, enabled) {
50
+ return mergeFeishuAccountConfig(cfg, accountId, { enabled });
51
+ }
52
+ /** Apply an arbitrary config patch to a Feishu account. */
53
+ function applyAccountConfig(cfg, accountId, patch) {
54
+ return mergeFeishuAccountConfig(cfg, accountId, patch);
55
+ }
56
+ /** Delete a Feishu account entry from the config. */
57
+ function deleteAccount(cfg, accountId) {
58
+ const isDefault = !accountId || accountId === account_id_1.DEFAULT_ACCOUNT_ID;
59
+ if (isDefault) {
60
+ // Delete entire feishu config
61
+ const next = { ...cfg };
62
+ const nextChannels = { ...cfg.channels };
63
+ delete nextChannels.feishu;
64
+ if (Object.keys(nextChannels).length > 0) {
65
+ next.channels = nextChannels;
66
+ }
67
+ else {
68
+ delete next.channels;
69
+ }
70
+ return next;
71
+ }
72
+ // Delete specific account from accounts
73
+ const feishuCfg = cfg.channels?.feishu;
74
+ const accounts = { ...feishuCfg?.accounts };
75
+ delete accounts[accountId];
76
+ return {
77
+ ...cfg,
78
+ channels: {
79
+ ...cfg.channels,
80
+ feishu: {
81
+ ...feishuCfg,
82
+ accounts: Object.keys(accounts).length > 0 ? accounts : undefined,
83
+ },
84
+ },
85
+ };
86
+ }
87
+ /** Collect security warnings for a Feishu account. */
88
+ function collectFeishuSecurityWarnings(params) {
89
+ const { cfg, accountId } = params;
90
+ const warnings = [];
91
+ const account = (0, accounts_1.getLarkAccount)(cfg, accountId);
92
+ const feishuCfg = account.config;
93
+ // cfg.channels.defaults is a cross-channel defaults object (not formally typed)
94
+ const defaultGroupPolicy = cfg.channels?.defaults?.groupPolicy;
95
+ const groupPolicy = feishuCfg?.groupPolicy ?? defaultGroupPolicy ?? 'allowlist';
96
+ if (groupPolicy === 'open') {
97
+ warnings.push(`- Feishu[${account.accountId}] groups: groupPolicy="open" allows any group to interact (mention-gated). To restrict which groups are allowed, set groupPolicy="allowlist" and list group IDs in channels.feishu.groups. To restrict which senders can trigger the bot, set channels.feishu.groupAllowFrom with user open_ids (ou_xxx).`);
98
+ }
99
+ // Multi-account cross-tenant isolation check (only on first account to avoid duplicates)
100
+ const allIds = (0, accounts_1.getLarkAccountIds)(cfg);
101
+ if (allIds.length === 0 || accountId === allIds[0]) {
102
+ for (const w of (0, security_check_1.collectIsolationWarnings)(cfg)) {
103
+ warnings.push(w);
104
+ }
105
+ }
106
+ return warnings;
107
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Directory listing for Feishu peers (users) and groups.
6
+ *
7
+ * Provides both config-based (offline) and live API directory
8
+ * lookups so the outbound subsystem and UI can resolve targets.
9
+ */
10
+ import type { ClawdbotConfig } from 'openclaw/plugin-sdk';
11
+ import type { FeishuDirectoryGroup, FeishuDirectoryPeer } from './types';
12
+ export type { FeishuDirectoryPeer, FeishuDirectoryGroup } from './types';
13
+ /**
14
+ * List users known from the channel config (allowFrom + dms fields).
15
+ *
16
+ * Does not make any API calls -- useful when the bot is not yet
17
+ * connected or when credentials are unavailable.
18
+ */
19
+ export declare function listFeishuDirectoryPeers(params: {
20
+ cfg: ClawdbotConfig;
21
+ query?: string;
22
+ limit?: number;
23
+ accountId?: string;
24
+ }): Promise<FeishuDirectoryPeer[]>;
25
+ /**
26
+ * List groups known from the channel config (groups + groupAllowFrom).
27
+ */
28
+ export declare function listFeishuDirectoryGroups(params: {
29
+ cfg: ClawdbotConfig;
30
+ query?: string;
31
+ limit?: number;
32
+ accountId?: string;
33
+ }): Promise<FeishuDirectoryGroup[]>;
34
+ /**
35
+ * List users via the Feishu contact/v3/users API.
36
+ *
37
+ * Falls back to config-based listing when credentials are missing or
38
+ * the API call fails.
39
+ */
40
+ export declare function listFeishuDirectoryPeersLive(params: {
41
+ cfg: ClawdbotConfig;
42
+ query?: string;
43
+ limit?: number;
44
+ accountId?: string;
45
+ }): Promise<FeishuDirectoryPeer[]>;
46
+ /**
47
+ * List groups via the Feishu im/v1/chats API.
48
+ *
49
+ * Falls back to config-based listing when credentials are missing or
50
+ * the API call fails.
51
+ */
52
+ export declare function listFeishuDirectoryGroupsLive(params: {
53
+ cfg: ClawdbotConfig;
54
+ query?: string;
55
+ limit?: number;
56
+ accountId?: string;
57
+ }): Promise<FeishuDirectoryGroup[]>;
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
4
+ * SPDX-License-Identifier: MIT
5
+ *
6
+ * Directory listing for Feishu peers (users) and groups.
7
+ *
8
+ * Provides both config-based (offline) and live API directory
9
+ * lookups so the outbound subsystem and UI can resolve targets.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.listFeishuDirectoryPeers = listFeishuDirectoryPeers;
13
+ exports.listFeishuDirectoryGroups = listFeishuDirectoryGroups;
14
+ exports.listFeishuDirectoryPeersLive = listFeishuDirectoryPeersLive;
15
+ exports.listFeishuDirectoryGroupsLive = listFeishuDirectoryGroupsLive;
16
+ const accounts_1 = require("../core/accounts.js");
17
+ const lark_client_1 = require("../core/lark-client.js");
18
+ const targets_1 = require("../core/targets.js");
19
+ // ---------------------------------------------------------------------------
20
+ // Shared helpers
21
+ // ---------------------------------------------------------------------------
22
+ /** Case-insensitive substring match on id and optional name. */
23
+ function matchesQuery(id, name, query) {
24
+ if (!query)
25
+ return true;
26
+ return id.toLowerCase().includes(query) || (name?.toLowerCase().includes(query) ?? false);
27
+ }
28
+ /** Filter items and apply optional limit. */
29
+ function applyLimitSlice(items, limit) {
30
+ return limit && limit > 0 ? items.slice(0, limit) : items;
31
+ }
32
+ // ---------------------------------------------------------------------------
33
+ // Config-based (offline) directory
34
+ // ---------------------------------------------------------------------------
35
+ /**
36
+ * List users known from the channel config (allowFrom + dms fields).
37
+ *
38
+ * Does not make any API calls -- useful when the bot is not yet
39
+ * connected or when credentials are unavailable.
40
+ */
41
+ async function listFeishuDirectoryPeers(params) {
42
+ const account = (0, accounts_1.getLarkAccount)(params.cfg, params.accountId);
43
+ const feishuCfg = account.config;
44
+ const q = params.query?.trim().toLowerCase() || '';
45
+ const ids = new Set();
46
+ // Collect from allowFrom entries.
47
+ for (const entry of feishuCfg?.allowFrom ?? []) {
48
+ const trimmed = String(entry).trim();
49
+ if (trimmed && trimmed !== '*') {
50
+ ids.add(trimmed);
51
+ }
52
+ }
53
+ // Collect from per-user DM config keys.
54
+ for (const userId of Object.keys(feishuCfg?.dms ?? {})) {
55
+ const trimmed = userId.trim();
56
+ if (trimmed) {
57
+ ids.add(trimmed);
58
+ }
59
+ }
60
+ const peers = Array.from(ids)
61
+ .map((raw) => raw.trim())
62
+ .filter(Boolean)
63
+ .map((raw) => (0, targets_1.normalizeFeishuTarget)(raw) ?? raw)
64
+ .filter((id) => matchesQuery(id, undefined, q))
65
+ .map((id) => ({ kind: 'user', id }));
66
+ return applyLimitSlice(peers, params.limit);
67
+ }
68
+ /**
69
+ * List groups known from the channel config (groups + groupAllowFrom).
70
+ */
71
+ async function listFeishuDirectoryGroups(params) {
72
+ const account = (0, accounts_1.getLarkAccount)(params.cfg, params.accountId);
73
+ const feishuCfg = account.config;
74
+ const q = params.query?.trim().toLowerCase() || '';
75
+ const ids = new Set();
76
+ // Collect from per-group config keys.
77
+ for (const groupId of Object.keys(feishuCfg?.groups ?? {})) {
78
+ const trimmed = groupId.trim();
79
+ if (trimmed && trimmed !== '*') {
80
+ ids.add(trimmed);
81
+ }
82
+ }
83
+ // Collect from groupAllowFrom entries.
84
+ for (const entry of feishuCfg?.groupAllowFrom ?? []) {
85
+ const trimmed = String(entry).trim();
86
+ if (trimmed && trimmed !== '*') {
87
+ ids.add(trimmed);
88
+ }
89
+ }
90
+ const groups = Array.from(ids)
91
+ .map((raw) => raw.trim())
92
+ .filter(Boolean)
93
+ .filter((id) => matchesQuery(id, undefined, q))
94
+ .map((id) => ({ kind: 'group', id }));
95
+ return applyLimitSlice(groups, params.limit);
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // Live API directory
99
+ // ---------------------------------------------------------------------------
100
+ /**
101
+ * List users via the Feishu contact/v3/users API.
102
+ *
103
+ * Falls back to config-based listing when credentials are missing or
104
+ * the API call fails.
105
+ */
106
+ async function listFeishuDirectoryPeersLive(params) {
107
+ const account = (0, accounts_1.getLarkAccount)(params.cfg, params.accountId);
108
+ if (!account.configured) {
109
+ return listFeishuDirectoryPeers(params);
110
+ }
111
+ try {
112
+ const client = lark_client_1.LarkClient.fromAccount(account).sdk;
113
+ const peers = [];
114
+ const limit = params.limit ?? 50;
115
+ if (limit <= 0)
116
+ return [];
117
+ const q = params.query?.trim().toLowerCase() || '';
118
+ let pageToken;
119
+ do {
120
+ const remaining = limit - peers.length;
121
+ const response = await client.contact.user.list({
122
+ params: {
123
+ page_size: Math.min(remaining, 50),
124
+ page_token: pageToken,
125
+ },
126
+ });
127
+ if (response.code !== 0 || !response.data?.items)
128
+ break;
129
+ for (const user of response.data.items) {
130
+ if (user.open_id && matchesQuery(user.open_id, user.name, q)) {
131
+ peers.push({
132
+ kind: 'user',
133
+ id: user.open_id,
134
+ name: user.name || undefined,
135
+ });
136
+ }
137
+ if (peers.length >= limit)
138
+ break;
139
+ }
140
+ pageToken = response.data?.page_token;
141
+ } while (pageToken && peers.length < limit);
142
+ return peers;
143
+ }
144
+ catch {
145
+ // Fallback to config-based listing on API failure.
146
+ return listFeishuDirectoryPeers(params);
147
+ }
148
+ }
149
+ /**
150
+ * List groups via the Feishu im/v1/chats API.
151
+ *
152
+ * Falls back to config-based listing when credentials are missing or
153
+ * the API call fails.
154
+ */
155
+ async function listFeishuDirectoryGroupsLive(params) {
156
+ const account = (0, accounts_1.getLarkAccount)(params.cfg, params.accountId);
157
+ if (!account.configured) {
158
+ return listFeishuDirectoryGroups(params);
159
+ }
160
+ try {
161
+ const client = lark_client_1.LarkClient.fromAccount(account).sdk;
162
+ const groups = [];
163
+ const limit = params.limit ?? 50;
164
+ if (limit <= 0)
165
+ return [];
166
+ const q = params.query?.trim().toLowerCase() || '';
167
+ let pageToken;
168
+ do {
169
+ const remaining = limit - groups.length;
170
+ const response = await client.im.chat.list({
171
+ params: {
172
+ page_size: Math.min(remaining, 100),
173
+ page_token: pageToken,
174
+ },
175
+ });
176
+ if (response.code !== 0 || !response.data?.items)
177
+ break;
178
+ for (const chat of response.data.items) {
179
+ if (chat.chat_id && matchesQuery(chat.chat_id, chat.name, q)) {
180
+ groups.push({
181
+ kind: 'group',
182
+ id: chat.chat_id,
183
+ name: chat.name || undefined,
184
+ });
185
+ }
186
+ if (groups.length >= limit)
187
+ break;
188
+ }
189
+ pageToken = response.data?.page_token;
190
+ } while (pageToken && groups.length < limit);
191
+ return groups;
192
+ }
193
+ catch {
194
+ // Fallback to config-based listing on API failure.
195
+ return listFeishuDirectoryGroups(params);
196
+ }
197
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Event handlers for the Feishu WebSocket monitor.
6
+ *
7
+ * Extracted from monitor.ts to improve testability and reduce
8
+ * function size. Each handler receives a MonitorContext with all
9
+ * dependencies needed to process the event.
10
+ */
11
+ import type { MonitorContext } from './types';
12
+ export declare function handleMessageEvent(ctx: MonitorContext, data: unknown): Promise<void>;
13
+ export declare function handleReactionEvent(ctx: MonitorContext, data: unknown): Promise<void>;
14
+ export declare function handleBotMembershipEvent(ctx: MonitorContext, data: unknown, action: 'added' | 'removed'): Promise<void>;
15
+ export declare function handleVcMeetingInvitedEvent(ctx: MonitorContext, data: unknown): Promise<void>;
16
+ export declare function handleCommentEvent(ctx: MonitorContext, data: unknown): Promise<void>;
17
+ export declare function handleCardActionEvent(ctx: MonitorContext, data: unknown): Promise<unknown>;