@larksuite/openclaw-lark 2026.3.9

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 (689) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +283 -0
  3. package/index.d.ts +37 -0
  4. package/index.d.ts.map +1 -0
  5. package/index.js +119 -0
  6. package/index.js.map +1 -0
  7. package/openclaw.plugin.json +10 -0
  8. package/package.json +47 -0
  9. package/skills/feishu-bitable/SKILL.md +248 -0
  10. package/skills/feishu-bitable/references/examples.md +813 -0
  11. package/skills/feishu-bitable/references/field-properties.md +763 -0
  12. package/skills/feishu-bitable/references/record-values.md +911 -0
  13. package/skills/feishu-calendar/SKILL.md +244 -0
  14. package/skills/feishu-channel-rules/SKILL.md +18 -0
  15. package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
  16. package/skills/feishu-create-doc/SKILL.md +719 -0
  17. package/skills/feishu-fetch-doc/SKILL.md +93 -0
  18. package/skills/feishu-im-read/SKILL.md +163 -0
  19. package/skills/feishu-task/SKILL.md +293 -0
  20. package/skills/feishu-troubleshoot/SKILL.md +70 -0
  21. package/skills/feishu-update-doc/SKILL.md +285 -0
  22. package/src/card/builder.d.ts +100 -0
  23. package/src/card/builder.d.ts.map +1 -0
  24. package/src/card/builder.js +381 -0
  25. package/src/card/builder.js.map +1 -0
  26. package/src/card/cardkit.d.ts +91 -0
  27. package/src/card/cardkit.d.ts.map +1 -0
  28. package/src/card/cardkit.js +182 -0
  29. package/src/card/cardkit.js.map +1 -0
  30. package/src/card/flush-controller.d.ts +46 -0
  31. package/src/card/flush-controller.d.ts.map +1 -0
  32. package/src/card/flush-controller.js +135 -0
  33. package/src/card/flush-controller.js.map +1 -0
  34. package/src/card/markdown-style.d.ts +17 -0
  35. package/src/card/markdown-style.d.ts.map +1 -0
  36. package/src/card/markdown-style.js +98 -0
  37. package/src/card/markdown-style.js.map +1 -0
  38. package/src/card/reply-dispatcher-types.d.ts +121 -0
  39. package/src/card/reply-dispatcher-types.d.ts.map +1 -0
  40. package/src/card/reply-dispatcher-types.js +58 -0
  41. package/src/card/reply-dispatcher-types.js.map +1 -0
  42. package/src/card/reply-dispatcher.d.ts +16 -0
  43. package/src/card/reply-dispatcher.d.ts.map +1 -0
  44. package/src/card/reply-dispatcher.js +293 -0
  45. package/src/card/reply-dispatcher.js.map +1 -0
  46. package/src/card/reply-mode.d.ts +39 -0
  47. package/src/card/reply-mode.d.ts.map +1 -0
  48. package/src/card/reply-mode.js +66 -0
  49. package/src/card/reply-mode.js.map +1 -0
  50. package/src/card/streaming-card-controller.d.ts +88 -0
  51. package/src/card/streaming-card-controller.d.ts.map +1 -0
  52. package/src/card/streaming-card-controller.js +717 -0
  53. package/src/card/streaming-card-controller.js.map +1 -0
  54. package/src/card/unavailable-guard.d.ts +36 -0
  55. package/src/card/unavailable-guard.d.ts.map +1 -0
  56. package/src/card/unavailable-guard.js +84 -0
  57. package/src/card/unavailable-guard.js.map +1 -0
  58. package/src/channel/abort-detect.d.ts +35 -0
  59. package/src/channel/abort-detect.d.ts.map +1 -0
  60. package/src/channel/abort-detect.js +125 -0
  61. package/src/channel/abort-detect.js.map +1 -0
  62. package/src/channel/chat-queue.d.ts +42 -0
  63. package/src/channel/chat-queue.d.ts.map +1 -0
  64. package/src/channel/chat-queue.js +59 -0
  65. package/src/channel/chat-queue.js.map +1 -0
  66. package/src/channel/config-adapter.d.ts +24 -0
  67. package/src/channel/config-adapter.d.ts.map +1 -0
  68. package/src/channel/config-adapter.js +102 -0
  69. package/src/channel/config-adapter.js.map +1 -0
  70. package/src/channel/directory.d.ts +58 -0
  71. package/src/channel/directory.d.ts.map +1 -0
  72. package/src/channel/directory.js +192 -0
  73. package/src/channel/directory.js.map +1 -0
  74. package/src/channel/event-handlers.d.ts +16 -0
  75. package/src/channel/event-handlers.d.ts.map +1 -0
  76. package/src/channel/event-handlers.js +222 -0
  77. package/src/channel/event-handlers.js.map +1 -0
  78. package/src/channel/monitor.d.ts +18 -0
  79. package/src/channel/monitor.d.ts.map +1 -0
  80. package/src/channel/monitor.js +128 -0
  81. package/src/channel/monitor.js.map +1 -0
  82. package/src/channel/onboarding-config.d.ts +18 -0
  83. package/src/channel/onboarding-config.d.ts.map +1 -0
  84. package/src/channel/onboarding-config.js +89 -0
  85. package/src/channel/onboarding-config.js.map +1 -0
  86. package/src/channel/onboarding-migrate.d.ts +26 -0
  87. package/src/channel/onboarding-migrate.d.ts.map +1 -0
  88. package/src/channel/onboarding-migrate.js +68 -0
  89. package/src/channel/onboarding-migrate.js.map +1 -0
  90. package/src/channel/onboarding.d.ts +13 -0
  91. package/src/channel/onboarding.d.ts.map +1 -0
  92. package/src/channel/onboarding.js +297 -0
  93. package/src/channel/onboarding.js.map +1 -0
  94. package/src/channel/plugin.d.ts +14 -0
  95. package/src/channel/plugin.d.ts.map +1 -0
  96. package/src/channel/plugin.js +279 -0
  97. package/src/channel/plugin.js.map +1 -0
  98. package/src/channel/probe.d.ts +15 -0
  99. package/src/channel/probe.d.ts.map +1 -0
  100. package/src/channel/probe.js +22 -0
  101. package/src/channel/probe.js.map +1 -0
  102. package/src/channel/types.d.ts +37 -0
  103. package/src/channel/types.d.ts.map +1 -0
  104. package/src/channel/types.js +8 -0
  105. package/src/channel/types.js.map +1 -0
  106. package/src/commands/auth.d.ts +16 -0
  107. package/src/commands/auth.d.ts.map +1 -0
  108. package/src/commands/auth.js +85 -0
  109. package/src/commands/auth.js.map +1 -0
  110. package/src/commands/diagnose.d.ts +70 -0
  111. package/src/commands/diagnose.d.ts.map +1 -0
  112. package/src/commands/diagnose.js +808 -0
  113. package/src/commands/diagnose.js.map +1 -0
  114. package/src/commands/doctor.d.ts +18 -0
  115. package/src/commands/doctor.d.ts.map +1 -0
  116. package/src/commands/doctor.js +439 -0
  117. package/src/commands/doctor.js.map +1 -0
  118. package/src/commands/index.d.ts +9 -0
  119. package/src/commands/index.d.ts.map +1 -0
  120. package/src/commands/index.js +208 -0
  121. package/src/commands/index.js.map +1 -0
  122. package/src/core/accounts.d.ts +38 -0
  123. package/src/core/accounts.d.ts.map +1 -0
  124. package/src/core/accounts.js +179 -0
  125. package/src/core/accounts.js.map +1 -0
  126. package/src/core/agent-config.d.ts +101 -0
  127. package/src/core/agent-config.d.ts.map +1 -0
  128. package/src/core/agent-config.js +140 -0
  129. package/src/core/agent-config.js.map +1 -0
  130. package/src/core/api-error.d.ts +49 -0
  131. package/src/core/api-error.d.ts.map +1 -0
  132. package/src/core/api-error.js +113 -0
  133. package/src/core/api-error.js.map +1 -0
  134. package/src/core/app-owner-fallback.d.ts +22 -0
  135. package/src/core/app-owner-fallback.d.ts.map +1 -0
  136. package/src/core/app-owner-fallback.js +39 -0
  137. package/src/core/app-owner-fallback.js.map +1 -0
  138. package/src/core/app-scope-checker.d.ts +88 -0
  139. package/src/core/app-scope-checker.d.ts.map +1 -0
  140. package/src/core/app-scope-checker.js +191 -0
  141. package/src/core/app-scope-checker.js.map +1 -0
  142. package/src/core/auth-errors.d.ts +143 -0
  143. package/src/core/auth-errors.d.ts.map +1 -0
  144. package/src/core/auth-errors.js +156 -0
  145. package/src/core/auth-errors.js.map +1 -0
  146. package/src/core/chat-info-cache.d.ts +58 -0
  147. package/src/core/chat-info-cache.d.ts.map +1 -0
  148. package/src/core/chat-info-cache.js +153 -0
  149. package/src/core/chat-info-cache.js.map +1 -0
  150. package/src/core/config-schema.d.ts +449 -0
  151. package/src/core/config-schema.d.ts.map +1 -0
  152. package/src/core/config-schema.js +201 -0
  153. package/src/core/config-schema.js.map +1 -0
  154. package/src/core/device-flow.d.ts +78 -0
  155. package/src/core/device-flow.d.ts.map +1 -0
  156. package/src/core/device-flow.js +213 -0
  157. package/src/core/device-flow.js.map +1 -0
  158. package/src/core/feishu-fetch.d.ts +19 -0
  159. package/src/core/feishu-fetch.d.ts.map +1 -0
  160. package/src/core/feishu-fetch.js +26 -0
  161. package/src/core/feishu-fetch.js.map +1 -0
  162. package/src/core/footer-config.d.ts +25 -0
  163. package/src/core/footer-config.d.ts.map +1 -0
  164. package/src/core/footer-config.js +40 -0
  165. package/src/core/footer-config.js.map +1 -0
  166. package/src/core/lark-client.d.ts +109 -0
  167. package/src/core/lark-client.d.ts.map +1 -0
  168. package/src/core/lark-client.js +354 -0
  169. package/src/core/lark-client.js.map +1 -0
  170. package/src/core/lark-logger.d.ts +24 -0
  171. package/src/core/lark-logger.d.ts.map +1 -0
  172. package/src/core/lark-logger.js +155 -0
  173. package/src/core/lark-logger.js.map +1 -0
  174. package/src/core/lark-ticket.d.ts +30 -0
  175. package/src/core/lark-ticket.d.ts.map +1 -0
  176. package/src/core/lark-ticket.js +36 -0
  177. package/src/core/lark-ticket.js.map +1 -0
  178. package/src/core/message-unavailable.d.ts +54 -0
  179. package/src/core/message-unavailable.d.ts.map +1 -0
  180. package/src/core/message-unavailable.js +131 -0
  181. package/src/core/message-unavailable.js.map +1 -0
  182. package/src/core/owner-policy.d.ts +32 -0
  183. package/src/core/owner-policy.d.ts.map +1 -0
  184. package/src/core/owner-policy.js +53 -0
  185. package/src/core/owner-policy.js.map +1 -0
  186. package/src/core/permission-url.d.ts +23 -0
  187. package/src/core/permission-url.d.ts.map +1 -0
  188. package/src/core/permission-url.js +73 -0
  189. package/src/core/permission-url.js.map +1 -0
  190. package/src/core/raw-request.d.ts +28 -0
  191. package/src/core/raw-request.d.ts.map +1 -0
  192. package/src/core/raw-request.js +63 -0
  193. package/src/core/raw-request.js.map +1 -0
  194. package/src/core/scope-manager.d.ts +169 -0
  195. package/src/core/scope-manager.d.ts.map +1 -0
  196. package/src/core/scope-manager.js +214 -0
  197. package/src/core/scope-manager.js.map +1 -0
  198. package/src/core/security-check.d.ts +73 -0
  199. package/src/core/security-check.d.ts.map +1 -0
  200. package/src/core/security-check.js +175 -0
  201. package/src/core/security-check.js.map +1 -0
  202. package/src/core/shutdown-hooks.d.ts +23 -0
  203. package/src/core/shutdown-hooks.d.ts.map +1 -0
  204. package/src/core/shutdown-hooks.js +57 -0
  205. package/src/core/shutdown-hooks.js.map +1 -0
  206. package/src/core/targets.d.ts +50 -0
  207. package/src/core/targets.d.ts.map +1 -0
  208. package/src/core/targets.js +128 -0
  209. package/src/core/targets.js.map +1 -0
  210. package/src/core/token-store.d.ts +55 -0
  211. package/src/core/token-store.d.ts.map +1 -0
  212. package/src/core/token-store.js +315 -0
  213. package/src/core/token-store.js.map +1 -0
  214. package/src/core/tool-client.d.ts +177 -0
  215. package/src/core/tool-client.d.ts.map +1 -0
  216. package/src/core/tool-client.js +381 -0
  217. package/src/core/tool-client.js.map +1 -0
  218. package/src/core/tool-scopes.d.ts +154 -0
  219. package/src/core/tool-scopes.d.ts.map +1 -0
  220. package/src/core/tool-scopes.js +326 -0
  221. package/src/core/tool-scopes.js.map +1 -0
  222. package/src/core/tools-config.d.ts +35 -0
  223. package/src/core/tools-config.d.ts.map +1 -0
  224. package/src/core/tools-config.js +88 -0
  225. package/src/core/tools-config.js.map +1 -0
  226. package/src/core/types.d.ts +88 -0
  227. package/src/core/types.d.ts.map +1 -0
  228. package/src/core/types.js +12 -0
  229. package/src/core/types.js.map +1 -0
  230. package/src/core/uat-client.d.ts +47 -0
  231. package/src/core/uat-client.d.ts.map +1 -0
  232. package/src/core/uat-client.js +173 -0
  233. package/src/core/uat-client.js.map +1 -0
  234. package/src/core/version.d.ts +26 -0
  235. package/src/core/version.d.ts.map +1 -0
  236. package/src/core/version.js +50 -0
  237. package/src/core/version.js.map +1 -0
  238. package/src/messaging/converters/audio.d.ts +9 -0
  239. package/src/messaging/converters/audio.d.ts.map +1 -0
  240. package/src/messaging/converters/audio.js +22 -0
  241. package/src/messaging/converters/audio.js.map +1 -0
  242. package/src/messaging/converters/calendar.d.ts +14 -0
  243. package/src/messaging/converters/calendar.d.ts.map +1 -0
  244. package/src/messaging/converters/calendar.js +51 -0
  245. package/src/messaging/converters/calendar.js.map +1 -0
  246. package/src/messaging/converters/content-converter.d.ts +42 -0
  247. package/src/messaging/converters/content-converter.d.ts.map +1 -0
  248. package/src/messaging/converters/content-converter.js +107 -0
  249. package/src/messaging/converters/content-converter.js.map +1 -0
  250. package/src/messaging/converters/file.d.ts +9 -0
  251. package/src/messaging/converters/file.d.ts.map +1 -0
  252. package/src/messaging/converters/file.js +21 -0
  253. package/src/messaging/converters/file.js.map +1 -0
  254. package/src/messaging/converters/folder.d.ts +9 -0
  255. package/src/messaging/converters/folder.d.ts.map +1 -0
  256. package/src/messaging/converters/folder.js +21 -0
  257. package/src/messaging/converters/folder.js.map +1 -0
  258. package/src/messaging/converters/hongbao.d.ts +9 -0
  259. package/src/messaging/converters/hongbao.d.ts.map +1 -0
  260. package/src/messaging/converters/hongbao.js +17 -0
  261. package/src/messaging/converters/hongbao.js.map +1 -0
  262. package/src/messaging/converters/image.d.ts +9 -0
  263. package/src/messaging/converters/image.d.ts.map +1 -0
  264. package/src/messaging/converters/image.js +19 -0
  265. package/src/messaging/converters/image.js.map +1 -0
  266. package/src/messaging/converters/index.d.ts +9 -0
  267. package/src/messaging/converters/index.d.ts.map +1 -0
  268. package/src/messaging/converters/index.js +51 -0
  269. package/src/messaging/converters/index.js.map +1 -0
  270. package/src/messaging/converters/interactive/card-converter.d.ts +77 -0
  271. package/src/messaging/converters/interactive/card-converter.d.ts.map +1 -0
  272. package/src/messaging/converters/interactive/card-converter.js +1174 -0
  273. package/src/messaging/converters/interactive/card-converter.js.map +1 -0
  274. package/src/messaging/converters/interactive/card-utils.d.ts +10 -0
  275. package/src/messaging/converters/interactive/card-utils.d.ts.map +1 -0
  276. package/src/messaging/converters/interactive/card-utils.js +43 -0
  277. package/src/messaging/converters/interactive/card-utils.js.map +1 -0
  278. package/src/messaging/converters/interactive/index.d.ts +9 -0
  279. package/src/messaging/converters/interactive/index.d.ts.map +1 -0
  280. package/src/messaging/converters/interactive/index.js +22 -0
  281. package/src/messaging/converters/interactive/index.js.map +1 -0
  282. package/src/messaging/converters/interactive/legacy.d.ts +12 -0
  283. package/src/messaging/converters/interactive/legacy.d.ts.map +1 -0
  284. package/src/messaging/converters/interactive/legacy.js +58 -0
  285. package/src/messaging/converters/interactive/legacy.js.map +1 -0
  286. package/src/messaging/converters/interactive/types.d.ts +24 -0
  287. package/src/messaging/converters/interactive/types.d.ts.map +1 -0
  288. package/src/messaging/converters/interactive/types.js +25 -0
  289. package/src/messaging/converters/interactive/types.js.map +1 -0
  290. package/src/messaging/converters/location.d.ts +9 -0
  291. package/src/messaging/converters/location.d.ts.map +1 -0
  292. package/src/messaging/converters/location.js +20 -0
  293. package/src/messaging/converters/location.js.map +1 -0
  294. package/src/messaging/converters/merge-forward.d.ts +33 -0
  295. package/src/messaging/converters/merge-forward.d.ts.map +1 -0
  296. package/src/messaging/converters/merge-forward.js +226 -0
  297. package/src/messaging/converters/merge-forward.js.map +1 -0
  298. package/src/messaging/converters/post.d.ts +12 -0
  299. package/src/messaging/converters/post.d.ts.map +1 -0
  300. package/src/messaging/converters/post.js +136 -0
  301. package/src/messaging/converters/post.js.map +1 -0
  302. package/src/messaging/converters/share.d.ts +10 -0
  303. package/src/messaging/converters/share.d.ts.map +1 -0
  304. package/src/messaging/converters/share.js +24 -0
  305. package/src/messaging/converters/share.js.map +1 -0
  306. package/src/messaging/converters/sticker.d.ts +9 -0
  307. package/src/messaging/converters/sticker.d.ts.map +1 -0
  308. package/src/messaging/converters/sticker.js +19 -0
  309. package/src/messaging/converters/sticker.js.map +1 -0
  310. package/src/messaging/converters/system.d.ts +13 -0
  311. package/src/messaging/converters/system.d.ts.map +1 -0
  312. package/src/messaging/converters/system.js +33 -0
  313. package/src/messaging/converters/system.js.map +1 -0
  314. package/src/messaging/converters/text.d.ts +9 -0
  315. package/src/messaging/converters/text.d.ts.map +1 -0
  316. package/src/messaging/converters/text.js +15 -0
  317. package/src/messaging/converters/text.js.map +1 -0
  318. package/src/messaging/converters/todo.d.ts +9 -0
  319. package/src/messaging/converters/todo.d.ts.map +1 -0
  320. package/src/messaging/converters/todo.js +42 -0
  321. package/src/messaging/converters/todo.js.map +1 -0
  322. package/src/messaging/converters/types.d.ts +108 -0
  323. package/src/messaging/converters/types.d.ts.map +1 -0
  324. package/src/messaging/converters/types.js +8 -0
  325. package/src/messaging/converters/types.js.map +1 -0
  326. package/src/messaging/converters/unknown.d.ts +9 -0
  327. package/src/messaging/converters/unknown.d.ts.map +1 -0
  328. package/src/messaging/converters/unknown.js +17 -0
  329. package/src/messaging/converters/unknown.js.map +1 -0
  330. package/src/messaging/converters/utils.d.ts +23 -0
  331. package/src/messaging/converters/utils.d.ts.map +1 -0
  332. package/src/messaging/converters/utils.js +52 -0
  333. package/src/messaging/converters/utils.js.map +1 -0
  334. package/src/messaging/converters/video-chat.d.ts +9 -0
  335. package/src/messaging/converters/video-chat.d.ts.map +1 -0
  336. package/src/messaging/converters/video-chat.js +24 -0
  337. package/src/messaging/converters/video-chat.js.map +1 -0
  338. package/src/messaging/converters/video.d.ts +9 -0
  339. package/src/messaging/converters/video.d.ts.map +1 -0
  340. package/src/messaging/converters/video.js +33 -0
  341. package/src/messaging/converters/video.js.map +1 -0
  342. package/src/messaging/converters/vote.d.ts +9 -0
  343. package/src/messaging/converters/vote.d.ts.map +1 -0
  344. package/src/messaging/converters/vote.js +25 -0
  345. package/src/messaging/converters/vote.js.map +1 -0
  346. package/src/messaging/inbound/dedup.d.ts +60 -0
  347. package/src/messaging/inbound/dedup.d.ts.map +1 -0
  348. package/src/messaging/inbound/dedup.js +117 -0
  349. package/src/messaging/inbound/dedup.js.map +1 -0
  350. package/src/messaging/inbound/dispatch-builders.d.ts +84 -0
  351. package/src/messaging/inbound/dispatch-builders.d.ts.map +1 -0
  352. package/src/messaging/inbound/dispatch-builders.js +153 -0
  353. package/src/messaging/inbound/dispatch-builders.js.map +1 -0
  354. package/src/messaging/inbound/dispatch-commands.d.ts +28 -0
  355. package/src/messaging/inbound/dispatch-commands.d.ts.map +1 -0
  356. package/src/messaging/inbound/dispatch-commands.js +113 -0
  357. package/src/messaging/inbound/dispatch-commands.js.map +1 -0
  358. package/src/messaging/inbound/dispatch-context.d.ts +68 -0
  359. package/src/messaging/inbound/dispatch-context.d.ts.map +1 -0
  360. package/src/messaging/inbound/dispatch-context.js +137 -0
  361. package/src/messaging/inbound/dispatch-context.js.map +1 -0
  362. package/src/messaging/inbound/dispatch.d.ts +48 -0
  363. package/src/messaging/inbound/dispatch.d.ts.map +1 -0
  364. package/src/messaging/inbound/dispatch.js +193 -0
  365. package/src/messaging/inbound/dispatch.js.map +1 -0
  366. package/src/messaging/inbound/enrich.d.ts +103 -0
  367. package/src/messaging/inbound/enrich.d.ts.map +1 -0
  368. package/src/messaging/inbound/enrich.js +228 -0
  369. package/src/messaging/inbound/enrich.js.map +1 -0
  370. package/src/messaging/inbound/gate-effects.d.ts +24 -0
  371. package/src/messaging/inbound/gate-effects.d.ts.map +1 -0
  372. package/src/messaging/inbound/gate-effects.js +44 -0
  373. package/src/messaging/inbound/gate-effects.js.map +1 -0
  374. package/src/messaging/inbound/gate.d.ts +61 -0
  375. package/src/messaging/inbound/gate.d.ts.map +1 -0
  376. package/src/messaging/inbound/gate.js +234 -0
  377. package/src/messaging/inbound/gate.js.map +1 -0
  378. package/src/messaging/inbound/handler.d.ts +36 -0
  379. package/src/messaging/inbound/handler.d.ts.map +1 -0
  380. package/src/messaging/inbound/handler.js +174 -0
  381. package/src/messaging/inbound/handler.js.map +1 -0
  382. package/src/messaging/inbound/media-resolver.d.ts +33 -0
  383. package/src/messaging/inbound/media-resolver.d.ts.map +1 -0
  384. package/src/messaging/inbound/media-resolver.js +88 -0
  385. package/src/messaging/inbound/media-resolver.js.map +1 -0
  386. package/src/messaging/inbound/mention.d.ts +40 -0
  387. package/src/messaging/inbound/mention.d.ts.map +1 -0
  388. package/src/messaging/inbound/mention.js +82 -0
  389. package/src/messaging/inbound/mention.js.map +1 -0
  390. package/src/messaging/inbound/parse-io.d.ts +51 -0
  391. package/src/messaging/inbound/parse-io.d.ts.map +1 -0
  392. package/src/messaging/inbound/parse-io.js +82 -0
  393. package/src/messaging/inbound/parse-io.js.map +1 -0
  394. package/src/messaging/inbound/parse.d.ts +29 -0
  395. package/src/messaging/inbound/parse.d.ts.map +1 -0
  396. package/src/messaging/inbound/parse.js +107 -0
  397. package/src/messaging/inbound/parse.js.map +1 -0
  398. package/src/messaging/inbound/permission.d.ts +18 -0
  399. package/src/messaging/inbound/permission.d.ts.map +1 -0
  400. package/src/messaging/inbound/permission.js +41 -0
  401. package/src/messaging/inbound/permission.js.map +1 -0
  402. package/src/messaging/inbound/policy.d.ts +95 -0
  403. package/src/messaging/inbound/policy.d.ts.map +1 -0
  404. package/src/messaging/inbound/policy.js +161 -0
  405. package/src/messaging/inbound/policy.js.map +1 -0
  406. package/src/messaging/inbound/reaction-handler.d.ts +62 -0
  407. package/src/messaging/inbound/reaction-handler.d.ts.map +1 -0
  408. package/src/messaging/inbound/reaction-handler.js +221 -0
  409. package/src/messaging/inbound/reaction-handler.js.map +1 -0
  410. package/src/messaging/inbound/user-name-cache.d.ts +83 -0
  411. package/src/messaging/inbound/user-name-cache.d.ts.map +1 -0
  412. package/src/messaging/inbound/user-name-cache.js +242 -0
  413. package/src/messaging/inbound/user-name-cache.js.map +1 -0
  414. package/src/messaging/outbound/actions.d.ts +17 -0
  415. package/src/messaging/outbound/actions.d.ts.map +1 -0
  416. package/src/messaging/outbound/actions.js +310 -0
  417. package/src/messaging/outbound/actions.js.map +1 -0
  418. package/src/messaging/outbound/chat-manage.d.ts +65 -0
  419. package/src/messaging/outbound/chat-manage.d.ts.map +1 -0
  420. package/src/messaging/outbound/chat-manage.js +112 -0
  421. package/src/messaging/outbound/chat-manage.js.map +1 -0
  422. package/src/messaging/outbound/deliver.d.ts +156 -0
  423. package/src/messaging/outbound/deliver.d.ts.map +1 -0
  424. package/src/messaging/outbound/deliver.js +299 -0
  425. package/src/messaging/outbound/deliver.js.map +1 -0
  426. package/src/messaging/outbound/fetch.d.ts +13 -0
  427. package/src/messaging/outbound/fetch.d.ts.map +1 -0
  428. package/src/messaging/outbound/fetch.js +13 -0
  429. package/src/messaging/outbound/fetch.js.map +1 -0
  430. package/src/messaging/outbound/forward.d.ts +27 -0
  431. package/src/messaging/outbound/forward.d.ts.map +1 -0
  432. package/src/messaging/outbound/forward.js +49 -0
  433. package/src/messaging/outbound/forward.js.map +1 -0
  434. package/src/messaging/outbound/media-url-utils.d.ts +30 -0
  435. package/src/messaging/outbound/media-url-utils.d.ts.map +1 -0
  436. package/src/messaging/outbound/media-url-utils.js +131 -0
  437. package/src/messaging/outbound/media-url-utils.js.map +1 -0
  438. package/src/messaging/outbound/media.d.ts +256 -0
  439. package/src/messaging/outbound/media.d.ts.map +1 -0
  440. package/src/messaging/outbound/media.js +749 -0
  441. package/src/messaging/outbound/media.js.map +1 -0
  442. package/src/messaging/outbound/outbound.d.ts +90 -0
  443. package/src/messaging/outbound/outbound.d.ts.map +1 -0
  444. package/src/messaging/outbound/outbound.js +112 -0
  445. package/src/messaging/outbound/outbound.js.map +1 -0
  446. package/src/messaging/outbound/reactions.d.ts +125 -0
  447. package/src/messaging/outbound/reactions.d.ts.map +1 -0
  448. package/src/messaging/outbound/reactions.js +379 -0
  449. package/src/messaging/outbound/reactions.js.map +1 -0
  450. package/src/messaging/outbound/send.d.ts +136 -0
  451. package/src/messaging/outbound/send.d.ts.map +1 -0
  452. package/src/messaging/outbound/send.js +289 -0
  453. package/src/messaging/outbound/send.js.map +1 -0
  454. package/src/messaging/outbound/typing.d.ts +61 -0
  455. package/src/messaging/outbound/typing.d.ts.map +1 -0
  456. package/src/messaging/outbound/typing.js +136 -0
  457. package/src/messaging/outbound/typing.js.map +1 -0
  458. package/src/messaging/shared/message-lookup.d.ts +55 -0
  459. package/src/messaging/shared/message-lookup.d.ts.map +1 -0
  460. package/src/messaging/shared/message-lookup.js +118 -0
  461. package/src/messaging/shared/message-lookup.js.map +1 -0
  462. package/src/messaging/types.d.ts +177 -0
  463. package/src/messaging/types.d.ts.map +1 -0
  464. package/src/messaging/types.js +11 -0
  465. package/src/messaging/types.js.map +1 -0
  466. package/src/tools/auto-auth.d.ts +57 -0
  467. package/src/tools/auto-auth.d.ts.map +1 -0
  468. package/src/tools/auto-auth.js +925 -0
  469. package/src/tools/auto-auth.js.map +1 -0
  470. package/src/tools/helpers.d.ts +220 -0
  471. package/src/tools/helpers.d.ts.map +1 -0
  472. package/src/tools/helpers.js +298 -0
  473. package/src/tools/helpers.js.map +1 -0
  474. package/src/tools/mcp/doc/create.d.ts +13 -0
  475. package/src/tools/mcp/doc/create.d.ts.map +1 -0
  476. package/src/tools/mcp/doc/create.js +45 -0
  477. package/src/tools/mcp/doc/create.js.map +1 -0
  478. package/src/tools/mcp/doc/fetch.d.ts +13 -0
  479. package/src/tools/mcp/doc/fetch.d.ts.map +1 -0
  480. package/src/tools/mcp/doc/fetch.js +37 -0
  481. package/src/tools/mcp/doc/fetch.js.map +1 -0
  482. package/src/tools/mcp/doc/index.d.ts +13 -0
  483. package/src/tools/mcp/doc/index.d.ts.map +1 -0
  484. package/src/tools/mcp/doc/index.js +42 -0
  485. package/src/tools/mcp/doc/index.js.map +1 -0
  486. package/src/tools/mcp/doc/update.d.ts +13 -0
  487. package/src/tools/mcp/doc/update.d.ts.map +1 -0
  488. package/src/tools/mcp/doc/update.js +62 -0
  489. package/src/tools/mcp/doc/update.js.map +1 -0
  490. package/src/tools/mcp/shared.d.ts +58 -0
  491. package/src/tools/mcp/shared.d.ts.map +1 -0
  492. package/src/tools/mcp/shared.js +224 -0
  493. package/src/tools/mcp/shared.js.map +1 -0
  494. package/src/tools/oapi/bitable/app-table-field.d.ts +17 -0
  495. package/src/tools/oapi/bitable/app-table-field.d.ts.map +1 -0
  496. package/src/tools/oapi/bitable/app-table-field.js +224 -0
  497. package/src/tools/oapi/bitable/app-table-field.js.map +1 -0
  498. package/src/tools/oapi/bitable/app-table-record.d.ts +21 -0
  499. package/src/tools/oapi/bitable/app-table-record.d.ts.map +1 -0
  500. package/src/tools/oapi/bitable/app-table-record.js +449 -0
  501. package/src/tools/oapi/bitable/app-table-record.js.map +1 -0
  502. package/src/tools/oapi/bitable/app-table-view.d.ts +18 -0
  503. package/src/tools/oapi/bitable/app-table-view.d.ts.map +1 -0
  504. package/src/tools/oapi/bitable/app-table-view.js +197 -0
  505. package/src/tools/oapi/bitable/app-table-view.js.map +1 -0
  506. package/src/tools/oapi/bitable/app-table.d.ts +20 -0
  507. package/src/tools/oapi/bitable/app-table.d.ts.map +1 -0
  508. package/src/tools/oapi/bitable/app-table.js +249 -0
  509. package/src/tools/oapi/bitable/app-table.js.map +1 -0
  510. package/src/tools/oapi/bitable/app.d.ts +19 -0
  511. package/src/tools/oapi/bitable/app.d.ts.map +1 -0
  512. package/src/tools/oapi/bitable/app.js +188 -0
  513. package/src/tools/oapi/bitable/app.js.map +1 -0
  514. package/src/tools/oapi/bitable/index.d.ts +10 -0
  515. package/src/tools/oapi/bitable/index.d.ts.map +1 -0
  516. package/src/tools/oapi/bitable/index.js +10 -0
  517. package/src/tools/oapi/bitable/index.js.map +1 -0
  518. package/src/tools/oapi/calendar/calendar.d.ts +16 -0
  519. package/src/tools/oapi/calendar/calendar.d.ts.map +1 -0
  520. package/src/tools/oapi/calendar/calendar.js +124 -0
  521. package/src/tools/oapi/calendar/calendar.js.map +1 -0
  522. package/src/tools/oapi/calendar/event-attendee.d.ts +17 -0
  523. package/src/tools/oapi/calendar/event-attendee.d.ts.map +1 -0
  524. package/src/tools/oapi/calendar/event-attendee.js +275 -0
  525. package/src/tools/oapi/calendar/event-attendee.js.map +1 -0
  526. package/src/tools/oapi/calendar/event.d.ts +17 -0
  527. package/src/tools/oapi/calendar/event.d.ts.map +1 -0
  528. package/src/tools/oapi/calendar/event.js +721 -0
  529. package/src/tools/oapi/calendar/event.js.map +1 -0
  530. package/src/tools/oapi/calendar/freebusy.d.ts +14 -0
  531. package/src/tools/oapi/calendar/freebusy.d.ts.map +1 -0
  532. package/src/tools/oapi/calendar/freebusy.js +113 -0
  533. package/src/tools/oapi/calendar/freebusy.js.map +1 -0
  534. package/src/tools/oapi/calendar/index.d.ts +9 -0
  535. package/src/tools/oapi/calendar/index.d.ts.map +1 -0
  536. package/src/tools/oapi/calendar/index.js +9 -0
  537. package/src/tools/oapi/calendar/index.js.map +1 -0
  538. package/src/tools/oapi/chat/chat.d.ts +17 -0
  539. package/src/tools/oapi/chat/chat.d.ts.map +1 -0
  540. package/src/tools/oapi/chat/chat.js +126 -0
  541. package/src/tools/oapi/chat/chat.js.map +1 -0
  542. package/src/tools/oapi/chat/index.d.ts +11 -0
  543. package/src/tools/oapi/chat/index.d.ts.map +1 -0
  544. package/src/tools/oapi/chat/index.js +16 -0
  545. package/src/tools/oapi/chat/index.js.map +1 -0
  546. package/src/tools/oapi/chat/members.d.ts +12 -0
  547. package/src/tools/oapi/chat/members.d.ts.map +1 -0
  548. package/src/tools/oapi/chat/members.js +83 -0
  549. package/src/tools/oapi/chat/members.js.map +1 -0
  550. package/src/tools/oapi/common/get-user.d.ts +13 -0
  551. package/src/tools/oapi/common/get-user.d.ts.map +1 -0
  552. package/src/tools/oapi/common/get-user.js +108 -0
  553. package/src/tools/oapi/common/get-user.js.map +1 -0
  554. package/src/tools/oapi/common/index.d.ts +7 -0
  555. package/src/tools/oapi/common/index.d.ts.map +1 -0
  556. package/src/tools/oapi/common/index.js +7 -0
  557. package/src/tools/oapi/common/index.js.map +1 -0
  558. package/src/tools/oapi/common/search-user.d.ts +12 -0
  559. package/src/tools/oapi/common/search-user.d.ts.map +1 -0
  560. package/src/tools/oapi/common/search-user.js +75 -0
  561. package/src/tools/oapi/common/search-user.js.map +1 -0
  562. package/src/tools/oapi/drive/doc-comments.d.ts +16 -0
  563. package/src/tools/oapi/drive/doc-comments.d.ts.map +1 -0
  564. package/src/tools/oapi/drive/doc-comments.js +288 -0
  565. package/src/tools/oapi/drive/doc-comments.js.map +1 -0
  566. package/src/tools/oapi/drive/doc-media.d.ts +20 -0
  567. package/src/tools/oapi/drive/doc-media.d.ts.map +1 -0
  568. package/src/tools/oapi/drive/doc-media.js +337 -0
  569. package/src/tools/oapi/drive/doc-media.js.map +1 -0
  570. package/src/tools/oapi/drive/file.d.ts +20 -0
  571. package/src/tools/oapi/drive/file.d.ts.map +1 -0
  572. package/src/tools/oapi/drive/file.js +485 -0
  573. package/src/tools/oapi/drive/file.js.map +1 -0
  574. package/src/tools/oapi/drive/index.d.ts +13 -0
  575. package/src/tools/oapi/drive/index.d.ts.map +1 -0
  576. package/src/tools/oapi/drive/index.js +37 -0
  577. package/src/tools/oapi/drive/index.js.map +1 -0
  578. package/src/tools/oapi/helpers.d.ts +174 -0
  579. package/src/tools/oapi/helpers.d.ts.map +1 -0
  580. package/src/tools/oapi/helpers.js +341 -0
  581. package/src/tools/oapi/helpers.js.map +1 -0
  582. package/src/tools/oapi/im/format-messages.d.ts +51 -0
  583. package/src/tools/oapi/im/format-messages.d.ts.map +1 -0
  584. package/src/tools/oapi/im/format-messages.js +166 -0
  585. package/src/tools/oapi/im/format-messages.js.map +1 -0
  586. package/src/tools/oapi/im/index.d.ts +11 -0
  587. package/src/tools/oapi/im/index.d.ts.map +1 -0
  588. package/src/tools/oapi/im/index.js +18 -0
  589. package/src/tools/oapi/im/index.js.map +1 -0
  590. package/src/tools/oapi/im/message-read.d.ts +14 -0
  591. package/src/tools/oapi/im/message-read.d.ts.map +1 -0
  592. package/src/tools/oapi/im/message-read.js +412 -0
  593. package/src/tools/oapi/im/message-read.js.map +1 -0
  594. package/src/tools/oapi/im/message.d.ts +17 -0
  595. package/src/tools/oapi/im/message.d.ts.map +1 -0
  596. package/src/tools/oapi/im/message.js +171 -0
  597. package/src/tools/oapi/im/message.js.map +1 -0
  598. package/src/tools/oapi/im/resource.d.ts +14 -0
  599. package/src/tools/oapi/im/resource.d.ts.map +1 -0
  600. package/src/tools/oapi/im/resource.js +152 -0
  601. package/src/tools/oapi/im/resource.js.map +1 -0
  602. package/src/tools/oapi/im/time-utils.d.ts +47 -0
  603. package/src/tools/oapi/im/time-utils.d.ts.map +1 -0
  604. package/src/tools/oapi/im/time-utils.js +202 -0
  605. package/src/tools/oapi/im/time-utils.js.map +1 -0
  606. package/src/tools/oapi/im/user-name-uat.d.ts +24 -0
  607. package/src/tools/oapi/im/user-name-uat.d.ts.map +1 -0
  608. package/src/tools/oapi/im/user-name-uat.js +128 -0
  609. package/src/tools/oapi/im/user-name-uat.js.map +1 -0
  610. package/src/tools/oapi/index.d.ts +12 -0
  611. package/src/tools/oapi/index.d.ts.map +1 -0
  612. package/src/tools/oapi/index.js +59 -0
  613. package/src/tools/oapi/index.js.map +1 -0
  614. package/src/tools/oapi/sdk-types.d.ts +97 -0
  615. package/src/tools/oapi/sdk-types.d.ts.map +1 -0
  616. package/src/tools/oapi/sdk-types.js +13 -0
  617. package/src/tools/oapi/sdk-types.js.map +1 -0
  618. package/src/tools/oapi/search/doc-search.d.ts +14 -0
  619. package/src/tools/oapi/search/doc-search.d.ts.map +1 -0
  620. package/src/tools/oapi/search/doc-search.js +203 -0
  621. package/src/tools/oapi/search/doc-search.js.map +1 -0
  622. package/src/tools/oapi/search/index.d.ts +13 -0
  623. package/src/tools/oapi/search/index.d.ts.map +1 -0
  624. package/src/tools/oapi/search/index.js +34 -0
  625. package/src/tools/oapi/search/index.js.map +1 -0
  626. package/src/tools/oapi/sheets/index.d.ts +13 -0
  627. package/src/tools/oapi/sheets/index.d.ts.map +1 -0
  628. package/src/tools/oapi/sheets/index.js +32 -0
  629. package/src/tools/oapi/sheets/index.js.map +1 -0
  630. package/src/tools/oapi/sheets/sheet.d.ts +17 -0
  631. package/src/tools/oapi/sheets/sheet.d.ts.map +1 -0
  632. package/src/tools/oapi/sheets/sheet.js +652 -0
  633. package/src/tools/oapi/sheets/sheet.js.map +1 -0
  634. package/src/tools/oapi/task/comment.d.ts +16 -0
  635. package/src/tools/oapi/task/comment.d.ts.map +1 -0
  636. package/src/tools/oapi/task/comment.js +142 -0
  637. package/src/tools/oapi/task/comment.js.map +1 -0
  638. package/src/tools/oapi/task/index.d.ts +9 -0
  639. package/src/tools/oapi/task/index.d.ts.map +1 -0
  640. package/src/tools/oapi/task/index.js +9 -0
  641. package/src/tools/oapi/task/index.js.map +1 -0
  642. package/src/tools/oapi/task/subtask.d.ts +15 -0
  643. package/src/tools/oapi/task/subtask.d.ts.map +1 -0
  644. package/src/tools/oapi/task/subtask.js +164 -0
  645. package/src/tools/oapi/task/subtask.js.map +1 -0
  646. package/src/tools/oapi/task/task.d.ts +17 -0
  647. package/src/tools/oapi/task/task.d.ts.map +1 -0
  648. package/src/tools/oapi/task/task.js +346 -0
  649. package/src/tools/oapi/task/task.js.map +1 -0
  650. package/src/tools/oapi/task/tasklist.d.ts +22 -0
  651. package/src/tools/oapi/task/tasklist.d.ts.map +1 -0
  652. package/src/tools/oapi/task/tasklist.js +323 -0
  653. package/src/tools/oapi/task/tasklist.js.map +1 -0
  654. package/src/tools/oapi/wiki/index.d.ts +13 -0
  655. package/src/tools/oapi/wiki/index.d.ts.map +1 -0
  656. package/src/tools/oapi/wiki/index.js +35 -0
  657. package/src/tools/oapi/wiki/index.js.map +1 -0
  658. package/src/tools/oapi/wiki/space-node.d.ts +18 -0
  659. package/src/tools/oapi/wiki/space-node.d.ts.map +1 -0
  660. package/src/tools/oapi/wiki/space-node.js +253 -0
  661. package/src/tools/oapi/wiki/space-node.js.map +1 -0
  662. package/src/tools/oapi/wiki/space.d.ts +16 -0
  663. package/src/tools/oapi/wiki/space.d.ts.map +1 -0
  664. package/src/tools/oapi/wiki/space.js +132 -0
  665. package/src/tools/oapi/wiki/space.js.map +1 -0
  666. package/src/tools/oauth-batch-auth.d.ts +12 -0
  667. package/src/tools/oauth-batch-auth.d.ts.map +1 -0
  668. package/src/tools/oauth-batch-auth.js +142 -0
  669. package/src/tools/oauth-batch-auth.js.map +1 -0
  670. package/src/tools/oauth-cards.d.ts +27 -0
  671. package/src/tools/oauth-cards.d.ts.map +1 -0
  672. package/src/tools/oauth-cards.js +251 -0
  673. package/src/tools/oauth-cards.js.map +1 -0
  674. package/src/tools/oauth.d.ts +48 -0
  675. package/src/tools/oauth.d.ts.map +1 -0
  676. package/src/tools/oauth.js +619 -0
  677. package/src/tools/oauth.js.map +1 -0
  678. package/src/tools/onboarding-auth.d.ts +28 -0
  679. package/src/tools/onboarding-auth.d.ts.map +1 -0
  680. package/src/tools/onboarding-auth.js +131 -0
  681. package/src/tools/onboarding-auth.js.map +1 -0
  682. package/src/tools/tat/im/index.d.ts +16 -0
  683. package/src/tools/tat/im/index.d.ts.map +1 -0
  684. package/src/tools/tat/im/index.js +19 -0
  685. package/src/tools/tat/im/index.js.map +1 -0
  686. package/src/tools/tat/im/resource.d.ts +16 -0
  687. package/src/tools/tat/im/resource.d.ts.map +1 -0
  688. package/src/tools/tat/im/resource.js +158 -0
  689. package/src/tools/tat/im/resource.js.map +1 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Agent dispatch for inbound Feishu messages.
