@zhin.js/adapter-lark 1.0.97 → 1.1.2

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 (80) hide show
  1. package/CHANGELOG.md +729 -3
  2. package/PERMITS.md +22 -0
  3. package/README.md +69 -83
  4. package/adapters/lark/index.js +36 -0
  5. package/adapters/lark/index.ts +41 -0
  6. package/agents/lark/agent.json +20 -0
  7. package/agents/lark/boundaries.md +3 -0
  8. package/agents/lark/conventions.md +3 -0
  9. package/agents/lark/skills/lark/SKILL.md +22 -0
  10. package/agents/lark/skills/lark/tools/add_members/index.js +19 -0
  11. package/agents/lark/skills/lark/tools/add_members/index.ts +19 -0
  12. package/agents/lark/skills/lark/tools/create_chat/index.js +18 -0
  13. package/agents/lark/skills/lark/tools/create_chat/index.ts +18 -0
  14. package/agents/lark/skills/lark/tools/dissolve_chat/index.js +16 -0
  15. package/agents/lark/skills/lark/tools/dissolve_chat/index.ts +16 -0
  16. package/agents/lark/skills/lark/tools/get_user/index.js +15 -0
  17. package/agents/lark/skills/lark/tools/get_user/index.ts +16 -0
  18. package/agents/lark/skills/lark/tools/remove_managers/index.js +19 -0
  19. package/agents/lark/skills/lark/tools/remove_managers/index.ts +19 -0
  20. package/agents/lark/skills/lark/tools/set_managers/index.js +19 -0
  21. package/agents/lark/skills/lark/tools/set_managers/index.ts +19 -0
  22. package/agents/lark/skills/lark/tools/update_chat/index.js +20 -0
  23. package/agents/lark/skills/lark/tools/update_chat/index.ts +20 -0
  24. package/agents/lark/skills/lark/tools/upload_file/index.js +17 -0
  25. package/agents/lark/skills/lark/tools/upload_file/index.ts +23 -0
  26. package/agents/lark/system.md +3 -0
  27. package/commands/lark/endpoint/add/[id]/index.js +3 -0
  28. package/commands/lark/endpoint/add/[id]/index.ts +3 -0
  29. package/commands/lark/endpoint/definition.js +20 -0
  30. package/commands/lark/endpoint/definition.ts +20 -0
  31. package/commands/lark/endpoint/list/index.js +3 -0
  32. package/commands/lark/endpoint/list/index.ts +3 -0
  33. package/commands/lark/endpoint/remove/[id]/index.js +3 -0
  34. package/commands/lark/endpoint/remove/[id]/index.ts +3 -0
  35. package/lib/client.d.ts +12 -0
  36. package/lib/client.js +2 -0
  37. package/lib/endpoint.d.ts +100 -0
  38. package/lib/endpoint.js +497 -0
  39. package/lib/index.d.ts +6 -15
  40. package/lib/index.js +6 -209
  41. package/lib/lark-runtime-state.d.ts +1 -0
  42. package/lib/lark-runtime-state.js +6 -0
  43. package/lib/media-upload.d.ts +15 -0
  44. package/lib/media-upload.js +58 -0
  45. package/lib/platform-permit.d.ts +14 -0
  46. package/lib/platform-permit.js +35 -0
  47. package/lib/protocol.d.ts +119 -0
  48. package/lib/protocol.js +272 -0
  49. package/lib/webhook.d.ts +14 -0
  50. package/lib/webhook.js +73 -0
  51. package/package.json +76 -21
  52. package/plugin.js +19 -0
  53. package/schema.json +110 -0
  54. package/src/client.ts +16 -0
  55. package/src/endpoint.ts +590 -0
  56. package/src/index.ts +51 -227
  57. package/src/lark-runtime-state.ts +7 -0
  58. package/src/media-upload.ts +69 -0
  59. package/src/platform-permit.ts +50 -0
  60. package/src/protocol.ts +396 -0
  61. package/src/webhook.ts +110 -0
  62. package/lib/adapter.d.ts +0 -17
  63. package/lib/adapter.d.ts.map +0 -1
  64. package/lib/adapter.js +0 -45
  65. package/lib/adapter.js.map +0 -1
  66. package/lib/bot.d.ts +0 -82
  67. package/lib/bot.d.ts.map +0 -1
  68. package/lib/bot.js +0 -638
  69. package/lib/bot.js.map +0 -1
  70. package/lib/index.d.ts.map +0 -1
  71. package/lib/index.js.map +0 -1
  72. package/lib/types.d.ts +0 -63
  73. package/lib/types.d.ts.map +0 -1
  74. package/lib/types.js +0 -2
  75. package/lib/types.js.map +0 -1
  76. package/plugin.yml +0 -3
  77. package/skills/lark/SKILL.md +0 -89
  78. package/src/adapter.ts +0 -55
  79. package/src/bot.ts +0 -712
  80. package/src/types.ts +0 -58
