@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
@@ -1,19 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"tone-detector.d.ts","sourceRoot":"","sources":["../../src/ai/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"}
@@ -1,72 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"tone-detector.js","sourceRoot":"","sources":["../../src/ai/tone-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,UAAU;AACV,MAAM,gBAAgB,GAAG,kDAAkD,CAAC;AAC5E,MAAM,SAAS,GAAG,8BAA8B,CAAC;AACjD,MAAM,YAAY,GAAG,iCAAiC,CAAC;AACvD,MAAM,aAAa,GAAG,uDAAuD,CAAC;AAE9E;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAEpD,OAAO;IACP,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC7F,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC3F,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC9F,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E,0BAA0B;IAC1B,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,oHAAoH,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAEtK,QAAQ;IACR,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE9C,qEAAqE;IACrE,IAAI,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,sCAAsC;SAC7C,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,8BAA8B;SACrC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,2BAA2B;SAClC,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,yBAAyB;SAChC,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,EAAE,EAAE,oBAAoB;SAC/B,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,8BAA8B;SACrC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC"}
package/lib/ai/tools.d.ts DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * @zhin.js/ai - Built-in Tools
3
- * 内置工具集合 - 使用 ZhinTool 类定义
4
- */
5
- import { ZhinTool } from '../built/tool.js';
6
- /**
7
- * 计算器工具
8
- * 支持基本运算和数学函数
9
- */
10
- export declare const calculatorTool: ZhinTool;
11
- /**
12
- * 时间工具
13
- * 获取当前时间和日期
14
- */
15
- export declare const timeTool: ZhinTool;
16
- /**
17
- * 网页搜索工具
18
- * 需要配置搜索 API
19
- */
20
- export declare const searchTool: ZhinTool;
21
- /**
22
- * 代码执行工具
23
- * 在安全沙箱中执行 JavaScript
24
- */
25
- export declare const codeRunnerTool: ZhinTool;
26
- /**
27
- * HTTP 请求工具
28
- * 发送 HTTP 请求获取数据
29
- */
30
- export declare const httpTool: ZhinTool;
31
- /**
32
- * 记忆工具
33
- * 让 AI 记住重要信息
34
- */
35
- export declare const memoryTool: ZhinTool;
36
- /**
37
- * 获取所有内置工具(ZhinTool 实例)
38
- * 注意:天气工具已移除,请使用 weather-tool 插件,支持多平台配置
39
- */
40
- export declare function getBuiltinTools(): ZhinTool[];
41
- /**
42
- * 获取所有可用的内置工具(包括可选工具)
43
- */
44
- export declare function getAllBuiltinTools(): ZhinTool[];
45
- //# sourceMappingURL=tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/ai/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C;;;GAGG;AACH,eAAO,MAAM,cAAc,UA0BvB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,QAAQ,UA+BjB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,UAAU,UAanB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,cAAc,UAwBvB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,QAAQ,UA0CjB,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,UAAU,UAcnB,CAAC;AAEL;;;GAGG;AACH,wBAAgB,eAAe,IAAI,QAAQ,EAAE,CAK5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,EAAE,CAS/C"}
package/lib/ai/tools.js DELETED
@@ -1,206 +0,0 @@
1
- /**
2
- * @zhin.js/ai - Built-in Tools
3
- * 内置工具集合 - 使用 ZhinTool 类定义
4
- */
5
- import { ZhinTool } from '../built/tool.js';
6
- /**
7
- * 计算器工具
8
- * 支持基本运算和数学函数
9
- */
10
- export const calculatorTool = new ZhinTool('calculator')
11
- .desc('执行数学计算。支持基本运算(+、-、*、/、^)和数学函数(sin、cos、sqrt 等)')
12
- .keyword('计算', '算', 'calc', '数学', '求值', '运算')
13
- .tag('math', 'utility')
14
- .param('expression', { type: 'string', description: '数学表达式,例如 "2 + 3 * 4" 或 "sqrt(16)"' }, true)
15
- .execute(async ({ expression }) => {
16
- try {
17
- // 安全的数学表达式求值
18
- const sanitized = expression
19
- .replace(/[^0-9+\-*/().^eEsincosqrtabspowlogxMathPI\s]/g, '')
20
- .replace(/\bsqrt\b/g, 'Math.sqrt')
21
- .replace(/\bsin\b/g, 'Math.sin')
22
- .replace(/\bcos\b/g, 'Math.cos')
23
- .replace(/\btan\b/g, 'Math.tan')
24
- .replace(/\blog\b/g, 'Math.log')
25
- .replace(/\babs\b/g, 'Math.abs')
26
- .replace(/\bpow\b/g, 'Math.pow')
27
- .replace(/\bPI\b/g, 'Math.PI')
28
- .replace(/\bE\b(?![0-9])/g, 'Math.E')
29
- .replace(/\^/g, '**');
30
- const result = new Function(`return ${sanitized}`)();
31
- return { result, expression };
32
- }
33
- catch (error) {
34
- return { error: '无法计算表达式', expression };
35
- }
36
- });
37
- /**
38
- * 时间工具
39
- * 获取当前时间和日期
40
- */
41
- export const timeTool = new ZhinTool('get_time')
42
- .desc('获取当前时间和日期信息')
43
- .keyword('时间', '日期', '几点', '今天', '现在', 'time', 'date')
44
- .tag('time', 'utility')
45
- .param('timezone', { type: 'string', description: '时区,例如 "Asia/Shanghai" 或 "UTC"' })
46
- .param('format', { type: 'string', description: '输出格式: full(完整), date(日期), time(时间), timestamp(时间戳)' })
47
- .execute(async ({ timezone, format = 'full' }) => {
48
- const now = new Date();
49
- const options = {
50
- timeZone: timezone || 'Asia/Shanghai',
51
- };
52
- switch (format) {
53
- case 'date':
54
- options.dateStyle = 'full';
55
- break;
56
- case 'time':
57
- options.timeStyle = 'long';
58
- break;
59
- case 'timestamp':
60
- return { timestamp: now.getTime(), iso: now.toISOString() };
61
- default:
62
- options.dateStyle = 'full';
63
- options.timeStyle = 'long';
64
- }
65
- return {
66
- formatted: now.toLocaleString('zh-CN', options),
67
- timestamp: now.getTime(),
68
- iso: now.toISOString(),
69
- };
70
- });
71
- /**
72
- * 网页搜索工具
73
- * 需要配置搜索 API
74
- */
75
- export const searchTool = new ZhinTool('web_search')
76
- .desc('在互联网上搜索信息(需要配置搜索 API)')
77
- .keyword('搜索', '搜一下', '查找', '查一查', 'search', 'google')
78
- .tag('search', 'web')
79
- .param('query', { type: 'string', description: '搜索关键词' }, true)
80
- .param('limit', { type: 'number', description: '返回结果数量(默认 5)' })
81
- .execute(async ({ query, limit = 5 }) => {
82
- // 默认实现提示需要配置
83
- return {
84
- query,
85
- error: '搜索功能未配置,请提供搜索 API',
86
- hint: '可以集成 SerpAPI、Bing Search API 或 Google Custom Search',
87
- };
88
- });
89
- /**
90
- * 代码执行工具
91
- * 在安全沙箱中执行 JavaScript
92
- */
93
- export const codeRunnerTool = new ZhinTool('run_code')
94
- .desc('执行 JavaScript 代码(在安全沙箱中)')
95
- .keyword('代码', '执行', '运行', 'code', 'js', 'javascript')
96
- .tag('code', 'dev')
97
- .param('code', { type: 'string', description: 'JavaScript 代码' }, true)
98
- .execute(async ({ code }) => {
99
- try {
100
- // 简单的沙箱执行(生产环境应使用 vm2 或 isolated-vm)
101
- const result = new Function(`
102
- 'use strict';
103
- const console = { log: (...args) => args.join(' ') };
104
- return (function() { ${code} })();
105
- `)();
106
- return {
107
- success: true,
108
- result: result !== undefined ? String(result) : 'undefined',
109
- };
110
- }
111
- catch (error) {
112
- return {
113
- success: false,
114
- error: error instanceof Error ? error.message : String(error),
115
- };
116
- }
117
- });
118
- /**
119
- * HTTP 请求工具
120
- * 发送 HTTP 请求获取数据
121
- */
122
- export const httpTool = new ZhinTool('http_request')
123
- .desc('发送 HTTP 请求获取数据')
124
- .keyword('http', 'api', '请求', '接口', 'url', 'fetch')
125
- .tag('http', 'web')
126
- .param('url', { type: 'string', description: '请求 URL' }, true)
127
- .param('method', { type: 'string', description: 'HTTP 方法: GET, POST, PUT, DELETE(默认 GET)' })
128
- .param('headers', { type: 'object', description: '请求头(JSON 对象)' })
129
- .param('body', { type: 'string', description: '请求体(JSON 字符串)' })
130
- .execute(async ({ url, method = 'GET', headers = {}, body }) => {
131
- try {
132
- const response = await fetch(url, {
133
- method: method,
134
- headers: {
135
- 'Content-Type': 'application/json',
136
- ...headers,
137
- },
138
- body: body ? body : undefined,
139
- });
140
- const contentType = response.headers.get('content-type') || '';
141
- let data;
142
- if (contentType.includes('application/json')) {
143
- data = await response.json();
144
- }
145
- else {
146
- data = await response.text();
147
- // 限制文本长度
148
- if (data.length > 5000) {
149
- data = data.substring(0, 5000) + '... (truncated)';
150
- }
151
- }
152
- return {
153
- status: response.status,
154
- statusText: response.statusText,
155
- data,
156
- };
157
- }
158
- catch (error) {
159
- return {
160
- error: error instanceof Error ? error.message : String(error),
161
- };
162
- }
163
- });
164
- /**
165
- * 记忆工具
166
- * 让 AI 记住重要信息
167
- */
168
- export const memoryTool = new ZhinTool('remember')
169
- .desc('记住用户告诉你的重要信息,以便后续对话中使用')
170
- .keyword('记住', '记忆', '记下', 'remember', '别忘了')
171
- .tag('memory', 'context')
172
- .param('key', { type: 'string', description: '记忆的标识符,如 "user_name", "preference"' }, true)
173
- .param('value', { type: 'string', description: '要记住的内容' }, true)
174
- .execute(async ({ key, value }, context) => {
175
- // 这里需要与 session/context manager 集成
176
- return {
177
- success: true,
178
- message: `已记住 ${key}: ${value}`,
179
- key,
180
- value,
181
- };
182
- });
183
- /**
184
- * 获取所有内置工具(ZhinTool 实例)
185
- * 注意:天气工具已移除,请使用 weather-tool 插件,支持多平台配置
186
- */
187
- export function getBuiltinTools() {
188
- return [
189
- calculatorTool,
190
- timeTool,
191
- ];
192
- }
193
- /**
194
- * 获取所有可用的内置工具(包括可选工具)
195
- */
196
- export function getAllBuiltinTools() {
197
- return [
198
- calculatorTool,
199
- timeTool,
200
- searchTool,
201
- codeRunnerTool,
202
- httpTool,
203
- memoryTool,
204
- ];
205
- }
206
- //# sourceMappingURL=tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/ai/tools.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * UserProfileStore — 用户画像存储
3
- *
4
- * 持久化存储用户偏好和特征,让 AI 跨会话记住用户的个性化信息。
5
- *
6
- * ai_user_profiles 表:
7
- * ┌──────────────────────────────────────────────────────────┐
8
- * │ user_id | key | value | updated_at │
9
- * │ u1 | name | 小明 | 1700000000 │
10
- * │ u1 | style | 简洁正式 | 1700000001 │
11
- * │ u1 | interests | 编程,天气 | 1700000010 │
12
- * └──────────────────────────────────────────────────────────┘
13
- */
14
- export declare const AI_USER_PROFILE_MODEL: {
15
- user_id: {
16
- type: "text";
17
- nullable: boolean;
18
- };
19
- key: {
20
- type: "text";
21
- nullable: boolean;
22
- };
23
- value: {
24
- type: "text";
25
- nullable: boolean;
26
- };
27
- updated_at: {
28
- type: "integer";
29
- default: number;
30
- };
31
- };
32
- /**
33
- * 数据库模型接口(与 RelatedModel 的链式查询 API 对齐)
34
- */
35
- interface DbModel {
36
- select(...fields: string[]): any;
37
- create(data: Record<string, any>): Promise<any>;
38
- update(data: Partial<any>): any;
39
- delete(condition: Record<string, any>): any;
40
- }
41
- export declare class UserProfileStore {
42
- private store;
43
- constructor();
44
- upgradeToDatabase(model: DbModel): void;
45
- get(userId: string, key: string): Promise<string | null>;
46
- getAll(userId: string): Promise<Record<string, string>>;
47
- set(userId: string, key: string, value: string): Promise<void>;
48
- delete(userId: string, key: string): Promise<boolean>;
49
- /**
50
- * 构建用户画像摘要,注入 system prompt
51
- */
52
- buildProfileSummary(userId: string): Promise<string>;
53
- dispose(): void;
54
- }
55
- export {};
56
- //# sourceMappingURL=user-profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-profile.d.ts","sourceRoot":"","sources":["../../src/ai/user-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;CAKjC,CAAC;AAcF;;GAEG;AACH,UAAU,OAAO;IACf,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;CAC7C;AAsFD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAgB;;IAM7B,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAOjC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIvD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3D;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS1D,OAAO,IAAI,IAAI;CAGhB"}
@@ -1,130 +0,0 @@
1
- /**
2
- * UserProfileStore — 用户画像存储
3
- *
4
- * 持久化存储用户偏好和特征,让 AI 跨会话记住用户的个性化信息。
5
- *
6
- * ai_user_profiles 表:
7
- * ┌──────────────────────────────────────────────────────────┐
8
- * │ user_id | key | value | updated_at │
9
- * │ u1 | name | 小明 | 1700000000 │
10
- * │ u1 | style | 简洁正式 | 1700000001 │
11
- * │ u1 | interests | 编程,天气 | 1700000010 │
12
- * └──────────────────────────────────────────────────────────┘
13
- */
14
- import { Logger } from '@zhin.js/logger';
15
- const logger = new Logger(null, 'UserProfile');
16
- // ============================================================================
17
- // 数据库模型
18
- // ============================================================================
19
- export const AI_USER_PROFILE_MODEL = {
20
- user_id: { type: 'text', nullable: false },
21
- key: { type: 'text', nullable: false },
22
- value: { type: 'text', nullable: false },
23
- updated_at: { type: 'integer', default: 0 },
24
- };
25
- // ============================================================================
26
- // 内存实现
27
- // ============================================================================
28
- class MemoryProfileStore {
29
- data = new Map();
30
- async get(userId, key) {
31
- return this.data.get(userId)?.get(key) ?? null;
32
- }
33
- async getAll(userId) {
34
- const map = this.data.get(userId);
35
- if (!map)
36
- return {};
37
- return Object.fromEntries(map);
38
- }
39
- async set(userId, key, value) {
40
- let map = this.data.get(userId);
41
- if (!map) {
42
- map = new Map();
43
- this.data.set(userId, map);
44
- }
45
- map.set(key, value);
46
- }
47
- async delete(userId, key) {
48
- return this.data.get(userId)?.delete(key) ?? false;
49
- }
50
- dispose() { this.data.clear(); }
51
- }
52
- // ============================================================================
53
- // 数据库实现
54
- // ============================================================================
55
- class DatabaseProfileStore {
56
- model;
57
- constructor(model) {
58
- this.model = model;
59
- }
60
- async get(userId, key) {
61
- const records = await this.model.select().where({ user_id: userId, key });
62
- return records.length > 0 ? records[0].value : null;
63
- }
64
- async getAll(userId) {
65
- const records = await this.model.select().where({ user_id: userId });
66
- const result = {};
67
- for (const r of records)
68
- result[r.key] = r.value;
69
- return result;
70
- }
71
- async set(userId, key, value) {
72
- const existing = await this.model.select().where({ user_id: userId, key });
73
- if (existing.length > 0) {
74
- await this.model.update({ value, updated_at: Date.now() }).where({ user_id: userId, key });
75
- }
76
- else {
77
- await this.model.create({ user_id: userId, key, value, updated_at: Date.now() });
78
- }
79
- }
80
- async delete(userId, key) {
81
- const existing = await this.model.select().where({ user_id: userId, key });
82
- if (existing.length === 0)
83
- return false;
84
- await this.model.delete({ user_id: userId, key });
85
- return true;
86
- }
87
- dispose() { }
88
- }
89
- // ============================================================================
90
- // UserProfileStore
91
- // ============================================================================
92
- export class UserProfileStore {
93
- store;
94
- constructor() {
95
- this.store = new MemoryProfileStore();
96
- }
97
- upgradeToDatabase(model) {
98
- const old = this.store;
99
- this.store = new DatabaseProfileStore(model);
100
- old.dispose();
101
- logger.debug('UserProfileStore: upgraded to database storage');
102
- }
103
- async get(userId, key) {
104
- return this.store.get(userId, key);
105
- }
106
- async getAll(userId) {
107
- return this.store.getAll(userId);
108
- }
109
- async set(userId, key, value) {
110
- return this.store.set(userId, key, value);
111
- }
112
- async delete(userId, key) {
113
- return this.store.delete(userId, key);
114
- }
115
- /**
116
- * 构建用户画像摘要,注入 system prompt
117
- */
118
- async buildProfileSummary(userId) {
119
- const profile = await this.store.getAll(userId);
120
- const entries = Object.entries(profile);
121
- if (entries.length === 0)
122
- return '';
123
- const lines = entries.map(([k, v]) => `- ${k}: ${v}`).join('\n');
124
- return `[用户画像]\n${lines}`;
125
- }
126
- dispose() {
127
- this.store.dispose();
128
- }
129
- }
130
- //# sourceMappingURL=user-profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-profile.js","sourceRoot":"","sources":["../../src/ai/user-profile.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * ZhinAgent 内置上下文工具工厂
3
- *
4
- * 这些工具依赖运行时上下文(sessionId / userId / context),
5
- * 由 ZhinAgent.process() 按需创建并注入到工具列表中。
6
- */
7
- import type { ToolContext } from '../../types.js';
8
- import type { AgentTool } from '../types.js';
9
- import type { ConversationMemory } from '../conversation-memory.js';
10
- import type { UserProfileStore } from '../user-profile.js';
11
- import type { FollowUpManager } from '../follow-up.js';
12
- import type { SubagentManager } from '../subagent.js';
13
- export declare function createChatHistoryTool(sessionId: string, memory: ConversationMemory): AgentTool;
14
- export declare function createUserProfileTool(userId: string, profiles: UserProfileStore): AgentTool;
15
- export declare function createScheduleFollowUpTool(sessionId: string, context: ToolContext, followUps: FollowUpManager): AgentTool;
16
- export declare function createSpawnTaskTool(context: ToolContext, manager: SubagentManager): AgentTool;
17
- //# sourceMappingURL=builtin-tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builtin-tools.d.ts","sourceRoot":"","sources":["../../../src/ai/zhin-agent/builtin-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,gBAAgB,CAAC;AAEtE,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAwE9F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAkD3F;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,eAAe,GACzB,SAAS,CAwDX;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,eAAe,GACvB,SAAS,CAyCX"}