@zhin.js/adapter-napcat 1.1.26 → 1.1.27

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 (90) hide show
  1. package/CHANGELOG.md +191 -0
  2. package/LICENSE +21 -0
  3. package/PERMITS.md +17 -3
  4. package/README.md +10 -6
  5. package/adapters/napcat/index.js +3 -0
  6. package/adapters/napcat/index.ts +3 -0
  7. package/agents/napcat/conversation.js +71 -0
  8. package/agents/napcat/conversation.ts +76 -0
  9. package/agents/napcat/media.js +49 -0
  10. package/agents/napcat/media.ts +44 -0
  11. package/agents/napcat/messages.js +32 -0
  12. package/agents/napcat/messages.ts +32 -0
  13. package/agents/napcat/skills/napcat-account/tools/delete_friend/index.js +1 -1
  14. package/agents/napcat/skills/napcat-account/tools/delete_friend/index.ts +1 -1
  15. package/agents/napcat/skills/napcat-account/tools/set_avatar/index.js +3 -1
  16. package/agents/napcat/skills/napcat-account/tools/set_avatar/index.ts +3 -1
  17. package/agents/napcat/skills/napcat-files-history/tools/download_file/index.js +3 -1
  18. package/agents/napcat/skills/napcat-files-history/tools/download_file/index.ts +3 -1
  19. package/agents/napcat/skills/napcat-group-content/tools/del_group_notice/index.js +5 -5
  20. package/agents/napcat/skills/napcat-group-content/tools/del_group_notice/index.ts +6 -6
  21. package/agents/napcat/skills/napcat-group-content/tools/delete_essence_msg/index.js +5 -3
  22. package/agents/napcat/skills/napcat-group-content/tools/delete_essence_msg/index.ts +6 -4
  23. package/agents/napcat/skills/napcat-group-content/tools/get_essence_list/index.js +5 -7
  24. package/agents/napcat/skills/napcat-group-content/tools/get_essence_list/index.ts +6 -8
  25. package/agents/napcat/skills/napcat-group-content/tools/get_group_notice/index.js +5 -7
  26. package/agents/napcat/skills/napcat-group-content/tools/get_group_notice/index.ts +6 -8
  27. package/agents/napcat/skills/napcat-group-content/tools/send_group_notice/index.js +9 -7
  28. package/agents/napcat/skills/napcat-group-content/tools/send_group_notice/index.ts +10 -9
  29. package/agents/napcat/skills/napcat-group-content/tools/set_essence_msg/index.js +5 -3
  30. package/agents/napcat/skills/napcat-group-content/tools/set_essence_msg/index.ts +6 -4
  31. package/agents/napcat/skills/napcat-group-files-history/tools/get_group_file_url/index.js +4 -5
  32. package/agents/napcat/skills/napcat-group-files-history/tools/get_group_file_url/index.ts +5 -6
  33. package/agents/napcat/skills/napcat-group-files-history/tools/get_group_msg_history/index.js +4 -5
  34. package/agents/napcat/skills/napcat-group-files-history/tools/get_group_msg_history/index.ts +5 -6
  35. package/agents/napcat/skills/napcat-group-files-history/tools/get_group_root_files/index.js +5 -7
  36. package/agents/napcat/skills/napcat-group-files-history/tools/get_group_root_files/index.ts +6 -8
  37. package/agents/napcat/skills/napcat-group-files-history/tools/upload_group_file/index.js +6 -5
  38. package/agents/napcat/skills/napcat-group-files-history/tools/upload_group_file/index.ts +8 -7
  39. package/agents/napcat/skills/napcat-group-media/tools/ai_tts/index.js +4 -5
  40. package/agents/napcat/skills/napcat-group-media/tools/ai_tts/index.ts +5 -6
  41. package/agents/napcat/skills/napcat-group-media/tools/get_ai_characters/index.js +5 -7
  42. package/agents/napcat/skills/napcat-group-media/tools/get_ai_characters/index.ts +6 -8
  43. package/agents/napcat/skills/napcat-group-settings/tools/get_group_info_ex/index.js +5 -7
  44. package/agents/napcat/skills/napcat-group-settings/tools/get_group_info_ex/index.ts +6 -8
  45. package/agents/napcat/skills/napcat-group-settings/tools/get_group_shut_list/index.js +5 -7
  46. package/agents/napcat/skills/napcat-group-settings/tools/get_group_shut_list/index.ts +6 -8
  47. package/agents/napcat/skills/napcat-group-settings/tools/group_sign/index.js +5 -7
  48. package/agents/napcat/skills/napcat-group-settings/tools/group_sign/index.ts +7 -9
  49. package/agents/napcat/skills/napcat-group-settings/tools/set_group_portrait/index.js +6 -5
  50. package/agents/napcat/skills/napcat-group-settings/tools/set_group_portrait/index.ts +7 -6
  51. package/agents/napcat/skills/napcat-group-settings/tools/set_title/index.js +5 -5
  52. package/agents/napcat/skills/napcat-group-settings/tools/set_title/index.ts +6 -6
  53. package/agents/napcat/skills/napcat-media/tools/ocr_image/index.js +4 -3
  54. package/agents/napcat/skills/napcat-media/tools/ocr_image/index.ts +5 -4
  55. package/agents/napcat/skills/napcat-messaging/tools/forward_single_msg/index.js +3 -1
  56. package/agents/napcat/skills/napcat-messaging/tools/forward_single_msg/index.ts +3 -1
  57. package/agents/napcat/skills/napcat-messaging/tools/send_forward_msg/index.js +12 -6
  58. package/agents/napcat/skills/napcat-messaging/tools/send_forward_msg/index.ts +13 -16
  59. package/agents/napcat/skills/napcat-messaging/tools/send_poke/index.js +10 -7
  60. package/agents/napcat/skills/napcat-messaging/tools/send_poke/index.ts +10 -8
  61. package/agents/napcat/skills/napcat-private-history/tools/get_friend_msg_history/index.js +4 -5
  62. package/agents/napcat/skills/napcat-private-history/tools/get_friend_msg_history/index.ts +5 -6
  63. package/lib/endpoint-management.js +37 -0
  64. package/lib/http-endpoint.d.ts +3 -0
  65. package/lib/http-endpoint.js +14 -20
  66. package/lib/index.d.ts +0 -1
  67. package/lib/index.js +0 -1
  68. package/lib/protocol.d.ts +6 -1
  69. package/lib/protocol.js +13 -0
  70. package/lib/ws-endpoint.js +3 -2
  71. package/lib/ws-types.d.ts +6 -0
  72. package/lib/ws-types.js +31 -0
  73. package/lib/wss-auth.d.ts +2 -2
  74. package/lib/wss-auth.js +3 -12
  75. package/lib/wss-endpoint.d.ts +1 -1
  76. package/lib/wss-endpoint.js +22 -21
  77. package/package.json +24 -28
  78. package/plugin.js +0 -5
  79. package/schema.json +0 -56
  80. package/src/endpoint-management.ts +33 -0
  81. package/src/http-endpoint.ts +11 -20
  82. package/src/index.ts +0 -2
  83. package/src/protocol.ts +14 -1
  84. package/src/ws-endpoint.ts +3 -1
  85. package/src/ws-types.ts +33 -0
  86. package/src/wss-auth.ts +4 -11
  87. package/src/wss-endpoint.ts +22 -22
  88. package/lib/webhook.d.ts +0 -2
  89. package/lib/webhook.js +0 -14
  90. package/src/webhook.ts +0 -16
