@lark-project/openclaw-lark-project 2026.3.131

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 (368) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/README.zh.md +80 -0
  4. package/dist/index.js +172 -0
  5. package/dist/index.js.map +7 -0
  6. package/dist/skills/feishu-bitable/SKILL.md +248 -0
  7. package/dist/skills/feishu-bitable/references/examples.md +813 -0
  8. package/dist/skills/feishu-bitable/references/field-properties.md +763 -0
  9. package/dist/skills/feishu-bitable/references/record-values.md +911 -0
  10. package/dist/skills/feishu-calendar/SKILL.md +244 -0
  11. package/dist/skills/feishu-channel-rules/SKILL.md +18 -0
  12. package/dist/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
  13. package/dist/skills/feishu-create-doc/SKILL.md +719 -0
  14. package/dist/skills/feishu-fetch-doc/SKILL.md +93 -0
  15. package/dist/skills/feishu-im-read/SKILL.md +163 -0
  16. package/dist/skills/feishu-project/SKILL.md +122 -0
  17. package/dist/skills/feishu-task/SKILL.md +293 -0
  18. package/dist/skills/feishu-troubleshoot/SKILL.md +70 -0
  19. package/dist/skills/feishu-update-doc/SKILL.md +285 -0
  20. package/dist/src/card/builder.js +293 -0
  21. package/dist/src/card/builder.js.map +7 -0
  22. package/dist/src/card/cardkit.js +126 -0
  23. package/dist/src/card/cardkit.js.map +7 -0
  24. package/dist/src/card/flush-controller.js +107 -0
  25. package/dist/src/card/flush-controller.js.map +7 -0
  26. package/dist/src/card/markdown-style.js +57 -0
  27. package/dist/src/card/markdown-style.js.map +7 -0
  28. package/dist/src/card/reply-dispatcher-types.js +39 -0
  29. package/dist/src/card/reply-dispatcher-types.js.map +7 -0
  30. package/dist/src/card/reply-dispatcher.js +245 -0
  31. package/dist/src/card/reply-dispatcher.js.map +7 -0
  32. package/dist/src/card/reply-mode.js +29 -0
  33. package/dist/src/card/reply-mode.js.map +7 -0
  34. package/dist/src/card/streaming-card-controller.js +653 -0
  35. package/dist/src/card/streaming-card-controller.js.map +7 -0
  36. package/dist/src/card/unavailable-guard.js +76 -0
  37. package/dist/src/card/unavailable-guard.js.map +7 -0
  38. package/dist/src/channel/abort-detect.js +79 -0
  39. package/dist/src/channel/abort-detect.js.map +7 -0
  40. package/dist/src/channel/chat-queue.js +50 -0
  41. package/dist/src/channel/chat-queue.js.map +7 -0
  42. package/dist/src/channel/config-adapter.js +89 -0
  43. package/dist/src/channel/config-adapter.js.map +7 -0
  44. package/dist/src/channel/directory.js +133 -0
  45. package/dist/src/channel/directory.js.map +7 -0
  46. package/dist/src/channel/event-handlers.js +175 -0
  47. package/dist/src/channel/event-handlers.js.map +7 -0
  48. package/dist/src/channel/monitor.js +108 -0
  49. package/dist/src/channel/monitor.js.map +7 -0
  50. package/dist/src/channel/onboarding-config.js +76 -0
  51. package/dist/src/channel/onboarding-config.js.map +7 -0
  52. package/dist/src/channel/onboarding-migrate.js +55 -0
  53. package/dist/src/channel/onboarding-migrate.js.map +7 -0
  54. package/dist/src/channel/onboarding.js +285 -0
  55. package/dist/src/channel/onboarding.js.map +7 -0
  56. package/dist/src/channel/plugin.js +260 -0
  57. package/dist/src/channel/plugin.js.map +7 -0
  58. package/dist/src/channel/probe.js +14 -0
  59. package/dist/src/channel/probe.js.map +7 -0
  60. package/dist/src/channel/types.js +1 -0
  61. package/dist/src/channel/types.js.map +7 -0
  62. package/dist/src/commands/auth.js +73 -0
  63. package/dist/src/commands/auth.js.map +7 -0
  64. package/dist/src/commands/diagnose.js +658 -0
  65. package/dist/src/commands/diagnose.js.map +7 -0
  66. package/dist/src/commands/doctor.js +327 -0
  67. package/dist/src/commands/doctor.js.map +7 -0
  68. package/dist/src/commands/index.js +124 -0
  69. package/dist/src/commands/index.js.map +7 -0
  70. package/dist/src/core/accounts.js +129 -0
  71. package/dist/src/core/accounts.js.map +7 -0
  72. package/dist/src/core/agent-config.js +60 -0
  73. package/dist/src/core/agent-config.js.map +7 -0
  74. package/dist/src/core/api-error.js +55 -0
  75. package/dist/src/core/api-error.js.map +7 -0
  76. package/dist/src/core/app-owner-fallback.js +17 -0
  77. package/dist/src/core/app-owner-fallback.js.map +7 -0
  78. package/dist/src/core/app-scope-checker.js +95 -0
  79. package/dist/src/core/app-scope-checker.js.map +7 -0
  80. package/dist/src/core/auth-errors.js +120 -0
  81. package/dist/src/core/auth-errors.js.map +7 -0
  82. package/dist/src/core/chat-info-cache.js +102 -0
  83. package/dist/src/core/chat-info-cache.js.map +7 -0
  84. package/dist/src/core/config-schema.js +150 -0
  85. package/dist/src/core/config-schema.js.map +7 -0
  86. package/dist/src/core/device-flow.js +174 -0
  87. package/dist/src/core/device-flow.js.map +7 -0
  88. package/dist/src/core/feishu-fetch.js +12 -0
  89. package/dist/src/core/feishu-fetch.js.map +7 -0
  90. package/dist/src/core/footer-config.js +16 -0
  91. package/dist/src/core/footer-config.js.map +7 -0
  92. package/dist/src/core/lark-client.js +322 -0
  93. package/dist/src/core/lark-client.js.map +7 -0
  94. package/dist/src/core/lark-logger.js +92 -0
  95. package/dist/src/core/lark-logger.js.map +7 -0
  96. package/dist/src/core/lark-ticket.js +18 -0
  97. package/dist/src/core/lark-ticket.js.map +7 -0
  98. package/dist/src/core/message-unavailable.js +119 -0
  99. package/dist/src/core/message-unavailable.js.map +7 -0
  100. package/dist/src/core/owner-policy.js +25 -0
  101. package/dist/src/core/owner-policy.js.map +7 -0
  102. package/dist/src/core/permission-url.js +37 -0
  103. package/dist/src/core/permission-url.js.map +7 -0
  104. package/dist/src/core/project-auth.js +177 -0
  105. package/dist/src/core/project-auth.js.map +7 -0
  106. package/dist/src/core/project-oauth-flow.js +124 -0
  107. package/dist/src/core/project-oauth-flow.js.map +7 -0
  108. package/dist/src/core/project-token-store.js +172 -0
  109. package/dist/src/core/project-token-store.js.map +7 -0
  110. package/dist/src/core/raw-request.js +45 -0
  111. package/dist/src/core/raw-request.js.map +7 -0
  112. package/dist/src/core/scope-manager.js +62 -0
  113. package/dist/src/core/scope-manager.js.map +7 -0
  114. package/dist/src/core/security-check.js +118 -0
  115. package/dist/src/core/security-check.js.map +7 -0
  116. package/dist/src/core/shutdown-hooks.js +37 -0
  117. package/dist/src/core/shutdown-hooks.js.map +7 -0
  118. package/dist/src/core/targets.js +55 -0
  119. package/dist/src/core/targets.js.map +7 -0
  120. package/dist/src/core/token-store.js +215 -0
  121. package/dist/src/core/token-store.js.map +7 -0
  122. package/dist/src/core/tool-client.js +335 -0
  123. package/dist/src/core/tool-client.js.map +7 -0
  124. package/dist/src/core/tool-scopes.js +207 -0
  125. package/dist/src/core/tool-scopes.js.map +7 -0
  126. package/dist/src/core/tools-config.js +57 -0
  127. package/dist/src/core/tools-config.js.map +7 -0
  128. package/dist/src/core/types.js +1 -0
  129. package/dist/src/core/types.js.map +7 -0
  130. package/dist/src/core/uat-client.js +124 -0
  131. package/dist/src/core/uat-client.js.map +7 -0
  132. package/dist/src/core/version.js +27 -0
  133. package/dist/src/core/version.js.map +7 -0
  134. package/dist/src/messaging/converters/audio.js +19 -0
  135. package/dist/src/messaging/converters/audio.js.map +7 -0
  136. package/dist/src/messaging/converters/calendar.js +46 -0
  137. package/dist/src/messaging/converters/calendar.js.map +7 -0
  138. package/dist/src/messaging/converters/content-converter.js +61 -0
  139. package/dist/src/messaging/converters/content-converter.js.map +7 -0
  140. package/dist/src/messaging/converters/file.js +18 -0
  141. package/dist/src/messaging/converters/file.js.map +7 -0
  142. package/dist/src/messaging/converters/folder.js +18 -0
  143. package/dist/src/messaging/converters/folder.js.map +7 -0
  144. package/dist/src/messaging/converters/hongbao.js +14 -0
  145. package/dist/src/messaging/converters/hongbao.js.map +7 -0
  146. package/dist/src/messaging/converters/image.js +16 -0
  147. package/dist/src/messaging/converters/image.js.map +7 -0
  148. package/dist/src/messaging/converters/index.js +48 -0
  149. package/dist/src/messaging/converters/index.js.map +7 -0
  150. package/dist/src/messaging/converters/interactive/card-converter.js +1040 -0
  151. package/dist/src/messaging/converters/interactive/card-converter.js.map +7 -0
  152. package/dist/src/messaging/converters/interactive/card-utils.js +36 -0
  153. package/dist/src/messaging/converters/interactive/card-utils.js.map +7 -0
  154. package/dist/src/messaging/converters/interactive/index.js +19 -0
  155. package/dist/src/messaging/converters/interactive/index.js.map +7 -0
  156. package/dist/src/messaging/converters/interactive/legacy.js +53 -0
  157. package/dist/src/messaging/converters/interactive/legacy.js.map +7 -0
  158. package/dist/src/messaging/converters/interactive/types.js +23 -0
  159. package/dist/src/messaging/converters/interactive/types.js.map +7 -0
  160. package/dist/src/messaging/converters/location.js +17 -0
  161. package/dist/src/messaging/converters/location.js.map +7 -0
  162. package/dist/src/messaging/converters/merge-forward.js +143 -0
  163. package/dist/src/messaging/converters/merge-forward.js.map +7 -0
  164. package/dist/src/messaging/converters/post.js +113 -0
  165. package/dist/src/messaging/converters/post.js.map +7 -0
  166. package/dist/src/messaging/converters/share.js +22 -0
  167. package/dist/src/messaging/converters/share.js.map +7 -0
  168. package/dist/src/messaging/converters/sticker.js +16 -0
  169. package/dist/src/messaging/converters/sticker.js.map +7 -0
  170. package/dist/src/messaging/converters/system.js +25 -0
  171. package/dist/src/messaging/converters/system.js.map +7 -0
  172. package/dist/src/messaging/converters/text.js +12 -0
  173. package/dist/src/messaging/converters/text.js.map +7 -0
  174. package/dist/src/messaging/converters/todo.js +37 -0
  175. package/dist/src/messaging/converters/todo.js.map +7 -0
  176. package/dist/src/messaging/converters/types.js +1 -0
  177. package/dist/src/messaging/converters/types.js.map +7 -0
  178. package/dist/src/messaging/converters/unknown.js +13 -0
  179. package/dist/src/messaging/converters/unknown.js.map +7 -0
  180. package/dist/src/messaging/converters/utils.js +35 -0
  181. package/dist/src/messaging/converters/utils.js.map +7 -0
  182. package/dist/src/messaging/converters/video-chat.js +21 -0
  183. package/dist/src/messaging/converters/video-chat.js.map +7 -0
  184. package/dist/src/messaging/converters/video.js +30 -0
  185. package/dist/src/messaging/converters/video.js.map +7 -0
  186. package/dist/src/messaging/converters/vote.js +24 -0
  187. package/dist/src/messaging/converters/vote.js.map +7 -0
  188. package/dist/src/messaging/inbound/dedup.js +82 -0
  189. package/dist/src/messaging/inbound/dedup.js.map +7 -0
  190. package/dist/src/messaging/inbound/dispatch-builders.js +98 -0
  191. package/dist/src/messaging/inbound/dispatch-builders.js.map +7 -0
  192. package/dist/src/messaging/inbound/dispatch-commands.js +94 -0
  193. package/dist/src/messaging/inbound/dispatch-commands.js.map +7 -0
  194. package/dist/src/messaging/inbound/dispatch-context.js +96 -0
  195. package/dist/src/messaging/inbound/dispatch-context.js.map +7 -0
  196. package/dist/src/messaging/inbound/dispatch.js +150 -0
  197. package/dist/src/messaging/inbound/dispatch.js.map +7 -0
  198. package/dist/src/messaging/inbound/enrich.js +137 -0
  199. package/dist/src/messaging/inbound/enrich.js.map +7 -0
  200. package/dist/src/messaging/inbound/gate-effects.js +28 -0
  201. package/dist/src/messaging/inbound/gate-effects.js.map +7 -0
  202. package/dist/src/messaging/inbound/gate.js +163 -0
  203. package/dist/src/messaging/inbound/gate.js.map +7 -0
  204. package/dist/src/messaging/inbound/handler.js +132 -0
  205. package/dist/src/messaging/inbound/handler.js.map +7 -0
  206. package/dist/src/messaging/inbound/media-resolver.js +70 -0
  207. package/dist/src/messaging/inbound/media-resolver.js.map +7 -0
  208. package/dist/src/messaging/inbound/mention.js +50 -0
  209. package/dist/src/messaging/inbound/mention.js.map +7 -0
  210. package/dist/src/messaging/inbound/parse-io.js +41 -0
  211. package/dist/src/messaging/inbound/parse-io.js.map +7 -0
  212. package/dist/src/messaging/inbound/parse.js +79 -0
  213. package/dist/src/messaging/inbound/parse.js.map +7 -0
  214. package/dist/src/messaging/inbound/permission.js +30 -0
  215. package/dist/src/messaging/inbound/permission.js.map +7 -0
  216. package/dist/src/messaging/inbound/policy.js +83 -0
  217. package/dist/src/messaging/inbound/policy.js.map +7 -0
  218. package/dist/src/messaging/inbound/reaction-handler.js +162 -0
  219. package/dist/src/messaging/inbound/reaction-handler.js.map +7 -0
  220. package/dist/src/messaging/inbound/user-name-cache.js +172 -0
  221. package/dist/src/messaging/inbound/user-name-cache.js.map +7 -0
  222. package/dist/src/messaging/outbound/actions.js +239 -0
  223. package/dist/src/messaging/outbound/actions.js.map +7 -0
  224. package/dist/src/messaging/outbound/chat-manage.js +74 -0
  225. package/dist/src/messaging/outbound/chat-manage.js.map +7 -0
  226. package/dist/src/messaging/outbound/deliver.js +162 -0
  227. package/dist/src/messaging/outbound/deliver.js.map +7 -0
  228. package/dist/src/messaging/outbound/fetch.js +7 -0
  229. package/dist/src/messaging/outbound/fetch.js.map +7 -0
  230. package/dist/src/messaging/outbound/forward.js +31 -0
  231. package/dist/src/messaging/outbound/forward.js.map +7 -0
  232. package/dist/src/messaging/outbound/media-url-utils.js +101 -0
  233. package/dist/src/messaging/outbound/media-url-utils.js.map +7 -0
  234. package/dist/src/messaging/outbound/media.js +463 -0
  235. package/dist/src/messaging/outbound/media.js.map +7 -0
  236. package/dist/src/messaging/outbound/outbound.js +95 -0
  237. package/dist/src/messaging/outbound/outbound.js.map +7 -0
  238. package/dist/src/messaging/outbound/reactions.js +312 -0
  239. package/dist/src/messaging/outbound/reactions.js.map +7 -0
  240. package/dist/src/messaging/outbound/send.js +194 -0
  241. package/dist/src/messaging/outbound/send.js.map +7 -0
  242. package/dist/src/messaging/outbound/typing.js +77 -0
  243. package/dist/src/messaging/outbound/typing.js.map +7 -0
  244. package/dist/src/messaging/shared/message-lookup.js +84 -0
  245. package/dist/src/messaging/shared/message-lookup.js.map +7 -0
  246. package/dist/src/messaging/types.js +1 -0
  247. package/dist/src/messaging/types.js.map +7 -0
  248. package/dist/src/tools/auto-auth.js +714 -0
  249. package/dist/src/tools/auto-auth.js.map +7 -0
  250. package/dist/src/tools/helpers.js +133 -0
  251. package/dist/src/tools/helpers.js.map +7 -0
  252. package/dist/src/tools/mcp/doc/create.js +35 -0
  253. package/dist/src/tools/mcp/doc/create.js.map +7 -0
  254. package/dist/src/tools/mcp/doc/fetch.js +33 -0
  255. package/dist/src/tools/mcp/doc/fetch.js.map +7 -0
  256. package/dist/src/tools/mcp/doc/index.js +32 -0
  257. package/dist/src/tools/mcp/doc/index.js.map +7 -0
  258. package/dist/src/tools/mcp/doc/update.js +61 -0
  259. package/dist/src/tools/mcp/doc/update.js.map +7 -0
  260. package/dist/src/tools/mcp/project/endpoint.js +25 -0
  261. package/dist/src/tools/mcp/project/endpoint.js.map +7 -0
  262. package/dist/src/tools/mcp/project/index.js +27 -0
  263. package/dist/src/tools/mcp/project/index.js.map +7 -0
  264. package/dist/src/tools/mcp/project/tools.js +579 -0
  265. package/dist/src/tools/mcp/project/tools.js.map +7 -0
  266. package/dist/src/tools/mcp/shared.js +170 -0
  267. package/dist/src/tools/mcp/shared.js.map +7 -0
  268. package/dist/src/tools/oapi/bitable/app-table-field.js +244 -0
  269. package/dist/src/tools/oapi/bitable/app-table-field.js.map +7 -0
  270. package/dist/src/tools/oapi/bitable/app-table-record.js +501 -0
  271. package/dist/src/tools/oapi/bitable/app-table-record.js.map +7 -0
  272. package/dist/src/tools/oapi/bitable/app-table-view.js +226 -0
  273. package/dist/src/tools/oapi/bitable/app-table-view.js.map +7 -0
  274. package/dist/src/tools/oapi/bitable/app-table.js +278 -0
  275. package/dist/src/tools/oapi/bitable/app-table.js.map +7 -0
  276. package/dist/src/tools/oapi/bitable/app.js +200 -0
  277. package/dist/src/tools/oapi/bitable/app.js.map +7 -0
  278. package/dist/src/tools/oapi/bitable/index.js +13 -0
  279. package/dist/src/tools/oapi/bitable/index.js.map +7 -0
  280. package/dist/src/tools/oapi/calendar/calendar.js +131 -0
  281. package/dist/src/tools/oapi/calendar/calendar.js.map +7 -0
  282. package/dist/src/tools/oapi/calendar/event-attendee.js +301 -0
  283. package/dist/src/tools/oapi/calendar/event-attendee.js.map +7 -0
  284. package/dist/src/tools/oapi/calendar/event.js +834 -0
  285. package/dist/src/tools/oapi/calendar/event.js.map +7 -0
  286. package/dist/src/tools/oapi/calendar/freebusy.js +111 -0
  287. package/dist/src/tools/oapi/calendar/freebusy.js.map +7 -0
  288. package/dist/src/tools/oapi/calendar/index.js +11 -0
  289. package/dist/src/tools/oapi/calendar/index.js.map +7 -0
  290. package/dist/src/tools/oapi/chat/chat.js +132 -0
  291. package/dist/src/tools/oapi/chat/chat.js.map +7 -0
  292. package/dist/src/tools/oapi/chat/index.js +11 -0
  293. package/dist/src/tools/oapi/chat/index.js.map +7 -0
  294. package/dist/src/tools/oapi/chat/members.js +83 -0
  295. package/dist/src/tools/oapi/chat/members.js.map +7 -0
  296. package/dist/src/tools/oapi/common/get-user.js +95 -0
  297. package/dist/src/tools/oapi/common/get-user.js.map +7 -0
  298. package/dist/src/tools/oapi/common/index.js +7 -0
  299. package/dist/src/tools/oapi/common/index.js.map +7 -0
  300. package/dist/src/tools/oapi/common/search-user.js +67 -0
  301. package/dist/src/tools/oapi/common/search-user.js.map +7 -0
  302. package/dist/src/tools/oapi/drive/doc-comments.js +310 -0
  303. package/dist/src/tools/oapi/drive/doc-comments.js.map +7 -0
  304. package/dist/src/tools/oapi/drive/doc-media.js +314 -0
  305. package/dist/src/tools/oapi/drive/doc-media.js.map +7 -0
  306. package/dist/src/tools/oapi/drive/file.js +548 -0
  307. package/dist/src/tools/oapi/drive/file.js.map +7 -0
  308. package/dist/src/tools/oapi/drive/index.js +29 -0
  309. package/dist/src/tools/oapi/drive/index.js.map +7 -0
  310. package/dist/src/tools/oapi/helpers.js +199 -0
  311. package/dist/src/tools/oapi/helpers.js.map +7 -0
  312. package/dist/src/tools/oapi/im/format-messages.js +128 -0
  313. package/dist/src/tools/oapi/im/format-messages.js.map +7 -0
  314. package/dist/src/tools/oapi/im/index.js +15 -0
  315. package/dist/src/tools/oapi/im/index.js.map +7 -0
  316. package/dist/src/tools/oapi/im/message-read.js +404 -0
  317. package/dist/src/tools/oapi/im/message-read.js.map +7 -0
  318. package/dist/src/tools/oapi/im/message.js +179 -0
  319. package/dist/src/tools/oapi/im/message.js.map +7 -0
  320. package/dist/src/tools/oapi/im/resource.js +126 -0
  321. package/dist/src/tools/oapi/im/resource.js.map +7 -0
  322. package/dist/src/tools/oapi/im/time-utils.js +169 -0
  323. package/dist/src/tools/oapi/im/time-utils.js.map +7 -0
  324. package/dist/src/tools/oapi/im/user-name-uat.js +103 -0
  325. package/dist/src/tools/oapi/im/user-name-uat.js.map +7 -0
  326. package/dist/src/tools/oapi/index.js +56 -0
  327. package/dist/src/tools/oapi/index.js.map +7 -0
  328. package/dist/src/tools/oapi/sdk-types.js +1 -0
  329. package/dist/src/tools/oapi/sdk-types.js.map +7 -0
  330. package/dist/src/tools/oapi/search/doc-search.js +215 -0
  331. package/dist/src/tools/oapi/search/doc-search.js.map +7 -0
  332. package/dist/src/tools/oapi/search/index.js +25 -0
  333. package/dist/src/tools/oapi/search/index.js.map +7 -0
  334. package/dist/src/tools/oapi/sheets/index.js +25 -0
  335. package/dist/src/tools/oapi/sheets/index.js.map +7 -0
  336. package/dist/src/tools/oapi/sheets/sheet.js +652 -0
  337. package/dist/src/tools/oapi/sheets/sheet.js.map +7 -0
  338. package/dist/src/tools/oapi/task/comment.js +151 -0
  339. package/dist/src/tools/oapi/task/comment.js.map +7 -0
  340. package/dist/src/tools/oapi/task/index.js +11 -0
  341. package/dist/src/tools/oapi/task/index.js.map +7 -0
  342. package/dist/src/tools/oapi/task/subtask.js +175 -0
  343. package/dist/src/tools/oapi/task/subtask.js.map +7 -0
  344. package/dist/src/tools/oapi/task/task.js +405 -0
  345. package/dist/src/tools/oapi/task/task.js.map +7 -0
  346. package/dist/src/tools/oapi/task/tasklist.js +366 -0
  347. package/dist/src/tools/oapi/task/tasklist.js.map +7 -0
  348. package/dist/src/tools/oapi/wiki/index.js +27 -0
  349. package/dist/src/tools/oapi/wiki/index.js.map +7 -0
  350. package/dist/src/tools/oapi/wiki/space-node.js +311 -0
  351. package/dist/src/tools/oapi/wiki/space-node.js.map +7 -0
  352. package/dist/src/tools/oapi/wiki/space.js +148 -0
  353. package/dist/src/tools/oapi/wiki/space.js.map +7 -0
  354. package/dist/src/tools/oauth-batch-auth.js +125 -0
  355. package/dist/src/tools/oauth-batch-auth.js.map +7 -0
  356. package/dist/src/tools/oauth-cards.js +269 -0
  357. package/dist/src/tools/oauth-cards.js.map +7 -0
  358. package/dist/src/tools/oauth.js +538 -0
  359. package/dist/src/tools/oauth.js.map +7 -0
  360. package/dist/src/tools/onboarding-auth.js +101 -0
  361. package/dist/src/tools/onboarding-auth.js.map +7 -0
  362. package/dist/src/tools/project-oauth.js +305 -0
  363. package/dist/src/tools/project-oauth.js.map +7 -0
  364. package/dist/src/tools/tat/im/index.js +9 -0
  365. package/dist/src/tools/tat/im/index.js.map +7 -0
  366. package/dist/src/tools/tat/im/resource.js +123 -0
  367. package/dist/src/tools/tat/im/resource.js.map +7 -0
  368. package/package.json +64 -0
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: feishu-fetch-doc
3
+ description: |
4
+ 获取飞书云文档内容。返回文档的 Markdown 内容,支持处理文档中的图片、文件和画板(需配合 feishu_doc_media 工具)。
5
+ ---
6
+
7
+ # feishu_mcp_fetch_doc
8
+
9
+ 获取飞书云文档的 Markdown 内容(Lark-flavored 格式)。
10
+
11
+ ## 重要:图片、文件、画板的处理
12
+
13
+ **文档中的图片、文件、画板需要通过 `feishu_doc_media`(action: download)工具单独获取!**
14
+
15
+ ### 识别格式
16
+
17
+ 返回的 Markdown 中,媒体文件以 HTML 标签形式出现:
18
+
19
+ - **图片**:
20
+ ```html
21
+ <image token="Z1FjxxxxxxxxxxxxxxxxxxxtnAc" width="1833" height="2491" align="center"/>
22
+ ```
23
+
24
+ - **文件**:
25
+ ```html
26
+ <view type="1">
27
+ <file token="Z1FjxxxxxxxxxxxxxxxxxxxtnAc" name="skills.zip"/>
28
+ </view>
29
+ ```
30
+
31
+ - **画板**:
32
+ ```html
33
+ <whiteboard token="Z1FjxxxxxxxxxxxxxxxxxxxtnAc"/>
34
+ ```
35
+
36
+ ### 获取步骤
37
+
38
+ 1. 从 HTML 标签中提取 `token` 属性值
39
+ 2. 调用 `feishu_doc_media` 下载:
40
+ ```json
41
+ {
42
+ "action": "download",
43
+ "resource_token": "提取的token",
44
+ "resource_type": "media",
45
+ "output_path": "/path/to/save/file"
46
+ }
47
+ ```
48
+
49
+ ## 参数
50
+
51
+ - **`doc_id`**(必填):支持直接传文档 URL 或 token
52
+ - 直接传 URL:`https://xxx.feishu.cn/docx/Z1FjxxxxxxxxxxxxxxxxxxxtnAc`(系统自动提取 token)
53
+ - 直接传 token:`Z1FjxxxxxxxxxxxxxxxxxxxtnAc`
54
+ - 知识库 URL/token 也支持:`https://xxx.feishu.cn/wiki/Z1FjxxxxxxxxxxxxxxxxxxxtnAc` 或 `Z1FjxxxxxxxxxxxxxxxxxxxtnAc`
55
+
56
+ ## Wiki URL 处理策略
57
+
58
+ 知识库链接(`/wiki/TOKEN`)背后可能是云文档、电子表格、多维表格等不同类型的文档。当不确定类型时, **不能直接假设是云文档**,必须先查询实际类型。
59
+
60
+ ### 处理流程
61
+
62
+ 1. **先调用 `feishu_wiki_space_node`(action: get)解析 wiki token**:
63
+ ```json
64
+ { "action": "get", "token": "wiki_token_here" }
65
+ ```
66
+ 2. **从返回的 `node` 中获取 `obj_type`(实际文档类型)和 `obj_token`(实际文档 token)**
67
+ 3. **根据 `obj_type` 调用对应工具**:
68
+
69
+ | obj_type | 工具 | 传参 |
70
+ |----------|------|------|
71
+ | `docx` | `feishu_mcp_fetch_doc` | doc_id = obj_token |
72
+ | `sheet` | `feishu_sheet` | spreadsheet_token = obj_token |
73
+ | `bitable` | `feishu_bitable_*` 系列 | app_token = obj_token |
74
+ | 其他 | 告知用户暂不支持该类型 | — |
75
+
76
+
77
+ ### 示例
78
+
79
+ 用户:`帮我看下这个文档 https://xxx.feishu.cn/wiki/ABC123`
80
+
81
+ 1. 调用 `feishu_wiki_space_node`(action: get, token: ABC123)
82
+ 2. 返回 `obj_type: "docx"`, `obj_token: "doxcnXYZ789"`
83
+ 3. 调用 `feishu_mcp_fetch_doc`(doc_id: doxcnXYZ789)
84
+
85
+ ## 工具组合
86
+
87
+ | 需求 | 工具 |
88
+ |------|------|
89
+ | 获取文档文本 | `feishu_mcp_fetch_doc` |
90
+ | 下载图片/文件/画板 | `feishu_doc_media`(action: download) |
91
+ | 解析 wiki token 类型 | `feishu_wiki_space_node`(action: get) |
92
+ | 读写电子表格 | `feishu_sheet` |
93
+ | 操作多维表格 | `feishu_bitable_*` 系列 |
@@ -0,0 +1,163 @@
1
+ ---
2
+ name: feishu-im-read
3
+ description: |
4
+ 飞书 IM 消息读取工具使用指南,覆盖会话消息获取、话题回复读取、跨会话消息搜索、图片/文件资源下载。
5
+
6
+ **当以下情况时使用此 Skill**:
7
+ (1) 需要获取群聊或单聊的历史消息
8
+ (2) 需要读取话题(thread)内的回复消息
9
+ (3) 需要跨会话搜索消息(按关键词、发送者、时间等条件)
10
+ (4) 消息中包含图片、文件、音频、视频,需要下载
11
+ (5) 用户提到"聊天记录"、"消息"、"群里说了什么"、"话题回复"、"搜索消息"、"图片"、"文件下载"
12
+ (6) 需要按时间范围过滤消息、分页获取更多消息
13
+ ---
14
+
15
+ # 飞书 IM 消息读取
16
+
17
+ ## 执行前必读
18
+
19
+ - 该 Skill 中的所有消息读取工具均以用户身份调用,只能读取用户有权限的会话
20
+ - `feishu_im_user_get_messages` 中 `open_id` 和 `chat_id` 必须二选一
21
+ - 消息中出现 `thread_id` 时,根据用户意图判断是否用 `feishu_im_user_get_thread_messages` 读取话题内回复
22
+ - 以用户身份读取后,如果消息内容中出现资源标记时,用 `feishu_im_user_fetch_resource` 下载,需要 `message_id` + `file_key` + `type`
23
+
24
+ ---
25
+
26
+ ## 快速索引:意图 → 工具
27
+
28
+ | 用户意图 | 工具 | 必填参数 | 常用可选 |
29
+ |---------|------|---------|---------|
30
+ | 获取群聊/单聊历史消息 | feishu_im_user_get_messages | chat_id 或 open_id(二选一) | relative_time, start_time/end_time, page_size, sort_rule |
31
+ | 获取话题内回复消息 | feishu_im_user_get_thread_messages | thread_id(omt_xxx) | page_size, sort_rule |
32
+ | 跨会话搜索消息 | feishu_im_user_search_messages | 至少一个过滤条件 | query, sender_ids, chat_id, relative_time, start_time/end_time, page_size |
33
+ | 下载消息中的图片 | feishu_im_user_fetch_resource | message_id, file_key(img_xxx), type="image" | - |
34
+ | 下载消息中的文件/音频/视频 | feishu_im_user_fetch_resource | message_id, file_key(file_xxx), type="file" | - |
35
+
36
+ ---
37
+
38
+ ## 核心约束
39
+
40
+ ### 1. 时间范围:确保消息覆盖完整
41
+
42
+ 当用户没有明确指定时间范围时,根据用户意图推断合适的 `relative_time`,确保返回的消息能完整覆盖用户关心的内容。用户明确指定时间时直接使用用户的值。
43
+
44
+ ### 2. 分页:根据需要翻页获取更多结果
45
+
46
+ - `page_size` 范围 1-50,默认 50
47
+ - 返回结果中 `has_more=true` 时,可使用 `page_token` 继续获取下一页
48
+ - 根据用户需求判断是否需要翻页:需要完整结果时继续翻页,浏览概览时第一页通常够用
49
+
50
+ ### 3. 话题回复:主动展开话题获取上下文
51
+
52
+ 获取历史消息时,返回的消息中如果包含 `thread_id` 字段,推荐主动获取话题的最新 10 条回复(`page_size: 10, sort_rule: "create_time_desc"`)以提供更完整的上下文。
53
+
54
+ | 场景 | 行为 |
55
+ |------|------|
56
+ | 获取历史消息并需要理解上下文(默认) | 对发现的 thread_id 调用 `feishu_im_user_get_thread_messages` 获取最新 10 条回复 |
57
+ | 用户要求"完整对话"、"详细讨论"、"看看回复" | 获取话题全部回复(`page_size: 50, sort_rule: "create_time_asc"`),需要时翻页 |
58
+ | 用户只浏览消息概览 / 用户明确说不看回复 | 跳过话题展开 |
59
+
60
+ **注意**:话题消息不支持时间过滤(飞书 API 限制),只能通过分页获取。
61
+
62
+ ### 4. 跨会话消息搜索
63
+
64
+ `feishu_im_user_search_messages` 支持跨所有会话搜索消息:
65
+
66
+ | 参数 | 说明 |
67
+ |------|------|
68
+ | `query` | 搜索关键词,匹配消息内容 |
69
+ | `sender_ids` | 发送者 open_id 列表 |
70
+ | `chat_id` | 限定搜索范围的会话 ID |
71
+ | `mention_ids` | 被@用户的 open_id 列表 |
72
+ | `message_type` | 消息类型:file / image / media |
73
+ | `sender_type` | 发送者类型:user / bot / all(默认 user) |
74
+ | `chat_type` | 会话类型:group / p2p |
75
+
76
+ 搜索结果每条消息额外包含 `chat_id`、`chat_type`(p2p/group)、`chat_name`。单聊消息还有 `chat_partner`(对方 open_id 和名字)。
77
+
78
+ ### 5. 图片/文件/媒体资源的提取
79
+
80
+ 消息内容中可能出现以下资源标记,用 `feishu_im_user_fetch_resource` 下载:
81
+
82
+ | 资源类型 | 内容中的标记格式 | fetch_resource 参数 |
83
+ |---------|-----------------|-------------------|
84
+ | 图片 | `![image](img_xxx)` | message_id=`om_xxx`, file_key=`img_xxx`, type=`"image"` |
85
+ | 文件 | `<file key="file_xxx" .../>` | message_id=`om_xxx`, file_key=`file_xxx`, type=`"file"` |
86
+ | 音频 | `<audio key="file_xxx" .../>` | message_id=`om_xxx`, file_key=`file_xxx`, type=`"file"` |
87
+ | 视频 | `<video key="file_xxx" .../>` | message_id=`om_xxx`, file_key=`file_xxx`, type=`"file"` |
88
+
89
+ 从消息的 `message_id` 字段和内容中的 `file_key` 组合即可调用 fetch_resource。
90
+
91
+ **注意**:文件大小限制 100MB,不支持下载表情包、卡片中的资源。
92
+
93
+ ### 6. 时间过滤
94
+
95
+ `feishu_im_user_get_messages` 和 `feishu_im_user_search_messages` 支持时间过滤,话题消息不支持。
96
+
97
+ | 方式 | 参数 | 示例 |
98
+ |------|------|------|
99
+ | 相对时间 | `relative_time` | `today`、`yesterday`、`this_week`、`last_3_days`、`last_24_hours` |
100
+ | 精确时间 | `start_time` + `end_time` | ISO 8601 格式:`2026-02-27T00:00:00+08:00` |
101
+
102
+ - `relative_time` 和 `start_time/end_time` **互斥**,不能同时使用
103
+ - 可用的 relative_time 值:`today`、`yesterday`、`day_before_yesterday`、`this_week`、`last_week`、`this_month`、`last_month`、`last_{N}_{unit}`(unit: minutes/hours/days)
104
+
105
+ ### 7. open_id 与 chat_id 的选择
106
+
107
+ | 参数 | 格式 | 适用场景 |
108
+ |------|------|---------|
109
+ | chat_id | `oc_xxx` | 已知会话 ID(群聊或单聊均可) |
110
+ | open_id | `ou_xxx` | 已知用户 ID,获取与该用户的单聊消息(自动解析为 chat_id) |
111
+
112
+ 两者必须二选一,优先使用 `chat_id`。
113
+
114
+ ---
115
+
116
+ ## 使用场景示例
117
+
118
+ ### 场景 1: 获取群聊消息并展开话题
119
+
120
+ **步骤 1**:获取群聊消息
121
+ ```json
122
+ { "chat_id": "oc_xxx" }
123
+ ```
124
+
125
+ **步骤 2**:返回的消息中发现 `thread_id`,展开话题最新回复:
126
+ ```json
127
+ { "thread_id": "omt_xxx", "page_size": 10, "sort_rule": "create_time_desc" }
128
+ ```
129
+
130
+ ### 场景 2: 跨会话搜索消息
131
+
132
+ ```json
133
+ { "query": "项目进度", "chat_id": "oc_xxx" }
134
+ ```
135
+
136
+ ### 场景 3: 分页获取更多消息
137
+
138
+ 第一次调用返回 `has_more: true` 和 `page_token: "xxx"`,继续获取:
139
+ ```json
140
+ { "chat_id": "oc_xxx", "page_token": "xxx" }
141
+ ```
142
+
143
+ ### 场景 4: 下载消息中的资源
144
+
145
+ ```json
146
+ { "message_id": "om_xxx", "file_key": "img_v3_xxx", "type": "image" }
147
+ ```
148
+
149
+ ---
150
+
151
+ ## 常见错误与排查
152
+
153
+ | 错误现象 | 根本原因 | 解决方案 |
154
+ |---------|---------|---------|
155
+ | 消息结果太少 | 时间范围太窄或未传时间参数 | 根据用户意图推断合适的 `relative_time` |
156
+ | 消息不完整 | 没有检查 has_more 并翻页 | has_more=true 时用 page_token 翻页 |
157
+ | 话题讨论内容不完整 | 没有展开 thread_id | 发现 thread_id 时获取话题回复 |
158
+ | "open_id 和 chat_id 不能同时提供" | 同时传了两个参数 | 只传其中一个 |
159
+ | "relative_time 和 start_time/end_time 不能同时使用" | 时间参数冲突 | 选择一种时间过滤方式 |
160
+ | "未找到与 open_id=xxx 的单聊会话" | 没有单聊记录 | 改用 chat_id,或确认存在单聊 |
161
+ | 话题消息返回为空 | thread_id 格式不正确 | 确认为 `omt_xxx` 格式 |
162
+ | 图片/文件下载失败 | file_key 或 message_id 不匹配 | 确认 file_key 来自该 message_id |
163
+ | 权限不足 | 用户未授权或无权限 | 确认已完成 OAuth 授权且是会话成员 |
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: feishu-project
3
+ description: |
4
+ 飞书项目(Meego)工作项管理。支持查询、创建、修改和流转工作项。
5
+
6
+ **重要:飞书项目使用独立的 OAuth 授权,与飞书 IM/文档的授权不共享,首次使用需单独完成授权。**
7
+
8
+ **当以下情况时使用此 Skill**:
9
+ (1) 用户提到"飞书项目"、"Meego"、"工作项"、"需求"、"缺陷"、"bug"、"sprint"、"迭代"、"看板"
10
+ (2) 需要查询、创建、修改飞书项目中的工作项
11
+ (3) 需要查看项目视图、待办列表、评论
12
+ (4) 需要流转工作项状态
13
+ (5) 用户问"我的待办"、"项目进度"等项目管理相关问题
14
+ ---
15
+
16
+ # 飞书项目(Meego)工具使用指南
17
+
18
+ ## 授权前置检查
19
+
20
+ 飞书项目的 OAuth 授权与飞书 IM/文档的授权**完全独立**,不共享 token。首次使用飞书项目功能时,必须先完成独立授权。
21
+
22
+ ### 授权流程
23
+
24
+ 1. 先调用 `feishu_project_oauth` 工具的 `status` action 检查授权状态
25
+ 2. 如果未授权,调用 `feishu_project_oauth` 工具的 `authorize` action 发起授权
26
+ 3. 用户在授权卡片中点击链接完成授权
27
+ 4. 授权完成后即可使用飞书项目相关工具
28
+
29
+ ### 重要提示
30
+
31
+ - 如果工具返回 `project_auth_required` 错误,说明需要先授权
32
+ - 飞书项目授权与飞书 IM/文档授权是**两套独立的系统**,互不影响
33
+ - 撤销飞书项目授权不会影响飞书 IM/文档的功能
34
+
35
+ ## 工具快速索引
36
+
37
+ ### 授权管理
38
+
39
+ | 意图 | 工具 | 关键参数 |
40
+ |------|------|----------|
41
+ | 检查授权状态 | `feishu_project_oauth` | action: "status" |
42
+ | 发起授权 | `feishu_project_oauth` | action: "authorize" |
43
+ | 撤销授权 | `feishu_project_oauth` | action: "revoke" |
44
+
45
+ ### 查询类
46
+
47
+ | 意图 | 工具 | 关键参数 |
48
+ |------|------|----------|
49
+ | 查看待办/已办/超期 | `feishu_project_list_todo` | action: "todo"/"done"/"overdue"/"this_week" |
50
+ | MQL 搜索工作项 | `feishu_project_search_by_mql` | project_key, mql |
51
+ | 查看工作项概况 | `feishu_project_get_workitem_brief` | work_item_id |
52
+ | 查看工作项类型信息 | `feishu_project_get_workitem_info` | work_item_type |
53
+ | 查看字段元信息 | `feishu_project_get_workitem_field_meta` | project_key, work_item_type_key |
54
+ | 查看可流转状态 | `feishu_project_get_transitable_statuses` | project_key, work_item_id, work_item_type_key, user_key |
55
+ | 查看节点详情 | `feishu_project_get_node_detail` | work_item_id, node_id |
56
+ | 查看评论列表 | `feishu_project_list_workitem_comments` | project_key, work_item_id |
57
+ | 查看操作记录 | `feishu_project_get_workitem_op_record` | project_key, work_item_id |
58
+ | 查看工时记录 | `feishu_project_get_workitem_man_hour_records` | project_key, work_item_type_key, work_item_id |
59
+ | 查看排期 | `feishu_project_list_schedule` | project_key, user_keys, start_time, end_time |
60
+ | 搜索空间信息 | `feishu_project_search_project_info` | project_key |
61
+ | 搜索用户 | `feishu_project_search_user_info` | user_keys |
62
+ | 查看工作项类型列表 | `feishu_project_list_workitem_types` | project_key |
63
+ | 查看关联工作项 | `feishu_project_list_related_workitems` | project_key, work_item_type_key, work_item_id, relation_work_item_type_key, relation_key |
64
+ | 查看关联关系 | `feishu_project_list_workitem_relations` | project_key |
65
+ | 搜索视图 | `feishu_project_search_view_by_title` | project_key, view_scope, key_word |
66
+ | 查看视图详情 | `feishu_project_get_view_detail` | view_id |
67
+ | 查看度量图表 | `feishu_project_list_charts` | project_key, view_id |
68
+ | 查看团队成员 | `feishu_project_list_team_members` | project_key, team_id |
69
+
70
+ ### 操作类
71
+
72
+ | 意图 | 工具 | 关键参数 |
73
+ |------|------|----------|
74
+ | 创建工作项 | `feishu_project_create_workitem` | work_item_type, fields |
75
+ | 修改工作项字段 | `feishu_project_update_field` | work_item_id, fields |
76
+ | 添加评论 | `feishu_project_add_comment` | work_item_id, comment_content |
77
+ | 流转状态 | `feishu_project_finish_node` | work_item_id, node_id |
78
+ | 创建固定视图 | `feishu_project_create_fixed_view` | project_key, name, work_item_type_key, work_item_id_list |
79
+ | 更新固定视图 | `feishu_project_update_fixed_view` | project_key, view_id, work_item_type_key |
80
+
81
+ ## MQL 使用指南
82
+
83
+ MQL(Meego Query Language)是飞书项目的查询语言,基于 SQL 语法扩展。
84
+
85
+ ### 使用步骤
86
+
87
+ 1. **确认空间和工作项类型**:先用 `feishu_project_get_workitem_info` 获取字段信息
88
+ 2. **使用可读名称**:select 后使用中文字段名(如"任务名称"),避免使用 field_key
89
+ 3. **编写查询**:`select \`任务名称\`,\`负责人\` from \`空间名\`.\`需求\` where \`状态\` = '进行中'`
90
+
91
+ ### 获取语法帮助
92
+
93
+ 调用 `feishu_project_search_by_mql` 时传入 `helper: "helper"` 可获取完整语法说明和示例。
94
+
95
+ ## 常见操作流程
96
+
97
+ ### 查看我的待办
98
+ ```
99
+ 1. feishu_project_list_todo(action: "todo")
100
+ ```
101
+
102
+ ### 创建工作项
103
+ ```
104
+ 1. feishu_project_search_project_info(project_key: "xxx") -- 确认空间
105
+ 2. feishu_project_get_workitem_field_meta(project_key, work_item_type_key) -- 获取字段元信息
106
+ 3. feishu_project_create_workitem(work_item_type, fields) -- 创建
107
+ ```
108
+
109
+ ### 流转工作项状态
110
+ ```
111
+ 1. feishu_project_get_transitable_statuses(...) -- 获取可流转状态列表
112
+ 2. feishu_project_finish_node(work_item_id, node_id) -- 执行流转
113
+ ```
114
+
115
+ ## 常见错误排查
116
+
117
+ | 错误 | 原因 | 解决方式 |
118
+ |------|------|----------|
119
+ | `project_auth_required` | 飞书项目未授权或 token 已过期 | 调用 `feishu_project_oauth` 的 authorize |
120
+ | 权限不足 | 用户不是项目成员 | 确认用户有项目访问权限 |
121
+ | 空间不存在 | project_key 错误 | 使用 `feishu_project_search_project_info` 查找正确的 key |
122
+ | 工作项类型不存在 | work_item_type 错误 | 使用 `feishu_project_list_workitem_types` 查看可用类型 |
@@ -0,0 +1,293 @@
1
+ ---
2
+ name: feishu-task
3
+ description: |
4
+ 飞书任务管理工具,用于创建、查询、更新任务和清单。
5
+
6
+ **当以下情况时使用此 Skill**:
7
+ (1) 需要创建、查询、更新、删除任务
8
+ (2) 需要创建、管理任务清单
9
+ (3) 需要查看任务列表或清单内的任务
10
+ (4) 用户提到"任务"、"待办"、"to-do"、"清单"、"task"
11
+ (5) 需要设置任务负责人、关注人、截止时间
12
+ ---
13
+
14
+ # 飞书任务管理
15
+
16
+ ## 🚨 执行前必读
17
+
18
+ - ✅ **时间格式**:ISO 8601 / RFC 3339(带时区),例如 `2026-02-28T17:00:00+08:00`
19
+ - ✅ **current_user_id 强烈建议**:从消息上下文的 SenderId 获取(ou_...),工具会自动添加为 follower(如不在 members 中),确保创建者可以编辑任务
20
+ - ✅ **patch/get 必须**:task_guid
21
+ - ✅ **tasklist.tasks 必须**:tasklist_guid
22
+ - ✅ **完成任务**:completed_at = "2026-02-26 15:00:00"
23
+ - ✅ **反完成(恢复未完成)**:completed_at = "0"
24
+
25
+ ---
26
+
27
+ ## 📋 快速索引:意图 → 工具 → 必填参数
28
+
29
+ | 用户意图 | 工具 | action | 必填参数 | 强烈建议 | 常用可选 |
30
+ |---------|------|--------|---------|---------|---------|
31
+ | 新建待办 | feishu_task_task | create | summary | current_user_id(SenderId) | members, due, description |
32
+ | 查未完成任务 | feishu_task_task | list | - | completed=false | page_size |
33
+ | 获取任务详情 | feishu_task_task | get | task_guid | - | - |
34
+ | 完成任务 | feishu_task_task | patch | task_guid, completed_at | - | - |
35
+ | 反完成任务 | feishu_task_task | patch | task_guid, completed_at="0" | - | - |
36
+ | 改截止时间 | feishu_task_task | patch | task_guid, due | - | - |
37
+ | 创建清单 | feishu_task_tasklist | create | name | - | members |
38
+ | 查看清单任务 | feishu_task_tasklist | tasks | tasklist_guid | - | completed |
39
+ | 添加清单成员 | feishu_task_tasklist | add_members | tasklist_guid, members[] | - | - |
40
+
41
+ ---
42
+
43
+ ## 🎯 核心约束(Schema 未透露的知识)
44
+
45
+ ### 1. 当前工具使用用户身份(已内置保护)
46
+
47
+ **工具使用 `user_access_token`(用户身份)**
48
+
49
+ 这意味着:
50
+ - ✅ 创建任务时可以指定任意成员(包括只分配给别人)
51
+ - ⚠️ 只能查看和编辑**自己是成员的任务**
52
+ - ⚠️ **如果创建时没把自己加入成员,后续无法编辑该任务**
53
+
54
+ **自动保护机制**:
55
+ - 传入 `current_user_id` 参数(从 SenderId 获取)
56
+ - 如果 `members` 中不包含 `current_user_id`,工具会**自动添加为 follower**
57
+ - 确保创建者始终可以编辑任务
58
+
59
+ **推荐用法**:创建任务时始终传 `current_user_id`,工具会自动处理成员关系。
60
+
61
+ ### 2. 任务成员的角色说明
62
+
63
+ - **assignee(负责人)**:负责完成任务,可以编辑任务
64
+ - **follower(关注人)**:关注任务进展,接收通知
65
+
66
+ **添加成员示例**:
67
+ ```json
68
+ {
69
+ "members": [
70
+ {"id": "ou_xxx", "role": "assignee"}, // 负责人
71
+ {"id": "ou_yyy", "role": "follower"} // 关注人
72
+ ]
73
+ }
74
+ ```
75
+
76
+ **说明**:`id` 使用用户的 `open_id`(从消息上下文的 SenderId 获取)
77
+
78
+ ### 3. 任务清单角色冲突
79
+
80
+ **现象**:创建清单(`tasklist.create`)时传了 `members`,但返回的 `tasklist.members` 为空或缺少成员
81
+
82
+ **原因**:创建人自动成为清单 **owner**(所有者),如果 `members` 中包含创建人,该用户最终成为 owner 并从 `members` 中移除(同一用户只能有一个角色)
83
+
84
+ **建议**:不要在 `members` 中包含创建人,只添加其他协作成员
85
+
86
+ ### 4. completed_at 的三种用法
87
+
88
+ **1) 完成任务(设置完成时间)**:
89
+ ```json
90
+ {
91
+ "action": "patch",
92
+ "task_guid": "xxx",
93
+ "completed_at": "2026-02-26 15:30:00" // 北京时间字符串
94
+ }
95
+ ```
96
+
97
+ **2) 反完成(恢复未完成状态)**:
98
+ ```json
99
+ {
100
+ "action": "patch",
101
+ "task_guid": "xxx",
102
+ "completed_at": "0" // 特殊值 "0" 表示反完成
103
+ }
104
+ ```
105
+
106
+ **3) 毫秒时间戳**(不推荐,除非上层已严格生成):
107
+ ```json
108
+ {
109
+ "completed_at": "1740545400000" // 毫秒时间戳字符串
110
+ }
111
+ ```
112
+
113
+ ### 5. 清单成员的角色
114
+
115
+ | 成员类型 | 角色 | 说明 |
116
+ |---------|------|------|
117
+ | user(用户) | owner | 所有者,可转让所有权 |
118
+ | user(用户) | editor | 可编辑,可修改清单和任务 |
119
+ | user(用户) | viewer | 可查看,只读权限 |
120
+ | chat(群组) | editor/viewer | 整个群组获得权限 |
121
+
122
+ **说明**:创建清单时,创建者自动成为 owner,无需在 members 中指定。
123
+
124
+ ---
125
+
126
+ ## 📌 使用场景示例
127
+
128
+ ### 场景 1: 创建任务并分配负责人
129
+
130
+ ```json
131
+ {
132
+ "action": "create",
133
+ "summary": "准备周会材料",
134
+ "description": "整理本周工作进展和下周计划",
135
+ "current_user_id": "ou_发送者的open_id",
136
+ "due": {
137
+ "timestamp": "2026-02-28 17:00:00",
138
+ "is_all_day": false
139
+ },
140
+ "members": [
141
+ {"id": "ou_协作者的open_id", "role": "assignee"}
142
+ ]
143
+ }
144
+ ```
145
+
146
+ **说明**:
147
+ - `summary` 是必填字段
148
+ - `current_user_id` 强烈建议传入(从 SenderId 获取),工具会自动添加为 follower
149
+ - `members` 可以只包含其他协作者,当前用户会被自动添加
150
+ - 时间使用北京时间字符串格式
151
+
152
+ ### 场景 2: 查询我负责的未完成任务
153
+
154
+ ```json
155
+ {
156
+ "action": "list",
157
+ "completed": false,
158
+ "page_size": 20
159
+ }
160
+ ```
161
+
162
+ ### 场景 3: 完成任务
163
+
164
+ ```json
165
+ {
166
+ "action": "patch",
167
+ "task_guid": "任务的guid",
168
+ "completed_at": "2026-02-26 15:30:00"
169
+ }
170
+ ```
171
+
172
+ ### 场景 4: 反完成任务(恢复未完成状态)
173
+
174
+ ```json
175
+ {
176
+ "action": "patch",
177
+ "task_guid": "任务的guid",
178
+ "completed_at": "0"
179
+ }
180
+ ```
181
+
182
+ ### 场景 5: 创建清单并添加协作者
183
+
184
+ ```json
185
+ {
186
+ "action": "create",
187
+ "name": "产品迭代 v2.0",
188
+ "members": [
189
+ {"id": "ou_xxx", "role": "editor"},
190
+ {"id": "ou_yyy", "role": "viewer"}
191
+ ]
192
+ }
193
+ ```
194
+
195
+ ### 场景 6: 查看清单内的未完成任务
196
+
197
+ ```json
198
+ {
199
+ "action": "tasks",
200
+ "tasklist_guid": "清单的guid",
201
+ "completed": false
202
+ }
203
+ ```
204
+
205
+ ### 场景 7: 全天任务
206
+
207
+ ```json
208
+ {
209
+ "action": "create",
210
+ "summary": "年度总结",
211
+ "due": {
212
+ "timestamp": "2026-03-01 00:00:00",
213
+ "is_all_day": true
214
+ }
215
+ }
216
+ ```
217
+
218
+ ---
219
+
220
+ ## 🔍 常见错误与排查
221
+
222
+ | 错误现象 | 根本原因 | 解决方案 |
223
+ |---------|---------|---------|
224
+ | **创建后无法编辑任务** | 创建时未将自己加入 members | 创建时至少将当前用户(SenderId)加为 assignee 或 follower |
225
+ | **patch 失败提示 task_guid 缺失** | 未传 task_guid 参数 | patch/get 必须传 task_guid |
226
+ | **tasks 失败提示 tasklist_guid 缺失** | 未传 tasklist_guid 参数 | tasklist.tasks action 必须传 tasklist_guid |
227
+ | **反完成失败** | completed_at 格式错误 | 使用 `"0"` 字符串,不是数字 0 |
228
+ | **时间不对** | 使用了 Unix 时间戳 | 改用 ISO 8601 格式(带时区):`2024-01-01T00:00:00+08:00` |
229
+
230
+ ---
231
+
232
+ ## 📚 附录:背景知识
233
+
234
+ ### A. 资源关系
235
+
236
+ ```
237
+ 任务清单(Tasklist)
238
+ └─ 自定义分组(Section,可选)
239
+ └─ 任务(Task)
240
+ ├─ 成员:负责人(assignee)、关注人(follower)
241
+ ├─ 子任务(Subtask)
242
+ ├─ 截止时间(due)、开始时间(start)
243
+ └─ 附件、评论
244
+ ```
245
+
246
+ **核心概念**:
247
+ - **任务(Task)**:独立的待办事项,有唯一的 `task_guid`
248
+ - **清单(Tasklist)**:组织多个任务的容器,有唯一的 `tasklist_guid`
249
+ - **负责人(assignee)**:可以编辑任务并标记完成
250
+ - **关注人(follower)**:接收任务更新通知
251
+ - **我负责的(MyTasks)**:所有负责人为自己的任务集合
252
+
253
+ ### B. 如何获取 GUID
254
+
255
+ - **task_guid**:创建任务后从返回值的 `task.guid` 获取,或通过 `list` 查询
256
+ - **tasklist_guid**:创建清单后从返回值的 `tasklist.guid` 获取,或通过 `list` 查询
257
+
258
+ ### C. 如何将任务加入清单
259
+
260
+ 创建任务时指定 `tasklists` 参数:
261
+ ```json
262
+ {
263
+ "action": "create",
264
+ "summary": "任务标题",
265
+ "tasklists": [
266
+ {
267
+ "tasklist_guid": "清单的guid",
268
+ "section_guid": "分组的guid(可选)"
269
+ }
270
+ ]
271
+ }
272
+ ```
273
+
274
+ ### D. 重复任务如何创建
275
+
276
+ 使用 `repeat_rule` 参数,采用 RRULE 格式:
277
+ ```json
278
+ {
279
+ "action": "create",
280
+ "summary": "每周例会",
281
+ "due": {"timestamp": "2026-03-03 14:00:00", "is_all_day": false},
282
+ "repeat_rule": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO"
283
+ }
284
+ ```
285
+
286
+ **说明**:只有设置了截止时间的任务才能设置重复规则。
287
+
288
+
289
+ ### E. 数据权限
290
+
291
+ - 只能操作自己有权限的任务(作为成员的任务)
292
+ - 只能操作自己有权限的清单(作为成员的清单)
293
+ - 将任务加入清单需要同时拥有任务和清单的编辑权限