@xwang152/claw-lark 0.1.24 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -19,7 +19,8 @@ export { addTypingIndicator, removeTypingIndicator, createTypingController, } fr
19
19
  export type { TypingIndicatorState } from "./src/typing.js";
20
20
  export { resolveLarkSenderName, clearSenderNameCache, getSenderNameCacheStats, prefetchLarkSenderNames, } from "./src/sender-name.js";
21
21
  export { getLarkMessage, formatQuotedContext, isReplyMessage, buildMessageContextWithQuote, } from "./src/message-context.js";
22
- export type { LarkDomain, LarkConnectionMode, LarkAccountConfig, ResolvedLarkAccount, LarkChannelConfig, LarkMessageEvent, ParsedMessage, SendResult, } from "./src/types.js";
22
+ export type { LarkDomain, LarkConnectionMode, DmPolicy, GroupPolicy, RenderMode, LarkAccountConfig, ResolvedLarkAccount, LarkChannelConfig, LarkGroupConfig, LarkMessageEvent, LarkMention, ParsedMessage, SendResult, } from "./src/types.js";
23
+ export { resolveLarkAllowlistMatch, resolveLarkGroupConfig, resolveLarkGroupToolPolicy, isLarkGroupAllowed, resolveLarkGroupRequireMention, resolveLarkReplyToMode, } from "./src/policy.js";
23
24
  declare const plugin: {
24
25
  id: string;
25
26
  name: string;
package/dist/index.js CHANGED
@@ -22,6 +22,7 @@ export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, for
22
22
  export { addTypingIndicator, removeTypingIndicator, createTypingController, } from "./src/typing.js";
23
23
  export { resolveLarkSenderName, clearSenderNameCache, getSenderNameCacheStats, prefetchLarkSenderNames, } from "./src/sender-name.js";
24
24
  export { getLarkMessage, formatQuotedContext, isReplyMessage, buildMessageContextWithQuote, } from "./src/message-context.js";
25
+ export { resolveLarkAllowlistMatch, resolveLarkGroupConfig, resolveLarkGroupToolPolicy, isLarkGroupAllowed, resolveLarkGroupRequireMention, resolveLarkReplyToMode, } from "./src/policy.js";
25
26
  const plugin = {
26
27
  id: "claw-lark",
27
28
  name: "Lark",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAYlC,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,wCAAwC;QACxC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,wCAAwC;QACxC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Group-level Policy and Access Control
3
+ *
4
+ * Handles per-group configuration for Lark/Feishu integration.
5
+ * Supports group-specific tool policies, mention requirements, and access control.
6
+ */
7
+ import type { OpenClawConfig } from "openclaw/plugin-sdk";
8
+ import type { LarkGroupConfig } from "./types.js";
9
+ export type LarkAllowlistMatch = {
10
+ allowed: boolean;
11
+ matchKey?: string;
12
+ matchSource?: "wildcard" | "id" | "name";
13
+ };
14
+ /**
15
+ * Resolve allowlist match for a sender.
16
+ *
17
+ * Checks if a sender is allowed based on allowlist configuration.
18
+ * Supports wildcards, IDs, and names.
19
+ */
20
+ export declare function resolveLarkAllowlistMatch(params: {
21
+ allowFrom: Array<string | number>;
22
+ senderId: string;
23
+ senderName?: string | null;
24
+ }): LarkAllowlistMatch;
25
+ /**
26
+ * Resolve group configuration for a specific group.
27
+ *
28
+ * Looks up group-specific settings from the configuration.
29
+ * Supports case-insensitive group ID matching.
30
+ */
31
+ export declare function resolveLarkGroupConfig(params: {
32
+ cfg?: OpenClawConfig;
33
+ groupId?: string | null;
34
+ accountId?: string;
35
+ }): LarkGroupConfig | undefined;
36
+ /**
37
+ * Resolve group tool policy for agent tool access control.
38
+ *
39
+ * Returns the tools configuration for a specific group.
40
+ */
41
+ export declare function resolveLarkGroupToolPolicy(params: {
42
+ cfg?: OpenClawConfig;
43
+ groupId?: string | null;
44
+ accountId?: string;
45
+ }): {
46
+ allow?: string[];
47
+ deny?: string[];
48
+ } | undefined;
49
+ /**
50
+ * Check if a group is allowed based on policy.
51
+ *
52
+ * @param groupPolicy - "open" | "allowlist" | "disabled"
53
+ * @param allowFrom - Allowlist configuration
54
+ * @param senderId - Sender's ID
55
+ * @param senderName - Sender's display name (optional)
56
+ */
57
+ export declare function isLarkGroupAllowed(params: {
58
+ groupPolicy: "open" | "allowlist" | "disabled";
59
+ allowFrom: Array<string | number>;
60
+ senderId: string;
61
+ senderName?: string | null;
62
+ }): boolean;
63
+ /**
64
+ * Resolve mention requirement for a group.
65
+ *
66
+ * Determines if @mention is required in a group based on
67
+ * group configuration or global default.
68
+ */
69
+ export declare function resolveLarkGroupRequireMention(params: {
70
+ cfg?: OpenClawConfig;
71
+ groupId?: string | null;
72
+ accountId?: string;
73
+ groupConfig?: LarkGroupConfig;
74
+ }): boolean;
75
+ /**
76
+ * Resolve reply-to mode for a group.
77
+ *
78
+ * Determines how replies should be threaded in a group chat.
79
+ */
80
+ export declare function resolveLarkReplyToMode(params: {
81
+ cfg?: OpenClawConfig;
82
+ groupId?: string | null;
83
+ accountId?: string;
84
+ }): "first" | "last" | "off";
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Group-level Policy and Access Control
3
+ *
4
+ * Handles per-group configuration for Lark/Feishu integration.
5
+ * Supports group-specific tool policies, mention requirements, and access control.
6
+ */
7
+ /**
8
+ * Extract Lark channel config from OpenClaw config
9
+ */
10
+ function getChannelConfig(cfg) {
11
+ return cfg.channels?.lark ?? {};
12
+ }
13
+ /**
14
+ * Resolve allowlist match for a sender.
15
+ *
16
+ * Checks if a sender is allowed based on allowlist configuration.
17
+ * Supports wildcards, IDs, and names.
18
+ */
19
+ export function resolveLarkAllowlistMatch(params) {
20
+ const allowFrom = params.allowFrom
21
+ .map((entry) => String(entry).trim().toLowerCase())
22
+ .filter(Boolean);
23
+ if (allowFrom.length === 0)
24
+ return { allowed: false };
25
+ if (allowFrom.includes("*")) {
26
+ return { allowed: true, matchKey: "*", matchSource: "wildcard" };
27
+ }
28
+ const senderId = params.senderId.toLowerCase();
29
+ if (allowFrom.includes(senderId)) {
30
+ return { allowed: true, matchKey: senderId, matchSource: "id" };
31
+ }
32
+ const senderName = params.senderName?.toLowerCase();
33
+ if (senderName && allowFrom.includes(senderName)) {
34
+ return { allowed: true, matchKey: senderName, matchSource: "name" };
35
+ }
36
+ return { allowed: false };
37
+ }
38
+ /**
39
+ * Resolve group configuration for a specific group.
40
+ *
41
+ * Looks up group-specific settings from the configuration.
42
+ * Supports case-insensitive group ID matching.
43
+ */
44
+ export function resolveLarkGroupConfig(params) {
45
+ const channelConfig = getChannelConfig(params.cfg ?? {});
46
+ const groupId = params.groupId?.trim();
47
+ const accountId = params.accountId ?? "default";
48
+ if (!groupId)
49
+ return undefined;
50
+ // First check account-level groups configuration
51
+ const accountConfig = channelConfig.accounts?.[accountId];
52
+ if (accountConfig?.groups) {
53
+ const direct = accountConfig.groups[groupId];
54
+ if (direct)
55
+ return direct;
56
+ // Try case-insensitive match
57
+ const lowered = groupId.toLowerCase();
58
+ const matchKey = Object.keys(accountConfig.groups).find((key) => key.toLowerCase() === lowered);
59
+ if (matchKey) {
60
+ return accountConfig.groups[matchKey];
61
+ }
62
+ }
63
+ // Then check channel-level groups configuration
64
+ if (channelConfig.groups) {
65
+ const direct = channelConfig.groups[groupId];
66
+ if (direct)
67
+ return direct;
68
+ // Try case-insensitive match
69
+ const lowered = groupId.toLowerCase();
70
+ const matchKey = Object.keys(channelConfig.groups).find((key) => key.toLowerCase() === lowered);
71
+ if (matchKey) {
72
+ return channelConfig.groups[matchKey];
73
+ }
74
+ }
75
+ return undefined;
76
+ }
77
+ /**
78
+ * Resolve group tool policy for agent tool access control.
79
+ *
80
+ * Returns the tools configuration for a specific group.
81
+ */
82
+ export function resolveLarkGroupToolPolicy(params) {
83
+ const groupConfig = resolveLarkGroupConfig(params);
84
+ return groupConfig?.tools;
85
+ }
86
+ /**
87
+ * Check if a group is allowed based on policy.
88
+ *
89
+ * @param groupPolicy - "open" | "allowlist" | "disabled"
90
+ * @param allowFrom - Allowlist configuration
91
+ * @param senderId - Sender's ID
92
+ * @param senderName - Sender's display name (optional)
93
+ */
94
+ export function isLarkGroupAllowed(params) {
95
+ const { groupPolicy, allowFrom, senderId, senderName } = params;
96
+ if (groupPolicy === "disabled")
97
+ return false;
98
+ if (groupPolicy === "open")
99
+ return true;
100
+ return resolveLarkAllowlistMatch({
101
+ allowFrom,
102
+ senderId,
103
+ senderName,
104
+ }).allowed;
105
+ }
106
+ /**
107
+ * Resolve mention requirement for a group.
108
+ *
109
+ * Determines if @mention is required in a group based on
110
+ * group configuration or global default.
111
+ */
112
+ export function resolveLarkGroupRequireMention(params) {
113
+ // If explicit group config is provided, use it
114
+ if (params.groupConfig) {
115
+ return params.groupConfig.requireMention ?? true;
116
+ }
117
+ // Otherwise, resolve from config
118
+ const groupConfig = resolveLarkGroupConfig(params);
119
+ if (groupConfig) {
120
+ return groupConfig.requireMention ?? true;
121
+ }
122
+ // Fall back to channel/account default
123
+ const channelConfig = getChannelConfig(params.cfg ?? {});
124
+ const accountId = params.accountId ?? "default";
125
+ const accountConfig = channelConfig.accounts?.[accountId];
126
+ return accountConfig?.requireMention ?? true;
127
+ }
128
+ /**
129
+ * Resolve reply-to mode for a group.
130
+ *
131
+ * Determines how replies should be threaded in a group chat.
132
+ */
133
+ export function resolveLarkReplyToMode(params) {
134
+ const groupConfig = resolveLarkGroupConfig(params);
135
+ return groupConfig?.replyToMode ?? "first";
136
+ }
137
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAmB;IAC3C,OAAQ,GAAG,CAAC,QAAQ,EAAE,IAA0B,IAAI,EAAE,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAIzC;IACC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;SAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClD,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtD,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;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC;IACpD,IAAI,UAAU,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAItC;IACC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;IAEhD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,iDAAiD;IACjD,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAgC,CAAC;QAC5E,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,6BAA6B;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CACvC,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAgC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAgC,CAAC;QAC5E,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,6BAA6B;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CACvC,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAgC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAI1C;IACC,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,WAAW,EAAE,KAAK,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAKlC;IACC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEhE,IAAI,WAAW,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,WAAW,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAExC,OAAO,yBAAyB,CAAC;QAC/B,SAAS;QACT,QAAQ;QACR,UAAU;KACX,CAAC,CAAC,OAAO,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAK9C;IACC,+CAA+C;IAC/C,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,WAAW,CAAC,cAAc,IAAI,IAAI,CAAC;IACnD,CAAC;IAED,iCAAiC;IACjC,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,cAAc,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,uCAAuC;IACvC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;IAChD,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;IAE1D,OAAO,aAAa,EAAE,cAAc,IAAI,IAAI,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAItC;IACC,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,WAAW,EAAE,WAAW,IAAI,OAAO,CAAC;AAC7C,CAAC"}
@@ -30,6 +30,7 @@ export interface LarkAccountConfig {
30
30
  mediaMaxMb?: number;
31
31
  renderMode?: RenderMode;
32
32
  historyLimit?: number;
33
+ groups?: Record<string, LarkGroupConfig>;
33
34
  }
34
35
  /**
35
36
  * Fully resolved account with all defaults applied.
@@ -61,6 +62,20 @@ export interface ResolvedLarkAccount {
61
62
  export interface LarkChannelConfig {
62
63
  enabled?: boolean;
63
64
  accounts?: Record<string, LarkAccountConfig>;
65
+ groups?: Record<string, LarkGroupConfig>;
66
+ }
67
+ /**
68
+ * Group-level configuration for specific Lark groups
69
+ */
70
+ export interface LarkGroupConfig {
71
+ enabled?: boolean;
72
+ requireMention?: boolean;
73
+ replyToMode?: "first" | "last" | "off";
74
+ tools?: {
75
+ allow?: string[];
76
+ deny?: string[];
77
+ };
78
+ allowFrom?: string[];
64
79
  }
65
80
  /**
66
81
  * Lark message event payload from im.message.receive_v1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xwang152/claw-lark",
3
- "version": "0.1.24",
3
+ "version": "0.1.25",
4
4
  "type": "module",
5
5
  "description": "Lark/Feishu channel plugin for OpenClaw with WebSocket and Webhook support",
6
6
  "license": "MIT",