@@ -1,17 +1,15 @@
1
+ import { currentGroup } from "../../../../conversation.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number }>({
5
- description: '获取群根目录文件列表。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
5
+ export default defineAgentTool<Record<string, never>>({
6
+ description: '获取当前群的根目录文件列表。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['群文件列表', 'group files'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }: { group_id: number }, context) {
14
- const endpoint = context.$client;
15
- return endpoint.getGroupRootFiles(group_id);
12
+ async execute(_input, context) {
13
+ return context.$client.getGroupRootFiles(currentGroup(context));
16
14
  },
17
15
  });
@@ -1,10 +1,10 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { currentGroup } from "../../../../conversation.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
- description: '上传文件到群。file 为本地路径或 URL。',
6
+ description: '上传文件到当前群。file 为宿主机本地路径或 URL(读取宿主文件,仅全局主人可用)。',
6
7
  inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
8
  file: z.string().describe('文件路径或 URL'),
9
9
  name: z.string().describe('文件名'),
10
10
  folder: z.string().optional().describe('目标文件夹 ID(可选)'),
@@ -13,9 +13,10 @@ export default defineAgentTool({
13
13
  tags: ['napcat', 'qq'],
14
14
  keywords: ['上传文件', 'upload file', '群文件'],
15
15
  scopes: ['group'],
16
- async execute({ group_id, file, name, folder }, context) {
17
- const endpoint = context.$client;
18
- await endpoint.uploadGroupFile({ groupId: group_id, file, name, folder });
16
+ // `file` may be a path on the host: reading host files is a host-global capability (ADR 0056 §2).
17
+ permissions: ['owner@global'],
18
+ async execute({ file, name, folder }, context) {
19
+ await context.$client.uploadGroupFile({ groupId: currentGroup(context), file, name, folder });
19
20
  return { success: true };
20
21
  },
21
22
  });
@@ -1,10 +1,10 @@
1
+ import { currentGroup } from "../../../../conversation.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number; file: string; name: string; folder?: string }>({
5
- description: '上传文件到群。file 为本地路径或 URL。',
5
+ export default defineAgentTool<{ file: string; name: string; folder?: string }>({
6
+ description: '上传文件到当前群。file 为宿主机本地路径或 URL(读取宿主文件,仅全局主人可用)。',
6
7
  inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
8
  file: z.string().describe('文件路径或 URL'),
9
9
  name: z.string().describe('文件名'),
10
10
  folder: z.string().optional().describe('目标文件夹 ID(可选)'),
@@ -13,9 +13,10 @@ export default defineAgentTool<{ group_id: number; file: string; name: string; f
13
13
  tags: ['napcat', 'qq'],
14
14
  keywords: ['上传文件', 'upload file', '群文件'],
15
15
  scopes: ['group'],
16
- async execute({ group_id, file, name, folder }: { group_id: number; file: string; name: string; folder?: string }, context) {
17
- const endpoint = context.$client;
18
- await endpoint.uploadGroupFile({ groupId: group_id, file, name, folder });
19
- return { success: true };
16
+ // `file` may be a path on the host: reading host files is a host-global capability (ADR 0056 §2).
17
+ permissions: ['owner@global'],
18
+ async execute({ file, name, folder }, context) {
19
+ await context.$client.uploadGroupFile({ groupId: currentGroup(context), file, name, folder });
20
+ return { success: true };
20
21
  },
21
22
  });
@@ -1,10 +1,10 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { currentGroup } from "../../../../conversation.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
- description: 'AI 文字转语音,在群聊中发送 AI 语音消息。',
6
+ description: 'AI 文字转语音,在当前群发送 AI 语音消息。',
6
7
  inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
8
  character: z.string().describe('AI 语音角色 ID(可先用 napcat_get_ai_characters 查询)'),
9
9
  text: z.string().describe('要转为语音的文字'),
10
10
  }),
@@ -12,8 +12,7 @@ export default defineAgentTool({
12
12
  tags: ['napcat', 'qq'],
13
13
  keywords: ['AI语音', 'TTS', '文字转语音', 'ai record'],
14
14
  scopes: ['group'],
15
- async execute({ group_id, character, text }, context) {
16
- const endpoint = context.$client;
17
- return endpoint.sendGroupAiRecord(group_id, character, text);
15
+ async execute({ character, text }, context) {
16
+ return context.$client.sendGroupAiRecord(currentGroup(context), character, text);
18
17
  },
19
18
  });
@@ -1,10 +1,10 @@
1
+ import { currentGroup } from "../../../../conversation.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number; character: string; text: string }>({
5
- description: 'AI 文字转语音,在群聊中发送 AI 语音消息。',
5
+ export default defineAgentTool<{ character: string; text: string }>({
6
+ description: 'AI 文字转语音,在当前群发送 AI 语音消息。',
6
7
  inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
8
  character: z.string().describe('AI 语音角色 ID(可先用 napcat_get_ai_characters 查询)'),
9
9
  text: z.string().describe('要转为语音的文字'),
10
10
  }),
@@ -12,8 +12,7 @@ export default defineAgentTool<{ group_id: number; character: string; text: stri
12
12
  tags: ['napcat', 'qq'],
13
13
  keywords: ['AI语音', 'TTS', '文字转语音', 'ai record'],
14
14
  scopes: ['group'],
15
- async execute({ group_id, character, text }: { group_id: number; character: string; text: string }, context) {
16
- const endpoint = context.$client;
17
- return endpoint.sendGroupAiRecord(group_id, character, text);
15
+ async execute({ character, text }, context) {
16
+ return context.$client.sendGroupAiRecord(currentGroup(context), character, text);
18
17
  },
19
18
  });
@@ -1,17 +1,15 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { currentGroup } from "../../../../conversation.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
- description: '获取 AI 语音角色列表,用于 napcat_ai_tts 的 character 参数。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
6
+ description: '获取当前群可用的 AI 语音角色列表,用于 napcat_ai_tts 的 character 参数。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['AI角色', 'ai characters', '语音角色'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }, context) {
14
- const endpoint = context.$client;
15
- return endpoint.getAiCharacters(group_id);
12
+ async execute(_input, context) {
13
+ return context.$client.getAiCharacters(currentGroup(context));
16
14
  },
17
15
  });
