mozi-bot 1.0.0

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 (259) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +467 -0
  3. package/dist/agents/agent.d.ts +118 -0
  4. package/dist/agents/agent.d.ts.map +1 -0
  5. package/dist/agents/agent.js +686 -0
  6. package/dist/agents/agent.js.map +1 -0
  7. package/dist/agents/compaction.d.ts +78 -0
  8. package/dist/agents/compaction.d.ts.map +1 -0
  9. package/dist/agents/compaction.js +350 -0
  10. package/dist/agents/compaction.js.map +1 -0
  11. package/dist/agents/failover-error.d.ts +42 -0
  12. package/dist/agents/failover-error.d.ts.map +1 -0
  13. package/dist/agents/failover-error.js +171 -0
  14. package/dist/agents/failover-error.js.map +1 -0
  15. package/dist/agents/index.d.ts +10 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/index.js +10 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/model-fallback.d.ts +54 -0
  20. package/dist/agents/model-fallback.d.ts.map +1 -0
  21. package/dist/agents/model-fallback.js +227 -0
  22. package/dist/agents/model-fallback.js.map +1 -0
  23. package/dist/agents/session-store.d.ts +53 -0
  24. package/dist/agents/session-store.d.ts.map +1 -0
  25. package/dist/agents/session-store.js +217 -0
  26. package/dist/agents/session-store.js.map +1 -0
  27. package/dist/agents/system-prompt.d.ts +29 -0
  28. package/dist/agents/system-prompt.d.ts.map +1 -0
  29. package/dist/agents/system-prompt.js +299 -0
  30. package/dist/agents/system-prompt.js.map +1 -0
  31. package/dist/channels/common/base.d.ts +40 -0
  32. package/dist/channels/common/base.d.ts.map +1 -0
  33. package/dist/channels/common/base.js +23 -0
  34. package/dist/channels/common/base.js.map +1 -0
  35. package/dist/channels/common/index.d.ts +21 -0
  36. package/dist/channels/common/index.d.ts.map +1 -0
  37. package/dist/channels/common/index.js +66 -0
  38. package/dist/channels/common/index.js.map +1 -0
  39. package/dist/channels/dingtalk/api.d.ts +30 -0
  40. package/dist/channels/dingtalk/api.d.ts.map +1 -0
  41. package/dist/channels/dingtalk/api.js +149 -0
  42. package/dist/channels/dingtalk/api.js.map +1 -0
  43. package/dist/channels/dingtalk/events.d.ts +80 -0
  44. package/dist/channels/dingtalk/events.d.ts.map +1 -0
  45. package/dist/channels/dingtalk/events.js +92 -0
  46. package/dist/channels/dingtalk/events.js.map +1 -0
  47. package/dist/channels/dingtalk/index.d.ts +51 -0
  48. package/dist/channels/dingtalk/index.d.ts.map +1 -0
  49. package/dist/channels/dingtalk/index.js +231 -0
  50. package/dist/channels/dingtalk/index.js.map +1 -0
  51. package/dist/channels/dingtalk/stream.d.ts +31 -0
  52. package/dist/channels/dingtalk/stream.d.ts.map +1 -0
  53. package/dist/channels/dingtalk/stream.js +116 -0
  54. package/dist/channels/dingtalk/stream.js.map +1 -0
  55. package/dist/channels/feishu/api.d.ts +33 -0
  56. package/dist/channels/feishu/api.d.ts.map +1 -0
  57. package/dist/channels/feishu/api.js +120 -0
  58. package/dist/channels/feishu/api.js.map +1 -0
  59. package/dist/channels/feishu/events.d.ts +87 -0
  60. package/dist/channels/feishu/events.d.ts.map +1 -0
  61. package/dist/channels/feishu/events.js +163 -0
  62. package/dist/channels/feishu/events.js.map +1 -0
  63. package/dist/channels/feishu/index.d.ts +46 -0
  64. package/dist/channels/feishu/index.d.ts.map +1 -0
  65. package/dist/channels/feishu/index.js +207 -0
  66. package/dist/channels/feishu/index.js.map +1 -0
  67. package/dist/channels/feishu/websocket.d.ts +32 -0
  68. package/dist/channels/feishu/websocket.d.ts.map +1 -0
  69. package/dist/channels/feishu/websocket.js +121 -0
  70. package/dist/channels/feishu/websocket.js.map +1 -0
  71. package/dist/channels/index.d.ts +9 -0
  72. package/dist/channels/index.d.ts.map +1 -0
  73. package/dist/channels/index.js +9 -0
  74. package/dist/channels/index.js.map +1 -0
  75. package/dist/cli/index.d.ts +6 -0
  76. package/dist/cli/index.d.ts.map +1 -0
  77. package/dist/cli/index.js +468 -0
  78. package/dist/cli/index.js.map +1 -0
  79. package/dist/commands/index.d.ts +54 -0
  80. package/dist/commands/index.d.ts.map +1 -0
  81. package/dist/commands/index.js +171 -0
  82. package/dist/commands/index.js.map +1 -0
  83. package/dist/config/index.d.ts +201 -0
  84. package/dist/config/index.d.ts.map +1 -0
  85. package/dist/config/index.js +261 -0
  86. package/dist/config/index.js.map +1 -0
  87. package/dist/gateway/index.d.ts +5 -0
  88. package/dist/gateway/index.d.ts.map +1 -0
  89. package/dist/gateway/index.js +5 -0
  90. package/dist/gateway/index.js.map +1 -0
  91. package/dist/gateway/server.d.ts +42 -0
  92. package/dist/gateway/server.d.ts.map +1 -0
  93. package/dist/gateway/server.js +235 -0
  94. package/dist/gateway/server.js.map +1 -0
  95. package/dist/hooks/index.d.ts +168 -0
  96. package/dist/hooks/index.d.ts.map +1 -0
  97. package/dist/hooks/index.js +148 -0
  98. package/dist/hooks/index.js.map +1 -0
  99. package/dist/index.d.ts +18 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +29 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/memory/index.d.ts +94 -0
  104. package/dist/memory/index.d.ts.map +1 -0
  105. package/dist/memory/index.js +282 -0
  106. package/dist/memory/index.js.map +1 -0
  107. package/dist/plugins/index.d.ts +57 -0
  108. package/dist/plugins/index.d.ts.map +1 -0
  109. package/dist/plugins/index.js +103 -0
  110. package/dist/plugins/index.js.map +1 -0
  111. package/dist/providers/anthropic-compatible.d.ts +48 -0
  112. package/dist/providers/anthropic-compatible.d.ts.map +1 -0
  113. package/dist/providers/anthropic-compatible.js +380 -0
  114. package/dist/providers/anthropic-compatible.js.map +1 -0
  115. package/dist/providers/base.d.ts +26 -0
  116. package/dist/providers/base.d.ts.map +1 -0
  117. package/dist/providers/base.js +58 -0
  118. package/dist/providers/base.js.map +1 -0
  119. package/dist/providers/custom-openai.d.ts +66 -0
  120. package/dist/providers/custom-openai.d.ts.map +1 -0
  121. package/dist/providers/custom-openai.js +255 -0
  122. package/dist/providers/custom-openai.js.map +1 -0
  123. package/dist/providers/dashscope.d.ts +15 -0
  124. package/dist/providers/dashscope.d.ts.map +1 -0
  125. package/dist/providers/dashscope.js +237 -0
  126. package/dist/providers/dashscope.js.map +1 -0
  127. package/dist/providers/deepseek.d.ts +10 -0
  128. package/dist/providers/deepseek.d.ts.map +1 -0
  129. package/dist/providers/deepseek.js +57 -0
  130. package/dist/providers/deepseek.js.map +1 -0
  131. package/dist/providers/index.d.ts +33 -0
  132. package/dist/providers/index.d.ts.map +1 -0
  133. package/dist/providers/index.js +142 -0
  134. package/dist/providers/index.js.map +1 -0
  135. package/dist/providers/kimi.d.ts +10 -0
  136. package/dist/providers/kimi.d.ts.map +1 -0
  137. package/dist/providers/kimi.js +83 -0
  138. package/dist/providers/kimi.js.map +1 -0
  139. package/dist/providers/minimax.d.ts +20 -0
  140. package/dist/providers/minimax.d.ts.map +1 -0
  141. package/dist/providers/minimax.js +252 -0
  142. package/dist/providers/minimax.js.map +1 -0
  143. package/dist/providers/modelscope.d.ts +15 -0
  144. package/dist/providers/modelscope.d.ts.map +1 -0
  145. package/dist/providers/modelscope.js +237 -0
  146. package/dist/providers/modelscope.js.map +1 -0
  147. package/dist/providers/openai-compatible.d.ts +57 -0
  148. package/dist/providers/openai-compatible.d.ts.map +1 -0
  149. package/dist/providers/openai-compatible.js +193 -0
  150. package/dist/providers/openai-compatible.js.map +1 -0
  151. package/dist/providers/stepfun.d.ts +10 -0
  152. package/dist/providers/stepfun.d.ts.map +1 -0
  153. package/dist/providers/stepfun.js +125 -0
  154. package/dist/providers/stepfun.js.map +1 -0
  155. package/dist/providers/zhipu.d.ts +15 -0
  156. package/dist/providers/zhipu.d.ts.map +1 -0
  157. package/dist/providers/zhipu.js +247 -0
  158. package/dist/providers/zhipu.js.map +1 -0
  159. package/dist/sessions/index.d.ts +6 -0
  160. package/dist/sessions/index.d.ts.map +1 -0
  161. package/dist/sessions/index.js +6 -0
  162. package/dist/sessions/index.js.map +1 -0
  163. package/dist/sessions/store.d.ts +45 -0
  164. package/dist/sessions/store.d.ts.map +1 -0
  165. package/dist/sessions/store.js +268 -0
  166. package/dist/sessions/store.js.map +1 -0
  167. package/dist/sessions/types.d.ts +110 -0
  168. package/dist/sessions/types.d.ts.map +1 -0
  169. package/dist/sessions/types.js +6 -0
  170. package/dist/sessions/types.js.map +1 -0
  171. package/dist/tools/builtin/apply-patch.d.ts +8 -0
  172. package/dist/tools/builtin/apply-patch.d.ts.map +1 -0
  173. package/dist/tools/builtin/apply-patch.js +272 -0
  174. package/dist/tools/builtin/apply-patch.js.map +1 -0
  175. package/dist/tools/builtin/bash.d.ts +25 -0
  176. package/dist/tools/builtin/bash.d.ts.map +1 -0
  177. package/dist/tools/builtin/bash.js +212 -0
  178. package/dist/tools/builtin/bash.js.map +1 -0
  179. package/dist/tools/builtin/browser.d.ts +12 -0
  180. package/dist/tools/builtin/browser.d.ts.map +1 -0
  181. package/dist/tools/builtin/browser.js +693 -0
  182. package/dist/tools/builtin/browser.js.map +1 -0
  183. package/dist/tools/builtin/filesystem.d.ts +29 -0
  184. package/dist/tools/builtin/filesystem.d.ts.map +1 -0
  185. package/dist/tools/builtin/filesystem.js +484 -0
  186. package/dist/tools/builtin/filesystem.js.map +1 -0
  187. package/dist/tools/builtin/image.d.ts +13 -0
  188. package/dist/tools/builtin/image.d.ts.map +1 -0
  189. package/dist/tools/builtin/image.js +126 -0
  190. package/dist/tools/builtin/image.js.map +1 -0
  191. package/dist/tools/builtin/index.d.ts +30 -0
  192. package/dist/tools/builtin/index.d.ts.map +1 -0
  193. package/dist/tools/builtin/index.js +55 -0
  194. package/dist/tools/builtin/index.js.map +1 -0
  195. package/dist/tools/builtin/process-registry.d.ts +71 -0
  196. package/dist/tools/builtin/process-registry.d.ts.map +1 -0
  197. package/dist/tools/builtin/process-registry.js +172 -0
  198. package/dist/tools/builtin/process-registry.js.map +1 -0
  199. package/dist/tools/builtin/process-tool.d.ts +8 -0
  200. package/dist/tools/builtin/process-tool.d.ts.map +1 -0
  201. package/dist/tools/builtin/process-tool.js +279 -0
  202. package/dist/tools/builtin/process-tool.js.map +1 -0
  203. package/dist/tools/builtin/subagent.d.ts +33 -0
  204. package/dist/tools/builtin/subagent.d.ts.map +1 -0
  205. package/dist/tools/builtin/subagent.js +185 -0
  206. package/dist/tools/builtin/subagent.js.map +1 -0
  207. package/dist/tools/builtin/system.d.ts +11 -0
  208. package/dist/tools/builtin/system.d.ts.map +1 -0
  209. package/dist/tools/builtin/system.js +144 -0
  210. package/dist/tools/builtin/system.js.map +1 -0
  211. package/dist/tools/builtin/web.d.ts +9 -0
  212. package/dist/tools/builtin/web.d.ts.map +1 -0
  213. package/dist/tools/builtin/web.js +87 -0
  214. package/dist/tools/builtin/web.js.map +1 -0
  215. package/dist/tools/common.d.ts +45 -0
  216. package/dist/tools/common.d.ts.map +1 -0
  217. package/dist/tools/common.js +129 -0
  218. package/dist/tools/common.js.map +1 -0
  219. package/dist/tools/index.d.ts +8 -0
  220. package/dist/tools/index.d.ts.map +1 -0
  221. package/dist/tools/index.js +8 -0
  222. package/dist/tools/index.js.map +1 -0
  223. package/dist/tools/registry.d.ts +33 -0
  224. package/dist/tools/registry.d.ts.map +1 -0
  225. package/dist/tools/registry.js +174 -0
  226. package/dist/tools/registry.js.map +1 -0
  227. package/dist/tools/types.d.ts +58 -0
  228. package/dist/tools/types.d.ts.map +1 -0
  229. package/dist/tools/types.js +11 -0
  230. package/dist/tools/types.js.map +1 -0
  231. package/dist/types/index.d.ts +280 -0
  232. package/dist/types/index.d.ts.map +1 -0
  233. package/dist/types/index.js +34 -0
  234. package/dist/types/index.js.map +1 -0
  235. package/dist/utils/index.d.ts +35 -0
  236. package/dist/utils/index.d.ts.map +1 -0
  237. package/dist/utils/index.js +114 -0
  238. package/dist/utils/index.js.map +1 -0
  239. package/dist/utils/logger.d.ts +24 -0
  240. package/dist/utils/logger.d.ts.map +1 -0
  241. package/dist/utils/logger.js +94 -0
  242. package/dist/utils/logger.js.map +1 -0
  243. package/dist/web/index.d.ts +7 -0
  244. package/dist/web/index.d.ts.map +1 -0
  245. package/dist/web/index.js +7 -0
  246. package/dist/web/index.js.map +1 -0
  247. package/dist/web/static.d.ts +12 -0
  248. package/dist/web/static.d.ts.map +1 -0
  249. package/dist/web/static.js +1260 -0
  250. package/dist/web/static.js.map +1 -0
  251. package/dist/web/types.d.ts +95 -0
  252. package/dist/web/types.d.ts.map +1 -0
  253. package/dist/web/types.js +5 -0
  254. package/dist/web/types.js.map +1 -0
  255. package/dist/web/websocket.d.ts +58 -0
  256. package/dist/web/websocket.d.ts.map +1 -0
  257. package/dist/web/websocket.js +371 -0
  258. package/dist/web/websocket.js.map +1 -0
  259. package/package.json +89 -0
