@zhin.js/core 1.1.0 → 1.1.3

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