@@ -1,17 +1,15 @@
1
+ import { currentGroup } from "../../../../conversation.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number }>({
5
- description: '获取 AI 语音角色列表,用于 napcat_ai_tts 的 character 参数。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
5
+ export default defineAgentTool<Record<string, never>>({
6
+ description: '获取当前群可用的 AI 语音角色列表,用于 napcat_ai_tts 的 character 参数。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['AI角色', 'ai characters', '语音角色'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }: { group_id: number }, context) {
14
- const endpoint = context.$client;
15
- return endpoint.getAiCharacters(group_id);
12
+ async execute(_input, context) {
13
+ return context.$client.getAiCharacters(currentGroup(context));
16
14
  },
17
15
  });
@@ -1,17 +1,15 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { currentGroup } from "../../../../conversation.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
- description: '获取群组额外详细信息。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
6
+ description: '获取当前群的额外详细信息。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['群详情', '群额外信息', 'group info ex'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }, context) {
14
- const endpoint = context.$client;
15
- return endpoint.getGroupInfoEx(group_id);
12
+ async execute(_input, context) {
13
+ return context.$client.getGroupInfoEx(currentGroup(context));
16
14
  },
17
15
  });
@@ -1,17 +1,15 @@
1
+ import { currentGroup } from "../../../../conversation.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number }>({
5
- description: '获取群组额外详细信息。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
5
+ export default defineAgentTool<Record<string, never>>({
6
+ description: '获取当前群的额外详细信息。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['群详情', '群额外信息', 'group info ex'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }: { group_id: number }, context) {
14
- const endpoint = context.$client;
15
- return endpoint.getGroupInfoEx(group_id);
12
+ async execute(_input, context) {
13
+ return context.$client.getGroupInfoEx(currentGroup(context));
16
14
  },
17
15
  });
