@zhin.js/core 1.0.36 → 1.0.38

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 (196) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +57 -3
  3. package/lib/adapter.d.ts +11 -0
  4. package/lib/adapter.d.ts.map +1 -1
  5. package/lib/adapter.js +61 -0
  6. package/lib/adapter.js.map +1 -1
  7. package/lib/ai/index.d.ts +3 -39
  8. package/lib/ai/index.d.ts.map +1 -1
  9. package/lib/ai/index.js +2 -44
  10. package/lib/ai/index.js.map +1 -1
  11. package/lib/ai/types.d.ts +4 -3
  12. package/lib/ai/types.d.ts.map +1 -1
  13. package/lib/built/ai-trigger.js.map +1 -1
  14. package/lib/built/common-adapter-tools.d.ts +55 -0
  15. package/lib/built/common-adapter-tools.d.ts.map +1 -0
  16. package/lib/built/common-adapter-tools.js +158 -0
  17. package/lib/built/common-adapter-tools.js.map +1 -0
  18. package/lib/built/dispatcher.d.ts.map +1 -1
  19. package/lib/built/dispatcher.js +50 -46
  20. package/lib/built/dispatcher.js.map +1 -1
  21. package/lib/built/skill.d.ts.map +1 -1
  22. package/lib/built/skill.js +0 -1
  23. package/lib/built/skill.js.map +1 -1
  24. package/lib/built/tool.d.ts +3 -3
  25. package/lib/built/tool.d.ts.map +1 -1
  26. package/lib/built/tool.js.map +1 -1
  27. package/lib/feature.d.ts +16 -1
  28. package/lib/feature.d.ts.map +1 -1
  29. package/lib/feature.js +41 -2
  30. package/lib/feature.js.map +1 -1
  31. package/lib/index.d.ts +1 -0
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +2 -0
  34. package/lib/index.js.map +1 -1
  35. package/lib/plugin.d.ts +38 -1
  36. package/lib/plugin.d.ts.map +1 -1
  37. package/lib/plugin.js +73 -22
  38. package/lib/plugin.js.map +1 -1
  39. package/lib/scheduler/scheduler.js +1 -1
  40. package/lib/scheduler/scheduler.js.map +1 -1
  41. package/lib/types.d.ts +43 -28
  42. package/lib/types.d.ts.map +1 -1
  43. package/lib/utils.d.ts +12 -3
  44. package/lib/utils.d.ts.map +1 -1
  45. package/lib/utils.js +64 -54
  46. package/lib/utils.js.map +1 -1
  47. package/package.json +5 -5
  48. package/src/adapter.ts +85 -5
  49. package/src/ai/index.ts +8 -186
  50. package/src/ai/types.ts +5 -4
  51. package/src/built/ai-trigger.ts +2 -2
  52. package/src/built/common-adapter-tools.ts +207 -0
  53. package/src/built/dispatcher.ts +51 -52
  54. package/src/built/skill.ts +3 -4
  55. package/src/built/tool.ts +3 -3
  56. package/src/feature.ts +45 -2
  57. package/src/index.ts +2 -0
  58. package/src/plugin.ts +92 -31
  59. package/src/scheduler/scheduler.ts +1 -1
  60. package/src/types.ts +39 -28
  61. package/src/utils.ts +63 -52
  62. package/tests/ai/setup.ts +2 -2
  63. package/tests/utils.test.ts +1 -3
  64. package/lib/ai/agent.d.ts +0 -130
  65. package/lib/ai/agent.d.ts.map +0 -1
  66. package/lib/ai/agent.js +0 -684
  67. package/lib/ai/agent.js.map +0 -1
  68. package/lib/ai/bootstrap.d.ts +0 -91
  69. package/lib/ai/bootstrap.d.ts.map +0 -1
  70. package/lib/ai/bootstrap.js +0 -243
  71. package/lib/ai/bootstrap.js.map +0 -1
  72. package/lib/ai/builtin-tools.d.ts +0 -59
  73. package/lib/ai/builtin-tools.d.ts.map +0 -1
  74. package/lib/ai/builtin-tools.js +0 -777
  75. package/lib/ai/builtin-tools.js.map +0 -1
  76. package/lib/ai/compaction.d.ts +0 -132
  77. package/lib/ai/compaction.d.ts.map +0 -1
  78. package/lib/ai/compaction.js +0 -370
  79. package/lib/ai/compaction.js.map +0 -1
  80. package/lib/ai/context-manager.d.ts +0 -213
  81. package/lib/ai/context-manager.d.ts.map +0 -1
  82. package/lib/ai/context-manager.js +0 -313
  83. package/lib/ai/context-manager.js.map +0 -1
  84. package/lib/ai/conversation-memory.d.ts +0 -181
  85. package/lib/ai/conversation-memory.d.ts.map +0 -1
  86. package/lib/ai/conversation-memory.js +0 -581
  87. package/lib/ai/conversation-memory.js.map +0 -1
  88. package/lib/ai/cron-engine.d.ts +0 -92
  89. package/lib/ai/cron-engine.d.ts.map +0 -1
  90. package/lib/ai/cron-engine.js +0 -278
  91. package/lib/ai/cron-engine.js.map +0 -1
  92. package/lib/ai/follow-up.d.ts +0 -131
  93. package/lib/ai/follow-up.d.ts.map +0 -1
  94. package/lib/ai/follow-up.js +0 -265
  95. package/lib/ai/follow-up.js.map +0 -1
  96. package/lib/ai/hooks.d.ts +0 -143
  97. package/lib/ai/hooks.d.ts.map +0 -1
  98. package/lib/ai/hooks.js +0 -108
  99. package/lib/ai/hooks.js.map +0 -1
  100. package/lib/ai/init.d.ts +0 -30
  101. package/lib/ai/init.d.ts.map +0 -1
  102. package/lib/ai/init.js +0 -686
  103. package/lib/ai/init.js.map +0 -1
  104. package/lib/ai/output.d.ts +0 -93
  105. package/lib/ai/output.d.ts.map +0 -1
  106. package/lib/ai/output.js +0 -176
  107. package/lib/ai/output.js.map +0 -1
  108. package/lib/ai/rate-limiter.d.ts +0 -38
  109. package/lib/ai/rate-limiter.d.ts.map +0 -1
  110. package/lib/ai/rate-limiter.js +0 -86
  111. package/lib/ai/rate-limiter.js.map +0 -1
  112. package/lib/ai/service.d.ts +0 -88
  113. package/lib/ai/service.d.ts.map +0 -1
  114. package/lib/ai/service.js +0 -285
  115. package/lib/ai/service.js.map +0 -1
  116. package/lib/ai/session.d.ts +0 -186
  117. package/lib/ai/session.d.ts.map +0 -1
  118. package/lib/ai/session.js +0 -443
  119. package/lib/ai/session.js.map +0 -1
  120. package/lib/ai/subagent.d.ts +0 -50
  121. package/lib/ai/subagent.d.ts.map +0 -1
  122. package/lib/ai/subagent.js +0 -144
  123. package/lib/ai/subagent.js.map +0 -1
  124. package/lib/ai/tone-detector.d.ts +0 -19
  125. package/lib/ai/tone-detector.d.ts.map +0 -1
  126. package/lib/ai/tone-detector.js +0 -72
  127. package/lib/ai/tone-detector.js.map +0 -1
  128. package/lib/ai/tools.d.ts +0 -45
  129. package/lib/ai/tools.d.ts.map +0 -1
  130. package/lib/ai/tools.js +0 -206
  131. package/lib/ai/tools.js.map +0 -1
  132. package/lib/ai/user-profile.d.ts +0 -56
  133. package/lib/ai/user-profile.d.ts.map +0 -1
  134. package/lib/ai/user-profile.js +0 -130
  135. package/lib/ai/user-profile.js.map +0 -1
  136. package/lib/ai/zhin-agent/builtin-tools.d.ts +0 -17
  137. package/lib/ai/zhin-agent/builtin-tools.d.ts.map +0 -1
  138. package/lib/ai/zhin-agent/builtin-tools.js +0 -220
  139. package/lib/ai/zhin-agent/builtin-tools.js.map +0 -1
  140. package/lib/ai/zhin-agent/config.d.ts +0 -54
  141. package/lib/ai/zhin-agent/config.d.ts.map +0 -1
  142. package/lib/ai/zhin-agent/config.js +0 -76
  143. package/lib/ai/zhin-agent/config.js.map +0 -1
  144. package/lib/ai/zhin-agent/exec-policy.d.ts +0 -20
  145. package/lib/ai/zhin-agent/exec-policy.d.ts.map +0 -1
  146. package/lib/ai/zhin-agent/exec-policy.js +0 -71
  147. package/lib/ai/zhin-agent/exec-policy.js.map +0 -1
  148. package/lib/ai/zhin-agent/index.d.ts +0 -70
  149. package/lib/ai/zhin-agent/index.d.ts.map +0 -1
  150. package/lib/ai/zhin-agent/index.js +0 -404
  151. package/lib/ai/zhin-agent/index.js.map +0 -1
  152. package/lib/ai/zhin-agent/prompt.d.ts +0 -21
  153. package/lib/ai/zhin-agent/prompt.d.ts.map +0 -1
  154. package/lib/ai/zhin-agent/prompt.js +0 -111
  155. package/lib/ai/zhin-agent/prompt.js.map +0 -1
  156. package/lib/ai/zhin-agent/tool-collector.d.ts +0 -22
  157. package/lib/ai/zhin-agent/tool-collector.d.ts.map +0 -1
  158. package/lib/ai/zhin-agent/tool-collector.js +0 -218
  159. package/lib/ai/zhin-agent/tool-collector.js.map +0 -1
  160. package/src/ai/agent.ts +0 -812
  161. package/src/ai/bootstrap.ts +0 -309
  162. package/src/ai/builtin-tools.ts +0 -849
  163. package/src/ai/compaction.ts +0 -529
  164. package/src/ai/context-manager.ts +0 -440
  165. package/src/ai/conversation-memory.ts +0 -774
  166. package/src/ai/cron-engine.ts +0 -337
  167. package/src/ai/follow-up.ts +0 -357
  168. package/src/ai/hooks.ts +0 -223
  169. package/src/ai/init.ts +0 -762
  170. package/src/ai/output.ts +0 -261
  171. package/src/ai/rate-limiter.ts +0 -129
  172. package/src/ai/service.ts +0 -331
  173. package/src/ai/session.ts +0 -544
  174. package/src/ai/subagent.ts +0 -209
  175. package/src/ai/tone-detector.ts +0 -89
  176. package/src/ai/tools.ts +0 -218
  177. package/src/ai/user-profile.ts +0 -181
  178. package/src/ai/zhin-agent/builtin-tools.ts +0 -247
  179. package/src/ai/zhin-agent/config.ts +0 -113
  180. package/src/ai/zhin-agent/exec-policy.ts +0 -78
  181. package/src/ai/zhin-agent/index.ts +0 -512
  182. package/src/ai/zhin-agent/prompt.ts +0 -131
  183. package/src/ai/zhin-agent/tool-collector.ts +0 -243
  184. package/tests/ai/agent.test.ts +0 -614
  185. package/tests/ai/context-manager.test.ts +0 -413
  186. package/tests/ai/conversation-memory.test.ts +0 -128
  187. package/tests/ai/follow-up.test.ts +0 -175
  188. package/tests/ai/integration.test.ts +0 -584
  189. package/tests/ai/output.test.ts +0 -128
  190. package/tests/ai/rate-limiter.test.ts +0 -108
  191. package/tests/ai/session.test.ts +0 -375
  192. package/tests/ai/subagent.test.ts +0 -270
  193. package/tests/ai/tone-detector.test.ts +0 -80
  194. package/tests/ai/tools-builtin.test.ts +0 -346
  195. package/tests/ai/user-profile.test.ts +0 -73
  196. package/tests/ai/zhin-agent.test.ts +0 -177
