@zhin.js/ai 0.0.2 → 1.0.1

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 (94) hide show
  1. package/CHANGELOG.md +2 -7
  2. package/lib/agent.d.ts +54 -6
  3. package/lib/agent.d.ts.map +1 -1
  4. package/lib/agent.js +468 -116
  5. package/lib/agent.js.map +1 -1
  6. package/lib/compaction.d.ts +132 -0
  7. package/lib/compaction.d.ts.map +1 -0
  8. package/lib/compaction.js +370 -0
  9. package/lib/compaction.js.map +1 -0
  10. package/lib/context-manager.d.ts.map +1 -1
  11. package/lib/context-manager.js +10 -3
  12. package/lib/context-manager.js.map +1 -1
  13. package/lib/conversation-memory.d.ts +192 -0
  14. package/lib/conversation-memory.d.ts.map +1 -0
  15. package/lib/conversation-memory.js +619 -0
  16. package/lib/conversation-memory.js.map +1 -0
  17. package/lib/index.d.ts +25 -163
  18. package/lib/index.d.ts.map +1 -1
  19. package/lib/index.js +24 -1122
  20. package/lib/index.js.map +1 -1
  21. package/lib/output.d.ts +93 -0
  22. package/lib/output.d.ts.map +1 -0
  23. package/lib/output.js +176 -0
  24. package/lib/output.js.map +1 -0
  25. package/lib/providers/anthropic.d.ts +7 -0
  26. package/lib/providers/anthropic.d.ts.map +1 -1
  27. package/lib/providers/anthropic.js +5 -0
  28. package/lib/providers/anthropic.js.map +1 -1
  29. package/lib/providers/ollama.d.ts +10 -0
  30. package/lib/providers/ollama.d.ts.map +1 -1
  31. package/lib/providers/ollama.js +19 -4
  32. package/lib/providers/ollama.js.map +1 -1
  33. package/lib/providers/openai.d.ts +7 -0
  34. package/lib/providers/openai.d.ts.map +1 -1
  35. package/lib/providers/openai.js +11 -0
  36. package/lib/providers/openai.js.map +1 -1
  37. package/lib/rate-limiter.d.ts +38 -0
  38. package/lib/rate-limiter.d.ts.map +1 -0
  39. package/lib/rate-limiter.js +86 -0
  40. package/lib/rate-limiter.js.map +1 -0
  41. package/lib/session.d.ts +7 -0
  42. package/lib/session.d.ts.map +1 -1
  43. package/lib/session.js +47 -18
  44. package/lib/session.js.map +1 -1
  45. package/lib/storage.d.ts +68 -0
  46. package/lib/storage.d.ts.map +1 -0
  47. package/lib/storage.js +105 -0
  48. package/lib/storage.js.map +1 -0
  49. package/lib/tone-detector.d.ts +19 -0
  50. package/lib/tone-detector.d.ts.map +1 -0
  51. package/lib/tone-detector.js +72 -0
  52. package/lib/tone-detector.js.map +1 -0
  53. package/lib/types.d.ts +84 -8
  54. package/lib/types.d.ts.map +1 -1
  55. package/package.json +13 -42
  56. package/src/agent.ts +518 -135
  57. package/src/compaction.ts +529 -0
  58. package/src/context-manager.ts +10 -9
  59. package/src/conversation-memory.ts +816 -0
  60. package/src/index.ts +121 -1406
  61. package/src/output.ts +261 -0
  62. package/src/providers/anthropic.ts +4 -0
  63. package/src/providers/ollama.ts +23 -4
  64. package/src/providers/openai.ts +8 -1
  65. package/src/rate-limiter.ts +129 -0
  66. package/src/session.ts +47 -18
  67. package/src/storage.ts +135 -0
  68. package/src/tone-detector.ts +89 -0
  69. package/src/types.ts +95 -6
  70. package/tests/agent.test.ts +123 -70
  71. package/tests/compaction.test.ts +310 -0
  72. package/tests/context-manager.test.ts +73 -47
  73. package/tests/conversation-memory.test.ts +128 -0
  74. package/tests/output.test.ts +128 -0
  75. package/tests/providers.test.ts +574 -0
  76. package/tests/rate-limiter.test.ts +108 -0
  77. package/tests/session.test.ts +139 -48
  78. package/tests/setup.ts +82 -240
  79. package/tests/storage.test.ts +224 -0
  80. package/tests/tone-detector.test.ts +80 -0
  81. package/tsconfig.json +4 -5
  82. package/vitest.setup.ts +1 -0
  83. package/README.md +0 -564
  84. package/TOOLS.md +0 -294
  85. package/lib/tools.d.ts +0 -45
  86. package/lib/tools.d.ts.map +0 -1
  87. package/lib/tools.js +0 -194
  88. package/lib/tools.js.map +0 -1
  89. package/src/tools.ts +0 -205
  90. package/tests/ai-trigger.test.ts +0 -369
  91. package/tests/integration.test.ts +0 -596
  92. package/tests/providers.integration.test.ts +0 -227
  93. package/tests/tool.test.ts +0 -800
  94. package/tests/tools-builtin.test.ts +0 -346
