@openclaw-cn/feishu 0.1.8

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 (167) hide show
  1. package/README.md +86 -0
  2. package/dist/index.d.ts +37 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +49 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/accounts.d.ts +33 -0
  7. package/dist/src/accounts.d.ts.map +1 -0
  8. package/dist/src/accounts.js +110 -0
  9. package/dist/src/accounts.js.map +1 -0
  10. package/dist/src/bitable.d.ts +211 -0
  11. package/dist/src/bitable.d.ts.map +1 -0
  12. package/dist/src/bitable.js +721 -0
  13. package/dist/src/bitable.js.map +1 -0
  14. package/dist/src/bot.d.ts +53 -0
  15. package/dist/src/bot.d.ts.map +1 -0
  16. package/dist/src/bot.js +853 -0
  17. package/dist/src/bot.js.map +1 -0
  18. package/dist/src/calendar-schema.d.ts +18 -0
  19. package/dist/src/calendar-schema.d.ts.map +1 -0
  20. package/dist/src/calendar-schema.js +52 -0
  21. package/dist/src/calendar-schema.js.map +1 -0
  22. package/dist/src/calendar.d.ts +441 -0
  23. package/dist/src/calendar.d.ts.map +1 -0
  24. package/dist/src/calendar.js +257 -0
  25. package/dist/src/calendar.js.map +1 -0
  26. package/dist/src/channel.d.ts +4 -0
  27. package/dist/src/channel.d.ts.map +1 -0
  28. package/dist/src/channel.js +331 -0
  29. package/dist/src/channel.js.map +1 -0
  30. package/dist/src/client.d.ts +35 -0
  31. package/dist/src/client.d.ts.map +1 -0
  32. package/dist/src/client.js +86 -0
  33. package/dist/src/client.js.map +1 -0
  34. package/dist/src/config-schema.d.ts +176 -0
  35. package/dist/src/config-schema.d.ts.map +1 -0
  36. package/dist/src/config-schema.js +56 -0
  37. package/dist/src/config-schema.js.map +1 -0
  38. package/dist/src/directory.d.ts +36 -0
  39. package/dist/src/directory.d.ts.map +1 -0
  40. package/dist/src/directory.js +129 -0
  41. package/dist/src/directory.js.map +1 -0
  42. package/dist/src/doc-schema.d.ts +37 -0
  43. package/dist/src/doc-schema.d.ts.map +1 -0
  44. package/dist/src/doc-schema.js +51 -0
  45. package/dist/src/doc-schema.js.map +1 -0
  46. package/dist/src/docx.d.ts +3 -0
  47. package/dist/src/docx.d.ts.map +1 -0
  48. package/dist/src/docx.js +608 -0
  49. package/dist/src/docx.js.map +1 -0
  50. package/dist/src/drive-schema.d.ts +24 -0
  51. package/dist/src/drive-schema.d.ts.map +1 -0
  52. package/dist/src/drive-schema.js +39 -0
  53. package/dist/src/drive-schema.js.map +1 -0
  54. package/dist/src/drive.d.ts +3 -0
  55. package/dist/src/drive.d.ts.map +1 -0
  56. package/dist/src/drive.js +181 -0
  57. package/dist/src/drive.js.map +1 -0
  58. package/dist/src/dynamic-agent.d.ts +19 -0
  59. package/dist/src/dynamic-agent.d.ts.map +1 -0
  60. package/dist/src/dynamic-agent.js +91 -0
  61. package/dist/src/dynamic-agent.js.map +1 -0
  62. package/dist/src/im-schema.d.ts +38 -0
  63. package/dist/src/im-schema.d.ts.map +1 -0
  64. package/dist/src/im-schema.js +73 -0
  65. package/dist/src/im-schema.js.map +1 -0
  66. package/dist/src/im.d.ts +70 -0
  67. package/dist/src/im.d.ts.map +1 -0
  68. package/dist/src/im.js +328 -0
  69. package/dist/src/im.js.map +1 -0
  70. package/dist/src/media.d.ts +99 -0
  71. package/dist/src/media.d.ts.map +1 -0
  72. package/dist/src/media.js +454 -0
  73. package/dist/src/media.js.map +1 -0
  74. package/dist/src/mention.d.ts +49 -0
  75. package/dist/src/mention.d.ts.map +1 -0
  76. package/dist/src/mention.js +99 -0
  77. package/dist/src/mention.js.map +1 -0
  78. package/dist/src/monitor.d.ts +16 -0
  79. package/dist/src/monitor.d.ts.map +1 -0
  80. package/dist/src/monitor.js +288 -0
  81. package/dist/src/monitor.js.map +1 -0
  82. package/dist/src/onboarding.d.ts +3 -0
  83. package/dist/src/onboarding.d.ts.map +1 -0
  84. package/dist/src/onboarding.js +119 -0
  85. package/dist/src/onboarding.js.map +1 -0
  86. package/dist/src/outbound.d.ts +3 -0
  87. package/dist/src/outbound.d.ts.map +1 -0
  88. package/dist/src/outbound.js +53 -0
  89. package/dist/src/outbound.js.map +1 -0
  90. package/dist/src/perm-schema.d.ts +21 -0
  91. package/dist/src/perm-schema.d.ts.map +1 -0
  92. package/dist/src/perm-schema.js +47 -0
  93. package/dist/src/perm-schema.js.map +1 -0
  94. package/dist/src/perm.d.ts +14 -0
  95. package/dist/src/perm.d.ts.map +1 -0
  96. package/dist/src/perm.js +106 -0
  97. package/dist/src/perm.js.map +1 -0
  98. package/dist/src/policy.d.ts +28 -0
  99. package/dist/src/policy.d.ts.map +1 -0
  100. package/dist/src/policy.js +61 -0
  101. package/dist/src/policy.js.map +1 -0
  102. package/dist/src/probe.d.ts +4 -0
  103. package/dist/src/probe.d.ts.map +1 -0
  104. package/dist/src/probe.js +41 -0
  105. package/dist/src/probe.js.map +1 -0
  106. package/dist/src/reactions.d.ts +66 -0
  107. package/dist/src/reactions.d.ts.map +1 -0
  108. package/dist/src/reactions.js +104 -0
  109. package/dist/src/reactions.js.map +1 -0
  110. package/dist/src/reply-dispatcher.d.ts +41 -0
  111. package/dist/src/reply-dispatcher.d.ts.map +1 -0
  112. package/dist/src/reply-dispatcher.js +249 -0
  113. package/dist/src/reply-dispatcher.js.map +1 -0
  114. package/dist/src/runtime.d.ts +4 -0
  115. package/dist/src/runtime.d.ts.map +1 -0
  116. package/dist/src/runtime.js +11 -0
  117. package/dist/src/runtime.js.map +1 -0
  118. package/dist/src/send.d.ts +76 -0
  119. package/dist/src/send.d.ts.map +1 -0
  120. package/dist/src/send.js +250 -0
  121. package/dist/src/send.js.map +1 -0
  122. package/dist/src/sheets-schema.d.ts +12 -0
  123. package/dist/src/sheets-schema.d.ts.map +1 -0
  124. package/dist/src/sheets-schema.js +35 -0
  125. package/dist/src/sheets-schema.js.map +1 -0
  126. package/dist/src/sheets.d.ts +45 -0
  127. package/dist/src/sheets.d.ts.map +1 -0
  128. package/dist/src/sheets.js +197 -0
  129. package/dist/src/sheets.js.map +1 -0
  130. package/dist/src/streaming-card.d.ts +29 -0
  131. package/dist/src/streaming-card.d.ts.map +1 -0
  132. package/dist/src/streaming-card.js +192 -0
  133. package/dist/src/streaming-card.js.map +1 -0
  134. package/dist/src/targets.d.ts +7 -0
  135. package/dist/src/targets.d.ts.map +1 -0
  136. package/dist/src/targets.js +70 -0
  137. package/dist/src/targets.js.map +1 -0
  138. package/dist/src/task-schema.d.ts +19 -0
  139. package/dist/src/task-schema.d.ts.map +1 -0
  140. package/dist/src/task-schema.js +54 -0
  141. package/dist/src/task-schema.js.map +1 -0
  142. package/dist/src/task.d.ts +1193 -0
  143. package/dist/src/task.d.ts.map +1 -0
  144. package/dist/src/task.js +274 -0
  145. package/dist/src/task.js.map +1 -0
  146. package/dist/src/tools-config.d.ts +12 -0
  147. package/dist/src/tools-config.d.ts.map +1 -0
  148. package/dist/src/tools-config.js +24 -0
  149. package/dist/src/tools-config.js.map +1 -0
  150. package/dist/src/types.d.ts +74 -0
  151. package/dist/src/types.d.ts.map +1 -0
  152. package/dist/src/types.js +2 -0
  153. package/dist/src/types.js.map +1 -0
  154. package/dist/src/typing.d.ts +22 -0
  155. package/dist/src/typing.d.ts.map +1 -0
  156. package/dist/src/typing.js +60 -0
  157. package/dist/src/typing.js.map +1 -0
  158. package/dist/src/wiki-schema.d.ts +34 -0
  159. package/dist/src/wiki-schema.d.ts.map +1 -0
  160. package/dist/src/wiki-schema.js +43 -0
  161. package/dist/src/wiki-schema.js.map +1 -0
  162. package/dist/src/wiki.d.ts +3 -0
  163. package/dist/src/wiki.d.ts.map +1 -0
  164. package/dist/src/wiki.js +176 -0
  165. package/dist/src/wiki.js.map +1 -0
  166. package/openclaw.plugin.json +9 -0
  167. package/package.json +79 -0