package/src/ai/hooks.ts DELETED
@@ -1,223 +0,0 @@
1
- /**
2
- * AI Hooks — AI 生命周期事件钩子系统
3
- *
4
- * 借鉴 OpenClaw 的 Hooks 设计,提供可扩展的事件驱动钩子:
5
- *
6
- * - message:received — 收到消息时触发
7
- * - message:sent — 发送消息时触发
8
- * - session:compact — 会话压缩时触发
9
- * - session:new — 新建会话时触发
10
- * - agent:bootstrap — Agent 初始化时触发
11
- * - agent:tool-call — 工具调用时触发
12
- *
13
- * 钩子按注册顺序执行,错误不会中断其他钩子。
14
- */
15
-
16
- import { Logger } from '@zhin.js/logger';
17
-
18
- const logger = new Logger(null, 'AI-Hooks');
19
-
20
- // ============================================================================
21
- // 类型定义
22
- // ============================================================================
23
-
24
- /** 事件类型 */
25
- export type AIHookEventType =
26
- | 'message'
27
- | 'session'
28
- | 'agent'
29
- | 'tool';
30
-
31
- /** Hook 事件基础接口 */
32
- export interface AIHookEvent {
33
- /** 事件类型 */
34
- type: AIHookEventType;
35
- /** 具体动作 */
36
- action: string;
37
- /** 会话标识 */
38
- sessionId?: string;
39
- /** 附加上下文 */
40
- context: Record<string, unknown>;
41
- /** 事件时间戳 */
42
- timestamp: Date;
43
- /** 钩子可以推送消息到这个数组 */
44
- messages: string[];
45
- }
46
-
47
- /** 消息接收事件 */
48
- export interface MessageReceivedEvent extends AIHookEvent {
49
- type: 'message';
50
- action: 'received';
51
- context: {
52
- from: string;
53
- content: string;
54
- platform: string;
55
- channelId?: string;
56
- messageId?: string;
57
- };
58
- }
59
-
60
- /** 消息发送事件 */
61
- export interface MessageSentEvent extends AIHookEvent {
62
- type: 'message';
63
- action: 'sent';
64
- context: {
65
- to: string;
66
- content: string;
67
- success: boolean;
68
- error?: string;
69
- platform: string;
70
- };
71
- }
72
-
73
- /** 会话压缩事件 */
74
- export interface SessionCompactEvent extends AIHookEvent {
75
- type: 'session';
76
- action: 'compact';
77
- context: {
78
- compactedCount: number;
79
- savedTokens: number;
80
- summary: string;
81
- };
82
- }
83
-
84
- /** 会话新建事件 */
85
- export interface SessionNewEvent extends AIHookEvent {
86
- type: 'session';
87
- action: 'new';
88
- context: {
89
- previousSessionId?: string;
90
- };
91
- }
92
-
93
- /** Agent 初始化事件 */
94
- export interface AgentBootstrapEvent extends AIHookEvent {
95
- type: 'agent';
96
- action: 'bootstrap';
97
- context: {
98
- workspaceDir: string;
99
- toolCount: number;
100
- skillCount: number;
101
- bootstrapFiles: string[];
102
- };
103
- }
104
-
105
- /** 工具调用事件 */
106
- export interface ToolCallEvent extends AIHookEvent {
107
- type: 'tool';
108
- action: 'call';
109
- context: {
110
- toolName: string;
111
- args: Record<string, unknown>;
112
- result?: string;
113
- durationMs?: number;
114
- success: boolean;
115
- error?: string;
116
- };
117
- }
118
-
119
- /** Hook 处理函数 */
120
- export type AIHookHandler = (event: AIHookEvent) => Promise<void> | void;
121
-
122
- // ============================================================================
123
- // Hook 管理器
124
- // ============================================================================
125
-
126
- /** 按事件 key 存储的处理函数注册表 */
127
- const handlers = new Map<string, AIHookHandler[]>();
128
-
129
- /**
130
- * 注册 Hook 处理函数
131
- *
132
- * @param eventKey - 事件类型(如 'message')或具体动作(如 'message:received')
133
- * @param handler - 处理函数
134
- *
135
- * @example
136
- * ```ts
137
- * // 监听所有消息事件
138
- * registerAIHook('message', async (event) => {
139
- * console.log('消息事件:', event.action);
140
- * });
141
- *
142
- * // 只监听消息接收
143
- * registerAIHook('message:received', async (event) => {
144
- * console.log('收到消息:', event.context.content);
145
- * });
146
- * ```
147
- */
148
- export function registerAIHook(eventKey: string, handler: AIHookHandler): () => void {
149
- if (!handlers.has(eventKey)) {
150
- handlers.set(eventKey, []);
151
- }
152
- handlers.get(eventKey)!.push(handler);
153
-
154
- // 返回注销函数
155
- return () => unregisterAIHook(eventKey, handler);
156
- }
157
-
158
- /**
159
- * 注销 Hook 处理函数
160
- */
161
- export function unregisterAIHook(eventKey: string, handler: AIHookHandler): void {
162
- const eventHandlers = handlers.get(eventKey);
163
- if (!eventHandlers) return;
164
-
165
- const index = eventHandlers.indexOf(handler);
166
- if (index !== -1) eventHandlers.splice(index, 1);
167
- if (eventHandlers.length === 0) handlers.delete(eventKey);
168
- }
169
-
170
- /**
171
- * 清除所有 Hook(测试用)
172
- */
173
- export function clearAIHooks(): void {
174
- handlers.clear();
175
- }
176
-
177
- /**
178
- * 获取已注册的事件 key 列表(调试用)
179
- */
180
- export function getRegisteredAIHookKeys(): string[] {
181
- return Array.from(handlers.keys());
182
- }
183
-
184
- /**
185
- * 触发 Hook 事件
186
- *
187
- * 同时调用通用类型(如 'message')和具体动作(如 'message:received')的处理函数。
188
- * 处理函数按注册顺序执行,错误被捕获并记录,不影响其他处理函数。
189
- */
190
- export async function triggerAIHook(event: AIHookEvent): Promise<void> {
191
- const typeHandlers = handlers.get(event.type) ?? [];
192
- const specificHandlers = handlers.get(`${event.type}:${event.action}`) ?? [];
193
- const allHandlers = [...typeHandlers, ...specificHandlers];
194
-
195
- if (allHandlers.length === 0) return;
196
-
197
- for (const handler of allHandlers) {
198
- try {
199
- await handler(event);
200
- } catch (err: any) {
201
- logger.error(`Hook 错误 [${event.type}:${event.action}]: ${err.message}`);
202
- }
203
- }
204
- }
205
-
206
- /**
207
- * 创建 Hook 事件(辅助函数)
208
- */
209
- export function createAIHookEvent(
210
- type: AIHookEventType,
211
- action: string,
212
- sessionId?: string,
213
- context: Record<string, unknown> = {},
214
- ): AIHookEvent {
215
- return {
216
- type,
217
- action,
218
- sessionId,
219
- context,
220
- timestamp: new Date(),
221
- messages: [],
222
- };
223
- }