package/lib/storage.js ADDED
@@ -0,0 +1,105 @@
1
+ /**
2
+ * StorageBackend — Unified storage abstraction layer
3
+ *
4
+ * Provides a common interface for AI sub-systems (session, context, memory,
5
+ * user profile, follow-up) to switch between in-memory and database backends
6
+ * without changing business logic.
7
+ *
8
+ * Usage:
9
+ * const backend = new MemoryStorageBackend<MyRecord>();
10
+ * // ... later, when DB is ready:
11
+ * const dbBackend = new DatabaseStorageBackend<MyRecord>(model, { keyField: 'session_id' });
12
+ * service.upgradeBackend(dbBackend);
13
+ */
14
+ /**
15
+ * In-memory storage backend.
16
+ */
17
+ export class MemoryStorageBackend {
18
+ type = 'memory';
19
+ data = new Map();
20
+ async get(key) {
21
+ return this.data.get(key) ?? null;
22
+ }
23
+ async set(key, value) {
24
+ this.data.set(key, value);
25
+ }
26
+ async delete(key) {
27
+ return this.data.delete(key);
28
+ }
29
+ async list(filter) {
30
+ const all = Array.from(this.data.values());
31
+ if (!filter)
32
+ return all;
33
+ return all.filter(item => {
34
+ for (const [k, v] of Object.entries(filter)) {
35
+ if (item[k] !== v)
36
+ return false;
37
+ }
38
+ return true;
39
+ });
40
+ }
41
+ async clear() {
42
+ this.data.clear();
43
+ }
44
+ }
45
+ /**
46
+ * Database-backed storage backend.
47
+ */
48
+ export class DatabaseStorageBackend {
49
+ model;
50
+ options;
51
+ type = 'database';
52
+ constructor(model, options) {
53
+ this.model = model;
54
+ this.options = options;
55
+ }
56
+ async get(key) {
57
+ const rows = await this.model
58
+ .select()
59
+ .where({ [this.options.keyField]: key });
60
+ return rows[0] ?? null;
61
+ }
62
+ async set(key, value) {
63
+ const existing = await this.get(key);
64
+ if (existing) {
65
+ await this.model
66
+ .update(value)
67
+ .where({ [this.options.keyField]: key });
68
+ }
69
+ else {
70
+ await this.model.create({ ...value, [this.options.keyField]: key });
71
+ }
72
+ }
73
+ async delete(key) {
74
+ try {
75
+ await this.model.delete({ [this.options.keyField]: key });
76
+ return true;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ async list(filter) {
83
+ if (filter) {
84
+ return this.model.select().where(filter);
85
+ }
86
+ return this.model.select();
87
+ }
88
+ async clear() {
89
+ const all = await this.list();
90
+ for (const item of all) {
91
+ const key = item[this.options.keyField];
92
+ if (key)
93
+ await this.delete(key);
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * Helper to create a swappable backend ref.
99
+ * Call `swap(newBackend)` to atomically upgrade from memory to database.
100
+ */
101
+ export function createSwappableBackend(initial) {
102
+ const ref = { backend: initial, swap: (next) => { ref.backend = next; } };
103
+ return ref;
104
+ }
105
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ToneDetector — 轻量级情绪/语气检测
3
+ *
4
+ * 通过标点符号、emoji 密度、关键词分析用户语气,
5
+ * 生成一条 hint 注入 system prompt,让 AI 的回复匹配用户情绪。
6
+ *
7
+ * 零 LLM 开销,纯正则/统计分析。
8
+ */
9
+ export type Tone = 'neutral' | 'frustrated' | 'excited' | 'questioning' | 'sad' | 'urgent';
10
+ interface ToneResult {
11
+ tone: Tone;
12
+ hint: string;
13
+ }
14
+ /**
15
+ * 检测用户消息的情绪语气
16
+ */
17
+ export declare function detectTone(message: string): ToneResult;
18
+ export {};
19
+ //# sourceMappingURL=tone-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tone-detector.d.ts","sourceRoot":"","sources":["../src/tone-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE3F,UAAU,UAAU;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAQD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA+DtD"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ToneDetector — 轻量级情绪/语气检测
3
+ *
4
+ * 通过标点符号、emoji 密度、关键词分析用户语气,
5
+ * 生成一条 hint 注入 system prompt,让 AI 的回复匹配用户情绪。
6
+ *
7
+ * 零 LLM 开销,纯正则/统计分析。
8
+ */
9
+ // 常见负面情绪词
10
+ const FRUSTRATED_WORDS = /不行|不对|又错|还是不|怎么回事|搞不定|烦死|崩溃|无语|什么鬼|bug|报错|失败|出问题/;
11
+ const SAD_WORDS = /难过|伤心|失落|遗憾|可惜|唉|哎|不开心|郁闷|心累/;
12
+ const URGENT_WORDS = /急|赶紧|马上|立刻|紧急|尽快|快点|asap|hurry/i;
13
+ const EXCITED_WORDS = /太好了|太棒了|厉害|牛|可以|成功|搞定|完美|赞|nice|amazing|awesome|cool/i;
14
+ /**
15
+ * 检测用户消息的情绪语气
16
+ */
17
+ export function detectTone(message) {
18
+ const len = message.length;
19
+ if (len === 0)
20
+ return { tone: 'neutral', hint: '' };
21
+ // 统计特征
22
+ const exclamations = (message.match(/!/g) || []).length + (message.match(/!/g) || []).length;
23
+ const questions = (message.match(/\?/g) || []).length + (message.match(/?/g) || []).length;
24
+ const ellipsis = (message.match(/\.\.\./g) || []).length + (message.match(/…/g) || []).length;
25
+ const capsRatio = len > 5 ? (message.match(/[A-Z]/g) || []).length / len : 0;
26
+ // emoji 检测(常见 Unicode 范围)
27
+ const emojiCount = (message.match(/[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F1E0}-\u{1F1FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/gu) || []).length;
28
+ // 关键词检测
29
+ const isFrustrated = FRUSTRATED_WORDS.test(message);
30
+ const isSad = SAD_WORDS.test(message);
31
+ const isUrgent = URGENT_WORDS.test(message);
32
+ const isExcited = EXCITED_WORDS.test(message);
33
+ // 判定优先级: frustrated > urgent > sad > excited > questioning > neutral
34
+ if (isFrustrated || (exclamations >= 3 && !isExcited)) {
35
+ return {
36
+ tone: 'frustrated',
37
+ hint: '用户似乎有些沮丧或受挫,请用耐心、理解的语气回复,先表示共情再提供帮助。',
38
+ };
39
+ }
40
+ if (isUrgent) {
41
+ return {
42
+ tone: 'urgent',
43
+ hint: '用户似乎很着急,请直接给出解决方案,减少寒暄,优先效率。',
44
+ };
45
+ }
46
+ if (isSad || ellipsis >= 2) {
47
+ return {
48
+ tone: 'sad',
49
+ hint: '用户的语气似乎有些低落,请用温暖、关心的语气回复。',
50
+ };
51
+ }
52
+ if (isExcited || (emojiCount >= 2 && exclamations >= 1)) {
53
+ return {
54
+ tone: 'excited',
55
+ hint: '用户的心情不错,可以用更活泼、热情的语气回复。',
56
+ };
57
+ }
58
+ if (questions >= 2 || (questions >= 1 && len < 20)) {
59
+ return {
60
+ tone: 'questioning',
61
+ hint: '', // 提问是正常的,不需要特殊 hint
62
+ };
63
+ }
64
+ if (capsRatio > 0.5 && len > 10) {
65
+ return {
66
+ tone: 'frustrated',
67
+ hint: '用户使用了大量大写字母,可能在表达强烈情绪,请注意语气。',
68
+ };
69
+ }
70
+ return { tone: 'neutral', hint: '' };
71
+ }
72
+ //# sourceMappingURL=tone-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tone-detector.js","sourceRoot":"","sources":["../src/tone-detector.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * 统一的 AI 服务类型定义
4
4
  */
5
5
  /** 消息角色 */
6
- export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
6
+ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool' | 'tool_call' | 'tool_result';
7
7
  /** 聊天消息 */
8
8
  export interface ChatMessage {
9
9
  role: MessageRole;
@@ -53,9 +53,10 @@ export interface JsonSchema {
53
53
  properties?: Record<string, JsonSchema>;
54
54
  required?: string[];
55
55
  items?: JsonSchema;
56
- enum?: any[];
56
+ enum?: unknown[];
57
57
  description?: string;
58
- default?: any;
58
+ default?: unknown;
59
+ /** JSON Schema allows arbitrary extension properties */
59
60
  [key: string]: any;
60
61
  }
61
62
  /** 聊天补全请求 */
@@ -77,6 +78,8 @@ export interface ChatCompletionRequest {
77
78
  presence_penalty?: number;
78
79
  frequency_penalty?: number;
79
80
  user?: string;
81
+ /** 是否启用模型思考(如 qwen3 的 <think> 模式)。设为 false 可跳过思考加速响应。 */
82
+ think?: boolean;
80
83
  }
81
84
  /** 聊天补全响应 */
82
85
  export interface ChatCompletionResponse {
@@ -114,14 +117,26 @@ export interface ChatCompletionChunkChoice {
114
117
  delta: Partial<ChatMessage>;
115
118
  finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;
116
119
  }
120
+ /** Provider 能力声明 */
121
+ export interface ProviderCapabilities {
122
+ vision?: boolean;
123
+ streaming?: boolean;
124
+ toolCalling?: boolean;
125
+ thinking?: boolean;
126
+ }
117
127
  /** Provider 配置 */
118
128
  export interface ProviderConfig {
119
129
  apiKey?: string;
120
130
  baseUrl?: string;
121
131
  defaultModel?: string;
132
+ models?: string[];
122
133
  timeout?: number;
123
134
  maxRetries?: number;
124
135
  headers?: Record<string, string>;
136
+ /** 上下文窗口大小(token 数),各 Provider 映射到自身参数 */
137
+ contextWindow?: number;
138
+ /** Provider 能力声明 */
139
+ capabilities?: ProviderCapabilities;
125
140
  }
126
141
  /** Provider 接口 */
127
142
  export interface AIProvider {
@@ -135,13 +150,56 @@ export interface AIProvider {
135
150
  listModels?(): Promise<string[]>;
136
151
  /** 检查连接 */
137
152
  healthCheck?(): Promise<boolean>;
153
+ /** 上下文窗口大小(token 数),由 Provider 实现暴露 */
154
+ contextWindow?: number;
155
+ /** Provider 能力声明 */
156
+ capabilities?: ProviderCapabilities;
157
+ }
158
+ /**
159
+ * 通用工具执行上下文。
160
+ *
161
+ * 定义了平台无关的字段,IM 应用通过 core 的 IMToolContext 扩展。
162
+ * 非 IM 应用可直接使用此接口。
163
+ */
164
+ export interface ToolContext {
165
+ /** 来源平台标识 */
166
+ platform?: string;
167
+ /** 发送者 ID */
168
+ senderId?: string;
169
+ /** 场景 / 频道 ID */
170
+ sceneId?: string;
171
+ /** 额外数据(应用自行扩展) */
172
+ [key: string]: unknown;
138
173
  }
139
174
  /** Agent 工具 */
140
175
  export interface AgentTool {
141
176
  name: string;
142
177
  description: string;
143
178
  parameters: JsonSchema;
144
- execute: (args: Record<string, any>) => Promise<any>;
179
+ execute: (args: Record<string, any>) => Promise<unknown>;
180
+ /** 工具标签,用于分类和快速匹配 */
181
+ tags?: string[];
182
+ /** 触发关键词,用户消息包含这些词时优先选择此工具 */
183
+ keywords?: string[];
184
+ /** 所需权限级别 (0=所有人, 1=群管理, 2=群主, 3=Bot管理员, 4=拥有者) */
185
+ permissionLevel?: number;
186
+ /** 是否允许预执行(opt-in),默认 false */
187
+ preExecutable?: boolean;
188
+ /** 工具分类(如 file / shell / web),用于 formatToolTitle 等展示 */
189
+ kind?: string;
190
+ }
191
+ /**
192
+ * 工具过滤选项
193
+ * 在 Agent.run() / runStream() 中启用程序化工具预过滤,
194
+ * 省去额外的 AI 意图分析往返
195
+ */
196
+ export interface ToolFilterOptions {
197
+ /** 调用者权限级别 (0-4),高于工具要求才能使用 */
198
+ callerPermissionLevel?: number;
199
+ /** 最大返回工具数量 (默认 10) */
200
+ maxTools?: number;
201
+ /** 最低相关性得分阈值,低于此分数的工具被过滤掉 (默认 0.1) */
202
+ minScore?: number;
145
203
  }
146
204
  /** Agent 配置 */
147
205
  export interface AgentConfig {
@@ -180,6 +238,12 @@ export interface Session {
180
238
  updatedAt: number;
181
239
  metadata?: Record<string, any>;
182
240
  }
241
+ /** Ollama-specific fields for AIConfig typing (mirrors OllamaConfig) */
242
+ export interface OllamaProviderConfig extends ProviderConfig {
243
+ host?: string;
244
+ models?: string[];
245
+ num_ctx?: number;
246
+ }
183
247
  /** AI 服务配置 */
184
248
  export interface AIConfig {
185
249
  enabled?: boolean;
@@ -190,10 +254,7 @@ export interface AIConfig {
190
254
  deepseek?: ProviderConfig;
191
255
  moonshot?: ProviderConfig;
192
256
  zhipu?: ProviderConfig;
193
- ollama?: ProviderConfig & {
194
- host?: string;
195
- models?: string[];
196
- };
257
+ ollama?: OllamaProviderConfig;
197
258
  custom?: ProviderConfig[];
198
259
  };
199
260
  sessions?: {
@@ -218,6 +279,21 @@ export interface AIConfig {
218
279
  /** 自定义总结提示词 */
219
280
  summaryPrompt?: string;
220
281
  };
282
+ /** Agent 工具开关与执行安全 */
283
+ agent?: {
284
+ /** 禁用的工具名列表,这些工具不会下发给 AI */
285
+ disabledTools?: string[];
286
+ /** 仅允许的工具名列表;若设置则只下发列表中的工具(与 disabledTools 二选一,allowedTools 优先) */
287
+ allowedTools?: string[];
288
+ /** bash 执行策略:deny=禁止执行,allowlist=仅允许列表内命令,full=不限制 */
289
+ execSecurity?: 'deny' | 'allowlist' | 'full';
290
+ /** 预设命令白名单模式:readonly / network / development / custom(默认 custom,使用自定义 execAllowlist) */
291
+ execPreset?: 'readonly' | 'network' | 'development' | 'custom';
292
+ /** allowlist 模式下允许的命令(支持正则字符串,如 "^ls "、"^cat "),与 preset 合并 */
293
+ execAllowlist?: string[];
294
+ /** allowlist 未命中时:true=需审批(当前实现为拒绝并提示),false=直接拒绝 */
295
+ execAsk?: boolean;
296
+ };
221
297
  /** AI 触发配置 */
222
298
  trigger?: {
223
299
  /** 是否启用(默认 true) */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,66 +1,37 @@
1
1
  {
2
2
  "name": "@zhin.js/ai",
3
- "version": "0.0.2",
4
- "description": "AI Service for Zhin.js - Multi-model LLM integration with Agent capabilities",
3
+ "version": "1.0.1",
4
+ "description": "Framework-agnostic AI engine: providers, agent loop, sessions, memory, compaction",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
10
  "types": "./lib/index.d.ts",
11
+ "development": "./src/index.ts",
11
12
  "import": "./lib/index.js"
12
- },
13
- "./providers/*": {
14
- "types": "./lib/providers/*.d.ts",
15
- "import": "./lib/providers/*.js"
16
13
  }
17
14
  },
18
- "keywords": [
19
- "zhin",
20
- "bot",
21
- "service",
22
- "ai",
23
- "llm",
24
- "openai",
25
- "claude",
26
- "anthropic",
27
- "deepseek",
28
- "ollama",
29
- "agent",
30
- "tool-use",
31
- "function-calling"
32
- ],
33
- "author": {
34
- "name": "lc-cn",
35
- "email": "admin@liucl.cn",
36
- "url": "https://github.com/lc-cn"
15
+ "dependencies": {
16
+ "@zhin.js/logger": "0.1.24"
17
+ },
18
+ "devDependencies": {
19
+ "@types/node": "^24.3.0",
20
+ "typescript": "^5.3.0",
21
+ "vitest": "^1.6.1"
37
22
  },
38
- "license": "MIT",
39
23
  "repository": {
40
- "url": "git+https://github.com/zhinjs/zhin.git",
41
24
  "type": "git",
25
+ "url": "git+https://github.com/zhinjs/zhin.git",
42
26
  "directory": "packages/ai"
43
27
  },
44
28
  "publishConfig": {
45
29
  "access": "public",
46
30
  "registry": "https://registry.npmjs.org"
47
31
  },
48
- "dependencies": {
49
- "eventsource-parser": "^3.0.0",
50
- "segment-matcher": "latest"
51
- },
52
- "peerDependencies": {
53
- "@zhin.js/core": "1.0.25",
54
- "@zhin.js/logger": "0.1.9"
55
- },
56
- "devDependencies": {
57
- "@types/node": "latest",
58
- "typescript": "^5.3.0",
59
- "@zhin.js/core": "1.0.25",
60
- "@zhin.js/logger": "0.1.9"
61
- },
62
32
  "scripts": {
63
33
  "build": "tsc",
64
- "clean": "rm -rf lib"
34
+ "clean": "rimraf lib",
35
+ "test": "vitest run --config ../../vitest.config.ts"
65
36
  }
66
37
  }