@@ -0,0 +1,106 @@
1
+ import { listEnabledFeishuAccounts } from "./accounts.js";
2
+ import { createFeishuClient } from "./client.js";
3
+ import { FeishuPermSchema } from "./perm-schema.js";
4
+ import { resolveToolsConfig } from "./tools-config.js";
5
+ // ============ Helpers ============
6
+ function json(data) {
7
+ return {
8
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
9
+ details: data,
10
+ };
11
+ }
12
+ // ============ Actions ============
13
+ async function listMembers(client, token, type) {
14
+ const res = await client.drive.permissionMember.list({
15
+ path: { token },
16
+ params: { type: type },
17
+ });
18
+ if (res.code !== 0) {
19
+ throw new Error(res.msg);
20
+ }
21
+ return {
22
+ members: res.data?.items?.map((m) => ({
23
+ member_type: m.member_type,
24
+ member_id: m.member_id,
25
+ perm: m.perm,
26
+ name: m.name,
27
+ })) ?? [],
28
+ };
29
+ }
30
+ export async function addMember(client, token, type, memberType, memberId, perm) {
31
+ const res = await client.drive.permissionMember.create({
32
+ path: { token },
33
+ params: { type: type, need_notification: false },
34
+ data: {
35
+ member_type: memberType,
36
+ member_id: memberId,
37
+ perm: perm,
38
+ },
39
+ });
40
+ if (res.code !== 0) {
41
+ throw new Error(res.msg);
42
+ }
43
+ return {
44
+ success: true,
45
+ member: res.data?.member,
46
+ };
47
+ }
48
+ async function removeMember(client, token, type, memberType, memberId) {
49
+ const res = await client.drive.permissionMember.delete({
50
+ path: { token, member_id: memberId },
51
+ params: { type: type, member_type: memberType },
52
+ });
53
+ if (res.code !== 0) {
54
+ throw new Error(res.msg);
55
+ }
56
+ return {
57
+ success: true,
58
+ };
59
+ }
60
+ // ============ Tool Registration ============
61
+ export function registerFeishuPermTools(api) {
62
+ if (!api.config) {
63
+ api.logger.debug?.("feishu_perm: No config available, skipping perm tools");
64
+ return;
65
+ }
66
+ const accounts = listEnabledFeishuAccounts(api.config);
67
+ if (accounts.length === 0) {
68
+ api.logger.debug?.("feishu_perm: No Feishu accounts configured, skipping perm tools");
69
+ return;
70
+ }
71
+ const firstAccount = accounts[0];
72
+ const toolsCfg = resolveToolsConfig(firstAccount.config.tools);
73
+ if (!toolsCfg.perm) {
74
+ api.logger.debug?.("feishu_perm: perm tool disabled in config (default: false)");
75
+ return;
76
+ }
77
+ const getClient = () => createFeishuClient(firstAccount);
78
+ api.registerTool({
79
+ name: "feishu_perm",
80
+ label: "Feishu Perm",
81
+ description: "Feishu permission management. Actions: list, add, remove",
82
+ parameters: FeishuPermSchema,
83
+ async execute(_toolCallId, params) {
84
+ const p = params;
85
+ try {
86
+ const client = getClient();
87
+ switch (p.action) {
88
+ case "list":
89
+ return json(await listMembers(client, p.token, p.type));
90
+ case "add":
91
+ return json(await addMember(client, p.token, p.type, p.member_type, p.member_id, p.perm));
92
+ case "remove":
93
+ return json(await removeMember(client, p.token, p.type, p.member_type, p.member_id));
94
+ default:
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- exhaustive check fallback
96
+ return json({ error: `Unknown action: ${p.action}` });
97
+ }
98
+ }
99
+ catch (err) {
100
+ return json({ error: err instanceof Error ? err.message : String(err) });
101
+ }
102
+ },
103
+ }, { name: "feishu_perm" });
104
+ api.logger.info?.(`feishu_perm: Registered feishu_perm tool`);
105
+ }
106
+ //# sourceMappingURL=perm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perm.js","sourceRoot":"","sources":["../../src/perm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AllowlistMatch, ChannelGroupContext, GroupToolPolicyConfig } from "openclaw/plugin-sdk";
2
+ import type { FeishuConfig, FeishuGroupConfig } from "./types.js";
3
+ export type FeishuAllowlistMatch = AllowlistMatch<"wildcard" | "id" | "name">;
4
+ /** Inline allowlist matcher (resolveAllowlistMatchSimple is not exported from plugin-sdk). */
5
+ export declare function resolveFeishuAllowlistMatch(params: {
6
+ allowFrom: Array<string | number>;
7
+ senderId: string;
8
+ senderName?: string | null;
9
+ }): FeishuAllowlistMatch;
10
+ export declare function resolveFeishuGroupConfig(params: {
11
+ cfg?: FeishuConfig;
12
+ groupId?: string | null;
13
+ }): FeishuGroupConfig | undefined;
14
+ export declare function resolveFeishuGroupToolPolicy(params: ChannelGroupContext): GroupToolPolicyConfig | undefined;
15
+ export declare function isFeishuGroupAllowed(params: {
16
+ groupPolicy: "open" | "allowlist" | "disabled";
17
+ allowFrom: Array<string | number>;
18
+ senderId: string;
19
+ senderName?: string | null;
20
+ }): boolean;
21
+ export declare function resolveFeishuReplyPolicy(params: {
22
+ isDirectMessage: boolean;
23
+ globalConfig?: FeishuConfig;
24
+ groupConfig?: FeishuGroupConfig;
25
+ }): {
26
+ requireMention: boolean;
27
+ };
28
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;AAE9E,8FAA8F;AAC9F,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,oBAAoB,CAgBvB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GAAG,iBAAiB,GAAG,SAAS,CAehC;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,GAC1B,qBAAqB,GAAG,SAAS,CAYnC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAC/C,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,GAAG,OAAO,CASV;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC,GAAG;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,CAS9B"}
@@ -0,0 +1,61 @@
1
+ /** Inline allowlist matcher (resolveAllowlistMatchSimple is not exported from plugin-sdk). */
2
+ export function resolveFeishuAllowlistMatch(params) {
3
+ const { allowFrom, senderId, senderName } = params;
4
+ if (allowFrom.includes("*")) {
5
+ return { allowed: true, matchKey: "*", matchSource: "wildcard" };
6
+ }
7
+ const idStr = String(senderId);
8
+ for (const entry of allowFrom) {
9
+ const key = String(entry);
10
+ if (key === idStr) {
11
+ return { allowed: true, matchKey: key, matchSource: "id" };
12
+ }
13
+ if (senderName && key.toLowerCase() === senderName.toLowerCase()) {
14
+ return { allowed: true, matchKey: key, matchSource: "name" };
15
+ }
16
+ }
17
+ return { allowed: false };
18
+ }
19
+ export function resolveFeishuGroupConfig(params) {
20
+ const groups = params.cfg?.groups ?? {};
21
+ const groupId = params.groupId?.trim();
22
+ if (!groupId) {
23
+ return undefined;
24
+ }
25
+ const direct = groups[groupId];
26
+ if (direct) {
27
+ return direct;
28
+ }
29
+ const lowered = groupId.toLowerCase();
30
+ const matchKey = Object.keys(groups).find((key) => key.toLowerCase() === lowered);
31
+ return matchKey ? groups[matchKey] : undefined;
32
+ }
33
+ export function resolveFeishuGroupToolPolicy(params) {
34
+ const cfg = params.cfg.channels?.feishu;
35
+ if (!cfg) {
36
+ return undefined;
37
+ }
38
+ const groupConfig = resolveFeishuGroupConfig({
39
+ cfg,
40
+ groupId: params.groupId,
41
+ });
42
+ return groupConfig?.tools;
43
+ }
44
+ export function isFeishuGroupAllowed(params) {
45
+ const { groupPolicy } = params;
46
+ if (groupPolicy === "disabled") {
47
+ return false;
48
+ }
49
+ if (groupPolicy === "open") {
50
+ return true;
51
+ }
52
+ return resolveFeishuAllowlistMatch(params).allowed;
53
+ }
54
+ export function resolveFeishuReplyPolicy(params) {
55
+ if (params.isDirectMessage) {
56
+ return { requireMention: false };
57
+ }
58
+ const requireMention = params.groupConfig?.requireMention ?? params.globalConfig?.requireMention ?? true;
59
+ return { requireMention };
60
+ }
61
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":"AASA,8FAA8F;AAC9F,MAAM,UAAU,2BAA2B,CAAC,MAI3C;IACC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACnD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC7D,CAAC;QACD,IAAI,UAAU,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAGxC;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;IAClF,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAA2B;IAE3B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAkC,CAAC;IACpE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,wBAAwB,CAAC;QAC3C,GAAG;QACH,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IAEH,OAAO,WAAW,EAAE,KAAK,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAKpC;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC/B,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAIxC;IACC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,cAAc,GAClB,MAAM,CAAC,WAAW,EAAE,cAAc,IAAI,MAAM,CAAC,YAAY,EAAE,cAAc,IAAI,IAAI,CAAC;IAEpF,OAAO,EAAE,cAAc,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FeishuProbeResult } from "./types.js";
2
+ import { type FeishuClientCredentials } from "./client.js";
3
+ export declare function probeFeishu(creds?: FeishuClientCredentials): Promise<FeishuProbeResult>;
4
+ //# sourceMappingURL=probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/probe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE/E,wBAAsB,WAAW,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwC7F"}
@@ -0,0 +1,41 @@
1
+ import { createFeishuClient } from "./client.js";
2
+ export async function probeFeishu(creds) {
3
+ if (!creds?.appId || !creds?.appSecret) {
4
+ return {
5
+ ok: false,
6
+ error: "missing credentials (appId, appSecret)",
7
+ };
8
+ }
9
+ try {
10
+ const client = createFeishuClient(creds);
11
+ // Use bot/v3/info API to get bot information
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- SDK generic request method
13
+ const response = await client.request({
14
+ method: "GET",
15
+ url: "/open-apis/bot/v3/info",
16
+ data: {},
17
+ });
18
+ if (response.code !== 0) {
19
+ return {
20
+ ok: false,
21
+ appId: creds.appId,
22
+ error: `API error: ${response.msg || `code ${response.code}`}`,
23
+ };
24
+ }
25
+ const bot = response.bot || response.data?.bot;
26
+ return {
27
+ ok: true,
28
+ appId: creds.appId,
29
+ botName: bot?.bot_name,
30
+ botOpenId: bot?.open_id,
31
+ };
32
+ }
33
+ catch (err) {
34
+ return {
35
+ ok: false,
36
+ appId: creds.appId,
37
+ error: err instanceof Error ? err.message : String(err),
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/probe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAgC,MAAM,aAAa,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAA+B;IAC/D,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;QACvC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,wCAAwC;SAChD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,6CAA6C;QAC7C,4FAA4F;QAC5F,MAAM,QAAQ,GAAG,MAAO,MAAc,CAAC,OAAO,CAAC;YAC7C,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,wBAAwB;YAC7B,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,cAAc,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/C,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,GAAG,EAAE,QAAQ;YACtB,SAAS,EAAE,GAAG,EAAE,OAAO;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { OpenClawConfig as ClawdbotConfig } from "openclaw/plugin-sdk";
2
+ export type FeishuReaction = {
3
+ reactionId: string;
4
+ emojiType: string;
5
+ operatorType: "app" | "user";
6
+ operatorId: string;
7
+ };
8
+ /**
9
+ * Add a reaction (emoji) to a message.
10
+ * @param emojiType - Feishu emoji type, e.g., "SMILE", "THUMBSUP", "HEART"
11
+ * @see https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce
12
+ */
13
+ export declare function addReactionFeishu(params: {
14
+ cfg: ClawdbotConfig;
15
+ messageId: string;
16
+ emojiType: string;
17
+ accountId?: string;
18
+ }): Promise<{
19
+ reactionId: string;
20
+ }>;
21
+ /**
22
+ * Remove a reaction from a message.
23
+ */
24
+ export declare function removeReactionFeishu(params: {
25
+ cfg: ClawdbotConfig;
26
+ messageId: string;
27
+ reactionId: string;
28
+ accountId?: string;
29
+ }): Promise<void>;
30
+ /**
31
+ * List all reactions for a message.
32
+ */
33
+ export declare function listReactionsFeishu(params: {
34
+ cfg: ClawdbotConfig;
35
+ messageId: string;
36
+ emojiType?: string;
37
+ accountId?: string;
38
+ }): Promise<FeishuReaction[]>;
39
+ /**
40
+ * Common Feishu emoji types for convenience.
41
+ * @see https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce
42
+ */
43
+ export declare const FeishuEmoji: {
44
+ readonly THUMBSUP: "THUMBSUP";
45
+ readonly THUMBSDOWN: "THUMBSDOWN";
46
+ readonly HEART: "HEART";
47
+ readonly SMILE: "SMILE";
48
+ readonly GRINNING: "GRINNING";
49
+ readonly LAUGHING: "LAUGHING";
50
+ readonly CRY: "CRY";
51
+ readonly ANGRY: "ANGRY";
52
+ readonly SURPRISED: "SURPRISED";
53
+ readonly THINKING: "THINKING";
54
+ readonly CLAP: "CLAP";
55
+ readonly OK: "OK";
56
+ readonly FIST: "FIST";
57
+ readonly PRAY: "PRAY";
58
+ readonly FIRE: "FIRE";
59
+ readonly PARTY: "PARTY";
60
+ readonly CHECK: "CHECK";
61
+ readonly CROSS: "CROSS";
62
+ readonly QUESTION: "QUESTION";
63
+ readonly EXCLAMATION: "EXCLAMATION";
64
+ };
65
+ export type FeishuEmojiType = (typeof FeishuEmoji)[keyof typeof FeishuEmoji];
66
+ //# sourceMappingURL=reactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactions.d.ts","sourceRoot":"","sources":["../../src/reactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI5E,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAgClC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAqC5B;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;CAsBd,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { resolveFeishuAccount } from "./accounts.js";
2
+ import { createFeishuClient } from "./client.js";
3
+ /**
4
+ * Add a reaction (emoji) to a message.
5
+ * @param emojiType - Feishu emoji type, e.g., "SMILE", "THUMBSUP", "HEART"
6
+ * @see https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce
7
+ */
8
+ export async function addReactionFeishu(params) {
9
+ const { cfg, messageId, emojiType, accountId } = params;
10
+ const account = resolveFeishuAccount({ cfg, accountId });
11
+ if (!account.configured) {
12
+ throw new Error(`Feishu account "${account.accountId}" not configured`);
13
+ }
14
+ const client = createFeishuClient(account);
15
+ const response = (await client.im.messageReaction.create({
16
+ path: { message_id: messageId },
17
+ data: {
18
+ reaction_type: {
19
+ emoji_type: emojiType,
20
+ },
21
+ },
22
+ }));
23
+ if (response.code !== 0) {
24
+ throw new Error(`Feishu add reaction failed: ${response.msg || `code ${response.code}`}`);
25
+ }
26
+ const reactionId = response.data?.reaction_id;
27
+ if (!reactionId) {
28
+ throw new Error("Feishu add reaction failed: no reaction_id returned");
29
+ }
30
+ return { reactionId };
31
+ }
32
+ /**
33
+ * Remove a reaction from a message.
34
+ */
35
+ export async function removeReactionFeishu(params) {
36
+ const { cfg, messageId, reactionId, accountId } = params;
37
+ const account = resolveFeishuAccount({ cfg, accountId });
38
+ if (!account.configured) {
39
+ throw new Error(`Feishu account "${account.accountId}" not configured`);
40
+ }
41
+ const client = createFeishuClient(account);
42
+ const response = (await client.im.messageReaction.delete({
43
+ path: {
44
+ message_id: messageId,
45
+ reaction_id: reactionId,
46
+ },
47
+ }));
48
+ if (response.code !== 0) {
49
+ throw new Error(`Feishu remove reaction failed: ${response.msg || `code ${response.code}`}`);
50
+ }
51
+ }
52
+ /**
53
+ * List all reactions for a message.
54
+ */
55
+ export async function listReactionsFeishu(params) {
56
+ const { cfg, messageId, emojiType, accountId } = params;
57
+ const account = resolveFeishuAccount({ cfg, accountId });
58
+ if (!account.configured) {
59
+ throw new Error(`Feishu account "${account.accountId}" not configured`);
60
+ }
61
+ const client = createFeishuClient(account);
62
+ const response = (await client.im.messageReaction.list({
63
+ path: { message_id: messageId },
64
+ params: emojiType ? { reaction_type: emojiType } : undefined,
65
+ }));
66
+ if (response.code !== 0) {
67
+ throw new Error(`Feishu list reactions failed: ${response.msg || `code ${response.code}`}`);
68
+ }
69
+ const items = response.data?.items ?? [];
70
+ return items.map((item) => ({
71
+ reactionId: item.reaction_id ?? "",
72
+ emojiType: item.reaction_type?.emoji_type ?? "",
73
+ operatorType: item.operator_type === "app" ? "app" : "user",
74
+ operatorId: item.operator_id?.open_id ?? item.operator_id?.user_id ?? item.operator_id?.union_id ?? "",
75
+ }));
76
+ }
77
+ /**
78
+ * Common Feishu emoji types for convenience.
79
+ * @see https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce
80
+ */
81
+ export const FeishuEmoji = {
82
+ // Common reactions
83
+ THUMBSUP: "THUMBSUP",
84
+ THUMBSDOWN: "THUMBSDOWN",
85
+ HEART: "HEART",
86
+ SMILE: "SMILE",
87
+ GRINNING: "GRINNING",
88
+ LAUGHING: "LAUGHING",
89
+ CRY: "CRY",
90
+ ANGRY: "ANGRY",
91
+ SURPRISED: "SURPRISED",
92
+ THINKING: "THINKING",
93
+ CLAP: "CLAP",
94
+ OK: "OK",
95
+ FIST: "FIST",
96
+ PRAY: "PRAY",
97
+ FIRE: "FIRE",
98
+ PARTY: "PARTY",
99
+ CHECK: "CHECK",
100
+ CROSS: "CROSS",
101
+ QUESTION: "QUESTION",
102
+ EXCLAMATION: "EXCLAMATION",
103
+ };
104
+ //# sourceMappingURL=reactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactions.js","sourceRoot":"","sources":["../../src/reactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type OpenClawConfig as ClawdbotConfig, type ReplyPayload, type RuntimeEnv } from "openclaw/plugin-sdk";
2
+ import type { MentionTarget } from "./mention.js";
3
+ export type CreateFeishuReplyDispatcherParams = {
4
+ cfg: ClawdbotConfig;
5
+ agentId: string;
6
+ runtime: RuntimeEnv;
7
+ chatId: string;
8
+ replyToMessageId?: string;
9
+ mentionTargets?: MentionTarget[];
10
+ accountId?: string;
11
+ };
12
+ export declare function createFeishuReplyDispatcher(params: CreateFeishuReplyDispatcherParams): {
13
+ dispatcher: {
14
+ sendToolResult: (payload: ReplyPayload) => boolean;
15
+ sendBlockReply: (payload: ReplyPayload) => boolean;
16
+ sendFinalReply: (payload: ReplyPayload) => boolean;
17
+ waitForIdle: () => Promise<void>;
18
+ getQueuedCounts: () => Record<"tool" | "block" | "final", number>;
19
+ };
20
+ replyOptions: {
21
+ onModelSelected: (ctx: {
22
+ provider: string;
23
+ model: string;
24
+ thinkLevel: string | undefined;
25
+ }) => void;
26
+ onPartialReply: (payload: ReplyPayload) => void;
27
+ onReplyStart?: () => Promise<void> | void;
28
+ onTypingController?: (typing: {
29
+ onReplyStart: () => Promise<void>;
30
+ startTypingLoop: () => Promise<void>;
31
+ startTypingOnText: (text?: string) => Promise<void>;
32
+ refreshTypingTtl: () => void;
33
+ isActive: () => boolean;
34
+ markRunComplete: () => void;
35
+ markDispatchIdle: () => void;
36
+ cleanup: () => void;
37
+ }) => void;
38
+ };
39
+ markDispatchIdle: () => void;
40
+ };
41
+ //# sourceMappingURL=reply-dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-dispatcher.d.ts","sourceRoot":"","sources":["../../src/reply-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,IAAI,cAAc,EACrC,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAyBlD,MAAM,MAAM,iCAAiC,GAAG;IAC9C,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iCAAiC;;;;;;;;;;;;;;kCA0MjE,YAAY;;;;;oCAnIuD,CAAC;;;;;;;;;EAgLvF"}