@zhin.js/adapter-icqq 6.0.2 → 7.0.0

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 (125) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +48 -435
  3. package/adapters/icqq.ts +92 -0
  4. package/agent/tools/announce.ts +2 -2
  5. package/agent/tools/essence.ts +2 -2
  6. package/agent/tools/friend_list.ts +2 -2
  7. package/agent/tools/group_files.ts +2 -2
  8. package/agent/tools/group_invite.ts +2 -2
  9. package/agent/tools/group_list.ts +2 -2
  10. package/agent/tools/group_sign.ts +2 -2
  11. package/agent/tools/list_muted.ts +2 -2
  12. package/agent/tools/poke.ts +2 -2
  13. package/agent/tools/send_user_like.ts +2 -2
  14. package/agent/tools/set_anonymous.ts +2 -2
  15. package/agent/tools/set_title.ts +2 -2
  16. package/lib/agent-prompt.d.ts +2 -0
  17. package/lib/{src/agent-prompt.js → agent-prompt.js} +0 -1
  18. package/lib/cq-message.d.ts +9 -0
  19. package/lib/{src/cq-message.js → cq-message.js} +0 -1
  20. package/lib/endpoint.d.ts +101 -0
  21. package/lib/endpoint.js +715 -0
  22. package/lib/forward-msg.d.ts +26 -0
  23. package/lib/{src/forward-msg.js → forward-msg.js} +0 -1
  24. package/lib/icqq-agent-deps.d.ts +25 -0
  25. package/lib/icqq-agent-deps.js +32 -0
  26. package/lib/icqq-guild.d.ts +53 -0
  27. package/lib/{src/icqq-guild.js → icqq-guild.js} +4 -2
  28. package/lib/icqq-inbound.d.ts +139 -0
  29. package/lib/{src/icqq-inbound.js → icqq-inbound.js} +27 -3
  30. package/lib/icqq-inbox.d.ts +33 -0
  31. package/lib/icqq-inbox.js +129 -0
  32. package/lib/index.d.ts +6 -0
  33. package/lib/index.js +6 -0
  34. package/lib/ipc-client.d.ts +73 -0
  35. package/lib/{src/ipc-client.js → ipc-client.js} +0 -1
  36. package/lib/outbound-media.d.ts +13 -0
  37. package/lib/{src/outbound-media.js → outbound-media.js} +0 -1
  38. package/lib/protocol.d.ts +269 -0
  39. package/lib/{src/protocol.js → protocol.js} +124 -2
  40. package/lib/types.d.ts +87 -0
  41. package/lib/{src/types.js → types.js} +0 -1
  42. package/package.json +49 -45
  43. package/plugin.ts +32 -0
  44. package/schema.json +104 -0
  45. package/src/endpoint.ts +704 -795
  46. package/src/icqq-agent-deps.ts +48 -9
  47. package/src/icqq-guild.ts +10 -4
  48. package/src/icqq-inbound.ts +31 -2
  49. package/src/icqq-inbox.ts +155 -0
  50. package/src/index.ts +36 -69
  51. package/src/protocol.ts +191 -1
  52. package/src/types.ts +16 -0
  53. package/client/ICQQManagement.tsx +0 -147
  54. package/client/LoginAssistPanel.tsx +0 -300
  55. package/client/index.tsx +0 -11
  56. package/client/tsconfig.json +0 -7
  57. package/client/utils/api.ts +0 -30
  58. package/dist/index.js +0 -34
  59. package/lib/agent/tools/announce.js +0 -21
  60. package/lib/agent/tools/announce.js.map +0 -1
  61. package/lib/agent/tools/essence.js +0 -22
  62. package/lib/agent/tools/essence.js.map +0 -1
  63. package/lib/agent/tools/friend_list.js +0 -19
  64. package/lib/agent/tools/friend_list.js.map +0 -1
  65. package/lib/agent/tools/group_files.js +0 -29
  66. package/lib/agent/tools/group_files.js.map +0 -1
  67. package/lib/agent/tools/group_invite.js +0 -20
  68. package/lib/agent/tools/group_invite.js.map +0 -1
  69. package/lib/agent/tools/group_list.js +0 -20
  70. package/lib/agent/tools/group_list.js.map +0 -1
  71. package/lib/agent/tools/group_sign.js +0 -19
  72. package/lib/agent/tools/group_sign.js.map +0 -1
  73. package/lib/agent/tools/list_muted.js +0 -23
  74. package/lib/agent/tools/list_muted.js.map +0 -1
  75. package/lib/agent/tools/poke.js +0 -20
  76. package/lib/agent/tools/poke.js.map +0 -1
  77. package/lib/agent/tools/send_user_like.js +0 -22
  78. package/lib/agent/tools/send_user_like.js.map +0 -1
  79. package/lib/agent/tools/set_anonymous.js +0 -22
  80. package/lib/agent/tools/set_anonymous.js.map +0 -1
  81. package/lib/agent/tools/set_title.js +0 -25
  82. package/lib/agent/tools/set_title.js.map +0 -1
  83. package/lib/src/adapter.js +0 -128
  84. package/lib/src/adapter.js.map +0 -1
  85. package/lib/src/agent-prompt.js.map +0 -1
  86. package/lib/src/cq-message.js.map +0 -1
  87. package/lib/src/endpoint.js +0 -755
  88. package/lib/src/endpoint.js.map +0 -1
  89. package/lib/src/forward-msg.js.map +0 -1
  90. package/lib/src/get-msg.js +0 -46
  91. package/lib/src/get-msg.js.map +0 -1
  92. package/lib/src/icqq-agent-deps.js +0 -10
  93. package/lib/src/icqq-agent-deps.js.map +0 -1
  94. package/lib/src/icqq-guild.js.map +0 -1
  95. package/lib/src/icqq-inbound.js.map +0 -1
  96. package/lib/src/icqq-login-assist-bridge.js +0 -148
  97. package/lib/src/icqq-login-assist-bridge.js.map +0 -1
  98. package/lib/src/icqq-side-events.js +0 -130
  99. package/lib/src/icqq-side-events.js.map +0 -1
  100. package/lib/src/index.js +0 -50
  101. package/lib/src/index.js.map +0 -1
  102. package/lib/src/ipc-client.js.map +0 -1
  103. package/lib/src/login-assist-routes.js +0 -29
  104. package/lib/src/login-assist-routes.js.map +0 -1
  105. package/lib/src/login-ipc-contract.js +0 -35
  106. package/lib/src/login-ipc-contract.js.map +0 -1
  107. package/lib/src/outbound-media.js.map +0 -1
  108. package/lib/src/protocol.js.map +0 -1
  109. package/lib/src/routes.js +0 -67
  110. package/lib/src/routes.js.map +0 -1
  111. package/lib/src/segment-mapper.js +0 -2
  112. package/lib/src/segment-mapper.js.map +0 -1
  113. package/lib/src/tools/index.js +0 -23
  114. package/lib/src/tools/index.js.map +0 -1
  115. package/lib/src/types.js.map +0 -1
  116. package/plugin.yml +0 -3
  117. package/src/adapter.ts +0 -151
  118. package/src/get-msg.ts +0 -56
  119. package/src/icqq-login-assist-bridge.ts +0 -196
  120. package/src/icqq-side-events.ts +0 -143
  121. package/src/login-assist-routes.ts +0 -39
  122. package/src/login-ipc-contract.ts +0 -52
  123. package/src/routes.ts +0 -83
  124. package/src/segment-mapper.ts +0 -1
  125. package/src/tools/index.ts +0 -31
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number; content: string }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number; content: string }>({
5
5
  description: '发送 QQ 群公告(需要管理员权限)',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; message_id: string; action: 'add' | 'remove' }>({
4
+ export default defineAgentTool<{ endpoint_id: string; message_id: string; action: 'add' | 'remove' }>({
5
5
  description: '设置或移除 QQ 群精华消息',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string }>({
4
+ export default defineAgentTool<{ endpoint_id: string }>({
5
5
  description: '获取 QQ 好友列表',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint 名称'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number }>({
5
5
  description: '获取 QQ 群的群文件列表',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint 名称'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number; user_id: number }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number; user_id: number }>({
5
5
  description: '邀请好友加入 QQ 群',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string }>({
4
+ export default defineAgentTool<{ endpoint_id: string }>({
5
5
  description: '获取 Endpoint 的 QQ 群列表',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint 名称'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number }>({
5
5
  description: 'QQ 群签到打卡',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number }>({
5
5
  description: '查询 QQ 群中当前被禁言的成员列表',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number; user_id: number }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number; user_id: number }>({
5
5
  description: '在 QQ 群中对某个成员执行戳一戳互动操作',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; user_id: number; times?: number }>({
4
+ export default defineAgentTool<{ endpoint_id: string; user_id: number; times?: number }>({
5
5
  description: '给用户点赞(竖大拇指),每人每天最多 20 次',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number; enable?: boolean }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number; enable?: boolean }>({
5
5
  description: '开启或关闭 QQ 群的匿名聊天功能',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -1,7 +1,7 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
1
+ import { defineAgentTool } from '@zhin.js/agent/tools';
2
2
  import { z } from 'zod';
3
3
  import { getIcqqAgentDeps } from '../../src/icqq-agent-deps.js';
4
- export default defineTool<{ endpoint_id: string; group_id: number; user_id: number; title: string; duration?: number }>({
4
+ export default defineAgentTool<{ endpoint_id: string; group_id: number; user_id: number; title: string; duration?: number }>({
5
5
  description: '设置 QQ 群成员的专属头衔',
6
6
  inputSchema: z.object({
7
7
  endpoint_id: z.string().describe('Endpoint QQ号'),
@@ -0,0 +1,2 @@
1
+ import type { AgentPromptContributor } from 'zhin.js';
2
+ export declare function createIcqqAgentPromptContributor(): AgentPromptContributor;
@@ -100,4 +100,3 @@ export function createIcqqAgentPromptContributor() {
100
100
  },
101
101
  };
102
102
  }
103
- //# sourceMappingURL=agent-prompt.js.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CQ 码与 MessageSegment 互转。
3
+ * 出站:@icqqjs/cli 要求 message 为非空字符串;引用段编码为 [reply:id](需 cli parse-message 支持 reply,见 scripts/patch-icqq-cli-reply.mjs)。
4
+ */
5
+ import { MessageSegment, SendContent } from "zhin.js";
6
+ export declare function parseCqMessage(raw: string): MessageSegment[];
7
+ /** 构建 icqq IPC send_*_msg 的 message 字符串(非空) */
8
+ export declare function buildIcqqIpcMessage(content: SendContent): string;
9
+ export declare function toCqString(content: SendContent): string;
@@ -145,4 +145,3 @@ export function toCqString(content) {
145
145
  })
146
146
  .join("");
147
147
  }
148
- //# sourceMappingURL=cq-message.js.map
@@ -0,0 +1,101 @@
1
+ /**
2
+ * IcqqIpcEndpoint — lifecycle, outbound, IPC subscribe/admit for ICQQ daemon.
3
+ */
4
+ import type { EndpointInstance, EndpointManagement } from '@zhin.js/adapter';
5
+ import type { MessageGateway } from '@zhin.js/core/runtime';
6
+ import type { CapabilityId } from '@zhin.js/plugin-runtime';
7
+ import { type IcqqInboundMessage, type IpcEvent, type IpcResponse, type ResolvedIcqqConfig } from './protocol.js';
8
+ import type { IpcFriendInfo, IpcGroupInfo, IpcMemberInfo } from './types.js';
9
+ /** Minimal IPC surface used by the endpoint (real IpcClient or test mock). */
10
+ export interface IcqqIpcTransport {
11
+ request(action: string, params?: Record<string, unknown>): Promise<IpcResponse>;
12
+ subscribe(action: string, params: Record<string, unknown>, handler: (event: IpcEvent) => void): {
13
+ unsubscribe: () => Promise<void>;
14
+ };
15
+ setOnRemoteDisconnect(handler: (() => void) | null): void;
16
+ close(): void;
17
+ }
18
+ export type CreateIcqqIpc = (config: ResolvedIcqqConfig) => Promise<IcqqIpcTransport>;
19
+ /**
20
+ * 收件箱写/推钩子(由装配层注入,见 adapters/icqq.ts)。
21
+ * record* 写 unified_inbox_request/notice;publish 向 console hub 推送实时事件。
22
+ */
23
+ export interface IcqqInboxHooks {
24
+ recordRequest(row: Record<string, unknown>): void | Promise<void>;
25
+ recordNotice(row: Record<string, unknown>): void | Promise<void>;
26
+ publish?(type: string, data: unknown): void;
27
+ }
28
+ export interface IcqqEndpointOptions {
29
+ readonly id: CapabilityId;
30
+ readonly gateway: MessageGateway;
31
+ readonly config: ResolvedIcqqConfig;
32
+ readonly createIpc?: CreateIcqqIpc;
33
+ /** 未注入时 request/notice 事件仅按非消息载荷忽略(不报错)。 */
34
+ readonly inbox?: IcqqInboxHooks;
35
+ }
36
+ export declare class IcqqIpcEndpoint implements EndpointInstance {
37
+ #private;
38
+ readonly name: string;
39
+ /** Populated after start(); agent tools read this. */
40
+ ipc: IcqqIpcTransport;
41
+ readonly friends: Map<number, IpcFriendInfo>;
42
+ readonly groups: Map<number, IpcGroupInfo>;
43
+ readonly management: EndpointManagement;
44
+ constructor(options: IcqqEndpointOptions);
45
+ request(action: string, params?: Record<string, unknown>): Promise<IpcResponse>;
46
+ start(): Promise<void>;
47
+ open(): void;
48
+ close(): void;
49
+ stop(): Promise<void>;
50
+ send({ target, payload }: {
51
+ readonly target: string;
52
+ readonly payload: unknown;
53
+ }): Promise<string>;
54
+ private static readonly EMOJI_MAP;
55
+ private getEmojiId;
56
+ /** Activity-feedback / OutboundHost reaction surface. */
57
+ addReaction(messageId: string, emoji: string): Promise<string | null>;
58
+ removeReaction(messageId: string, reactionId: string): Promise<void>;
59
+ /** Activity-feedback autoRemove / Console recall. */
60
+ recallMessage(messageId: string): Promise<void>;
61
+ /** EndpointManagement.listFriends —— 好友列表(LIST_FRIENDS,归一为 {user_id, nickname, remark})。 */
62
+ getFriendList(): Promise<Array<{
63
+ user_id: number;
64
+ nickname: string;
65
+ remark: string;
66
+ }>>;
67
+ /** EndpointManagement.listGroups —— 群列表(LIST_GROUPS,归一为 {group_id, name})。 */
68
+ getGroupList(): Promise<Array<{
69
+ group_id: number;
70
+ name: string;
71
+ }>>;
72
+ /** EndpointManagement.listGroupMembers —— 群成员列表(字段对齐 daemon 返回)。 */
73
+ getGroupMemberList(groupId: number | string): Promise<IpcMemberInfo[]>;
74
+ /** getGroupMemberList 别名(console 探测 listMembers / getMemberList)。 */
75
+ listMembers(groupId: number | string): Promise<IpcMemberInfo[]>;
76
+ getMemberList(groupId: number | string): Promise<IpcMemberInfo[]>;
77
+ /**
78
+ * EndpointManagement.resolveRequest —— id 为 inbox 行的 platform_request_id。
79
+ * 先 GET_SYSTEM_MSG 按 flag(回退 seq)定位请求,再按类型路由 handle_friend/group_request。
80
+ */
81
+ approveRequest(id: string, remark?: string): Promise<void>;
82
+ rejectRequest(id: string, reason?: string): Promise<void>;
83
+ /** EndpointManagement.deleteFriend —— FRIEND_DELETE。 */
84
+ deleteFriend(userId: number | string): Promise<void>;
85
+ /** deleteFriend 别名(console 探测 delete_friend)。 */
86
+ delete_friend(userId: number | string): Promise<void>;
87
+ /** EndpointManagement.kickGroupMember —— GROUP_KICK。 */
88
+ removeMember(groupId: number | string, userId: number | string): Promise<void>;
89
+ kickMember(groupId: number | string, userId: number | string): Promise<void>;
90
+ setGroupKick(groupId: number | string, userId: number | string): Promise<void>;
91
+ /** EndpointManagement.muteGroupMember —— GROUP_MUTE(duration 秒,默认 600)。 */
92
+ muteMember(groupId: number | string, userId: number | string, duration?: number): Promise<void>;
93
+ banMember(groupId: number | string, userId: number | string, duration?: number): Promise<void>;
94
+ setGroupMute(groupId: number | string, userId: number | string, duration?: number): Promise<void>;
95
+ /** EndpointManagement.setGroupAdmin —— SET_GROUP_ADMIN(enable 默认 true)。 */
96
+ setModerator(groupId: number | string, userId: number | string, enable?: boolean): Promise<void>;
97
+ setAdmin(groupId: number | string, userId: number | string, enable?: boolean): Promise<void>;
98
+ setGroupAdmin(groupId: number | string, userId: number | string, enable?: boolean): Promise<void>;
99
+ /** Test / internal: admit when open. */
100
+ admit(msg: IcqqInboundMessage): void;
101
+ }