@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.
Files changed (126) hide show
  1. package/lib/adapter.d.ts +1 -26
  2. package/lib/adapter.d.ts.map +1 -1
  3. package/lib/adapter.js +20 -117
  4. package/lib/adapter.js.map +1 -1
  5. package/lib/ai/index.d.ts +2 -0
  6. package/lib/ai/index.d.ts.map +1 -1
  7. package/lib/ai/index.js +1 -0
  8. package/lib/ai/index.js.map +1 -1
  9. package/lib/built/adapter-process.d.ts +0 -4
  10. package/lib/built/adapter-process.d.ts.map +1 -1
  11. package/lib/built/adapter-process.js +0 -95
  12. package/lib/built/adapter-process.js.map +1 -1
  13. package/lib/built/agent-preset.d.ts +2 -0
  14. package/lib/built/agent-preset.d.ts.map +1 -1
  15. package/lib/built/agent-preset.js +4 -0
  16. package/lib/built/agent-preset.js.map +1 -1
  17. package/lib/built/command.d.ts +4 -0
  18. package/lib/built/command.d.ts.map +1 -1
  19. package/lib/built/command.js +6 -0
  20. package/lib/built/command.js.map +1 -1
  21. package/lib/built/component.d.ts.map +1 -1
  22. package/lib/built/component.js +1 -0
  23. package/lib/built/component.js.map +1 -1
  24. package/lib/built/dispatcher.d.ts.map +1 -1
  25. package/lib/built/dispatcher.js +0 -13
  26. package/lib/built/dispatcher.js.map +1 -1
  27. package/lib/built/message-filter.d.ts +2 -0
  28. package/lib/built/message-filter.d.ts.map +1 -1
  29. package/lib/built/message-filter.js +5 -0
  30. package/lib/built/message-filter.js.map +1 -1
  31. package/lib/built/skill.d.ts +11 -0
  32. package/lib/built/skill.d.ts.map +1 -1
  33. package/lib/built/skill.js +14 -0
  34. package/lib/built/skill.js.map +1 -1
  35. package/lib/built/tool.d.ts +11 -44
  36. package/lib/built/tool.d.ts.map +1 -1
  37. package/lib/built/tool.js +14 -353
  38. package/lib/built/tool.js.map +1 -1
  39. package/lib/plugin.d.ts +1 -25
  40. package/lib/plugin.d.ts.map +1 -1
  41. package/lib/plugin.js +1 -77
  42. package/lib/plugin.js.map +1 -1
  43. package/lib/types.d.ts +0 -25
  44. package/lib/types.d.ts.map +1 -1
  45. package/package.json +10 -7
  46. package/CHANGELOG.md +0 -538
  47. package/REFACTORING_COMPLETE.md +0 -178
  48. package/REFACTORING_STATUS.md +0 -263
  49. package/src/adapter.ts +0 -275
  50. package/src/ai/index.ts +0 -52
  51. package/src/ai/providers/anthropic.ts +0 -379
  52. package/src/ai/providers/base.ts +0 -175
  53. package/src/ai/providers/index.ts +0 -13
  54. package/src/ai/providers/ollama.ts +0 -302
  55. package/src/ai/providers/openai.ts +0 -174
  56. package/src/ai/types.ts +0 -348
  57. package/src/bot.ts +0 -37
  58. package/src/built/adapter-process.ts +0 -177
  59. package/src/built/agent-preset.ts +0 -136
  60. package/src/built/ai-trigger.ts +0 -259
  61. package/src/built/command.ts +0 -108
  62. package/src/built/common-adapter-tools.ts +0 -242
  63. package/src/built/component.ts +0 -130
  64. package/src/built/config.ts +0 -335
  65. package/src/built/cron.ts +0 -156
  66. package/src/built/database.ts +0 -134
  67. package/src/built/dispatcher.ts +0 -496
  68. package/src/built/login-assist.ts +0 -131
  69. package/src/built/message-filter.ts +0 -390
  70. package/src/built/permission.ts +0 -151
  71. package/src/built/schema-feature.ts +0 -190
  72. package/src/built/skill.ts +0 -221
  73. package/src/built/tool.ts +0 -948
  74. package/src/command.ts +0 -87
  75. package/src/component.ts +0 -565
  76. package/src/cron.ts +0 -4
  77. package/src/errors.ts +0 -46
  78. package/src/feature.ts +0 -7
  79. package/src/index.ts +0 -53
  80. package/src/jsx-dev-runtime.ts +0 -2
  81. package/src/jsx-runtime.ts +0 -12
  82. package/src/jsx.ts +0 -135
  83. package/src/message.ts +0 -48
  84. package/src/models/system-log.ts +0 -20
  85. package/src/models/user.ts +0 -15
  86. package/src/notice.ts +0 -98
  87. package/src/plugin.ts +0 -896
  88. package/src/prompt.ts +0 -293
  89. package/src/request.ts +0 -95
  90. package/src/scheduler/index.ts +0 -19
  91. package/src/scheduler/scheduler.ts +0 -372
  92. package/src/scheduler/types.ts +0 -74
  93. package/src/tool-zod.ts +0 -115
  94. package/src/types-generator.ts +0 -78
  95. package/src/types.ts +0 -505
  96. package/src/utils.ts +0 -227
  97. package/tests/adapter.test.ts +0 -638
  98. package/tests/ai/ai-trigger.test.ts +0 -368
  99. package/tests/ai/providers.integration.test.ts +0 -227
  100. package/tests/ai/setup.ts +0 -308
  101. package/tests/ai/tool.test.ts +0 -800
  102. package/tests/bot.test.ts +0 -151
  103. package/tests/command.test.ts +0 -737
  104. package/tests/component-new.test.ts +0 -361
  105. package/tests/config.test.ts +0 -372
  106. package/tests/cron.test.ts +0 -82
  107. package/tests/dispatcher.test.ts +0 -293
  108. package/tests/errors.test.ts +0 -21
  109. package/tests/expression-evaluation.test.ts +0 -258
  110. package/tests/features-builtin.test.ts +0 -191
  111. package/tests/jsx-runtime.test.ts +0 -45
  112. package/tests/jsx.test.ts +0 -319
  113. package/tests/message-filter.test.ts +0 -566
  114. package/tests/message.test.ts +0 -402
  115. package/tests/notice.test.ts +0 -198
  116. package/tests/plugin.test.ts +0 -779
  117. package/tests/prompt.test.ts +0 -78
  118. package/tests/redos-protection.test.ts +0 -198
  119. package/tests/request.test.ts +0 -221
  120. package/tests/schema.test.ts +0 -248
  121. package/tests/skill-feature.test.ts +0 -179
  122. package/tests/test-utils.ts +0 -59
  123. package/tests/tool-feature.test.ts +0 -254
  124. package/tests/types.test.ts +0 -162
  125. package/tests/utils.test.ts +0 -135
  126. 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;