@@ -0,0 +1,3 @@
1
+ # LARK Platform Agent
2
+
3
+ You are the lark platform specialist. Interpret requests in the current lark conversation and load only the narrowest private Skill needed for the task.
@@ -0,0 +1,3 @@
1
+ // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { larkEndpointCommands } from '../../definition.js';
3
+ export default larkEndpointCommands.add;
@@ -0,0 +1,3 @@
1
+ import { larkEndpointCommands } from '../../definition.js';
2
+
3
+ export default larkEndpointCommands.add;
@@ -0,0 +1,20 @@
1
+ // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ /**
3
+ * `lark endpoint` 命令族:由 @zhin.js/adapter 的 createEndpointCommands 套件生成。
4
+ * commands/lark/endpoint/ 下的 list / add / remove 直接默认导出这三项。
5
+ */
6
+ import { createEndpointCommands } from 'zhin.js/adapter';
7
+ import { defineCommand } from 'zhin.js/command';
8
+ import { larkRuntimeStateToken } from "../../../lib/lark-runtime-state.js";
9
+ export const larkEndpointCommands = createEndpointCommands({
10
+ adapterKey: 'lark',
11
+ adapterDisplayName: 'Lark',
12
+ fields: [
13
+ { key: 'appId', required: true, env: true, description: '飞书 App ID' },
14
+ { key: 'appSecret', required: true, env: true, description: '飞书 App Secret' },
15
+ { key: 'encryptKey', env: true, description: '事件加密 key' },
16
+ { key: 'verificationToken', env: true, description: '事件验证 token' },
17
+ ],
18
+ running: (use) => use(larkRuntimeStateToken).endpoints.values(),
19
+ describeEntry: (entry) => `appId: ${String(entry.appId)}`,
20
+ }, defineCommand);
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `lark endpoint` 命令族:由 @zhin.js/adapter 的 createEndpointCommands 套件生成。
3
+ * commands/lark/endpoint/ 下的 list / add / remove 直接默认导出这三项。
4
+ */
5
+ import { createEndpointCommands } from 'zhin.js/adapter';
6
+ import { defineCommand } from 'zhin.js/command';
7
+ import { larkRuntimeStateToken } from '../../../src/lark-runtime-state.js';
8
+
9
+ export const larkEndpointCommands = createEndpointCommands({
10
+ adapterKey: 'lark',
11
+ adapterDisplayName: 'Lark',
12
+ fields: [
13
+ { key: 'appId', required: true, env: true, description: '飞书 App ID' },
14
+ { key: 'appSecret', required: true, env: true, description: '飞书 App Secret' },
15
+ { key: 'encryptKey', env: true, description: '事件加密 key' },
16
+ { key: 'verificationToken', env: true, description: '事件验证 token' },
17
+ ],
18
+ running: (use) => use(larkRuntimeStateToken).endpoints.values(),
19
+ describeEntry: (entry) => `appId: ${String(entry.appId)}`,
20
+ }, defineCommand);
@@ -0,0 +1,3 @@
1
+ // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { larkEndpointCommands } from '../definition.js';
3
+ export default larkEndpointCommands.list;
@@ -0,0 +1,3 @@
1
+ import { larkEndpointCommands } from '../definition.js';
2
+
3
+ export default larkEndpointCommands.list;
@@ -0,0 +1,3 @@
1
+ // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { larkEndpointCommands } from '../../definition.js';
3
+ export default larkEndpointCommands.remove;
@@ -0,0 +1,3 @@
1
+ import { larkEndpointCommands } from '../../definition.js';
2
+
3
+ export default larkEndpointCommands.remove;
@@ -0,0 +1,12 @@
1
+ import type { LarkClient } from './endpoint.js';
2
+ import type { LarkEventBody } from './protocol.js';
3
+ export type LarkClientEventMap = Record<string, LarkEventBody>;
4
+ declare module '@zhin.js/feature-kit' {
5
+ interface AdapterClientRegistry {
6
+ readonly lark: {
7
+ readonly client: LarkClient;
8
+ readonly events: LarkClientEventMap;
9
+ };
10
+ }
11
+ }
12
+ export declare const larkClient: import("@zhin.js/adapter").EndpointClientToken<LarkClient, LarkClientEventMap>;
package/lib/client.js ADDED
@@ -0,0 +1,2 @@
1
+ import { defineEndpointClient } from 'zhin.js/adapter';
2
+ export const larkClient = defineEndpointClient('lark');
@@ -0,0 +1,100 @@
1
+ import { Endpoint } from 'zhin.js/adapter';
2
+ import { type EndpointControl, type EndpointManagement, type EndpointSendRequest } from 'zhin.js/adapter';
3
+ import type { HttpHost } from '@zhin.js/host-http';
4
+ import type { CapabilityId } from 'zhin.js';
5
+ import { resolveMediaBinary } from './media-upload.js';
6
+ import { type LarkMessage, type ResolvedLarkConfig } from './protocol.js';
7
+ export type LarkFetch = (url: string, init?: {
8
+ readonly method?: string;
9
+ readonly headers?: Record<string, string>;
10
+ readonly body?: string | FormData;
11
+ readonly signal?: AbortSignal;
12
+ }) => Promise<{
13
+ readonly ok: boolean;
14
+ readonly status: number;
15
+ text(): Promise<string>;
16
+ json(): Promise<unknown>;
17
+ }>;
18
+ export interface LarkEndpointOptions {
19
+ readonly id: CapabilityId;
20
+ readonly http: HttpHost;
21
+ readonly config: ResolvedLarkConfig;
22
+ readonly fetch?: LarkFetch;
23
+ }
24
+ export interface LarkClientApi {
25
+ getUserInfo(userId: string, userIdType?: 'open_id' | 'user_id' | 'union_id'): Promise<unknown>;
26
+ getChatInfo(chatId: string): Promise<unknown>;
27
+ uploadFile(filePath: string, fileType?: 'image' | 'file' | 'video' | 'audio'): Promise<string | null>;
28
+ createChat(name: string, userIds: string[], ownerId?: string): Promise<string | null>;
29
+ updateChatInfo(chatId: string, options: {
30
+ name?: string;
31
+ description?: string;
32
+ }): Promise<boolean>;
33
+ addChatMembers(chatId: string, userIds: string[]): Promise<boolean>;
34
+ removeChatMembers(chatId: string, userIds: string[]): Promise<boolean>;
35
+ getChatMembers(chatId: string): Promise<unknown[]>;
36
+ dissolveChat(chatId: string): Promise<boolean>;
37
+ setChatManagers(chatId: string, userIds: string[]): Promise<boolean>;
38
+ removeChatManagers(chatId: string, userIds: string[]): Promise<boolean>;
39
+ }
40
+ /** Feishu/Lark OpenAPI client surface carried by every Endpoint event. */
41
+ export declare class LarkClient implements LarkClientApi {
42
+ readonly api: LarkClientApi;
43
+ constructor(api: LarkClientApi);
44
+ getUserInfo: (id: string, type?: "open_id" | "user_id" | "union_id") => Promise<unknown>;
45
+ getChatInfo: (id: string) => Promise<unknown>;
46
+ uploadFile: (path: string, type?: "image" | "file" | "video" | "audio") => Promise<string | null>;
47
+ createChat: (name: string, users: string[], owner?: string) => Promise<string | null>;
48
+ updateChatInfo: (id: string, options: {
49
+ name?: string;
50
+ description?: string;
51
+ }) => Promise<boolean>;
52
+ addChatMembers: (id: string, users: string[]) => Promise<boolean>;
53
+ removeChatMembers: (id: string, users: string[]) => Promise<boolean>;
54
+ getChatMembers: (id: string) => Promise<unknown[]>;
55
+ dissolveChat: (id: string) => Promise<boolean>;
56
+ setChatManagers: (id: string, users: string[]) => Promise<boolean>;
57
+ removeChatManagers: (id: string, users: string[]) => Promise<boolean>;
58
+ }
59
+ export declare class LarkEndpoint extends Endpoint<LarkClient> {
60
+ #private;
61
+ readonly client: LarkClient;
62
+ /**
63
+ * Console 社交面语义端口。Lark OpenAPI 仅接读取类列表能力:
64
+ * - listGroups:GET /im/v1/chats(bot 所在群列表,分页归一为 {group_id: chat_id, name})
65
+ * - listGroupMembers:GET /im/v1/chats/:chat_id/members(open_id 分页,返回平台原生成员形状)
66
+ * 不接的项:listFriends(Lark 无好友概念,contact API 为组织通讯录而非社交关系)、
67
+ * listChannels(无频道/guild 概念)、写操作(审批/踢人/禁言等本轮不在范围内)。
68
+ */
69
+ readonly management: EndpointManagement;
70
+ readonly control: EndpointControl;
71
+ constructor(options: LarkEndpointOptions);
72
+ /** Used by webhook handler. */
73
+ get isOpen(): boolean;
74
+ get config(): ResolvedLarkConfig;
75
+ start(): Promise<void>;
76
+ open(): void;
77
+ close(): void;
78
+ stop(): Promise<void>;
79
+ send({ conversation, payload }: EndpointSendRequest): Promise<string>;
80
+ recallMessage(messageId: string): Promise<void>;
81
+ /** POST /im/v1/images(image_type=message),返回 image_key;失败返回 null。 */
82
+ uploadImage(media: Parameters<typeof resolveMediaBinary>[0]): Promise<string | null>;
83
+ /** Test / internal: admit a parsed message when open (non-webhook path). */
84
+ admit(msg: LarkMessage): void;
85
+ admitPlatform(name: string, event: unknown): void;
86
+ getUserInfo(userId: string, userIdType?: 'open_id' | 'user_id' | 'union_id'): Promise<unknown>;
87
+ getChatInfo(chatId: string): Promise<unknown>;
88
+ uploadFile(filePath: string, fileType?: 'image' | 'file' | 'video' | 'audio'): Promise<string | null>;
89
+ createChat(name: string, userIds: string[], ownerId?: string): Promise<string | null>;
90
+ updateChatInfo(chatId: string, options: {
91
+ name?: string;
92
+ description?: string;
93
+ }): Promise<boolean>;
94
+ addChatMembers(chatId: string, userIds: string[]): Promise<boolean>;
95
+ removeChatMembers(chatId: string, userIds: string[]): Promise<boolean>;
96
+ getChatMembers(chatId: string): Promise<unknown[]>;
97
+ dissolveChat(chatId: string): Promise<boolean>;
98
+ setChatManagers(chatId: string, userIds: string[]): Promise<boolean>;
99
+ removeChatManagers(chatId: string, userIds: string[]): Promise<boolean>;
100
+ }