@@ -0,0 +1,217 @@
1
+ /**
2
+ * 会话存储 - 支持内存和文件系统持久化
3
+ */
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, unlinkSync, statSync } from "fs";
5
+ import { join } from "path";
6
+ import * as os from "os";
7
+ import { getChildLogger } from "../utils/logger.js";
8
+ const logger = getChildLogger("session-store");
9
+ // ============== 内存存储 ==============
10
+ export class MemorySessionStore {
11
+ store = new Map();
12
+ ttlMs;
13
+ constructor(ttlMs = 3600_000) {
14
+ this.ttlMs = ttlMs;
15
+ // 定期清理过期会话
16
+ setInterval(() => this.cleanup(), 600_000);
17
+ }
18
+ get(key) {
19
+ const data = this.store.get(key);
20
+ if (data && Date.now() - data.lastUpdate > this.ttlMs) {
21
+ this.store.delete(key);
22
+ return undefined;
23
+ }
24
+ return data;
25
+ }
26
+ set(key, data) {
27
+ this.store.set(key, data);
28
+ }
29
+ delete(key) {
30
+ return this.store.delete(key);
31
+ }
32
+ has(key) {
33
+ return this.get(key) !== undefined;
34
+ }
35
+ keys() {
36
+ this.cleanup();
37
+ return Array.from(this.store.keys());
38
+ }
39
+ clear() {
40
+ this.store.clear();
41
+ }
42
+ cleanup() {
43
+ const now = Date.now();
44
+ for (const [key, data] of this.store) {
45
+ if (now - data.lastUpdate > this.ttlMs) {
46
+ this.store.delete(key);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ export class FileSessionStore {
52
+ directory;
53
+ ttlMs;
54
+ cache = new Map();
55
+ cacheMaxAge = 60_000; // 缓存 1 分钟
56
+ constructor(directory, ttlMs = 3600_000) {
57
+ this.directory = directory ?? join(os.homedir(), ".mozi", "sessions");
58
+ this.ttlMs = ttlMs;
59
+ this.ensureDirectory();
60
+ // 定期清理
61
+ setInterval(() => this.cleanup(), 600_000);
62
+ }
63
+ ensureDirectory() {
64
+ if (!existsSync(this.directory)) {
65
+ mkdirSync(this.directory, { recursive: true });
66
+ logger.info({ directory: this.directory }, "Session directory created");
67
+ }
68
+ }
69
+ keyToFilename(key) {
70
+ // 安全的文件名
71
+ const safe = key.replace(/[^a-zA-Z0-9_-]/g, "_");
72
+ return join(this.directory, `${safe}.json`);
73
+ }
74
+ get(key) {
75
+ // 先检查缓存
76
+ const cached = this.cache.get(key);
77
+ if (cached && Date.now() - cached.loadedAt < this.cacheMaxAge) {
78
+ if (Date.now() - cached.data.lastUpdate > this.ttlMs) {
79
+ this.cache.delete(key);
80
+ this.deleteFile(key);
81
+ return undefined;
82
+ }
83
+ return cached.data;
84
+ }
85
+ // 从文件读取
86
+ const filepath = this.keyToFilename(key);
87
+ if (!existsSync(filepath))
88
+ return undefined;
89
+ try {
90
+ const raw = readFileSync(filepath, "utf-8");
91
+ const data = JSON.parse(raw);
92
+ // 检查过期
93
+ if (Date.now() - data.lastUpdate > this.ttlMs) {
94
+ this.deleteFile(key);
95
+ return undefined;
96
+ }
97
+ // 更新缓存
98
+ this.cache.set(key, { data, loadedAt: Date.now() });
99
+ return data;
100
+ }
101
+ catch (error) {
102
+ logger.error({ error, key }, "Failed to read session file");
103
+ return undefined;
104
+ }
105
+ }
106
+ set(key, data) {
107
+ const filepath = this.keyToFilename(key);
108
+ // 序列化消息(去除不可序列化的字段)
109
+ const serializable = {
110
+ ...data,
111
+ messages: data.messages.map((msg) => {
112
+ const sm = {
113
+ role: msg.role,
114
+ content: typeof msg.content === "string" ? msg.content : (msg.content ? JSON.stringify(msg.content) : null),
115
+ };
116
+ if (msg.tool_calls)
117
+ sm.tool_calls = msg.tool_calls;
118
+ if (msg.tool_call_id)
119
+ sm.tool_call_id = msg.tool_call_id;
120
+ if (msg.name)
121
+ sm.name = msg.name;
122
+ return sm;
123
+ }),
124
+ };
125
+ try {
126
+ writeFileSync(filepath, JSON.stringify(serializable, null, 2), "utf-8");
127
+ this.cache.set(key, { data, loadedAt: Date.now() });
128
+ }
129
+ catch (error) {
130
+ logger.error({ error, key }, "Failed to write session file");
131
+ }
132
+ }
133
+ delete(key) {
134
+ this.cache.delete(key);
135
+ return this.deleteFile(key);
136
+ }
137
+ deleteFile(key) {
138
+ const filepath = this.keyToFilename(key);
139
+ if (existsSync(filepath)) {
140
+ try {
141
+ unlinkSync(filepath);
142
+ return true;
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ }
148
+ return false;
149
+ }
150
+ has(key) {
151
+ return this.get(key) !== undefined;
152
+ }
153
+ keys() {
154
+ this.ensureDirectory();
155
+ try {
156
+ return readdirSync(this.directory)
157
+ .filter((f) => f.endsWith(".json"))
158
+ .map((f) => f.replace(".json", "").replace(/_/g, ":"));
159
+ }
160
+ catch {
161
+ return [];
162
+ }
163
+ }
164
+ clear() {
165
+ this.cache.clear();
166
+ this.ensureDirectory();
167
+ try {
168
+ const files = readdirSync(this.directory).filter((f) => f.endsWith(".json"));
169
+ for (const f of files) {
170
+ unlinkSync(join(this.directory, f));
171
+ }
172
+ }
173
+ catch (error) {
174
+ logger.error({ error }, "Failed to clear session directory");
175
+ }
176
+ }
177
+ cleanup() {
178
+ this.ensureDirectory();
179
+ const now = Date.now();
180
+ // 清理内存缓存
181
+ for (const [key, cached] of this.cache) {
182
+ if (now - cached.data.lastUpdate > this.ttlMs) {
183
+ this.cache.delete(key);
184
+ }
185
+ }
186
+ // 清理文件
187
+ try {
188
+ const files = readdirSync(this.directory).filter((f) => f.endsWith(".json"));
189
+ for (const f of files) {
190
+ const filepath = join(this.directory, f);
191
+ try {
192
+ const stat = statSync(filepath);
193
+ if (now - stat.mtimeMs > this.ttlMs) {
194
+ unlinkSync(filepath);
195
+ }
196
+ }
197
+ catch {
198
+ // ignore
199
+ }
200
+ }
201
+ }
202
+ catch {
203
+ // ignore
204
+ }
205
+ }
206
+ }
207
+ // ============== 工厂函数 ==============
208
+ /** 创建会话存储 */
209
+ export function createSessionStore(config) {
210
+ const type = config?.type ?? "memory";
211
+ const ttlMs = config?.ttlMs ?? 3600_000;
212
+ if (type === "file") {
213
+ return new FileSessionStore(config?.directory, ttlMs);
214
+ }
215
+ return new MemorySessionStore(ttlMs);
216
+ }
217
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/agents/session-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 系统提示构建器
3
+ * 参考 moltbot 的 system-prompt.ts
4
+ */
5
+ import type { Tool } from "../tools/types.js";
6
+ /** 系统提示选项 */
7
+ export interface SystemPromptOptions {
8
+ /** 基础系统提示 */
9
+ basePrompt?: string;
10
+ /** 工作目录 */
11
+ workingDirectory?: string;
12
+ /** 是否包含环境信息 */
13
+ includeEnvironment?: boolean;
14
+ /** 是否包含日期时间 */
15
+ includeDateTime?: boolean;
16
+ /** 是否包含工具使用规则 */
17
+ includeToolRules?: boolean;
18
+ /** 可用工具列表 (用于生成工具使用指南) */
19
+ tools?: Tool[];
20
+ /** 额外的上下文 (如之前的摘要) */
21
+ additionalContext?: string;
22
+ /** 用户名 */
23
+ userName?: string;
24
+ }
25
+ /** 构建完整系统提示 */
26
+ export declare function buildSystemPrompt(options: SystemPromptOptions): string;
27
+ /** 创建默认系统提示 */
28
+ export declare function createDefaultSystemPrompt(tools?: Tool[]): string;
29
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/agents/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,aAAa;AACb,MAAM,WAAW,mBAAmB;IAClC,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0BAA0B;IAC1B,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,sBAAsB;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA8QD,eAAe;AACf,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAuCtE;AAED,eAAe;AACf,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,CAOhE"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * 系统提示构建器
3
+ * 参考 moltbot 的 system-prompt.ts
4
+ */
5
+ import * as os from "os";
6
+ import * as path from "path";
7
+ /** 获取平台信息 */
8
+ function getPlatformInfo() {
9
+ const platform = os.platform();
10
+ const arch = os.arch();
11
+ const release = os.release();
12
+ const platformNames = {
13
+ darwin: "macOS",
14
+ linux: "Linux",
15
+ win32: "Windows",
16
+ };
17
+ const platformName = platformNames[platform] ?? platform;
18
+ return `${platformName} ${release} (${arch})`;
19
+ }
20
+ /** 获取当前日期时间 */
21
+ function getCurrentDateTime() {
22
+ const now = new Date();
23
+ const dateStr = now.toLocaleDateString("zh-CN", {
24
+ year: "numeric",
25
+ month: "long",
26
+ day: "numeric",
27
+ weekday: "long",
28
+ });
29
+ const timeStr = now.toLocaleTimeString("zh-CN", {
30
+ hour: "2-digit",
31
+ minute: "2-digit",
32
+ timeZoneName: "short",
33
+ });
34
+ return `${dateStr} ${timeStr}`;
35
+ }
36
+ /** 获取 Shell 信息 */
37
+ function getShellInfo() {
38
+ return process.env.SHELL ?? "/bin/bash";
39
+ }
40
+ /** 构建环境信息部分 */
41
+ function buildEnvironmentSection(options) {
42
+ const cwd = options.workingDirectory ?? process.cwd();
43
+ const sections = [];
44
+ sections.push(`<environment>`);
45
+ sections.push(`Working directory: ${cwd}`);
46
+ sections.push(`Platform: ${getPlatformInfo()}`);
47
+ sections.push(`Shell: ${getShellInfo()}`);
48
+ sections.push(`Home: ${os.homedir()}`);
49
+ if (options.includeDateTime !== false) {
50
+ sections.push(`Current time: ${getCurrentDateTime()}`);
51
+ }
52
+ // 检测是否是 git 仓库
53
+ try {
54
+ const gitDir = path.join(cwd, ".git");
55
+ const fs = require("fs");
56
+ if (fs.existsSync(gitDir)) {
57
+ sections.push(`Git repository: Yes`);
58
+ }
59
+ }
60
+ catch {
61
+ // ignore
62
+ }
63
+ if (options.userName) {
64
+ sections.push(`User: ${options.userName}`);
65
+ }
66
+ sections.push(`</environment>`);
67
+ return sections.join("\n");
68
+ }
69
+ /** 构建工具使用规则 */
70
+ function buildToolRulesSection(tools) {
71
+ if (!tools || tools.length === 0) {
72
+ return "";
73
+ }
74
+ const rules = [
75
+ "",
76
+ "## 工具使用规则",
77
+ "",
78
+ "你可以使用以下工具来完成任务。使用工具时,模型会返回 tool_calls,系统会自动执行并返回结果。",
79
+ "",
80
+ "### 重要原则",
81
+ "",
82
+ "1. **读取优先**: 在修改任何文件之前,必须先使用 read_file 读取文件内容,了解现有代码结构。",
83
+ "2. **最小改动**: 只做必要的修改,不要过度工程化或添加不需要的功能。",
84
+ "3. **安全意识**: 避免执行危险命令,不要泄露敏感信息。",
85
+ "4. **错误处理**: 如果工具执行失败,分析错误原因并尝试修复。",
86
+ "5. **确认结果**: 执行重要操作后,验证结果是否符合预期。",
87
+ "",
88
+ "### 可用工具",
89
+ "",
90
+ ];
91
+ // 按类别分组工具
92
+ const categories = {
93
+ "文件操作": [],
94
+ "命令执行": [],
95
+ "搜索": [],
96
+ "网络": [],
97
+ "其他": [],
98
+ };
99
+ for (const tool of tools) {
100
+ if (["read_file", "write_file", "edit_file", "list_directory"].includes(tool.name)) {
101
+ categories["文件操作"].push(tool);
102
+ }
103
+ else if (["bash", "process"].includes(tool.name)) {
104
+ categories["命令执行"].push(tool);
105
+ }
106
+ else if (["glob", "grep"].includes(tool.name)) {
107
+ categories["搜索"].push(tool);
108
+ }
109
+ else if (["web_search", "web_fetch", "browser"].includes(tool.name)) {
110
+ categories["网络"].push(tool);
111
+ }
112
+ else {
113
+ categories["其他"].push(tool);
114
+ }
115
+ }
116
+ for (const [category, categoryTools] of Object.entries(categories)) {
117
+ if (categoryTools.length === 0)
118
+ continue;
119
+ rules.push(`**${category}**:`);
120
+ for (const tool of categoryTools) {
121
+ const label = tool.label ?? tool.name;
122
+ // 简化描述,只取第一句
123
+ const desc = tool.description.split("\n")[0]?.slice(0, 80) ?? "";
124
+ rules.push(`- \`${tool.name}\`: ${desc}`);
125
+ }
126
+ rules.push("");
127
+ }
128
+ return rules.join("\n");
129
+ }
130
+ /** 构建文件操作指南 */
131
+ function buildFileOperationsGuide() {
132
+ return `
133
+ ### 文件操作最佳实践
134
+
135
+ **读取文件**:
136
+ - 使用 read_file 读取文件,支持 offset 和 limit 参数读取部分内容
137
+ - 大文件应分段读取
138
+
139
+ **编辑文件**:
140
+ - 使用 edit_file 进行精确的字符串替换
141
+ - old_string 必须是文件中唯一的,否则需要提供更多上下文
142
+ - 如果需要替换所有出现,使用 replace_all: true
143
+
144
+ **创建文件**:
145
+ - 使用 write_file 创建新文件或完全重写文件
146
+ - 优先编辑现有文件而非重写
147
+
148
+ **搜索文件**:
149
+ - 使用 glob 按文件名模式搜索
150
+ - 使用 grep 按内容搜索
151
+ `;
152
+ }
153
+ /** 构建 Bash 使用指南 */
154
+ function buildBashGuide() {
155
+ return `
156
+ ### Bash 命令使用指南
157
+
158
+ **基本规则**:
159
+ - 优先使用专用工具(read_file、edit_file 等)而非 bash 的 cat、sed 等
160
+ - 对于长时间运行的命令,使用 run_in_background: true
161
+ - 命令超时时间最长 10 分钟
162
+
163
+ **后台进程**:
164
+ - 使用 bash 工具的 run_in_background 参数启动后台任务
165
+ - 使用 process 工具的 poll 操作获取输出
166
+ - 使用 process 工具的 kill 操作终止进程
167
+
168
+ **安全限制**:
169
+ - 禁止执行破坏性命令 (rm -rf /、mkfs 等)
170
+ - 禁止修改系统关键配置
171
+ `;
172
+ }
173
+ /** 构建浏览器工具使用指南 */
174
+ function buildBrowserGuide() {
175
+ return `
176
+ ### 浏览器自动化指南
177
+
178
+ 你可以使用 \`browser\` 工具进行完整的网页自动化操作,包括打开网页、点击按钮、输入文本等。
179
+
180
+ **基本工作流程**:
181
+ 1. **启动浏览器**: \`browser({ action: "start", headless: false })\` - 设置 headless: false 可以看到浏览器窗口
182
+ 2. **导航到网页**: \`browser({ action: "navigate", url: "https://example.com" })\`
183
+ 3. **获取页面快照**: \`browser({ action: "snapshot" })\` - 获取页面元素引用 (e1, e2, e3...)
184
+ 4. **执行交互操作**: 使用 ref 进行点击、输入等操作
185
+ 5. **关闭浏览器**: \`browser({ action: "stop" })\`
186
+
187
+ **元素引用 (ref) 系统**:
188
+ - 调用 snapshot 后会返回页面交互元素的引用,如 e1, e2, e3
189
+ - 在 click、type、hover 等操作中使用这些 ref
190
+ - ref 比 CSS 选择器更可靠,适合 AI 驱动的自动化
191
+
192
+ **支持的操作**:
193
+ | 操作 | 说明 | 示例 |
194
+ |------|------|------|
195
+ | start | 启动浏览器 | \`{ action: "start", headless: false }\` |
196
+ | stop | 关闭浏览器 | \`{ action: "stop" }\` |
197
+ | navigate | 导航到 URL | \`{ action: "navigate", url: "..." }\` |
198
+ | snapshot | 获取页面元素 | \`{ action: "snapshot" }\` |
199
+ | screenshot | 截图 | \`{ action: "screenshot", fullPage: true }\` |
200
+ | click | 点击元素 | \`{ action: "click", ref: "e1" }\` |
201
+ | type | 输入文本 | \`{ action: "type", ref: "e2", text: "hello", submit: true }\` |
202
+ | hover | 悬停 | \`{ action: "hover", ref: "e3" }\` |
203
+ | scroll | 滚动 | \`{ action: "scroll", direction: "down" }\` 或 \`{ action: "scroll", ref: "e5" }\` |
204
+ | press | 按键 | \`{ action: "press", key: "Enter" }\` |
205
+ | select | 选择下拉项 | \`{ action: "select", ref: "e4", values: ["option1"] }\` |
206
+ | wait | 等待 | \`{ action: "wait", waitFor: "text", value: "Success" }\` |
207
+
208
+ **点击操作增强**:
209
+ - 双击: \`{ action: "click", ref: "e1", doubleClick: true }\`
210
+ - 右键: \`{ action: "click", ref: "e1", button: "right" }\`
211
+ - 组合键: \`{ action: "click", ref: "e1", modifiers: ["Control"] }\`
212
+
213
+ **输入操作增强**:
214
+ - 逐字输入: \`{ action: "type", ref: "e2", text: "hello", slowly: true }\`
215
+ - 输入后提交: \`{ action: "type", ref: "e2", text: "search query", submit: true }\`
216
+
217
+ **重要**: 当用户要求操作网页(如点击按钮、填写表单、浏览网页)时,应该使用 browser 工具而不是简单地用 open 命令打开浏览器。
218
+ `;
219
+ }
220
+ /** 构建输出格式指南 */
221
+ function buildOutputFormatGuide() {
222
+ return `
223
+ ## 输出格式
224
+
225
+ 使用清晰结构化的 Markdown 格式输出,使内容易于阅读:
226
+
227
+ **格式要点**:
228
+ - 使用 **粗体** 强调关键信息
229
+ - 使用 \`代码\` 标记命令、函数名、文件路径
230
+ - 使用代码块展示代码,并标注语言
231
+ - 复杂信息用表格或列表组织
232
+ - 用分级标题 (## / ###) 组织长内容
233
+
234
+ **代码块示例**:
235
+ \`\`\`typescript
236
+ function example() {
237
+ return "hello";
238
+ }
239
+ \`\`\`
240
+
241
+ **表格示例**:
242
+ | 项目 | 说明 |
243
+ |------|------|
244
+ | 名称 | 值 |
245
+
246
+ **列表示例**:
247
+ - 第一点
248
+ - 第二点
249
+ - 子项
250
+
251
+ **简洁原则**:
252
+ - 直接回答问题,不要过度解释
253
+ - 代码优于描述
254
+ - 避免重复信息
255
+ `;
256
+ }
257
+ /** 构建完整系统提示 */
258
+ export function buildSystemPrompt(options) {
259
+ const sections = [];
260
+ // 基础提示
261
+ const basePrompt = options.basePrompt ??
262
+ "你是一个智能编程助手,可以帮助用户完成各种软件开发任务。请用中文回答问题,代码和命令使用英文。";
263
+ sections.push(basePrompt);
264
+ // 环境信息
265
+ if (options.includeEnvironment !== false) {
266
+ sections.push("");
267
+ sections.push(buildEnvironmentSection(options));
268
+ }
269
+ // 工具使用规则
270
+ if (options.includeToolRules !== false && options.tools && options.tools.length > 0) {
271
+ sections.push(buildToolRulesSection(options.tools));
272
+ sections.push(buildFileOperationsGuide());
273
+ sections.push(buildBashGuide());
274
+ // 如果有浏览器工具,添加浏览器使用指南
275
+ if (options.tools.some((t) => t.name === "browser")) {
276
+ sections.push(buildBrowserGuide());
277
+ }
278
+ }
279
+ // 输出格式指南
280
+ sections.push(buildOutputFormatGuide());
281
+ // 额外上下文
282
+ if (options.additionalContext) {
283
+ sections.push("");
284
+ sections.push("## 之前的对话摘要");
285
+ sections.push("");
286
+ sections.push(options.additionalContext);
287
+ }
288
+ return sections.join("\n").trim();
289
+ }
290
+ /** 创建默认系统提示 */
291
+ export function createDefaultSystemPrompt(tools) {
292
+ return buildSystemPrompt({
293
+ includeEnvironment: true,
294
+ includeDateTime: true,
295
+ includeToolRules: true,
296
+ tools,
297
+ });
298
+ }
299
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agents/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 通道基类和接口
3
+ */
4
+ import type { ChannelId, ChannelMeta, InboundMessageContext, OutboundMessage, SendResult } from "../../types/index.js";
5
+ /** 通道适配器接口 */
6
+ export interface ChannelAdapter {
7
+ /** 通道 ID */
8
+ id: ChannelId;
9
+ /** 通道元数据 */
10
+ meta: ChannelMeta;
11
+ /** 初始化通道 */
12
+ initialize(): Promise<void>;
13
+ /** 关闭通道 */
14
+ shutdown(): Promise<void>;
15
+ /** 发送消息 */
16
+ sendMessage(message: OutboundMessage): Promise<SendResult>;
17
+ /** 发送文本消息 */
18
+ sendText(chatId: string, text: string, replyToId?: string): Promise<SendResult>;
19
+ /** 检查通道状态 */
20
+ isHealthy(): Promise<boolean>;
21
+ }
22
+ /** 消息处理器类型 */
23
+ export type MessageHandler = (context: InboundMessageContext) => Promise<void>;
24
+ /** 通道基类 */
25
+ export declare abstract class BaseChannelAdapter implements ChannelAdapter {
26
+ abstract id: ChannelId;
27
+ abstract meta: ChannelMeta;
28
+ protected logger: import("pino").Logger;
29
+ protected messageHandler?: MessageHandler;
30
+ /** 设置消息处理器 */
31
+ setMessageHandler(handler: MessageHandler): void;
32
+ /** 处理入站消息 */
33
+ protected handleInboundMessage(context: InboundMessageContext): Promise<void>;
34
+ abstract initialize(): Promise<void>;
35
+ abstract shutdown(): Promise<void>;
36
+ abstract sendMessage(message: OutboundMessage): Promise<SendResult>;
37
+ abstract sendText(chatId: string, text: string, replyToId?: string): Promise<SendResult>;
38
+ abstract isHealthy(): Promise<boolean>;
39
+ }
40
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/channels/common/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EAEX,qBAAqB,EACrB,eAAe,EACf,UAAU,EACX,MAAM,sBAAsB,CAAC;AAG9B,cAAc;AACd,MAAM,WAAW,cAAc;IAC7B,YAAY;IACZ,EAAE,EAAE,SAAS,CAAC;IAEd,YAAY;IACZ,IAAI,EAAE,WAAW,CAAC;IAElB,YAAY;IACZ,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,WAAW;IACX,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,WAAW;IACX,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3D,aAAa;IACb,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhF,aAAa;IACb,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/B;AAED,cAAc;AACd,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/E,WAAW;AACX,8BAAsB,kBAAmB,YAAW,cAAc;IAChE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,SAAS,CAAC,MAAM,wBAA6B;IAC7C,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAE1C,cAAc;IACd,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhD,aAAa;cACG,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnF,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IACnE,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IACxF,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;CACvC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 通道基类和接口
3
+ */
4
+ import { getChildLogger } from "../../utils/logger.js";
5
+ /** 通道基类 */
6
+ export class BaseChannelAdapter {
7
+ logger = getChildLogger("channel");
8
+ messageHandler;
9
+ /** 设置消息处理器 */
10
+ setMessageHandler(handler) {
11
+ this.messageHandler = handler;
12
+ }
13
+ /** 处理入站消息 */
14
+ async handleInboundMessage(context) {
15
+ if (this.messageHandler) {
16
+ await this.messageHandler(context);
17
+ }
18
+ else {
19
+ this.logger.warn("No message handler registered");
20
+ }
21
+ }
22
+ }
23
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/channels/common/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA6BvD,WAAW;AACX,MAAM,OAAgB,kBAAkB;IAI5B,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,cAAc,CAAkB;IAE1C,cAAc;IACd,iBAAiB,CAAC,OAAuB;QACvC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAED,aAAa;IACH,KAAK,CAAC,oBAAoB,CAAC,OAA8B;QACjE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;CAOF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 通道注册表
3
+ */
4
+ import type { ChannelId } from "../../types/index.js";
5
+ import type { ChannelAdapter, MessageHandler } from "./base.js";
6
+ export * from "./base.js";
7
+ /** 注册通道 */
8
+ export declare function registerChannel(channel: ChannelAdapter): void;
9
+ /** 获取通道 */
10
+ export declare function getChannel(id: ChannelId): ChannelAdapter | undefined;
11
+ /** 获取所有通道 */
12
+ export declare function getAllChannels(): ChannelAdapter[];
13
+ /** 检查通道是否可用 */
14
+ export declare function hasChannel(id: ChannelId): boolean;
15
+ /** 设置全局消息处理器 */
16
+ export declare function setGlobalMessageHandler(handler: MessageHandler): void;
17
+ /** 初始化所有通道 */
18
+ export declare function initializeAllChannels(): Promise<void>;
19
+ /** 关闭所有通道 */
20
+ export declare function shutdownAllChannels(): Promise<void>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/common/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhE,cAAc,WAAW,CAAC;AAU1B,WAAW;AACX,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAW7D;AAED,WAAW;AACX,wBAAgB,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAEpE;AAED,aAAa;AACb,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD;AAED,eAAe;AACf,wBAAgB,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAEjD;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CASrE;AAED,cAAc;AACd,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAS3D;AAED,aAAa;AACb,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CASzD"}