@zhin.js/agent 0.1.25 → 0.1.27

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 (308) hide show
  1. package/README.md +1 -1
  2. package/lib/agent-prompt/registry.js +1 -1
  3. package/lib/agent-prompt/registry.js.map +1 -1
  4. package/lib/ai-event-bus.d.ts +19 -0
  5. package/lib/ai-event-bus.d.ts.map +1 -0
  6. package/lib/ai-event-bus.js +75 -0
  7. package/lib/ai-event-bus.js.map +1 -0
  8. package/lib/ai-event-subscriber.d.ts +38 -0
  9. package/lib/ai-event-subscriber.d.ts.map +1 -0
  10. package/lib/ai-event-subscriber.js +65 -0
  11. package/lib/ai-event-subscriber.js.map +1 -0
  12. package/lib/builtin/ask-user-tool.d.ts +2 -0
  13. package/lib/builtin/ask-user-tool.d.ts.map +1 -1
  14. package/lib/builtin/ask-user-tool.js +2 -0
  15. package/lib/builtin/ask-user-tool.js.map +1 -1
  16. package/lib/builtin/bash-tool.d.ts +7 -3
  17. package/lib/builtin/bash-tool.d.ts.map +1 -1
  18. package/lib/builtin/bash-tool.js +51 -9
  19. package/lib/builtin/bash-tool.js.map +1 -1
  20. package/lib/builtin/bing-search-html.d.ts.map +1 -1
  21. package/lib/builtin/bing-search-html.js +14 -7
  22. package/lib/builtin/bing-search-html.js.map +1 -1
  23. package/lib/builtin/builtin-base-tool.d.ts +2 -0
  24. package/lib/builtin/builtin-base-tool.d.ts.map +1 -1
  25. package/lib/builtin/builtin-base-tool.js +5 -0
  26. package/lib/builtin/builtin-base-tool.js.map +1 -1
  27. package/lib/builtin/edit-file-tool.d.ts +1 -1
  28. package/lib/builtin/edit-file-tool.d.ts.map +1 -1
  29. package/lib/builtin/edit-file-tool.js +33 -1
  30. package/lib/builtin/edit-file-tool.js.map +1 -1
  31. package/lib/builtin/file-edit-quote-utils.d.ts +1 -3
  32. package/lib/builtin/file-edit-quote-utils.d.ts.map +1 -1
  33. package/lib/builtin/file-edit-quote-utils.js +1 -3
  34. package/lib/builtin/file-edit-quote-utils.js.map +1 -1
  35. package/lib/builtin/glob-tool.d.ts +1 -1
  36. package/lib/builtin/glob-tool.d.ts.map +1 -1
  37. package/lib/builtin/glob-tool.js +15 -3
  38. package/lib/builtin/glob-tool.js.map +1 -1
  39. package/lib/builtin/grep-tool.d.ts +1 -1
  40. package/lib/builtin/grep-tool.d.ts.map +1 -1
  41. package/lib/builtin/grep-tool.js +16 -3
  42. package/lib/builtin/grep-tool.js.map +1 -1
  43. package/lib/builtin/list-dir-tool.d.ts +1 -1
  44. package/lib/builtin/list-dir-tool.d.ts.map +1 -1
  45. package/lib/builtin/list-dir-tool.js +14 -3
  46. package/lib/builtin/list-dir-tool.js.map +1 -1
  47. package/lib/builtin/read-file-tool.d.ts +1 -1
  48. package/lib/builtin/read-file-tool.d.ts.map +1 -1
  49. package/lib/builtin/read-file-tool.js +24 -3
  50. package/lib/builtin/read-file-tool.js.map +1 -1
  51. package/lib/builtin/run-deferred-task-tool.d.ts +3 -0
  52. package/lib/builtin/run-deferred-task-tool.d.ts.map +1 -1
  53. package/lib/builtin/run-deferred-task-tool.js +2 -0
  54. package/lib/builtin/run-deferred-task-tool.js.map +1 -1
  55. package/lib/builtin/spawn-task-tool.d.ts.map +1 -1
  56. package/lib/builtin/spawn-task-tool.js +2 -0
  57. package/lib/builtin/spawn-task-tool.js.map +1 -1
  58. package/lib/builtin/web-fetch-tool.d.ts +2 -2
  59. package/lib/builtin/web-fetch-tool.d.ts.map +1 -1
  60. package/lib/builtin/web-fetch-tool.js +12 -18
  61. package/lib/builtin/web-fetch-tool.js.map +1 -1
  62. package/lib/builtin/write-file-tool.d.ts +1 -1
  63. package/lib/builtin/write-file-tool.d.ts.map +1 -1
  64. package/lib/builtin/write-file-tool.js +33 -1
  65. package/lib/builtin/write-file-tool.js.map +1 -1
  66. package/lib/common-adapter-tools.d.ts +8 -41
  67. package/lib/common-adapter-tools.d.ts.map +1 -1
  68. package/lib/common-adapter-tools.js +23 -182
  69. package/lib/common-adapter-tools.js.map +1 -1
  70. package/lib/deferred-worker-runner.d.ts +13 -2
  71. package/lib/deferred-worker-runner.d.ts.map +1 -1
  72. package/lib/deferred-worker-runner.js +91 -13
  73. package/lib/deferred-worker-runner.js.map +1 -1
  74. package/lib/discovery/agents.js +1 -1
  75. package/lib/discovery/agents.js.map +1 -1
  76. package/lib/discovery/skills.js +1 -1
  77. package/lib/discovery/skills.js.map +1 -1
  78. package/lib/discovery/tools.d.ts +1 -1
  79. package/lib/discovery/tools.d.ts.map +1 -1
  80. package/lib/discovery/tools.js +17 -4
  81. package/lib/discovery/tools.js.map +1 -1
  82. package/lib/discovery/utils.js +1 -1
  83. package/lib/discovery/utils.js.map +1 -1
  84. package/lib/hooks.d.ts.map +1 -1
  85. package/lib/hooks.js +2 -0
  86. package/lib/hooks.js.map +1 -1
  87. package/lib/index.d.ts +9 -1
  88. package/lib/index.d.ts.map +1 -1
  89. package/lib/index.js +6 -0
  90. package/lib/index.js.map +1 -1
  91. package/lib/init/message-media.d.ts +3 -1
  92. package/lib/init/message-media.d.ts.map +1 -1
  93. package/lib/init/message-media.js +20 -0
  94. package/lib/init/message-media.js.map +1 -1
  95. package/lib/init/register-ai-service.js.map +1 -1
  96. package/lib/init/register-ai-trigger.d.ts.map +1 -1
  97. package/lib/init/register-ai-trigger.js +71 -10
  98. package/lib/init/register-ai-trigger.js.map +1 -1
  99. package/lib/init/register-builtin-tools.js +7 -7
  100. package/lib/init/register-builtin-tools.js.map +1 -1
  101. package/lib/init/register-typing-indicator.d.ts +10 -0
  102. package/lib/init/register-typing-indicator.d.ts.map +1 -0
  103. package/lib/init/register-typing-indicator.js +290 -0
  104. package/lib/init/register-typing-indicator.js.map +1 -0
  105. package/lib/init.d.ts.map +1 -1
  106. package/lib/init.js +2 -0
  107. package/lib/init.js.map +1 -1
  108. package/lib/mcp-client/connection.d.ts +2 -0
  109. package/lib/mcp-client/connection.d.ts.map +1 -1
  110. package/lib/mcp-client/connection.js +7 -0
  111. package/lib/mcp-client/connection.js.map +1 -1
  112. package/lib/mcp-client/index.d.ts +2 -0
  113. package/lib/mcp-client/index.d.ts.map +1 -1
  114. package/lib/mcp-client/index.js +19 -2
  115. package/lib/mcp-client/index.js.map +1 -1
  116. package/lib/monitoring/index.d.ts +79 -0
  117. package/lib/monitoring/index.d.ts.map +1 -0
  118. package/lib/monitoring/index.js +197 -0
  119. package/lib/monitoring/index.js.map +1 -0
  120. package/lib/monitoring/metrics.d.ts +240 -0
  121. package/lib/monitoring/metrics.d.ts.map +1 -0
  122. package/lib/monitoring/metrics.js +483 -0
  123. package/lib/monitoring/metrics.js.map +1 -0
  124. package/lib/orchestrator/agent-dispatcher.d.ts +170 -0
  125. package/lib/orchestrator/agent-dispatcher.d.ts.map +1 -0
  126. package/lib/orchestrator/agent-dispatcher.js +379 -0
  127. package/lib/orchestrator/agent-dispatcher.js.map +1 -0
  128. package/lib/orchestrator/hook-registry.d.ts.map +1 -1
  129. package/lib/orchestrator/hook-registry.js +2 -0
  130. package/lib/orchestrator/hook-registry.js.map +1 -1
  131. package/lib/orchestrator/index.d.ts +2 -0
  132. package/lib/orchestrator/index.d.ts.map +1 -1
  133. package/lib/orchestrator/index.js +2 -0
  134. package/lib/orchestrator/index.js.map +1 -1
  135. package/lib/orchestrator/mcp-lifecycle.d.ts +1 -1
  136. package/lib/orchestrator/mcp-lifecycle.d.ts.map +1 -1
  137. package/lib/orchestrator/mcp-lifecycle.js +2 -2
  138. package/lib/orchestrator/mcp-lifecycle.js.map +1 -1
  139. package/lib/orchestrator/mcp-registry.d.ts +8 -1
  140. package/lib/orchestrator/mcp-registry.d.ts.map +1 -1
  141. package/lib/orchestrator/mcp-registry.js +28 -5
  142. package/lib/orchestrator/mcp-registry.js.map +1 -1
  143. package/lib/orchestrator/task-queue.d.ts +147 -0
  144. package/lib/orchestrator/task-queue.d.ts.map +1 -0
  145. package/lib/orchestrator/task-queue.js +337 -0
  146. package/lib/orchestrator/task-queue.js.map +1 -0
  147. package/lib/orchestrator/tool-selection.d.ts.map +1 -1
  148. package/lib/orchestrator/tool-selection.js +3 -0
  149. package/lib/orchestrator/tool-selection.js.map +1 -1
  150. package/lib/orchestrator/types.d.ts +8 -0
  151. package/lib/orchestrator/types.d.ts.map +1 -1
  152. package/lib/plugin-ai-hook-bus.d.ts +4 -0
  153. package/lib/plugin-ai-hook-bus.d.ts.map +1 -0
  154. package/lib/plugin-ai-hook-bus.js +24 -0
  155. package/lib/plugin-ai-hook-bus.js.map +1 -0
  156. package/lib/security/anomaly-detection.d.ts +119 -0
  157. package/lib/security/anomaly-detection.d.ts.map +1 -0
  158. package/lib/security/anomaly-detection.js +305 -0
  159. package/lib/security/anomaly-detection.js.map +1 -0
  160. package/lib/security/audit-logger.d.ts +158 -0
  161. package/lib/security/audit-logger.d.ts.map +1 -0
  162. package/lib/security/audit-logger.js +379 -0
  163. package/lib/security/audit-logger.js.map +1 -0
  164. package/lib/security/bash-tool-context.d.ts +3 -3
  165. package/lib/security/bash-tool-context.d.ts.map +1 -1
  166. package/lib/security/budget-limiter.d.ts +156 -0
  167. package/lib/security/budget-limiter.d.ts.map +1 -0
  168. package/lib/security/budget-limiter.js +363 -0
  169. package/lib/security/budget-limiter.js.map +1 -0
  170. package/lib/security/dangerous-tool-policy.d.ts +17 -0
  171. package/lib/security/dangerous-tool-policy.d.ts.map +1 -0
  172. package/lib/security/dangerous-tool-policy.js +137 -0
  173. package/lib/security/dangerous-tool-policy.js.map +1 -0
  174. package/lib/security/exec-policy.d.ts +21 -12
  175. package/lib/security/exec-policy.d.ts.map +1 -1
  176. package/lib/security/exec-policy.js +198 -25
  177. package/lib/security/exec-policy.js.map +1 -1
  178. package/lib/security/file-policy.d.ts +0 -1
  179. package/lib/security/file-policy.d.ts.map +1 -1
  180. package/lib/security/file-policy.js +112 -14
  181. package/lib/security/file-policy.js.map +1 -1
  182. package/lib/security/file-role-policy.d.ts +119 -0
  183. package/lib/security/file-role-policy.d.ts.map +1 -0
  184. package/lib/security/file-role-policy.js +268 -0
  185. package/lib/security/file-role-policy.js.map +1 -0
  186. package/lib/security/index.d.ts +59 -0
  187. package/lib/security/index.d.ts.map +1 -1
  188. package/lib/security/index.js +68 -0
  189. package/lib/security/index.js.map +1 -1
  190. package/lib/security/network-policy.d.ts +94 -0
  191. package/lib/security/network-policy.d.ts.map +1 -0
  192. package/lib/security/network-policy.js +291 -0
  193. package/lib/security/network-policy.js.map +1 -0
  194. package/lib/security/owner-approve-always-store.d.ts +2 -0
  195. package/lib/security/owner-approve-always-store.d.ts.map +1 -1
  196. package/lib/security/owner-approve-always-store.js +37 -0
  197. package/lib/security/owner-approve-always-store.js.map +1 -1
  198. package/lib/security/sandbox-enhanced.d.ts +170 -0
  199. package/lib/security/sandbox-enhanced.d.ts.map +1 -0
  200. package/lib/security/sandbox-enhanced.js +630 -0
  201. package/lib/security/sandbox-enhanced.js.map +1 -0
  202. package/lib/security/sandbox.d.ts +104 -0
  203. package/lib/security/sandbox.d.ts.map +1 -0
  204. package/lib/security/sandbox.js +373 -0
  205. package/lib/security/sandbox.js.map +1 -0
  206. package/lib/security/security-config.example.d.ts +33 -0
  207. package/lib/security/security-config.example.d.ts.map +1 -0
  208. package/lib/security/security-config.example.js +166 -0
  209. package/lib/security/security-config.example.js.map +1 -0
  210. package/lib/subagent-goal-notify.d.ts +13 -0
  211. package/lib/subagent-goal-notify.d.ts.map +1 -0
  212. package/lib/subagent-goal-notify.js +32 -0
  213. package/lib/subagent-goal-notify.js.map +1 -0
  214. package/lib/subagent.d.ts +24 -0
  215. package/lib/subagent.d.ts.map +1 -1
  216. package/lib/subagent.js +98 -16
  217. package/lib/subagent.js.map +1 -1
  218. package/lib/typing-indicator/adapter-integration.d.ts +158 -0
  219. package/lib/typing-indicator/adapter-integration.d.ts.map +1 -0
  220. package/lib/typing-indicator/adapter-integration.js +465 -0
  221. package/lib/typing-indicator/adapter-integration.js.map +1 -0
  222. package/lib/typing-indicator/index.d.ts +170 -0
  223. package/lib/typing-indicator/index.d.ts.map +1 -0
  224. package/lib/typing-indicator/index.js +316 -0
  225. package/lib/typing-indicator/index.js.map +1 -0
  226. package/lib/typing-indicator/integration.d.ts +92 -0
  227. package/lib/typing-indicator/integration.d.ts.map +1 -0
  228. package/lib/typing-indicator/integration.js +220 -0
  229. package/lib/typing-indicator/integration.js.map +1 -0
  230. package/lib/zhin-agent/config.d.ts +20 -2
  231. package/lib/zhin-agent/config.d.ts.map +1 -1
  232. package/lib/zhin-agent/config.js +27 -9
  233. package/lib/zhin-agent/config.js.map +1 -1
  234. package/lib/zhin-agent/event-emitter.d.ts +11 -0
  235. package/lib/zhin-agent/event-emitter.d.ts.map +1 -0
  236. package/lib/zhin-agent/event-emitter.js +43 -0
  237. package/lib/zhin-agent/event-emitter.js.map +1 -0
  238. package/lib/zhin-agent/index.d.ts +9 -31
  239. package/lib/zhin-agent/index.d.ts.map +1 -1
  240. package/lib/zhin-agent/index.js +70 -672
  241. package/lib/zhin-agent/index.js.map +1 -1
  242. package/lib/zhin-agent/llm-runner.d.ts +16 -0
  243. package/lib/zhin-agent/llm-runner.d.ts.map +1 -0
  244. package/lib/zhin-agent/llm-runner.js +85 -0
  245. package/lib/zhin-agent/llm-runner.js.map +1 -0
  246. package/lib/zhin-agent/model-resolver.d.ts +9 -0
  247. package/lib/zhin-agent/model-resolver.d.ts.map +1 -0
  248. package/lib/zhin-agent/model-resolver.js +25 -0
  249. package/lib/zhin-agent/model-resolver.js.map +1 -0
  250. package/lib/zhin-agent/phase-trace.d.ts +12 -0
  251. package/lib/zhin-agent/phase-trace.d.ts.map +1 -0
  252. package/lib/zhin-agent/phase-trace.js +24 -0
  253. package/lib/zhin-agent/phase-trace.js.map +1 -0
  254. package/lib/zhin-agent/prompt-assembly.d.ts +22 -0
  255. package/lib/zhin-agent/prompt-assembly.d.ts.map +1 -0
  256. package/lib/zhin-agent/prompt-assembly.js +66 -0
  257. package/lib/zhin-agent/prompt-assembly.js.map +1 -0
  258. package/lib/zhin-agent/prompt-builder.d.ts +200 -0
  259. package/lib/zhin-agent/prompt-builder.d.ts.map +1 -0
  260. package/lib/zhin-agent/prompt-builder.js +574 -0
  261. package/lib/zhin-agent/prompt-builder.js.map +1 -0
  262. package/lib/zhin-agent/prompt-templates.d.ts +160 -0
  263. package/lib/zhin-agent/prompt-templates.d.ts.map +1 -0
  264. package/lib/zhin-agent/prompt-templates.js +436 -0
  265. package/lib/zhin-agent/prompt-templates.js.map +1 -0
  266. package/lib/zhin-agent/prompt.d.ts +15 -0
  267. package/lib/zhin-agent/prompt.d.ts.map +1 -1
  268. package/lib/zhin-agent/prompt.js +149 -4
  269. package/lib/zhin-agent/prompt.js.map +1 -1
  270. package/lib/zhin-agent/session-io.d.ts +10 -0
  271. package/lib/zhin-agent/session-io.d.ts.map +1 -0
  272. package/lib/zhin-agent/session-io.js +14 -0
  273. package/lib/zhin-agent/session-io.js.map +1 -0
  274. package/lib/zhin-agent/task-continuation.d.ts +144 -0
  275. package/lib/zhin-agent/task-continuation.d.ts.map +1 -0
  276. package/lib/zhin-agent/task-continuation.js +346 -0
  277. package/lib/zhin-agent/task-continuation.js.map +1 -0
  278. package/lib/zhin-agent/text-sanitize.d.ts +2 -5
  279. package/lib/zhin-agent/text-sanitize.d.ts.map +1 -1
  280. package/lib/zhin-agent/text-sanitize.js +2 -25
  281. package/lib/zhin-agent/text-sanitize.js.map +1 -1
  282. package/lib/zhin-agent/tool-calls-user-format.d.ts.map +1 -1
  283. package/lib/zhin-agent/tool-calls-user-format.js +12 -3
  284. package/lib/zhin-agent/tool-calls-user-format.js.map +1 -1
  285. package/lib/zhin-agent/tool-orchestration.d.ts +9 -0
  286. package/lib/zhin-agent/tool-orchestration.d.ts.map +1 -0
  287. package/lib/zhin-agent/tool-orchestration.js +68 -0
  288. package/lib/zhin-agent/tool-orchestration.js.map +1 -0
  289. package/lib/zhin-agent/tool-search-orchestrator.d.ts.map +1 -1
  290. package/lib/zhin-agent/tool-search-orchestrator.js +5 -2
  291. package/lib/zhin-agent/tool-search-orchestrator.js.map +1 -1
  292. package/lib/zhin-agent/turn-pipeline.d.ts +5 -0
  293. package/lib/zhin-agent/turn-pipeline.d.ts.map +1 -0
  294. package/lib/zhin-agent/turn-pipeline.js +541 -0
  295. package/lib/zhin-agent/turn-pipeline.js.map +1 -0
  296. package/lib/zhin-agent/turn-tracker.d.ts +17 -0
  297. package/lib/zhin-agent/turn-tracker.d.ts.map +1 -0
  298. package/lib/zhin-agent/turn-tracker.js +54 -0
  299. package/lib/zhin-agent/turn-tracker.js.map +1 -0
  300. package/lib/zhin-agent/web-search-locale-attach.d.ts +4 -0
  301. package/lib/zhin-agent/web-search-locale-attach.d.ts.map +1 -0
  302. package/lib/zhin-agent/web-search-locale-attach.js +19 -0
  303. package/lib/zhin-agent/web-search-locale-attach.js.map +1 -0
  304. package/lib/zhin-agent/zhin-agent-private.d.ts +66 -0
  305. package/lib/zhin-agent/zhin-agent-private.d.ts.map +1 -0
  306. package/lib/zhin-agent/zhin-agent-private.js +4 -0
  307. package/lib/zhin-agent/zhin-agent-private.js.map +1 -0
  308. package/package.json +6 -6