@@ -1,17 +1,15 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { currentGroup } from "../../../../conversation.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
- description: '获取群禁言列表。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
6
+ description: '获取当前群的禁言列表。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['禁言列表', 'shut list', '被禁言'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }, context) {
14
- const endpoint = context.$client;
15
- return endpoint.getGroupShutList(group_id);
12
+ async execute(_input, context) {
13
+ return context.$client.getGroupShutList(currentGroup(context));
16
14
  },
17
15
  });
@@ -1,17 +1,15 @@
1
+ import { currentGroup } from "../../../../conversation.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number }>({
5
- description: '获取群禁言列表。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
5
+ export default defineAgentTool<Record<string, never>>({
6
+ description: '获取当前群的禁言列表。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['禁言列表', 'shut list', '被禁言'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }: { group_id: number }, context) {
14
- const endpoint = context.$client;
15
- return endpoint.getGroupShutList(group_id);
12
+ async execute(_input, context) {
13
+ return context.$client.getGroupShutList(currentGroup(context));
16
14
  },
17
15
  });
@@ -1,18 +1,16 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { currentGroup } from "../../../../conversation.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
- description: '群签到/群打卡。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
6
+ description: '在当前群签到/打卡。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['签到', '打卡', 'sign', 'check in'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }, context) {
14
- const endpoint = context.$client;
15
- await endpoint.sendGroupSign(group_id);
12
+ async execute(_input, context) {
13
+ await context.$client.sendGroupSign(currentGroup(context));
16
14
  return { success: true };
17
15
  },