6
+ *
7
+ * Builds the agent envelope, prepends chat history context, and
8
+ * dispatches through the appropriate reply path (system command
9
+ * vs. normal streaming/static flow).
10
+ *
11
+ * Implementation details are split across focused modules:
12
+ * - dispatch-context.ts — DispatchContext type, route/session/event
13
+ * - dispatch-builders.ts — pure payload/body/envelope construction
14
+ * - dispatch-commands.ts — system command & permission notification
15
+ */
16
+ import type { RuntimeEnv, HistoryEntry } from 'openclaw/plugin-sdk';
17
+ import type { MessageContext } from '../types';
18
+ import type { LarkAccount } from '../../core/types';
19
+ import type { FeishuGroupConfig } from '../../core/types';
20
+ import type { PermissionError } from './permission';
21
+ import type { ClawdbotConfig } from 'openclaw/plugin-sdk';
22
+ export declare function dispatchToAgent(params: {
23
+ ctx: MessageContext;
24
+ permissionError?: PermissionError;
25
+ mediaPayload: Record<string, unknown>;
26
+ quotedContent?: string;
27
+ account: LarkAccount;
28
+ /** account 级别的 ClawdbotConfig(channels.feishu 已替换为 per-account 合并后的配置) */
29
+ accountScopedCfg: ClawdbotConfig;
30
+ runtime?: RuntimeEnv;
31
+ chatHistories?: Map<string, HistoryEntry[]>;
32
+ historyLimit: number;
33
+ /** Override the message ID used for reply threading. When set, the
34
+ * reply-dispatcher uses this ID for typing indicators and card replies
35
+ * instead of ctx.messageId (which may be a synthetic ID). */
36
+ replyToMessageId?: string;
37
+ /** When set, controls whether the sender is authorized to execute
38
+ * control commands. Computed by the handler via the SDK's access
39
+ * group command gating system. */
40
+ commandAuthorized?: boolean;
41
+ /** Per-group configuration for skills, systemPrompt, etc. */
42
+ groupConfig?: FeishuGroupConfig;
43
+ /** Default group configuration from the "*" wildcard entry. */
44
+ defaultGroupConfig?: FeishuGroupConfig;
45
+ /** When true, the reply dispatcher skips typing indicators. */
46
+ skipTyping?: boolean;
47
+ }): Promise<void>;
48
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAoBpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwG1D,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,GAAG,EAAE,cAAc,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,0EAA0E;IAC1E,gBAAgB,EAAE,cAAc,CAAC;IACjC,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB;;kEAE8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;uCAEmC;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GhB"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Agent dispatch for inbound Feishu messages.
6
+ *
7
+ * Builds the agent envelope, prepends chat history context, and
8
+ * dispatches through the appropriate reply path (system command
9
+ * vs. normal streaming/static flow).
10
+ *
11
+ * Implementation details are split across focused modules:
12
+ * - dispatch-context.ts — DispatchContext type, route/session/event
13
+ * - dispatch-builders.ts — pure payload/body/envelope construction
14
+ * - dispatch-commands.ts — system command & permission notification
15
+ */
16
+ import { clearHistoryEntriesIfEnabled } from 'openclaw/plugin-sdk';
17
+ import { larkLogger } from '../../core/lark-logger';
18
+ import { ticketElapsed } from '../../core/lark-ticket';
19
+ import { createFeishuReplyDispatcher } from '../../card/reply-dispatcher';
20
+ import { mentionedBot } from './mention';
21
+ import { buildQueueKey, threadScopedKey, registerActiveDispatcher, unregisterActiveDispatcher, } from '../../channel/chat-queue';
22
+ import { isLikelyAbortText } from '../../channel/abort-detect';
23
+ import { buildDispatchContext, resolveThreadSessionKey } from './dispatch-context';
24
+ import { buildMessageBody, buildBodyForAgent, buildInboundPayload, buildEnvelopeWithHistory, } from './dispatch-builders';
25
+ import { dispatchPermissionNotification, dispatchSystemCommand } from './dispatch-commands';
26
+ const log = larkLogger('inbound/dispatch');
27
+ // ---------------------------------------------------------------------------
28
+ // Internal: normal message dispatch
29
+ // ---------------------------------------------------------------------------
30
+ /**
31
+ * Dispatch a normal (non-command) message via the streaming card flow.
32
+ * Cleans up consumed history entries after dispatch completes.
33
+ *
34
+ * Note: history cleanup is intentionally placed here and NOT in the
35
+ * system-command path — command handlers don't consume history context,
36
+ * so the entries should be preserved for the next normal message.
37
+ */
38
+ async function dispatchNormalMessage(dc, ctxPayload, chatHistories, historyKey, historyLimit, replyToMessageId, skillFilter, skipTyping) {
39
+ // Abort messages should never create streaming cards — dispatch via the
40
+ // plain-text system-command path so the SDK's abort handler can reply
41
+ // without touching CardKit.
42
+ if (isLikelyAbortText(dc.ctx.content?.trim() ?? '')) {
43
+ dc.log(`feishu[${dc.account.accountId}]: abort message detected, using plain-text dispatch`);
44
+ log.info('abort message detected, using plain-text dispatch');
45
+ await dispatchSystemCommand(dc, ctxPayload, false, replyToMessageId);
46
+ return;
47
+ }
48
+ const { dispatcher, replyOptions, markDispatchIdle, markFullyComplete, abortCard } = createFeishuReplyDispatcher({
49
+ cfg: dc.accountScopedCfg,
50
+ agentId: dc.route.agentId,
51
+ chatId: dc.ctx.chatId,
52
+ replyToMessageId: replyToMessageId ?? dc.ctx.messageId,
53
+ accountId: dc.account.accountId,
54
+ chatType: dc.ctx.chatType,
55
+ skipTyping,
56
+ replyInThread: dc.isThread,
57
+ });
58
+ // Create an AbortController so the abort fast-path can cancel the
59
+ // underlying LLM request (not just the streaming card UI).
60
+ const abortController = new AbortController();
61
+ // Register the active dispatcher so the monitor abort fast-path can
62
+ // terminate the streaming card before this task completes.
63
+ const queueKey = buildQueueKey(dc.account.accountId, dc.ctx.chatId, dc.ctx.threadId);
64
+ registerActiveDispatcher(queueKey, { abortCard, abortController });
65
+ const effectiveSessionKey = dc.threadSessionKey ?? dc.route.sessionKey;
66
+ dc.log(`feishu[${dc.account.accountId}]: dispatching to agent (session=${effectiveSessionKey})`);
67
+ log.info(`dispatching to agent (session=${effectiveSessionKey})`);
68
+ try {
69
+ const { queuedFinal, counts } = await dc.core.channel.reply.dispatchReplyFromConfig({
70
+ ctx: ctxPayload,
71
+ cfg: dc.accountScopedCfg,
72
+ dispatcher,
73
+ replyOptions: {
74
+ ...replyOptions,
75
+ abortSignal: abortController.signal,
76
+ ...(skillFilter ? { skillFilter } : {}),
77
+ },
78
+ });
79
+ // Wait for all enqueued deliver() calls in the SDK's sendChain to
80
+ // complete before marking the dispatch as done. Without this,
81
+ // dispatchReplyFromConfig() may return while the final deliver() is
82
+ // still pending in the Promise chain, causing markFullyComplete() to
83
+ // block it and leaving completedText incomplete — which in turn makes
84
+ // the streaming card's final update show truncated content.
85
+ await dispatcher.waitForIdle();
86
+ markFullyComplete();
87
+ markDispatchIdle();
88
+ // Clean up consumed history entries
89
+ if (dc.isGroup && historyKey && chatHistories) {
90
+ clearHistoryEntriesIfEnabled({
91
+ historyMap: chatHistories,
92
+ historyKey,
93
+ limit: historyLimit,
94
+ });
95
+ }
96
+ dc.log(`feishu[${dc.account.accountId}]: dispatch complete (queuedFinal=${queuedFinal}, replies=${counts.final})`);
97
+ log.info(`dispatch complete (replies=${counts.final}, elapsed=${ticketElapsed()}ms)`);
98
+ }
99
+ finally {
100
+ unregisterActiveDispatcher(queueKey);
101
+ }
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Public API
105
+ // ---------------------------------------------------------------------------
106
+ export async function dispatchToAgent(params) {
107
+ // 1. Derive shared context (including route resolution + system event)
108
+ const dc = buildDispatchContext(params);
109
+ // 1b. Resolve thread session isolation (async: may query group info API)
110
+ if (dc.isThread && dc.ctx.threadId) {
111
+ dc.threadSessionKey = await resolveThreadSessionKey({
112
+ accountScopedCfg: dc.accountScopedCfg,
113
+ account: dc.account,
114
+ chatId: dc.ctx.chatId,
115
+ threadId: dc.ctx.threadId,
116
+ baseSessionKey: dc.route.sessionKey,
117
+ });
118
+ }
119
+ // 2. Build annotated message body
120
+ const messageBody = buildMessageBody(params.ctx, params.quotedContent);
121
+ // 3. Permission-error notification (optional side-effect).
122
+ // Isolated so a failure here does not block the main message dispatch.
123
+ if (params.permissionError) {
124
+ try {
125
+ await dispatchPermissionNotification(dc, params.permissionError, params.replyToMessageId);
126
+ }
127
+ catch (err) {
128
+ dc.error(`feishu[${dc.account.accountId}]: permission notification failed, continuing: ${String(err)}`);
129
+ }
130
+ }
131
+ // 4. Build main envelope (with group chat history)
132
+ const { combinedBody, historyKey } = buildEnvelopeWithHistory(dc, messageBody, params.chatHistories, params.historyLimit);
133
+ // 5. Build BodyForAgent with mention annotation (if any).
134
+ // SDK >= 2026.2.10 no longer falls back to Body for BodyForAgent,
135
+ // so we must set it explicitly to preserve the annotation.
136
+ const bodyForAgent = buildBodyForAgent(params.ctx);
137
+ // 6. Build InboundHistory for SDK metadata injection (>= 2026.2.10).
138
+ // The SDK's buildInboundUserContextPrefix renders these as structured
139
+ // JSON blocks; earlier SDK versions simply ignore unknown fields.
140
+ const threadHistoryKey = threadScopedKey(dc.ctx.chatId, dc.isThread ? dc.ctx.threadId : undefined);
141
+ const inboundHistory = dc.isGroup && params.chatHistories && params.historyLimit > 0
142
+ ? (params.chatHistories.get(threadHistoryKey) ?? []).map((entry) => ({
143
+ sender: entry.sender,
144
+ body: entry.body,
145
+ timestamp: entry.timestamp ?? Date.now(),
146
+ }))
147
+ : undefined;
148
+ // 7. Build inbound context payload
149
+ const isBareNewOrReset = /^\/(?:new|reset)\s*$/i.test((params.ctx.content ?? '').trim());
150
+ const groupSystemPrompt = dc.isGroup
151
+ ? params.groupConfig?.systemPrompt?.trim() || params.defaultGroupConfig?.systemPrompt?.trim() || undefined
152
+ : undefined;
153
+ const ctxPayload = buildInboundPayload(dc, {
154
+ body: combinedBody,
155
+ bodyForAgent,
156
+ rawBody: params.ctx.content,
157
+ commandBody: params.ctx.content,
158
+ senderName: params.ctx.senderName ?? params.ctx.senderId,
159
+ senderId: params.ctx.senderId,
160
+ messageSid: params.ctx.messageId,
161
+ wasMentioned: mentionedBot(params.ctx),
162
+ replyToBody: params.quotedContent,
163
+ inboundHistory,
164
+ extraFields: {
165
+ ...params.mediaPayload,
166
+ ...(groupSystemPrompt ? { GroupSystemPrompt: groupSystemPrompt } : {}),
167
+ ...(dc.ctx.threadId ? { MessageThreadId: dc.ctx.threadId } : {}),
168
+ },
169
+ });
170
+ // 8. Dispatch: system command vs. normal message
171
+ const isCommand = dc.core.channel.commands.isControlCommandMessage(params.ctx.content, params.accountScopedCfg);
172
+ // Resolve per-group skill filter (per-group > default "*")
173
+ const skillFilter = dc.isGroup ? (params.groupConfig?.skills ?? params.defaultGroupConfig?.skills) : undefined;
174
+ if (isCommand) {
175
+ await dispatchSystemCommand(dc, ctxPayload, isBareNewOrReset, params.replyToMessageId);
176
+ // /new and /reset explicitly start a new session — clear pending history
177
+ if (isBareNewOrReset && dc.isGroup && historyKey && params.chatHistories) {
178
+ clearHistoryEntriesIfEnabled({
179
+ historyMap: params.chatHistories,
180
+ historyKey,
181
+ limit: params.historyLimit,
182
+ });
183
+ }
184
+ }
185
+ else {
186
+ // Normal message dispatch; history cleanup happens inside.
187
+ // System commands intentionally skip history cleanup — command handlers
188
+ // don't consume history context, so entries are preserved for the next
189
+ // normal message.
190
+ await dispatchNormalMessage(dc, ctxPayload, params.chatHistories, historyKey, params.historyLimit, params.replyToMessageId, skillFilter, params.skipTyping);
191
+ }
192
+ }
193
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Context enrichment for inbound Feishu messages.
6
+ *
7
+ * Enrichment phases:
8
+ *
9
+ * - **resolveSenderInfo** (lightweight, before gate) — resolves sender
10
+ * display name and tracks permission errors.
11
+ * - **prefetchUserNames** (after gate, before content resolution) — batch
12
+ * pre-warm the account-scoped user-name cache for the sender and all
13
+ * non-bot mentions so that downstream merge_forward expansion and
14
+ * quoted-message formatting can read names synchronously.
15
+ * - **resolveMedia** (after gate) — downloads binary media attachments
16
+ * using ResourceDescriptors from the converter phase.
17
+ * - **resolveQuotedContent** (after gate) — fetches the replied-to
18
+ * message text for context.
19
+ *
20
+ * Note: merge_forward expansion for the primary message is now handled
21
+ * at parse time in {@link parseMessageEvent}. Quoted merge_forward
22
+ * messages are still expanded here via {@link resolveQuotedContent}.
23
+ */
24
+ import type { ClawdbotConfig } from 'openclaw/plugin-sdk';
25
+ import type { MessageContext, FeishuMediaInfo } from '../types';
26
+ import type { LarkAccount } from '../../core/types';
27
+ import type { PermissionError } from './permission';
28
+ /**
29
+ * Resolve the sender display name and track permission errors.
30
+ *
31
+ * This must run before the gate check because per-group sender
32
+ * allowlists may match on senderName.
33
+ */
34
+ export declare function resolveSenderInfo(params: {
35
+ ctx: MessageContext;
36
+ account: LarkAccount;
37
+ log: (...args: unknown[]) => void;
38
+ }): Promise<{
39
+ ctx: MessageContext;
40
+ permissionError?: PermissionError;
41
+ }>;
42
+ /**
43
+ * Batch-prefetch user display names for the sender and all non-bot
44
+ * mentions. Mention names that are already known from the event payload
45
+ * are written into the cache for free.
46
+ */
47
+ export declare function prefetchUserNames(params: {
48
+ ctx: MessageContext;
49
+ account: LarkAccount;
50
+ log: (...args: unknown[]) => void;
51
+ }): Promise<void>;
52
+ /** Result of media resolution: envelope payload + per-file mapping. */
53
+ export interface ResolveMediaResult {
54
+ payload: Record<string, unknown>;
55
+ mediaList: FeishuMediaInfo[];
56
+ }
57
+ /**
58
+ * Download and save binary media attachments (images, files, audio,
59
+ * video, stickers) from the inbound message.
60
+ *
61
+ * Uses ResourceDescriptors extracted by content converters during the
62
+ * parse phase — no re-parsing of rawMessage.content needed.
63
+ *
64
+ * Returns a payload object whose keys (`MediaPath`, `MediaType`, …)
65
+ * are spread directly into the agent envelope, plus the raw mediaList
66
+ * for content substitution.
67
+ */
68
+ export declare function resolveMedia(params: {
69
+ ctx: MessageContext;
70
+ /** account 级别的 ClawdbotConfig(channels.feishu 已替换为 per-account 合并后的配置) */
71
+ accountScopedCfg: ClawdbotConfig;
72
+ account: LarkAccount;
73
+ log: (...args: unknown[]) => void;
74
+ }): Promise<ResolveMediaResult>;
75
+ /**
76
+ * Replace Feishu file-key references in message content with actual
77
+ * local file paths after download.
78
+ *
79
+ * This is critical for:
80
+ * - **Images / stickers**: The SDK's `detectAndLoadPromptImages` scans
81
+ * the prompt text for local file paths with image extensions.
82
+ * - **Audio / video / files**: Gives the AI meaningful context about
83
+ * what was received (the SDK reads these via `MediaPath` directly,
84
+ * but the text body should still reflect the actual attachments).
85
+ */
86
+ export declare function substituteMediaPaths(content: string, mediaList: FeishuMediaInfo[]): string;
87
+ /**
88
+ * Fetch the text content of the message that the user replied to.
89
+ *
90
+ * If the quoted message is itself a merge_forward, its sub-messages are
91
+ * fetched and formatted as a single text block.
92
+ *
93
+ * Returns `"senderName: content"` when the sender name is available so
94
+ * the AI knows who originally wrote the quoted message.
95
+ */
96
+ export declare function resolveQuotedContent(params: {
97
+ ctx: MessageContext;
98
+ /** account 级别的 ClawdbotConfig(channels.feishu 已替换为 per-account 合并后的配置) */
99
+ accountScopedCfg: ClawdbotConfig;
100
+ account: LarkAccount;
101
+ log: (...args: unknown[]) => void;
102
+ }): Promise<string | undefined>;
103
+ //# sourceMappingURL=enrich.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/enrich.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAWpD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACnC,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,eAAe,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,CAsCtE;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhB;AAMD,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,GAAG,EAAE,cAAc,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,EAAE,cAAc,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACnC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuB9B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAkC1F;AAUD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,GAAG,EAAE,cAAc,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,EAAE,cAAc,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACnC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2B9B"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Context enrichment for inbound Feishu messages.
6
+ *
7
+ * Enrichment phases:
8
+ *
9
+ * - **resolveSenderInfo** (lightweight, before gate) — resolves sender
10
+ * display name and tracks permission errors.
11
+ * - **prefetchUserNames** (after gate, before content resolution) — batch
12
+ * pre-warm the account-scoped user-name cache for the sender and all
13
+ * non-bot mentions so that downstream merge_forward expansion and
14
+ * quoted-message formatting can read names synchronously.
15
+ * - **resolveMedia** (after gate) — downloads binary media attachments
16
+ * using ResourceDescriptors from the converter phase.
17
+ * - **resolveQuotedContent** (after gate) — fetches the replied-to
18
+ * message text for context.
19
+ *
20
+ * Note: merge_forward expansion for the primary message is now handled
21
+ * at parse time in {@link parseMessageEvent}. Quoted merge_forward
22
+ * messages are still expanded here via {@link resolveQuotedContent}.
23
+ */
24
+ import { PERMISSION_ERROR_COOLDOWN_MS, permissionErrorNotifiedAt } from './permission';
25
+ import { resolveUserName } from './user-name-cache';
26
+ import { downloadResources, buildFeishuMediaPayload } from './media-resolver';
27
+ import { getMessageFeishu } from '../outbound/fetch';
28
+ import { getUserNameCache, batchResolveUserNames } from './user-name-cache';
29
+ // ---------------------------------------------------------------------------
30
+ // Phase 1: Sender info (lightweight, before gate)
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Resolve the sender display name and track permission errors.
34
+ *
35
+ * This must run before the gate check because per-group sender
36
+ * allowlists may match on senderName.
37
+ */
38
+ export async function resolveSenderInfo(params) {
39
+ const { account, log } = params;
40
+ let ctx = params.ctx;
41
+ // Only resolve display name for real users — the contact API
42
+ // does not return results for app/bot accounts.
43
+ if (ctx.rawSender?.sender_type !== 'user') {
44
+ log(`sender_type is "${ctx.rawSender?.sender_type}", skipping name resolution`);
45
+ return { ctx };
46
+ }
47
+ // Resolve sender display name (best-effort)
48
+ const senderResult = await resolveUserName({
49
+ account,
50
+ openId: ctx.senderId,
51
+ log,
52
+ });
53
+ if (senderResult.name) {
54
+ ctx = { ...ctx, senderName: senderResult.name };
55
+ log(`sender resolved: ${senderResult.name}`);
56
+ }
57
+ else if (senderResult.permissionError) {
58
+ log(`sender resolve failed: permission error code=${senderResult.permissionError.code}`);
59
+ }
60
+ // Track permission errors (with cooldown)
61
+ let permissionError;
62
+ if (senderResult.permissionError) {
63
+ const appKey = account.appId ?? 'default';
64
+ const now = Date.now();
65
+ const lastNotified = permissionErrorNotifiedAt.get(appKey) ?? 0;
66
+ if (now - lastNotified > PERMISSION_ERROR_COOLDOWN_MS) {
67
+ permissionErrorNotifiedAt.set(appKey, now);
68
+ permissionError = senderResult.permissionError;
69
+ }
70
+ }
71
+ return { ctx, permissionError };
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // Phase 1.5: Batch pre-warm user name cache (after gate)
75
+ // ---------------------------------------------------------------------------
76
+ /**
77
+ * Batch-prefetch user display names for the sender and all non-bot
78
+ * mentions. Mention names that are already known from the event payload
79
+ * are written into the cache for free.
80
+ */
81
+ export async function prefetchUserNames(params) {
82
+ const { ctx, account, log } = params;
83
+ if (!account.configured)
84
+ return;
85
+ const cache = getUserNameCache(account.accountId);
86
+ // Seed cache with mention names already present in the event payload
87
+ for (const m of ctx.mentions) {
88
+ if (!m.isBot && m.openId && m.name) {
89
+ cache.set(m.openId, m.name);
90
+ }
91
+ }
92
+ // Collect all openIds we care about
93
+ const openIds = new Set();
94
+ if (ctx.senderId)
95
+ openIds.add(ctx.senderId);
96
+ for (const m of ctx.mentions) {
97
+ if (!m.isBot && m.openId)
98
+ openIds.add(m.openId);
99
+ }
100
+ // Batch-resolve any that are still missing
101
+ const toResolve = cache.filterMissing([...openIds]);
102
+ if (toResolve.length > 0) {
103
+ await batchResolveUserNames({ account, openIds: toResolve, log });
104
+ }
105
+ }
106
+ /**
107
+ * Download and save binary media attachments (images, files, audio,
108
+ * video, stickers) from the inbound message.
109
+ *
110
+ * Uses ResourceDescriptors extracted by content converters during the
111
+ * parse phase — no re-parsing of rawMessage.content needed.
112
+ *
113
+ * Returns a payload object whose keys (`MediaPath`, `MediaType`, …)
114
+ * are spread directly into the agent envelope, plus the raw mediaList
115
+ * for content substitution.
116
+ */
117
+ export async function resolveMedia(params) {
118
+ const { ctx, accountScopedCfg, account, log } = params;
119
+ const accountFeishuCfg = account.config;
120
+ const mediaMaxBytes = (accountFeishuCfg?.mediaMaxMb ?? 30) * 1024 * 1024;
121
+ const mediaList = await downloadResources({
122
+ cfg: accountScopedCfg,
123
+ messageId: ctx.messageId,
124
+ resources: ctx.resources,
125
+ maxBytes: mediaMaxBytes,
126
+ log,
127
+ accountId: account.accountId,
128
+ });
129
+ if (mediaList.length > 0) {
130
+ log(`media resolved: ${mediaList.length} attachment(s)`);
131
+ }
132
+ return {
133
+ payload: buildFeishuMediaPayload(mediaList),
134
+ mediaList,
135
+ };
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Media content substitution
139
+ // ---------------------------------------------------------------------------
140
+ /**
141
+ * Replace Feishu file-key references in message content with actual
142
+ * local file paths after download.
143
+ *
144
+ * This is critical for:
145
+ * - **Images / stickers**: The SDK's `detectAndLoadPromptImages` scans
146
+ * the prompt text for local file paths with image extensions.
147
+ * - **Audio / video / files**: Gives the AI meaningful context about
148
+ * what was received (the SDK reads these via `MediaPath` directly,
149
+ * but the text body should still reflect the actual attachments).
150
+ */
151
+ export function substituteMediaPaths(content, mediaList) {
152
+ let result = content;
153
+ for (const media of mediaList) {
154
+ const { fileKey, path, resourceType } = media;
155
+ switch (resourceType) {
156
+ case 'image':
157
+ // ![image](img_v3_xxx) → local path (SDK detects image extensions)
158
+ result = result.replace(`![image](${fileKey})`, path);
159
+ break;
160
+ case 'sticker':
161
+ // <sticker key="xxx"/> → local path (treated like image)
162
+ result = result.replace(`<sticker key="${fileKey}"/>`, path);
163
+ break;
164
+ case 'audio': {
165
+ // <audio key="xxx" .../> → [Audio: /path/to/audio.opus ...]
166
+ const audioRe = new RegExp(`<audio key="${escapeRegExp(fileKey)}"[^/]*/>`);
167
+ result = result.replace(audioRe, `[Audio: ${path}]`);
168
+ break;
169
+ }
170
+ case 'file': {
171
+ // <file key="xxx" .../> → [File: /path/to/doc.pdf]
172
+ const fileRe = new RegExp(`<file key="${escapeRegExp(fileKey)}"[^/]*/>`);
173
+ result = result.replace(fileRe, `[File: ${path}]`);
174
+ break;
175
+ }
176
+ case 'video': {
177
+ // <video key="xxx" .../> → [Video: /path/to/video.mp4]
178
+ const videoRe = new RegExp(`<video key="${escapeRegExp(fileKey)}"[^/]*/>`);
179
+ result = result.replace(videoRe, `[Video: ${path}]`);
180
+ break;
181
+ }
182
+ }
183
+ }
184
+ return result;
185
+ }
186
+ function escapeRegExp(s) {
187
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
188
+ }
189
+ // ---------------------------------------------------------------------------
190
+ // Phase 2b: Quoted / replied-to message (text context)
191
+ // ---------------------------------------------------------------------------
192
+ /**
193
+ * Fetch the text content of the message that the user replied to.
194
+ *
195
+ * If the quoted message is itself a merge_forward, its sub-messages are
196
+ * fetched and formatted as a single text block.
197
+ *
198
+ * Returns `"senderName: content"` when the sender name is available so
199
+ * the AI knows who originally wrote the quoted message.
200
+ */
201
+ export async function resolveQuotedContent(params) {
202
+ const { ctx, accountScopedCfg, account, log } = params;
203
+ if (!ctx.parentId)
204
+ return undefined;
205
+ try {
206
+ const quotedMsg = await getMessageFeishu({
207
+ cfg: accountScopedCfg,
208
+ messageId: ctx.parentId,
209
+ accountId: account.accountId,
210
+ expandForward: true,
211
+ });
212
+ if (!quotedMsg)
213
+ return undefined;
214
+ log(`feishu[${account.accountId}]: fetched quoted message: ${quotedMsg.content?.slice(0, 100)}`);
215
+ // Build quoted text with message_id prefix so AI can correlate
216
+ // file_key / image_key with the source message for resource download.
217
+ const prefix = `[message_id=${ctx.parentId}]`;
218
+ if (quotedMsg.senderName) {
219
+ return `${prefix} ${quotedMsg.senderName}: ${quotedMsg.content}`;
220
+ }
221
+ return `${prefix} ${quotedMsg.content}`;
222
+ }
223
+ catch (err) {
224
+ log(`feishu[${account.accountId}]: failed to fetch quoted message: ${String(err)}`);
225
+ return undefined;
226
+ }
227
+ }
228
+ //# sourceMappingURL=enrich.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich.js","sourceRoot":"","sources":["../../../../src/messaging/inbound/enrich.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Side-effect functions for the inbound message gate.
6
+ *
7
+ * Extracted from gate.ts to separate pure policy decisions from I/O
8
+ * operations (pairing request creation, message sending).
9
+ */
10
+ import type { ClawdbotConfig } from 'openclaw/plugin-sdk';
11
+ /**
12
+ * Create a pairing request and send a pairing reply message to the user.
13
+ *
14
+ * This is the side-effect portion of the DM pairing gate: the pure
15
+ * policy decision (whether to pair) is made in gate.ts, and this
16
+ * function executes the resulting I/O.
17
+ */
18
+ export declare function sendPairingReply(params: {
19
+ senderId: string;
20
+ chatId: string;
21
+ accountId: string;
22
+ accountScopedCfg?: ClawdbotConfig;
23
+ }): Promise<void>;
24
+ //# sourceMappingURL=gate-effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-effects.d.ts","sourceRoot":"","sources":["../../../../src/messaging/inbound/gate-effects.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQ1D;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,cAAc,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB"}