@@ -0,0 +1,170 @@
1
+ /**
2
+ * 消息处理状态适配层
3
+ *
4
+ * 提供统一的接口来提示用户"AI 正在处理",
5
+ * 不同平台可以有不同的实现方式:
6
+ * - ICQQ:消息回应表情
7
+ * - 其他平台:发送一条消息
8
+ * - 支持配置和自定义
9
+ */
10
+ export type TypingIndicatorType = 'reaction' | 'message' | 'typing' | 'none';
11
+ export interface TypingIndicatorConfig {
12
+ /** 提示类型 */
13
+ type: TypingIndicatorType;
14
+ /** 表情符号(reaction 类型) */
15
+ emoji?: string;
16
+ /** 消息内容(message 类型) */
17
+ message?: string;
18
+ /** 是否在完成后自动移除 */
19
+ autoRemove?: boolean;
20
+ /** 自动移除延迟(毫秒) */
21
+ removeDelay?: number;
22
+ /** 平台特定配置 */
23
+ platformConfig?: Record<string, unknown>;
24
+ }
25
+ export interface TypingIndicatorOptions {
26
+ /** 消息 ID */
27
+ messageId?: string;
28
+ /** 会话 ID */
29
+ sessionId?: string;
30
+ /** 用户 ID */
31
+ userId?: string;
32
+ /** 群组 ID */
33
+ groupId?: string;
34
+ /** 平台 */
35
+ platform: string;
36
+ /** Bot ID */
37
+ botId: string;
38
+ /** 场景类型 */
39
+ sceneType: 'private' | 'group' | 'channel';
40
+ }
41
+ export interface TypingIndicator {
42
+ /** 开始提示 */
43
+ start(): Promise<void>;
44
+ /** 更新提示(可选) */
45
+ update?(message: string): Promise<void>;
46
+ /** 停止提示 */
47
+ stop(): Promise<void>;
48
+ /** 是否正在显示 */
49
+ isActive(): boolean;
50
+ }
51
+ export interface TypingIndicatorAdapter {
52
+ /** 平台名称 */
53
+ platform: string;
54
+ /** 支持的提示类型 */
55
+ supportedTypes: TypingIndicatorType[];
56
+ /** 创建提示实例 */
57
+ createIndicator(options: TypingIndicatorOptions, config: TypingIndicatorConfig): TypingIndicator;
58
+ }
59
+ export declare class ReactionTypingIndicator implements TypingIndicator {
60
+ private options;
61
+ private config;
62
+ private addReaction;
63
+ private removeReaction;
64
+ private active;
65
+ private reactionId;
66
+ constructor(options: TypingIndicatorOptions, config: TypingIndicatorConfig, addReaction: (messageId: string, emoji: string) => Promise<string | null>, removeReaction: (messageId: string, reactionId: string) => Promise<void>);
67
+ start(): Promise<void>;
68
+ stop(): Promise<void>;
69
+ isActive(): boolean;
70
+ }
71
+ export declare class MessageTypingIndicator implements TypingIndicator {
72
+ private options;
73
+ private config;
74
+ private sendMessage;
75
+ private deleteMessage;
76
+ private editMessage?;
77
+ private active;
78
+ private messageId;
79
+ constructor(options: TypingIndicatorOptions, config: TypingIndicatorConfig, sendMessage: (options: TypingIndicatorOptions, content: string) => Promise<string | null>, deleteMessage: (messageId: string) => Promise<void>, editMessage?: ((messageId: string, content: string) => Promise<void>) | undefined);
80
+ start(): Promise<void>;
81
+ update(message: string): Promise<void>;
82
+ stop(): Promise<void>;
83
+ isActive(): boolean;
84
+ }
85
+ export declare class NoneTypingIndicator implements TypingIndicator {
86
+ start(): Promise<void>;
87
+ stop(): Promise<void>;
88
+ isActive(): boolean;
89
+ }
90
+ export declare class TypingIndicatorManager {
91
+ private adapters;
92
+ private activeIndicators;
93
+ private defaultConfig;
94
+ constructor(defaultConfig?: Partial<TypingIndicatorConfig>);
95
+ /**
96
+ * 注册平台适配器
97
+ */
98
+ registerAdapter(adapter: TypingIndicatorAdapter): void;
99
+ /**
100
+ * 获取平台适配器
101
+ */
102
+ getAdapter(platform: string): TypingIndicatorAdapter | undefined;
103
+ /**
104
+ * 创建提示实例
105
+ */
106
+ createIndicator(options: TypingIndicatorOptions, config?: Partial<TypingIndicatorConfig>): TypingIndicator;
107
+ /**
108
+ * 开始提示
109
+ */
110
+ start(options: TypingIndicatorOptions, config?: Partial<TypingIndicatorConfig>): Promise<TypingIndicator>;
111
+ /**
112
+ * 停止提示
113
+ */
114
+ stop(options: TypingIndicatorOptions): Promise<void>;
115
+ /**
116
+ * 停止所有提示
117
+ */
118
+ stopAll(): Promise<void>;
119
+ /**
120
+ * 获取活跃的提示
121
+ */
122
+ getActiveIndicator(options: TypingIndicatorOptions): TypingIndicator | undefined;
123
+ /**
124
+ * 生成指示器键
125
+ */
126
+ private getIndicatorKey;
127
+ }
128
+ /**
129
+ * ICQQ 适配器(使用消息回应)
130
+ */
131
+ export declare class ReactionTypingIndicatorAdapter implements TypingIndicatorAdapter {
132
+ private addReaction;
133
+ private removeReaction;
134
+ private sendMessage;
135
+ private deleteMessage;
136
+ private editMessage?;
137
+ readonly platform = "icqq";
138
+ readonly supportedTypes: TypingIndicatorType[];
139
+ constructor(addReaction: (messageId: string, emoji: string) => Promise<string | null>, removeReaction: (messageId: string, reactionId: string) => Promise<void>, sendMessage: (options: TypingIndicatorOptions, content: string) => Promise<string | null>, deleteMessage: (messageId: string) => Promise<void>, editMessage?: ((messageId: string, content: string) => Promise<void>) | undefined);
140
+ createIndicator(options: TypingIndicatorOptions, config: TypingIndicatorConfig): TypingIndicator;
141
+ }
142
+ /**
143
+ * 通用适配器(使用消息)
144
+ */
145
+ export declare class GenericTypingIndicatorAdapter implements TypingIndicatorAdapter {
146
+ private sendMessage;
147
+ private deleteMessage;
148
+ private editMessage?;
149
+ readonly platform: string;
150
+ readonly supportedTypes: TypingIndicatorType[];
151
+ constructor(platform: string, sendMessage: (options: TypingIndicatorOptions, content: string) => Promise<string | null>, deleteMessage: (messageId: string) => Promise<void>, editMessage?: ((messageId: string, content: string) => Promise<void>) | undefined);
152
+ createIndicator(options: TypingIndicatorOptions, config: TypingIndicatorConfig): TypingIndicator;
153
+ }
154
+ /**
155
+ * 获取全局提示管理器
156
+ */
157
+ export declare function getTypingIndicatorManager(): TypingIndicatorManager;
158
+ /**
159
+ * 初始化提示管理器
160
+ */
161
+ export declare function initTypingIndicatorManager(defaultConfig?: Partial<TypingIndicatorConfig>): TypingIndicatorManager;
162
+ /**
163
+ * 快速开始提示
164
+ */
165
+ export declare function startTypingIndicator(options: TypingIndicatorOptions, config?: Partial<TypingIndicatorConfig>): Promise<TypingIndicator>;
166
+ /**
167
+ * 快速停止提示
168
+ */
169
+ export declare function stopTypingIndicator(options: TypingIndicatorOptions): Promise<void>;
170
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typing-indicator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * 消息处理状态适配层
3
+ *
4
+ * 提供统一的接口来提示用户"AI 正在处理",
5
+ * 不同平台可以有不同的实现方式:
6
+ * - ICQQ:消息回应表情
7
+ * - 其他平台:发送一条消息
8
+ * - 支持配置和自定义
9
+ */
10
+ // ── 默认配置 ──────────────────────────────────────────────────────────
11
+ const DEFAULT_CONFIG = {
12
+ type: 'reaction',
13
+ emoji: '⏳',
14
+ message: '正在处理中...',
15
+ autoRemove: true,
16
+ removeDelay: 5000,
17
+ };
18
+ // ── 反应式提示(默认) ────────────────────────────────────────────────
19
+ export class ReactionTypingIndicator {
20
+ options;
21
+ config;
22
+ addReaction;
23
+ removeReaction;
24
+ active = false;
25
+ reactionId = null;
26
+ constructor(options, config, addReaction, removeReaction) {
27
+ this.options = options;
28
+ this.config = config;
29
+ this.addReaction = addReaction;
30
+ this.removeReaction = removeReaction;
31
+ }
32
+ async start() {
33
+ if (this.active || !this.options.messageId) {
34
+ return;
35
+ }
36
+ try {
37
+ this.reactionId = await this.addReaction(this.options.messageId, this.config.emoji || '⏳');
38
+ this.active = true;
39
+ }
40
+ catch (error) {
41
+ console.error('[TypingIndicator] Failed to add reaction:', error);
42
+ }
43
+ }
44
+ async stop() {
45
+ if (!this.active || !this.reactionId || !this.options.messageId) {
46
+ return;
47
+ }
48
+ try {
49
+ await this.removeReaction(this.options.messageId, this.reactionId);
50
+ this.active = false;
51
+ this.reactionId = null;
52
+ }
53
+ catch (error) {
54
+ console.error('[TypingIndicator] Failed to remove reaction:', error);
55
+ }
56
+ }
57
+ isActive() {
58
+ return this.active;
59
+ }
60
+ }
61
+ // ── 消息式提示 ────────────────────────────────────────────────────────
62
+ function hasTypingSendTarget(options) {
63
+ if (options.userId)
64
+ return true;
65
+ if ((options.sceneType === 'group' || options.sceneType === 'channel') &&
66
+ options.groupId) {
67
+ return true;
68
+ }
69
+ return Boolean(options.sessionId?.trim());
70
+ }
71
+ export class MessageTypingIndicator {
72
+ options;
73
+ config;
74
+ sendMessage;
75
+ deleteMessage;
76
+ editMessage;
77
+ active = false;
78
+ messageId = null;
79
+ constructor(options, config, sendMessage, deleteMessage, editMessage) {
80
+ this.options = options;
81
+ this.config = config;
82
+ this.sendMessage = sendMessage;
83
+ this.deleteMessage = deleteMessage;
84
+ this.editMessage = editMessage;
85
+ }
86
+ async start() {
87
+ if (this.active || !hasTypingSendTarget(this.options)) {
88
+ return;
89
+ }
90
+ try {
91
+ this.messageId = await this.sendMessage(this.options, this.config.message || '正在处理中...');
92
+ this.active = true;
93
+ }
94
+ catch (error) {
95
+ console.error('[TypingIndicator] Failed to send message:', error);
96
+ }
97
+ }
98
+ async update(message) {
99
+ if (!this.active || !this.messageId) {
100
+ return;
101
+ }
102
+ if (this.editMessage) {
103
+ try {
104
+ await this.editMessage(this.messageId, message);
105
+ }
106
+ catch (error) {
107
+ console.error('[TypingIndicator] Failed to edit message:', error);
108
+ }
109
+ }
110
+ }
111
+ async stop() {
112
+ if (!this.active || !this.messageId) {
113
+ return;
114
+ }
115
+ try {
116
+ if (this.config.autoRemove) {
117
+ await this.deleteMessage(this.messageId);
118
+ }
119
+ this.active = false;
120
+ this.messageId = null;
121
+ }
122
+ catch (error) {
123
+ console.error('[TypingIndicator] Failed to delete message:', error);
124
+ }
125
+ }
126
+ isActive() {
127
+ return this.active;
128
+ }
129
+ }
130
+ // ── 空提示(不显示) ──────────────────────────────────────────────────
131
+ export class NoneTypingIndicator {
132
+ async start() { }
133
+ async stop() { }
134
+ isActive() {
135
+ return false;
136
+ }
137
+ }
138
+ // ── 提示管理器 ────────────────────────────────────────────────────────
139
+ export class TypingIndicatorManager {
140
+ adapters = new Map();
141
+ activeIndicators = new Map();
142
+ defaultConfig;
143
+ constructor(defaultConfig = {}) {
144
+ this.defaultConfig = { ...DEFAULT_CONFIG, ...defaultConfig };
145
+ }
146
+ /**
147
+ * 注册平台适配器
148
+ */
149
+ registerAdapter(adapter) {
150
+ this.adapters.set(adapter.platform, adapter);
151
+ }
152
+ /**
153
+ * 获取平台适配器
154
+ */
155
+ getAdapter(platform) {
156
+ return this.adapters.get(platform);
157
+ }
158
+ /**
159
+ * 创建提示实例
160
+ */
161
+ createIndicator(options, config) {
162
+ const adapter = this.adapters.get(options.platform);
163
+ if (!adapter) {
164
+ console.warn(`[TypingIndicator] No adapter for platform: ${options.platform}`);
165
+ return new NoneTypingIndicator();
166
+ }
167
+ const mergedConfig = { ...this.defaultConfig, ...config };
168
+ // 检查平台是否支持该提示类型
169
+ if (!adapter.supportedTypes.includes(mergedConfig.type)) {
170
+ console.warn(`[TypingIndicator] Platform ${options.platform} does not support type: ${mergedConfig.type}`);
171
+ // 回退到第一个支持的类型
172
+ if (adapter.supportedTypes.length > 0) {
173
+ mergedConfig.type = adapter.supportedTypes[0];
174
+ }
175
+ else {
176
+ return new NoneTypingIndicator();
177
+ }
178
+ }
179
+ return adapter.createIndicator(options, mergedConfig);
180
+ }
181
+ /**
182
+ * 开始提示
183
+ */
184
+ async start(options, config) {
185
+ const indicator = this.createIndicator(options, config);
186
+ await indicator.start();
187
+ // 存储活跃的指示器
188
+ const key = this.getIndicatorKey(options);
189
+ this.activeIndicators.set(key, indicator);
190
+ return indicator;
191
+ }
192
+ /**
193
+ * 停止提示
194
+ */
195
+ async stop(options) {
196
+ const key = this.getIndicatorKey(options);
197
+ const indicator = this.activeIndicators.get(key);
198
+ if (indicator) {
199
+ await indicator.stop();
200
+ this.activeIndicators.delete(key);
201
+ }
202
+ }
203
+ /**
204
+ * 停止所有提示
205
+ */
206
+ async stopAll() {
207
+ for (const [key, indicator] of this.activeIndicators.entries()) {
208
+ try {
209
+ await indicator.stop();
210
+ }
211
+ catch (error) {
212
+ console.error(`[TypingIndicator] Failed to stop indicator ${key}:`, error);
213
+ }
214
+ }
215
+ this.activeIndicators.clear();
216
+ }
217
+ /**
218
+ * 获取活跃的提示
219
+ */
220
+ getActiveIndicator(options) {
221
+ const key = this.getIndicatorKey(options);
222
+ return this.activeIndicators.get(key);
223
+ }
224
+ /**
225
+ * 生成指示器键
226
+ */
227
+ getIndicatorKey(options) {
228
+ return `${options.platform}:${options.botId}:${options.sessionId || options.messageId}`;
229
+ }
230
+ }
231
+ // ── 预定义适配器 ──────────────────────────────────────────────────────
232
+ /**
233
+ * ICQQ 适配器(使用消息回应)
234
+ */
235
+ export class ReactionTypingIndicatorAdapter {
236
+ addReaction;
237
+ removeReaction;
238
+ sendMessage;
239
+ deleteMessage;
240
+ editMessage;
241
+ platform = 'icqq';
242
+ supportedTypes = ['reaction', 'message'];
243
+ constructor(addReaction, removeReaction, sendMessage, deleteMessage, editMessage) {
244
+ this.addReaction = addReaction;
245
+ this.removeReaction = removeReaction;
246
+ this.sendMessage = sendMessage;
247
+ this.deleteMessage = deleteMessage;
248
+ this.editMessage = editMessage;
249
+ }
250
+ createIndicator(options, config) {
251
+ switch (config.type) {
252
+ case 'reaction':
253
+ return new ReactionTypingIndicator(options, config, this.addReaction, this.removeReaction);
254
+ case 'message':
255
+ return new MessageTypingIndicator(options, config, this.sendMessage, this.deleteMessage, this.editMessage);
256
+ default:
257
+ return new NoneTypingIndicator();
258
+ }
259
+ }
260
+ }
261
+ /**
262
+ * 通用适配器(使用消息)
263
+ */
264
+ export class GenericTypingIndicatorAdapter {
265
+ sendMessage;
266
+ deleteMessage;
267
+ editMessage;
268
+ platform;
269
+ supportedTypes = ['message', 'none'];
270
+ constructor(platform, sendMessage, deleteMessage, editMessage) {
271
+ this.sendMessage = sendMessage;
272
+ this.deleteMessage = deleteMessage;
273
+ this.editMessage = editMessage;
274
+ this.platform = platform;
275
+ }
276
+ createIndicator(options, config) {
277
+ switch (config.type) {
278
+ case 'message':
279
+ return new MessageTypingIndicator(options, config, this.sendMessage, this.deleteMessage, this.editMessage);
280
+ default:
281
+ return new NoneTypingIndicator();
282
+ }
283
+ }
284
+ }
285
+ // ── 全局实例 ──────────────────────────────────────────────────────────
286
+ let globalManager = null;
287
+ /**
288
+ * 获取全局提示管理器
289
+ */
290
+ export function getTypingIndicatorManager() {
291
+ if (!globalManager) {
292
+ globalManager = new TypingIndicatorManager();
293
+ }
294
+ return globalManager;
295
+ }
296
+ /**
297
+ * 初始化提示管理器
298
+ */
299
+ export function initTypingIndicatorManager(defaultConfig) {
300
+ globalManager = new TypingIndicatorManager(defaultConfig);
301
+ return globalManager;
302
+ }
303
+ // ── 便捷函数 ──────────────────────────────────────────────────────────
304
+ /**
305
+ * 快速开始提示
306
+ */
307
+ export async function startTypingIndicator(options, config) {
308
+ return getTypingIndicatorManager().start(options, config);
309
+ }
310
+ /**
311
+ * 快速停止提示
312
+ */
313
+ export async function stopTypingIndicator(options) {
314
+ return getTypingIndicatorManager().stop(options);
315
+ }
316
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/typing-indicator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Typing Indicator 集成示例
3
+ *
4
+ * 展示如何在 ZhinAgent 中集成消息处理状态提示
5
+ */
6
+ import type { Adapter, Bot } from '@zhin.js/core';
7
+ type OutboundAdapter = Pick<Adapter, 'sendMessage'>;
8
+ import { TypingIndicatorManager, ReactionTypingIndicatorAdapter, GenericTypingIndicatorAdapter, type TypingIndicatorConfig } from './index.js';
9
+ export interface ZhinAgentTypingConfig {
10
+ /** 是否启用 */
11
+ enabled: boolean;
12
+ /** 默认提示类型 */
13
+ defaultType: 'reaction' | 'message' | 'typing' | 'none';
14
+ /** 默认表情(reaction 类型) */
15
+ defaultEmoji: string;
16
+ /** 默认消息(message 类型) */
17
+ defaultMessage: string;
18
+ /** 是否自动移除 */
19
+ autoRemove: boolean;
20
+ /** 自动移除延迟(毫秒) */
21
+ removeDelay: number;
22
+ /** 平台特定配置 */
23
+ platformConfigs?: Record<string, Partial<TypingIndicatorConfig>>;
24
+ }
25
+ /**
26
+ * 为 ZhinAgent 创建 Typing Indicator 管理器
27
+ */
28
+ export declare function createTypingIndicatorManagerForZhinAgent(plugin: Plugin, config?: Partial<ZhinAgentTypingConfig>): TypingIndicatorManager;
29
+ /**
30
+ * ICQQ Bot 接口扩展
31
+ */
32
+ interface ICQQBot extends Bot {
33
+ $addReaction?(messageId: string, emoji: string): Promise<string | null>;
34
+ $removeReaction?(messageId: string, reactionId: string): Promise<void>;
35
+ }
36
+ /**
37
+ * 创建 ICQQ 适配器
38
+ *
39
+ * 注意:实际使用时需要从 ICQQ 适配器实例获取 bot
40
+ * 这里提供的是示例实现框架
41
+ */
42
+ export declare function createICQQAdapterFromBot(bot: ICQQBot, outbound?: OutboundAdapter): ReactionTypingIndicatorAdapter;
43
+ /**
44
+ * 创建通用适配器
45
+ */
46
+ export declare function createGenericAdapterFromBot(bot: Bot, platform: string, outbound?: OutboundAdapter): GenericTypingIndicatorAdapter;
47
+ export interface AgentProcessContext {
48
+ /** 消息 ID */
49
+ messageId?: string;
50
+ /** 会话 ID */
51
+ sessionId: string;
52
+ /** 用户 ID */
53
+ userId: string;
54
+ /** 群组 ID */
55
+ groupId?: string;
56
+ /** 平台 */
57
+ platform: string;
58
+ /** Bot ID */
59
+ botId: string;
60
+ /** 场景类型 */
61
+ sceneType: 'private' | 'group' | 'channel';
62
+ }
63
+ /**
64
+ * 在 Agent 处理过程中使用 Typing Indicator
65
+ *
66
+ * 使用示例:
67
+ * ```typescript
68
+ * const manager = createTypingIndicatorManagerForZhinAgent(plugin);
69
+ *
70
+ * // 开始处理时
71
+ * const indicator = await manager.start({
72
+ * platform: 'icqq',
73
+ * botId: '75318',
74
+ * sessionId: 'private:liuchunlang',
75
+ * messageId: '123456',
76
+ * sceneType: 'private',
77
+ * }, {
78
+ * type: 'reaction',
79
+ * emoji: '⏳',
80
+ * });
81
+ *
82
+ * // 处理完成后
83
+ * await indicator.stop();
84
+ * ```
85
+ */
86
+ export declare function withTypingIndicator<T>(manager: TypingIndicatorManager, context: AgentProcessContext, config: Partial<TypingIndicatorConfig>, fn: () => Promise<T>): Promise<T>;
87
+ /**
88
+ * 从平台配置解析 Typing Indicator 配置
89
+ */
90
+ export declare function resolveTypingIndicatorConfig(platform: string, platformConfig?: Record<string, unknown>): Partial<TypingIndicatorConfig>;
91
+ export {};
92
+ //# sourceMappingURL=integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../src/typing-indicator/integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAElD,KAAK,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpD,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,6BAA6B,EAE7B,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,qBAAqB;IACpC,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,WAAW,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxD,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;CAClE;AAWD;;GAEG;AACH,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAC1C,sBAAsB,CAgBxB;AAED;;GAEG;AACH,UAAU,OAAQ,SAAQ,GAAG;IAC3B,YAAY,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxE,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,8BAA8B,CAgEjH;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,6BAA6B,CAqCjI;AAID,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,SAAS,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACtC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAID;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC,qBAAqB,CAAC,CAwChC"}