@zhin.js/core 1.0.57 → 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.
- package/lib/adapter.d.ts +1 -26
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +20 -117
- package/lib/adapter.js.map +1 -1
- package/lib/ai/index.d.ts +2 -0
- package/lib/ai/index.d.ts.map +1 -1
- package/lib/ai/index.js +1 -0
- package/lib/ai/index.js.map +1 -1
- package/lib/built/adapter-process.d.ts +0 -4
- package/lib/built/adapter-process.d.ts.map +1 -1
- package/lib/built/adapter-process.js +0 -95
- package/lib/built/adapter-process.js.map +1 -1
- package/lib/built/agent-preset.d.ts +2 -0
- package/lib/built/agent-preset.d.ts.map +1 -1
- package/lib/built/agent-preset.js +4 -0
- package/lib/built/agent-preset.js.map +1 -1
- package/lib/built/command.d.ts +4 -0
- package/lib/built/command.d.ts.map +1 -1
- package/lib/built/command.js +6 -0
- package/lib/built/command.js.map +1 -1
- package/lib/built/component.d.ts.map +1 -1
- package/lib/built/component.js +1 -0
- package/lib/built/component.js.map +1 -1
- package/lib/built/dispatcher.d.ts.map +1 -1
- package/lib/built/dispatcher.js +0 -13
- package/lib/built/dispatcher.js.map +1 -1
- package/lib/built/message-filter.d.ts +2 -0
- package/lib/built/message-filter.d.ts.map +1 -1
- package/lib/built/message-filter.js +5 -0
- package/lib/built/message-filter.js.map +1 -1
- package/lib/built/skill.d.ts +11 -0
- package/lib/built/skill.d.ts.map +1 -1
- package/lib/built/skill.js +14 -0
- package/lib/built/skill.js.map +1 -1
- package/lib/built/tool.d.ts +11 -44
- package/lib/built/tool.d.ts.map +1 -1
- package/lib/built/tool.js +14 -353
- package/lib/built/tool.js.map +1 -1
- package/lib/plugin.d.ts +1 -25
- package/lib/plugin.d.ts.map +1 -1
- package/lib/plugin.js +1 -77
- package/lib/plugin.js.map +1 -1
- package/lib/types.d.ts +0 -25
- package/lib/types.d.ts.map +1 -1
- package/package.json +10 -7
- package/CHANGELOG.md +0 -538
- package/REFACTORING_COMPLETE.md +0 -178
- package/REFACTORING_STATUS.md +0 -263
- package/src/adapter.ts +0 -275
- package/src/ai/index.ts +0 -52
- package/src/ai/providers/anthropic.ts +0 -379
- package/src/ai/providers/base.ts +0 -175
- package/src/ai/providers/index.ts +0 -13
- package/src/ai/providers/ollama.ts +0 -302
- package/src/ai/providers/openai.ts +0 -174
- package/src/ai/types.ts +0 -348
- package/src/bot.ts +0 -37
- package/src/built/adapter-process.ts +0 -177
- package/src/built/agent-preset.ts +0 -136
- package/src/built/ai-trigger.ts +0 -259
- package/src/built/command.ts +0 -108
- package/src/built/common-adapter-tools.ts +0 -242
- package/src/built/component.ts +0 -130
- package/src/built/config.ts +0 -335
- package/src/built/cron.ts +0 -156
- package/src/built/database.ts +0 -134
- package/src/built/dispatcher.ts +0 -496
- package/src/built/login-assist.ts +0 -131
- package/src/built/message-filter.ts +0 -390
- package/src/built/permission.ts +0 -151
- package/src/built/schema-feature.ts +0 -190
- package/src/built/skill.ts +0 -221
- package/src/built/tool.ts +0 -948
- package/src/command.ts +0 -87
- package/src/component.ts +0 -565
- package/src/cron.ts +0 -4
- package/src/errors.ts +0 -46
- package/src/feature.ts +0 -7
- package/src/index.ts +0 -53
- package/src/jsx-dev-runtime.ts +0 -2
- package/src/jsx-runtime.ts +0 -12
- package/src/jsx.ts +0 -135
- package/src/message.ts +0 -48
- package/src/models/system-log.ts +0 -20
- package/src/models/user.ts +0 -15
- package/src/notice.ts +0 -98
- package/src/plugin.ts +0 -896
- package/src/prompt.ts +0 -293
- package/src/request.ts +0 -95
- package/src/scheduler/index.ts +0 -19
- package/src/scheduler/scheduler.ts +0 -372
- package/src/scheduler/types.ts +0 -74
- package/src/tool-zod.ts +0 -115
- package/src/types-generator.ts +0 -78
- package/src/types.ts +0 -505
- package/src/utils.ts +0 -227
- package/tests/adapter.test.ts +0 -638
- package/tests/ai/ai-trigger.test.ts +0 -368
- package/tests/ai/providers.integration.test.ts +0 -227
- package/tests/ai/setup.ts +0 -308
- package/tests/ai/tool.test.ts +0 -800
- package/tests/bot.test.ts +0 -151
- package/tests/command.test.ts +0 -737
- package/tests/component-new.test.ts +0 -361
- package/tests/config.test.ts +0 -372
- package/tests/cron.test.ts +0 -82
- package/tests/dispatcher.test.ts +0 -293
- package/tests/errors.test.ts +0 -21
- package/tests/expression-evaluation.test.ts +0 -258
- package/tests/features-builtin.test.ts +0 -191
- package/tests/jsx-runtime.test.ts +0 -45
- package/tests/jsx.test.ts +0 -319
- package/tests/message-filter.test.ts +0 -566
- package/tests/message.test.ts +0 -402
- package/tests/notice.test.ts +0 -198
- package/tests/plugin.test.ts +0 -779
- package/tests/prompt.test.ts +0 -78
- package/tests/redos-protection.test.ts +0 -198
- package/tests/request.test.ts +0 -221
- package/tests/schema.test.ts +0 -248
- package/tests/skill-feature.test.ts +0 -179
- package/tests/test-utils.ts +0 -59
- package/tests/tool-feature.test.ts +0 -254
- package/tests/types.test.ts +0 -162
- package/tests/utils.test.ts +0 -135
- package/tsconfig.json +0 -24
package/src/types.ts
DELETED
|
@@ -1,505 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import {MessageChannel,Message} from "./message.js";
|
|
3
|
-
import {Adapter} from "./adapter.js";
|
|
4
|
-
import {Bot} from "./bot.js";
|
|
5
|
-
import { SystemLog } from "./models/system-log.js";
|
|
6
|
-
import { User } from "./models/user.js";
|
|
7
|
-
import { Adapters } from "./adapter.js";
|
|
8
|
-
import { Databases,Registry } from "@zhin.js/database";
|
|
9
|
-
import { MessageComponent } from "./message.js";
|
|
10
|
-
import { ProcessAdapter } from "./built/adapter-process.js";
|
|
11
|
-
|
|
12
|
-
export type ArrayItem<T>=T extends Array<infer R>?R:unknown
|
|
13
|
-
export interface Models extends Record<string,object>{
|
|
14
|
-
SystemLog: SystemLog
|
|
15
|
-
User: User,
|
|
16
|
-
}
|
|
17
|
-
export type MaybePromise<T> = [T] extends [Promise<infer U>] ? T|U : T|Promise<T>;
|
|
18
|
-
export interface RegisteredAdapters {
|
|
19
|
-
process: ProcessAdapter;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 数据库配置类型,支持多种数据库驱动
|
|
23
|
-
*/
|
|
24
|
-
export type DatabaseConfig<T extends keyof Databases=keyof Databases>={
|
|
25
|
-
dialect:T
|
|
26
|
-
} & Registry.Config[T]
|
|
27
|
-
/**
|
|
28
|
-
* 获取对象所有value类型
|
|
29
|
-
*/
|
|
30
|
-
export type ObjectItem<T extends object>=T[keyof T]
|
|
31
|
-
/**
|
|
32
|
-
* 已注册适配器名类型
|
|
33
|
-
*/
|
|
34
|
-
export type RegisteredAdapter=Extract<keyof Adapters, string>
|
|
35
|
-
/**
|
|
36
|
-
* 指定适配器的消息类型
|
|
37
|
-
*/
|
|
38
|
-
export type AdapterMessage<T extends keyof RegisteredAdapters=keyof RegisteredAdapters>=RegisteredAdapters[T] extends Adapter<infer R>?BotMessage<R>:{}
|
|
39
|
-
/**
|
|
40
|
-
* 指定适配器的配置类型
|
|
41
|
-
*/
|
|
42
|
-
export type AdapterConfig<T extends keyof RegisteredAdapters=keyof RegisteredAdapters>=RegisteredAdapters[T] extends Adapter<infer R>?PlatformConfig<R>:Bot.Config
|
|
43
|
-
/**
|
|
44
|
-
* Bot实例的配置类型
|
|
45
|
-
*/
|
|
46
|
-
export type PlatformConfig<T>=T extends Bot<infer L,infer R>?R:Bot.Config
|
|
47
|
-
/**
|
|
48
|
-
* Bot实例的消息类型
|
|
49
|
-
*/
|
|
50
|
-
export type BotMessage<T extends Bot>=T extends Bot<infer R>?R:{}
|
|
51
|
-
/**
|
|
52
|
-
* 消息段结构,支持 text/image/at/face 等类型
|
|
53
|
-
*/
|
|
54
|
-
export interface MessageSegment {
|
|
55
|
-
type: string;
|
|
56
|
-
data: Record<string, any>;
|
|
57
|
-
}
|
|
58
|
-
export type MessageElement=MessageSegment|MessageComponent<any>
|
|
59
|
-
/**
|
|
60
|
-
* 单个或数组类型
|
|
61
|
-
*/
|
|
62
|
-
export type MaybeArray<T>=T|T[]
|
|
63
|
-
/**
|
|
64
|
-
* 消息发送内容类型
|
|
65
|
-
*/
|
|
66
|
-
export type SendContent=MaybeArray<string|MessageElement>
|
|
67
|
-
|
|
68
|
-
/** 出站回复来源(指令 / AI),仅当经 MessageDispatcher.replyWithPolish 发出时由框架填入异步上下文 */
|
|
69
|
-
export type OutboundReplySource = 'command' | 'ai'
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* 出站润色上下文(`dispatcher.addOutboundPolish` 的 handler 签名的同构类型)。
|
|
73
|
-
* 与 {@link Adapter.sendMessage} → `before.sendMessage` 同一管道;需 `message`/`source` 时见 `getOutboundReplyStore`(dispatcher 导出)。
|
|
74
|
-
*/
|
|
75
|
-
export interface OutboundPolishContext {
|
|
76
|
-
message: Message
|
|
77
|
-
content: SendContent
|
|
78
|
-
source: OutboundReplySource
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** 返回 `SendContent` 则替换后续 `before.sendMessage` 与发送中的 content */
|
|
82
|
-
export type OutboundPolishMiddleware = (ctx: OutboundPolishContext) => MaybePromise<SendContent | void>
|
|
83
|
-
/**
|
|
84
|
-
* 消息发送者信息
|
|
85
|
-
*/
|
|
86
|
-
export interface MessageSender{
|
|
87
|
-
id: string;
|
|
88
|
-
name?: string;
|
|
89
|
-
permissions?:string[]
|
|
90
|
-
/** 平台侧角色标识(owner / admin / member 等) */
|
|
91
|
-
role?: string;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* 通用字典类型
|
|
95
|
-
*/
|
|
96
|
-
export type Dict<V=any,K extends string|symbol=string>=Record<K, V>;
|
|
97
|
-
/**
|
|
98
|
-
* 用户信息结构
|
|
99
|
-
*/
|
|
100
|
-
export interface UserInfo {
|
|
101
|
-
user_id: string;
|
|
102
|
-
nickname: string;
|
|
103
|
-
card?: string;
|
|
104
|
-
role?: string;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// PermissionService and ConfigService are now exported from their respective
|
|
108
|
-
// built files as backward-compatible aliases for PermissionFeature / ConfigFeature.
|
|
109
|
-
/**
|
|
110
|
-
* 群组信息结构
|
|
111
|
-
*/
|
|
112
|
-
export interface Group {
|
|
113
|
-
group_id: string;
|
|
114
|
-
group_name: string;
|
|
115
|
-
member_count: number;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/** 消息中间件函数 */
|
|
119
|
-
export type MessageMiddleware<P extends RegisteredAdapter=RegisteredAdapter> = (message: Message<AdapterMessage<P>>, next: () => Promise<void>) => MaybePromise<void>;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* defineConfig辅助类型,支持函数式/对象式配置
|
|
124
|
-
*/
|
|
125
|
-
export type DefineConfig<T> = T | ((env:Record<string,string>)=>MaybePromise<T>);
|
|
126
|
-
|
|
127
|
-
export interface SendOptions extends MessageChannel{
|
|
128
|
-
context:string
|
|
129
|
-
bot:string
|
|
130
|
-
content:SendContent
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// export type PermissionChecker<T extends RegisteredAdapter = RegisteredAdapter> = (name: string, message: Message<AdapterMessage<T>>) => MaybePromise<boolean>
|
|
134
|
-
// export type PermissionItem<T extends RegisteredAdapter = RegisteredAdapter> = {
|
|
135
|
-
// name: string | RegExp
|
|
136
|
-
// check: PermissionChecker<T>
|
|
137
|
-
// }
|
|
138
|
-
export interface ProcessMessage {
|
|
139
|
-
type: string;
|
|
140
|
-
pid?: number;
|
|
141
|
-
body: any;
|
|
142
|
-
}
|
|
143
|
-
export type QueueItem = {
|
|
144
|
-
action: string;
|
|
145
|
-
payload: any;
|
|
146
|
-
};
|
|
147
|
-
export type BeforeSendHandler=(options:SendOptions)=>MaybePromise<SendOptions|void>
|
|
148
|
-
|
|
149
|
-
// ============================================================================
|
|
150
|
-
// 统一 Tool 类型定义
|
|
151
|
-
// 支持 AI Agent 调用和自动转换为 Command
|
|
152
|
-
// ============================================================================
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* JSON Schema 定义,用于描述工具参数
|
|
156
|
-
*/
|
|
157
|
-
/** ToolContext 中可自动注入的字段名 */
|
|
158
|
-
export type ContextInjectableKey = 'platform' | 'botId' | 'sceneId' | 'senderId' | 'scope';
|
|
159
|
-
|
|
160
|
-
export interface ToolJsonSchema {
|
|
161
|
-
type: string;
|
|
162
|
-
properties?: Record<string, ToolJsonSchema & {
|
|
163
|
-
/** 参数类型提示,用于命令解析 */
|
|
164
|
-
paramType?: 'text' | 'number' | 'boolean' | 'rest';
|
|
165
|
-
}>;
|
|
166
|
-
required?: string[];
|
|
167
|
-
items?: ToolJsonSchema;
|
|
168
|
-
enum?: any[];
|
|
169
|
-
description?: string;
|
|
170
|
-
default?: any;
|
|
171
|
-
/**
|
|
172
|
-
* 自动从 ToolContext 注入的字段名。
|
|
173
|
-
* 设置后该参数对 AI 隐藏,执行时自动从上下文填充。
|
|
174
|
-
* 例如: contextKey: 'botId' → 执行时自动填入 context.botId
|
|
175
|
-
*/
|
|
176
|
-
contextKey?: ContextInjectableKey;
|
|
177
|
-
[key: string]: any;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// ============================================================================
|
|
181
|
-
// 类型反射工具类型
|
|
182
|
-
// ============================================================================
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* 从 TypeScript 类型推断 JSON Schema 的 type 字段
|
|
186
|
-
*/
|
|
187
|
-
type InferSchemaType<T> =
|
|
188
|
-
T extends string ? 'string' :
|
|
189
|
-
T extends number ? 'number' :
|
|
190
|
-
T extends boolean ? 'boolean' :
|
|
191
|
-
T extends any[] ? 'array' :
|
|
192
|
-
T extends object ? 'object' :
|
|
193
|
-
'string';
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* 单个属性的 Schema 定义
|
|
197
|
-
*/
|
|
198
|
-
export interface PropertySchema<T = any> extends ToolJsonSchema {
|
|
199
|
-
type: InferSchemaType<T>;
|
|
200
|
-
description?: string;
|
|
201
|
-
default?: T;
|
|
202
|
-
enum?: T extends string | number ? T[] : never;
|
|
203
|
-
paramType?: 'text' | 'number' | 'boolean' | 'rest';
|
|
204
|
-
/** 自动从 ToolContext 注入的字段名(继承自 ToolJsonSchema) */
|
|
205
|
-
contextKey?: ContextInjectableKey;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* 从 TArgs 构建 properties 类型
|
|
210
|
-
* 每个属性的 key 必须与 TArgs 的 key 一致
|
|
211
|
-
*/
|
|
212
|
-
type ToolPropertiesSchema<TArgs extends Record<string, any>> = {
|
|
213
|
-
[K in keyof TArgs]: PropertySchema<TArgs[K]>;
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* 提取必需的属性名
|
|
218
|
-
* 通过检查属性是否可以为 undefined 来判断
|
|
219
|
-
*/
|
|
220
|
-
type RequiredKeys<T> = {
|
|
221
|
-
[K in keyof T]-?: undefined extends T[K] ? never : K;
|
|
222
|
-
}[keyof T];
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* 带类型反射的参数 Schema
|
|
226
|
-
* @template TArgs 参数类型
|
|
227
|
-
*/
|
|
228
|
-
export interface ToolParametersSchema<TArgs extends Record<string, any> = Record<string, any>> {
|
|
229
|
-
type: 'object';
|
|
230
|
-
/** 属性定义,key 与 TArgs 的 key 一致 */
|
|
231
|
-
properties: ToolPropertiesSchema<TArgs>;
|
|
232
|
-
/** 必需的属性列表 */
|
|
233
|
-
required?: (keyof TArgs & string)[];
|
|
234
|
-
/** 描述 */
|
|
235
|
-
description?: string;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* 工具执行上下文
|
|
240
|
-
* 包含消息来源、发送者等 IM 信息。
|
|
241
|
-
* 通用(IM 无关)版本请使用 @zhin.js/ai 的 ToolContext。
|
|
242
|
-
*/
|
|
243
|
-
export interface ToolContext {
|
|
244
|
-
/** 来源平台 */
|
|
245
|
-
platform?: string;
|
|
246
|
-
/** 来源 Bot */
|
|
247
|
-
botId?: string;
|
|
248
|
-
/** 场景 ID(群号/频道ID/私聊用户ID) */
|
|
249
|
-
sceneId?: string;
|
|
250
|
-
/** 发送者 ID */
|
|
251
|
-
senderId?: string;
|
|
252
|
-
/** 原始消息对象(如果从消息触发) */
|
|
253
|
-
message?: Message<any>;
|
|
254
|
-
/**
|
|
255
|
-
* 消息场景类型
|
|
256
|
-
* private: 私聊, group: 群聊, channel: 频道
|
|
257
|
-
*/
|
|
258
|
-
scope?: ToolScope;
|
|
259
|
-
/**
|
|
260
|
-
* 发送者权限级别
|
|
261
|
-
* 用于工具权限过滤
|
|
262
|
-
*/
|
|
263
|
-
senderPermissionLevel?: ToolPermissionLevel;
|
|
264
|
-
/**
|
|
265
|
-
* 发送者是否为群管理员
|
|
266
|
-
*/
|
|
267
|
-
isGroupAdmin?: boolean;
|
|
268
|
-
/**
|
|
269
|
-
* 发送者是否为群主
|
|
270
|
-
*/
|
|
271
|
-
isGroupOwner?: boolean;
|
|
272
|
-
/**
|
|
273
|
-
* 发送者是否为机器人管理员
|
|
274
|
-
*/
|
|
275
|
-
isBotAdmin?: boolean;
|
|
276
|
-
/**
|
|
277
|
-
* 发送者是否为 Zhin 拥有者
|
|
278
|
-
*/
|
|
279
|
-
isOwner?: boolean;
|
|
280
|
-
/** 额外数据 */
|
|
281
|
-
extra?: Record<string, any>;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* 统一的 Tool 定义
|
|
286
|
-
* 可同时用于:
|
|
287
|
-
* - AI Agent 工具调用
|
|
288
|
-
* - 自动生成 Command
|
|
289
|
-
* - MCP 工具暴露
|
|
290
|
-
*
|
|
291
|
-
* @example
|
|
292
|
-
* ```typescript
|
|
293
|
-
* // 使用 defineTool 获得类型安全
|
|
294
|
-
* const weatherTool = defineTool<{ city: string }>({
|
|
295
|
-
* name: 'weather',
|
|
296
|
-
* description: '查询天气',
|
|
297
|
-
* parameters: {
|
|
298
|
-
* type: 'object',
|
|
299
|
-
* properties: {
|
|
300
|
-
* city: { type: 'string', description: '城市名称' }
|
|
301
|
-
* },
|
|
302
|
-
* required: ['city']
|
|
303
|
-
* },
|
|
304
|
-
* execute: async (args) => {
|
|
305
|
-
* return `${args.city} 的天气是晴天`; // args.city 有类型提示
|
|
306
|
-
* },
|
|
307
|
-
* });
|
|
308
|
-
*
|
|
309
|
-
* plugin.addTool(weatherTool); // 无需类型断言
|
|
310
|
-
* ```
|
|
311
|
-
*/
|
|
312
|
-
/**
|
|
313
|
-
* 消息场景类型
|
|
314
|
-
*/
|
|
315
|
-
export type ToolScope = 'private' | 'group' | 'channel';
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* 工具权限级别
|
|
319
|
-
* - user: 普通用户(默认)
|
|
320
|
-
* - group_admin: 群管理员
|
|
321
|
-
* - group_owner: 群主
|
|
322
|
-
* - bot_admin: 机器人管理员
|
|
323
|
-
* - owner: Zhin 拥有者(最高权限)
|
|
324
|
-
*/
|
|
325
|
-
export type ToolPermissionLevel = 'user' | 'group_admin' | 'group_owner' | 'bot_admin' | 'owner';
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* 标准化工具返回类型。
|
|
329
|
-
* execute 可返回以下任一形式:
|
|
330
|
-
* - string: 直接作为文本回复
|
|
331
|
-
* - { text: string }: 结构化文本
|
|
332
|
-
* - { data: unknown; format?: string }: 结构化数据
|
|
333
|
-
* - void/null/undefined: 无回复
|
|
334
|
-
* - Record / Array: 自动 JSON.stringify
|
|
335
|
-
*/
|
|
336
|
-
export type ToolResult = string | void | null | undefined | { text: string } | { data: unknown; format?: string } | Record<string, unknown> | unknown[];
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
* 统一的 Tool 定义(支持泛型参数类型推断)。
|
|
340
|
-
*
|
|
341
|
-
* @template TArgs 参数类型,默认 Record<string, any>
|
|
342
|
-
*
|
|
343
|
-
* @example
|
|
344
|
-
* ```typescript
|
|
345
|
-
* // 无泛型 — 兼容旧代码
|
|
346
|
-
* const tool: Tool = { name: 'ping', ... };
|
|
347
|
-
*
|
|
348
|
-
* // 有泛型 — 通过 defineTool 获得类型安全
|
|
349
|
-
* const tool = defineTool<{ city: string }>({
|
|
350
|
-
* name: 'weather',
|
|
351
|
-
* parameters: { type: 'object', properties: { city: { type: 'string', description: '城市' } }, required: ['city'] },
|
|
352
|
-
* execute: async (args) => args.city, // args.city 有类型提示
|
|
353
|
-
* });
|
|
354
|
-
* ```
|
|
355
|
-
*/
|
|
356
|
-
export interface Tool<TArgs extends Record<string, any> = Record<string, any>> {
|
|
357
|
-
/** 工具名称(唯一标识,建议使用 snake_case) */
|
|
358
|
-
name: string;
|
|
359
|
-
|
|
360
|
-
/** 工具描述(供 AI 和帮助系统使用) */
|
|
361
|
-
description: string;
|
|
362
|
-
|
|
363
|
-
/** 参数定义(JSON Schema 格式) */
|
|
364
|
-
parameters: ToolParametersSchema<TArgs>;
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* 工具执行函数
|
|
368
|
-
* @param args 解析后的参数
|
|
369
|
-
* @param context 执行上下文(包含消息、发送者等信息)
|
|
370
|
-
* @returns 执行结果
|
|
371
|
-
*/
|
|
372
|
-
execute: (args: TArgs, context?: ToolContext) => MaybePromise<ToolResult>;
|
|
373
|
-
|
|
374
|
-
/** 工具来源标识(自动填充:adapter:xxx / plugin:xxx) */
|
|
375
|
-
source?: string;
|
|
376
|
-
|
|
377
|
-
/** 工具标签(用于分类和过滤) */
|
|
378
|
-
tags?: string[];
|
|
379
|
-
|
|
380
|
-
/** 触发关键词(用户消息包含这些词时优先选择此工具) */
|
|
381
|
-
keywords?: string[];
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* 命令配置(可选)
|
|
385
|
-
* 如果不提供,会根据 parameters 自动生成命令模式
|
|
386
|
-
* 如果设置为 false,则不生成命令
|
|
387
|
-
*/
|
|
388
|
-
command?: Tool.CommandConfig | false;
|
|
389
|
-
|
|
390
|
-
/**
|
|
391
|
-
* 权限要求(旧版,保留兼容)
|
|
392
|
-
* 执行此工具需要的权限列表
|
|
393
|
-
*/
|
|
394
|
-
permissions?: string[];
|
|
395
|
-
|
|
396
|
-
/**
|
|
397
|
-
* 支持的平台列表
|
|
398
|
-
* 例如:['qq', 'telegram', 'discord']
|
|
399
|
-
* 不填则支持所有平台
|
|
400
|
-
*/
|
|
401
|
-
platforms?: string[];
|
|
402
|
-
|
|
403
|
-
/**
|
|
404
|
-
* 支持的场景列表
|
|
405
|
-
* 例如:['private', 'group', 'channel']
|
|
406
|
-
* 不填则支持所有场景
|
|
407
|
-
*/
|
|
408
|
-
scopes?: ToolScope[];
|
|
409
|
-
|
|
410
|
-
/**
|
|
411
|
-
* 调用所需的最低权限级别
|
|
412
|
-
* 默认为 'user'(普通用户可调用)
|
|
413
|
-
*/
|
|
414
|
-
permissionLevel?: ToolPermissionLevel;
|
|
415
|
-
|
|
416
|
-
/**
|
|
417
|
-
* 是否隐藏
|
|
418
|
-
* 隐藏的工具不会出现在帮助列表中,但仍可被调用
|
|
419
|
-
*/
|
|
420
|
-
hidden?: boolean;
|
|
421
|
-
|
|
422
|
-
/**
|
|
423
|
-
* 是否允许预执行(opt-in)
|
|
424
|
-
* 仅当设置为 true 时,Agent 才会在 LLM 调用前自动预执行此工具并将结果注入上下文。
|
|
425
|
-
* 适用于无副作用的只读工具(如获取系统状态、读取配置等)。
|
|
426
|
-
* 默认为 false,即不预执行。
|
|
427
|
-
*/
|
|
428
|
-
preExecutable?: boolean;
|
|
429
|
-
|
|
430
|
-
/** 工具分类(如 file / shell / web),用于展示与 TOOLS.md 协同 */
|
|
431
|
-
kind?: string;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
/**
|
|
435
|
-
* @deprecated 使用 `Tool<TArgs>` 替代。Tool 已原生支持泛型。
|
|
436
|
-
*/
|
|
437
|
-
export type ToolDefinition<TArgs extends Record<string, any> = Record<string, any>> = Tool<TArgs>;
|
|
438
|
-
|
|
439
|
-
export namespace Tool {
|
|
440
|
-
/**
|
|
441
|
-
* 命令配置
|
|
442
|
-
*/
|
|
443
|
-
export interface CommandConfig {
|
|
444
|
-
/**
|
|
445
|
-
* 自定义命令模式
|
|
446
|
-
* 如果不提供,会根据 parameters 自动生成
|
|
447
|
-
* @example 'weather <city>' | 'calc <expression:text>'
|
|
448
|
-
*/
|
|
449
|
-
pattern?: string;
|
|
450
|
-
|
|
451
|
-
/** 命令别名 */
|
|
452
|
-
alias?: string[];
|
|
453
|
-
|
|
454
|
-
/** 命令使用说明 */
|
|
455
|
-
usage?: string[];
|
|
456
|
-
|
|
457
|
-
/** 命令示例 */
|
|
458
|
-
examples?: string[];
|
|
459
|
-
|
|
460
|
-
/** 是否启用(默认 true) */
|
|
461
|
-
enabled?: boolean;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
/**
|
|
465
|
-
* 参数信息
|
|
466
|
-
*/
|
|
467
|
-
export interface ParamInfo {
|
|
468
|
-
name: string;
|
|
469
|
-
type: string;
|
|
470
|
-
required: boolean;
|
|
471
|
-
description?: string;
|
|
472
|
-
default?: any;
|
|
473
|
-
enum?: any[];
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
// ============================================================================
|
|
478
|
-
// 插件清单(plugin.yml)
|
|
479
|
-
// ============================================================================
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* 插件清单元数据(从 plugin.yml 解析)
|
|
483
|
-
*/
|
|
484
|
-
export interface PluginManifest {
|
|
485
|
-
/** 插件名称 */
|
|
486
|
-
name: string;
|
|
487
|
-
/** 插件描述 */
|
|
488
|
-
description?: string;
|
|
489
|
-
/** 插件版本 */
|
|
490
|
-
version?: string;
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
// ============================================================================
|
|
494
|
-
// 兼容性别名(逐步废弃)
|
|
495
|
-
// ============================================================================
|
|
496
|
-
|
|
497
|
-
/** @deprecated 使用 Tool 替代 */
|
|
498
|
-
export type AITool = Tool;
|
|
499
|
-
|
|
500
|
-
/**
|
|
501
|
-
* IMToolContext — ToolContext 的显式 IM 别名。
|
|
502
|
-
* 当同时使用 @zhin.js/ai (通用 ToolContext) 和 @zhin.js/core (IM ToolContext) 时,
|
|
503
|
-
* 用此类型消除歧义。
|
|
504
|
-
*/
|
|
505
|
-
export type IMToolContext = ToolContext;
|