@zhin.js/core 1.0.37 → 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 +9 -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 -702
  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 -831
  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,181 +0,0 @@
1
- /**
2
- * ConversationMemory — 基于数据库的会话记忆(话题感知 + 链式摘要)
3
- *
4
- * 两张表分离存储:
5
- *
6
- * ai_messages 表(逐条记录):
7
- * ┌──────────────────────────────────────────────────────────┐
8
- * │ session_id | role | content | round | time │
9
- * │ s1 | user | 你好 | 1 | ... │
10
- * │ s1 | assistant | 你好呀! | 1 | ... │
11
- * │ ... | ... | ... | ... | ... │
12
- * └──────────────────────────────────────────────────────────┘
13
- *
14
- * ai_summaries 表(链式摘要):
15
- * ┌────────────────────────────────────────────────────────────────────┐
16
- * │ id | session_id | parent_id | from_round | to_round | summary │
17
- * │ 1 | s1 | null | 1 | 7 | 用户讨论了… │
18
- * │ 2 | s1 | 1 | 8 | 15 | 之前...又… │
19
- * └────────────────────────────────────────────────────────────────────┘
20
- *
21
- * 摘要触发规则:
22
- * 1. 检测到话题切换(当前消息与最近消息的关键词重合度低)
23
- * 2. 且上一个话题持续 ≥ minTopicRounds 轮
24
- * → 异步生成摘要,覆盖上一话题的全部消息
25
- *
26
- * 上下文构建规则:
27
- * 1. 取最新 summary + 最近 slidingWindowSize 轮消息(滑动窗口)
28
- * 2. 检查连续性:summary.to_round === window第一条round - 1
29
- * → 连续:[summary] + [window]
30
- * → 不连续:丢弃 summary,仅用 [window]
31
- */
32
- import type { AIProvider, ChatMessage } from './types.js';
33
- /** ai_messages 表结构 */
34
- export declare const AI_MESSAGE_MODEL: {
35
- session_id: {
36
- type: "text";
37
- nullable: boolean;
38
- };
39
- role: {
40
- type: "text";
41
- nullable: boolean;
42
- };
43
- content: {
44
- type: "text";
45
- nullable: boolean;
46
- };
47
- round: {
48
- type: "integer";
49
- nullable: boolean;
50
- };
51
- created_at: {
52
- type: "integer";
53
- default: number;
54
- };
55
- };
56
- /** ai_summaries 表结构(链式) */
57
- export declare const AI_SUMMARY_MODEL: {
58
- session_id: {
59
- type: "text";
60
- nullable: boolean;
61
- };
62
- parent_id: {
63
- type: "integer";
64
- nullable: boolean;
65
- };
66
- from_round: {
67
- type: "integer";
68
- nullable: boolean;
69
- };
70
- to_round: {
71
- type: "integer";
72
- nullable: boolean;
73
- };
74
- summary: {
75
- type: "text";
76
- nullable: boolean;
77
- };
78
- created_at: {
79
- type: "integer";
80
- default: number;
81
- };
82
- };
83
- /**
84
- * 数据库模型接口(与 RelatedModel 的链式查询 API 对齐)
85
- *
86
- * select(...fields) → Selection (thenable, 支持 .where().orderBy().limit())
87
- * create(data) → Promise<any>
88
- */
89
- interface DbModel {
90
- select(...fields: string[]): any;
91
- create(data: Record<string, any>): Promise<any>;
92
- }
93
- export interface ConversationMemoryConfig {
94
- /** 一个话题至少持续多少轮才触发摘要(默认 5) */
95
- minTopicRounds?: number;
96
- /** 滑动窗口大小:最近 N 轮消息(默认 5) */
97
- slidingWindowSize?: number;
98
- /** 话题切换检测阈值(0-1,值越低越敏感,默认 0.15) */
99
- topicChangeThreshold?: number;
100
- }
101
- export declare class ConversationMemory {
102
- private store;
103
- private provider;
104
- private config;
105
- private summarizing;
106
- /** per-session 话题跟踪 */
107
- private topicStates;
108
- /** per-session 轮次缓存(避免每次查数据库) */
109
- private roundCache;
110
- constructor(config?: ConversationMemoryConfig);
111
- setProvider(provider: AIProvider): void;
112
- upgradeToDatabase(msgModel: DbModel, sumModel: DbModel): void;
113
- /**
114
- * 保存一轮对话,并检测话题切换来触发摘要
115
- */
116
- saveRound(sessionId: string, userContent: string, assistantContent: string): Promise<void>;
117
- /**
118
- * 话题检测流程(全程异步,不阻塞对话):
119
- *
120
- * 1. 短消息(token ≤ 3)→ 跳过检测,视为延续话题
121
- * 2. Jaccard 快检 → 高相似(≥ 0.5) → 肯定同话题,跳过 LLM
122
- * 3. Jaccard 不确定(< 0.5) → 调 LLM 裁决
123
- * 4. LLM 判定切换 + 旧话题 ≥ minTopicRounds → 触发摘要
124
- */
125
- private handleTopicAndSummary;
126
- /** 更新话题状态(同话题情况) */
127
- private updateTopicState;
128
- /**
129
- * 调用 LLM 判断话题是否切换
130
- *
131
- * 输入: 最近几条用户消息 + 当前用户消息
132
- * 输出: true = 话题切换, false = 同话题
133
- */
134
- private detectTopicChangeByLLM;
135
- /**
136
- * 异步生成链式摘要(不阻塞对话)
137
- */
138
- private generateSummaryAsync;
139
- /**
140
- * 构建 LLM 上下文消息列表
141
- *
142
- * 规则:
143
- * 1. 取滑动窗口(最近 slidingWindowSize 轮)
144
- * 2. 取最新 summary
145
- * 3. 检查连续性:summary.to_round === window第一轮 - 1
146
- * → 连续:[summary] + [window 消息]
147
- * → 不连续:仅 [window 消息]
148
- */
149
- buildContext(sessionId: string): Promise<ChatMessage[]>;
150
- private callLLMSummarize;
151
- searchMessages(sessionId: string, keyword: string, limit?: number): Promise<{
152
- round: number;
153
- role: string;
154
- content: string;
155
- time: number;
156
- }[]>;
157
- getMessagesByRound(sessionId: string, fromRound: number, toRound: number): Promise<{
158
- round: number;
159
- role: string;
160
- content: string;
161
- time: number;
162
- }[]>;
163
- getCurrentRound(sessionId: string): Promise<number>;
164
- traceByKeyword(sessionId: string, keyword: string, limit?: number): Promise<{
165
- summary: {
166
- id: number;
167
- fromRound: number;
168
- toRound: number;
169
- summary: string;
170
- } | null;
171
- messages: {
172
- round: number;
173
- role: string;
174
- content: string;
175
- time: number;
176
- }[];
177
- }>;
178
- dispose(): void;
179
- }
180
- export {};
181
- //# sourceMappingURL=conversation-memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-memory.d.ts","sourceRoot":"","sources":["../../src/ai/conversation-memory.ts"],"names":[],"mappings":"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"}