18
16
  });
@@ -1,18 +1,16 @@
1
+ import { currentGroup } from "../../../../conversation.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number }>({
5
- description: '群签到/群打卡。',
6
- inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
- }),
5
+ export default defineAgentTool<Record<string, never>>({
6
+ description: '在当前群签到/打卡。',
7
+ inputSchema: z.object({}),
9
8
  adapter: 'napcat',
10
9
  tags: ['napcat', 'qq'],
11
10
  keywords: ['签到', '打卡', 'sign', 'check in'],
12
11
  scopes: ['group'],
13
- async execute({ group_id }: { group_id: number }, context) {
14
- const endpoint = context.$client;
15
- await endpoint.sendGroupSign(group_id);
16
- return { success: true };
12
+ async execute(_input, context) {
13
+ await context.$client.sendGroupSign(currentGroup(context));
14
+ return { success: true };
17
15
  },
18
16
  });
@@ -1,20 +1,21 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { currentGroup } from '../../../../conversation.js';
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
- description: '设置群头像。file 为图片 URL 或 base64。',
6
+ description: '设置当前群的群头像。file 为图片 URL、base64 或宿主本地路径(读取宿主文件,仅全局主人可用)。',
6
7
  inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
8
  file: z.string().describe('图片(URL 或 base64)'),
9
9
  }),
10
10
  adapter: 'napcat',
11
11
  tags: ['napcat', 'qq'],
12
12
  keywords: ['群头像', 'group portrait', '设置群头像'],
13
- permissions: ['platform(napcat,scene_admin)'],
13
+ // `file` may be a host path (OneBot reads `file://`): reading host files is host-global (ADR 0056 §2).
14
+ permissions: ['owner@global', 'bot:admin'],
14
15
  scopes: ['group'],
15
- async execute({ group_id, file }, context) {
16
+ async execute({ file }, context) {
16
17
  const endpoint = context.$client;
17
- await endpoint.setGroupPortrait(group_id, file);
18
+ await endpoint.setGroupPortrait(currentGroup(context), file);
18
19
  return { success: true };
19
20
  },
20
21
  });
@@ -1,20 +1,21 @@
1
+ import { currentGroup } from '../../../../conversation.js';
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
- export default defineAgentTool<{ group_id: number; file: string }>({
5
- description: '设置群头像。file 为图片 URL 或 base64。',
5
+ export default defineAgentTool<{ file: string }>({
6
+ description: '设置当前群的群头像。file 为图片 URL、base64 或宿主本地路径(读取宿主文件,仅全局主人可用)。',
6
7
  inputSchema: z.object({
7
- group_id: z.number().describe('群号'),
8
8
  file: z.string().describe('图片(URL 或 base64)'),
9
9
  }),
10
10
  adapter: 'napcat',
11
11
  tags: ['napcat', 'qq'],
12
12
  keywords: ['群头像', 'group portrait', '设置群头像'],
13
- permissions: ['platform(napcat,scene_admin)'],
13
+ // `file` may be a host path (OneBot reads `file://`): reading host files is host-global (ADR 0056 §2).
14
+ permissions: ['owner@global', 'bot:admin'],
14
15
  scopes: ['group'],
15
- async execute({ group_id, file }: { group_id: number; file: string }, context) {
16
+ async execute({ file }, context) {
16
17
  const endpoint = context.$client;
17
- await endpoint.setGroupPortrait(group_id, file);
18
+ await endpoint.setGroupPortrait(currentGroup(context), file);
18
19
  return { success: true };
19
20
  },
20
21
  });
@@ -1,22 +1,22 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
2
  import { messages as t } from "../../../../messages.js";
3
+ import { currentGroup } from '../../../../conversation.js';
3
4
  import { defineAgentTool } from '@zhin.js/tool';
4
5
  import { z } from 'zod';
5
6
  export default defineAgentTool({
6
- description: '设置群成员专属头衔。需要群主权限。',
7
+ description: '设置当前群成员的专属头衔。需要群主权限。',
7
8
  inputSchema: z.object({
8
- group_id: z.number().describe('群号'),
9
9
  user_id: z.number().describe('目标成员 QQ 号'),
10
10
  title: z.string().describe('头衔文字'),
11
11
  }),
12
12
  adapter: 'napcat',
13
13
  tags: ['napcat', 'qq'],
14
14
  keywords: ['头衔', 'title', '专属头衔', '设置头衔'],
15
- permissions: ['platform(napcat,scene_owner)'],
15
+ permissions: ['platform:owner', 'bot:owner'],
16
16
  scopes: ['group'],
17
- async execute({ group_id, user_id, title }, context) {
17
+ async execute({ user_id, title }, context) {
18
18
  const endpoint = context.$client;
19
- await endpoint.setTitle({ groupId: group_id, userId: user_id, title });
19
+ await endpoint.setTitle({ groupId: currentGroup(context), userId: user_id, title });
20
20
  return { success: true, message: t(context.locale, 'memberTitleSet', { p0: user_id, p1: title }) };
21
21
  },
22
22
  });
@@ -1,22 +1,22 @@
1
1
  import { messages as t } from "../../../../messages.js";
2
+ import { currentGroup } from '../../../../conversation.js';
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
 
5
- export default defineAgentTool<{ group_id: number; user_id: number; title: string }>({
6
- description: '设置群成员专属头衔。需要群主权限。',
6
+ export default defineAgentTool<{ user_id: number; title: string }>({
7
+ description: '设置当前群成员的专属头衔。需要群主权限。',
7
8
  inputSchema: z.object({
8
- group_id: z.number().describe('群号'),
9
9
  user_id: z.number().describe('目标成员 QQ 号'),
10
10
  title: z.string().describe('头衔文字'),
11
11
  }),
12
12
  adapter: 'napcat',
13
13
  tags: ['napcat', 'qq'],
14
14
  keywords: ['头衔', 'title', '专属头衔', '设置头衔'],
15
- permissions: ['platform(napcat,scene_owner)'],
15
+ permissions: ['platform:owner', 'bot:owner'],
16
16
  scopes: ['group'],
17
- async execute({ group_id, user_id, title }: { group_id: number; user_id: number; title: string }, context) {
17
+ async execute({ user_id, title }, context) {
18
18
  const endpoint = context.$client;
19
- await endpoint.setTitle({ groupId: group_id, userId: user_id, title });
19
+ await endpoint.setTitle({ groupId: currentGroup(context), userId: user_id, title });
20
20
  return { success: true, message: t(context.locale, 'memberTitleSet', { p0: user_id, p1: title }) };
21
21
  },
22
22
  });
@@ -1,16 +1,17 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { requireRemoteMedia } from "../../../../media.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  export default defineAgentTool({
5
6
  description: '图片 OCR 文字识别。',
6
7
  inputSchema: z.object({
7
- image: z.string().describe('图片 file 参数(收到消息中的 file 字段或 URL)'),
8
+ image: z.string().describe('图片 file 参数(收到消息中的 file 字段、http(s) 链接或 base64://;不接受本机路径)'),
8
9
  }),
9
10
  adapter: 'napcat',
10
11
  tags: ['napcat', 'qq'],
11
12
  keywords: ['OCR', '文字识别', '图片识别', 'ocr'],
12
13
  async execute({ image }, context) {
13
- const endpoint = context.$client;
14
- return endpoint.ocrImage(image);
14
+ requireRemoteMedia(context, image, 'image');
15
+ return context.$client.ocrImage(image);
15
16
  },
16
17
  });
@@ -1,16 +1,17 @@
1
+ import { requireRemoteMedia } from "../../../../media.js";
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
 
4
5
  export default defineAgentTool<{ image: string }>({
5
6
  description: '图片 OCR 文字识别。',
6
7
  inputSchema: z.object({
7
- image: z.string().describe('图片 file 参数(收到消息中的 file 字段或 URL)'),
8
+ image: z.string().describe('图片 file 参数(收到消息中的 file 字段、http(s) 链接或 base64://;不接受本机路径)'),
8
9
  }),
9
10
  adapter: 'napcat',
10
11
  tags: ['napcat', 'qq'],
11
12
  keywords: ['OCR', '文字识别', '图片识别', 'ocr'],
12
- async execute({ image }: { image: string }, context) {
13
- const endpoint = context.$client;
14
- return endpoint.ocrImage(image);
13
+ async execute({ image }, context) {
14
+ requireRemoteMedia(context, image, 'image');
15
+ return context.$client.ocrImage(image);
15
16
  },
16
17
  });
@@ -2,7 +2,7 @@
2
2
  import { defineAgentTool } from '@zhin.js/tool';
3
3
  import { z } from 'zod';
4
4
  export default defineAgentTool({
5
- description: '转发单条消息到指定好友或群。',
5
+ description: '转发单条消息到指定好友或群(可跨会话,仅全局主人可用)。',
6
6
  inputSchema: z.object({
7
7
  target_type: z.enum(['friend', 'group']).describe('friend 或 group'),
8
8
  target_id: z.number().describe('目标好友 QQ 号或群号'),
@@ -11,6 +11,8 @@ export default defineAgentTool({
11
11
  adapter: 'napcat',
12
12
  tags: ['napcat', 'qq'],
13
13
  keywords: ['转发', 'forward', '单条转发'],
14
+ // Reads any message of the account and sends it to any friend / group: a cross-conversation capability.
15
+ permissions: ['owner@global'],
14
16
  async execute({ target_type, target_id, message_id }, context) {
15
17
  const endpoint = context.$client;
16
18
  if (target_type === 'friend')
@@ -6,7 +6,7 @@ export default defineAgentTool<{
6
6
  target_id: number;
7
7
  message_id: number;
8
8
  }>({
9
- description: '转发单条消息到指定好友或群。',
9
+ description: '转发单条消息到指定好友或群(可跨会话,仅全局主人可用)。',
10
10
  inputSchema: z.object({
11
11
  target_type: z.enum(['friend', 'group']).describe('friend 或 group'),
12
12
  target_id: z.number().describe('目标好友 QQ 号或群号'),
@@ -15,6 +15,8 @@ export default defineAgentTool<{
15
15
  adapter: 'napcat',
16
16
  tags: ['napcat', 'qq'],
17
17
  keywords: ['转发', 'forward', '单条转发'],
18
+ // Reads any message of the account and sends it to any friend / group: a cross-conversation capability.
19
+ permissions: ['owner@global'],
18
20
  async execute({ target_type, target_id, message_id }: {
19
21
  target_type: 'friend' | 'group';
20
22
  target_id: number;
@@ -1,19 +1,25 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { sendToCurrentConversation } from "../../../../conversation.js";
3
+ import { requireSafeForwardNodes } from "../../../../media.js";
2
4
  import { defineAgentTool } from '@zhin.js/tool';
3
5
  import { z } from 'zod';
4
6
  export default defineAgentTool({
5
- description: '发送合并转发消息(群聊或私聊)。messages 为转发节点数组。',
7
+ description: '在当前会话发送合并转发消息。messages 为转发节点数组;引用已有消息的节点(data.id)只能引用当前会话的消息,节点内的图片等媒体只能是 http(s) 链接或 base64://。',
6
8
  inputSchema: z.object({
7
- message_type: z.enum(['private', 'group']).describe('private 或 group'),
8
- id: z.number().describe('群号或 QQ 号'),
9
9
  messages: z.string().describe('转发节点 JSON(node 数组)'),
10
10
  }),
11
11
  adapter: 'napcat',
12
12
  tags: ['napcat', 'qq'],
13
13
  keywords: ['合并转发', 'forward', '转发消息'],
14
- async execute({ message_type, id, messages }, context) {
15
- const endpoint = context.$client;
14
+ async execute({ messages }, context) {
16
15
  const nodes = typeof messages === 'string' ? JSON.parse(messages) : messages;
17
- return endpoint.sendForwardMsg(message_type, id, nodes);
16
+ if (!Array.isArray(nodes) || !nodes.length)
17
+ throw new Error('messages must be a non-empty JSON array of forward nodes');
18
+ await requireSafeForwardNodes(context, nodes);
19
+ // `napcat:node` is the NapCat adapter's namespaced outbound segment (one OneBot `node` each).
20
+ return sendToCurrentConversation(context, nodes.map((node) => ({
21
+ type: 'napcat:node',
22
+ data: { ...(node?.data ?? {}) },
23
+ })));
18
24
  },
19
25
  });
@@ -1,27 +1,24 @@
1
+ import { sendToCurrentConversation } from "../../../../conversation.js";
2
+ import { requireSafeForwardNodes } from "../../../../media.js";
1
3
  import { defineAgentTool } from '@zhin.js/tool';
2
4
  import { z } from 'zod';
3
5
 
4
- export default defineAgentTool<{
5
- message_type: 'private' | 'group';
6
- id: number;
7
- messages: string;
8
- }>({
9
- description: '发送合并转发消息(群聊或私聊)。messages 为转发节点数组。',
6
+ export default defineAgentTool<{ messages: string }>({
7
+ description: '在当前会话发送合并转发消息。messages 为转发节点数组;引用已有消息的节点(data.id)只能引用当前会话的消息,节点内的图片等媒体只能是 http(s) 链接或 base64://。',
10
8
  inputSchema: z.object({
11
- message_type: z.enum(['private', 'group']).describe('private 或 group'),
12
- id: z.number().describe('群号或 QQ 号'),
13
9
  messages: z.string().describe('转发节点 JSON(node 数组)'),
14
10
  }),
15
11
  adapter: 'napcat',
16
12
  tags: ['napcat', 'qq'],
17
13
  keywords: ['合并转发', 'forward', '转发消息'],
18
- async execute({ message_type, id, messages }: {
19
- message_type: 'private' | 'group';
20
- id: number;
21
- messages: string;
22
- }, context) {
23
- const endpoint = context.$client;
24
- const nodes = typeof messages === 'string' ? JSON.parse(messages) : messages;
25
- return endpoint.sendForwardMsg(message_type, id, nodes);
14
+ async execute({ messages }, context) {
15
+ const nodes: unknown = typeof messages === 'string' ? JSON.parse(messages) : messages;
16
+ if (!Array.isArray(nodes) || !nodes.length) throw new Error('messages must be a non-empty JSON array of forward nodes');
17
+ await requireSafeForwardNodes(context, nodes);
18
+ // `napcat:node` is the NapCat adapter's namespaced outbound segment (one OneBot `node` each).
19
+ return sendToCurrentConversation(context, nodes.map((node) => ({
20
+ type: 'napcat:node',
21
+ data: { ...((node as { data?: Record<string, unknown> } | null)?.data ?? {}) },
22
+ })));
26
23
  },
27
24
  });