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,468 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Mozi CLI - 命令行界面
4
+ */
5
+ import { Command } from "commander";
6
+ import { loadConfig, validateRequiredConfig } from "../config/index.js";
7
+ import { startGateway } from "../gateway/server.js";
8
+ import { initializeProviders, getAllModels } from "../providers/index.js";
9
+ import { createLogger, setLogger, getLogDir, getLogFile } from "../utils/logger.js";
10
+ import dotenv from "dotenv";
11
+ import { spawn } from "child_process";
12
+ import { existsSync, readdirSync, readFileSync, statSync } from "fs";
13
+ import { join } from "path";
14
+ // 加载环境变量
15
+ dotenv.config();
16
+ const program = new Command();
17
+ program
18
+ .name("mozi")
19
+ .description("Mozi - 支持国产模型和国产通讯软件的智能助手机器人")
20
+ .version("1.0.0");
21
+ // 启动命令
22
+ program
23
+ .command("start")
24
+ .description("启动 Gateway 服务器")
25
+ .option("-c, --config <path>", "配置文件路径")
26
+ .option("-p, --port <port>", "服务器端口")
27
+ .option("--web-only", "仅启用 WebChat (不需要配置飞书/钉钉)")
28
+ .action(async (options) => {
29
+ try {
30
+ const config = loadConfig({ configPath: options.config });
31
+ // 覆盖端口
32
+ if (options.port) {
33
+ config.server.port = parseInt(options.port, 10);
34
+ }
35
+ // 验证配置
36
+ const errors = validateRequiredConfig(config, { webOnly: options.webOnly });
37
+ if (errors.length > 0) {
38
+ console.error("❌ 配置错误:");
39
+ errors.forEach((err) => console.error(` - ${err}`));
40
+ process.exit(1);
41
+ }
42
+ await startGateway(config);
43
+ }
44
+ catch (error) {
45
+ console.error("❌ 启动失败:", error instanceof Error ? error.message : error);
46
+ process.exit(1);
47
+ }
48
+ });
49
+ // 模型列表命令
50
+ program
51
+ .command("models")
52
+ .description("列出可用的模型")
53
+ .action(async () => {
54
+ try {
55
+ const config = loadConfig();
56
+ setLogger(createLogger({ level: "error" })); // 静默日志
57
+ initializeProviders(config);
58
+ const models = getAllModels();
59
+ if (models.length === 0) {
60
+ console.log("没有配置任何模型提供商。请检查 API Key 配置。");
61
+ return;
62
+ }
63
+ console.log("\n可用模型:\n");
64
+ // 按提供商分组
65
+ const byProvider = new Map();
66
+ for (const item of models) {
67
+ const list = byProvider.get(item.provider) || [];
68
+ list.push(item);
69
+ byProvider.set(item.provider, list);
70
+ }
71
+ for (const [provider, list] of byProvider) {
72
+ console.log(`📦 ${provider.toUpperCase()}`);
73
+ for (const item of list) {
74
+ const vision = item.model.supportsVision ? " 👁️" : "";
75
+ const reasoning = item.model.supportsReasoning ? " 🧠" : "";
76
+ console.log(` - ${item.model.id} (${item.model.name})${vision}${reasoning}`);
77
+ }
78
+ console.log("");
79
+ }
80
+ }
81
+ catch (error) {
82
+ console.error("错误:", error instanceof Error ? error.message : error);
83
+ process.exit(1);
84
+ }
85
+ });
86
+ // 配置检查命令
87
+ program
88
+ .command("check")
89
+ .description("检查配置")
90
+ .option("-c, --config <path>", "配置文件路径")
91
+ .action(async (options) => {
92
+ try {
93
+ console.log("正在检查配置...\n");
94
+ const config = loadConfig({ configPath: options.config });
95
+ // 检查提供商
96
+ console.log("📦 模型提供商:");
97
+ const providers = ["deepseek", "zhipu", "dashscope", "kimi", "stepfun", "minimax", "modelscope"];
98
+ for (const id of providers) {
99
+ const providerConfig = config.providers[id];
100
+ const status = providerConfig?.apiKey ? "✅ 已配置" : "⬜ 未配置";
101
+ console.log(` ${id}: ${status}`);
102
+ }
103
+ // 检查通道
104
+ console.log("\n📱 通讯通道:");
105
+ const channels = [
106
+ { id: "feishu", name: "飞书", config: config.channels.feishu },
107
+ { id: "dingtalk", name: "钉钉", config: config.channels.dingtalk },
108
+ ];
109
+ for (const channel of channels) {
110
+ const status = channel.config ? "✅ 已配置" : "⬜ 未配置";
111
+ console.log(` ${channel.name}: ${status}`);
112
+ }
113
+ // 检查 Agent
114
+ console.log("\n🤖 Agent 配置:");
115
+ console.log(` 默认模型: ${config.agent.defaultModel}`);
116
+ console.log(` 默认提供商: ${config.agent.defaultProvider}`);
117
+ console.log(` 温度: ${config.agent.temperature}`);
118
+ console.log(` 最大 Token: ${config.agent.maxTokens}`);
119
+ // 检查服务器
120
+ console.log("\n🌐 服务器配置:");
121
+ console.log(` 端口: ${config.server.port}`);
122
+ console.log(` 主机: ${config.server.host || "0.0.0.0"}`);
123
+ // 验证
124
+ const errors = validateRequiredConfig(config);
125
+ if (errors.length > 0) {
126
+ console.log("\n⚠️ 配置问题:");
127
+ errors.forEach((err) => console.log(` - ${err}`));
128
+ }
129
+ else {
130
+ console.log("\n✅ 配置检查通过!");
131
+ }
132
+ }
133
+ catch (error) {
134
+ console.error("❌ 配置错误:", error instanceof Error ? error.message : error);
135
+ process.exit(1);
136
+ }
137
+ });
138
+ // 测试聊天命令
139
+ program
140
+ .command("chat")
141
+ .description("测试聊天功能")
142
+ .option("-m, --model <model>", "使用的模型")
143
+ .option("-p, --provider <provider>", "使用的提供商")
144
+ .action(async (options) => {
145
+ try {
146
+ const config = loadConfig();
147
+ setLogger(createLogger({ level: "error" }));
148
+ initializeProviders(config);
149
+ const readline = await import("readline");
150
+ const rl = readline.createInterface({
151
+ input: process.stdin,
152
+ output: process.stdout,
153
+ });
154
+ const model = options.model || config.agent.defaultModel;
155
+ const provider = options.provider || config.agent.defaultProvider;
156
+ console.log(`\n🤖 Mozi 聊天测试`);
157
+ console.log(` 模型: ${model}`);
158
+ console.log(` 提供商: ${provider}`);
159
+ console.log(` 输入 'exit' 退出\n`);
160
+ const { getProvider, findProviderForModel } = await import("../providers/index.js");
161
+ const p = options.provider ? getProvider(options.provider) : findProviderForModel(model);
162
+ if (!p) {
163
+ console.error(`找不到模型 ${model} 的提供商`);
164
+ process.exit(1);
165
+ }
166
+ const messages = [];
167
+ const ask = () => {
168
+ rl.question("You: ", async (input) => {
169
+ if (input.toLowerCase() === "exit") {
170
+ console.log("再见!");
171
+ rl.close();
172
+ return;
173
+ }
174
+ messages.push({ role: "user", content: input });
175
+ try {
176
+ process.stdout.write("AI: ");
177
+ let fullResponse = "";
178
+ for await (const chunk of p.chatStream({
179
+ model,
180
+ messages,
181
+ temperature: config.agent.temperature,
182
+ maxTokens: config.agent.maxTokens,
183
+ })) {
184
+ process.stdout.write(chunk.delta);
185
+ fullResponse += chunk.delta;
186
+ }
187
+ console.log("\n");
188
+ messages.push({ role: "assistant", content: fullResponse });
189
+ }
190
+ catch (error) {
191
+ console.error("\n错误:", error instanceof Error ? error.message : error);
192
+ }
193
+ ask();
194
+ });
195
+ };
196
+ ask();
197
+ }
198
+ catch (error) {
199
+ console.error("错误:", error instanceof Error ? error.message : error);
200
+ process.exit(1);
201
+ }
202
+ });
203
+ // 配置引导命令
204
+ program
205
+ .command("onboard")
206
+ .description("配置引导向导")
207
+ .action(async () => {
208
+ const readline = await import("readline");
209
+ const fs = await import("fs");
210
+ const path = await import("path");
211
+ const rl = readline.createInterface({
212
+ input: process.stdin,
213
+ output: process.stdout,
214
+ });
215
+ const question = (prompt) => {
216
+ return new Promise((resolve) => {
217
+ rl.question(prompt, resolve);
218
+ });
219
+ };
220
+ console.log(`
221
+ ╔════════════════════════════════════════════════════════════╗
222
+ ║ ║
223
+ ║ 🐼 欢迎使用 Mozi (墨子) 配置向导 ║
224
+ ║ ║
225
+ ║ 支持国产模型和国产通讯软件的智能助手 ║
226
+ ║ ║
227
+ ╚════════════════════════════════════════════════════════════╝
228
+ `);
229
+ const envLines = [];
230
+ // 模型配置
231
+ console.log("\n📦 步骤 1/3: 配置模型提供商\n");
232
+ console.log("支持的提供商: DeepSeek, 智谱AI, DashScope(通义千问), Kimi, 阶跃星辰, MiniMax, ModelScope");
233
+ console.log("(至少配置一个,直接回车跳过)\n");
234
+ const deepseekKey = await question("DeepSeek API Key: ");
235
+ if (deepseekKey.trim()) {
236
+ envLines.push(`DEEPSEEK_API_KEY=${deepseekKey.trim()}`);
237
+ }
238
+ const zhipuKey = await question("智谱AI API Key (GLM-4系列,有免费额度): ");
239
+ if (zhipuKey.trim()) {
240
+ envLines.push(`ZHIPU_API_KEY=${zhipuKey.trim()}`);
241
+ }
242
+ const dashscopeKey = await question("DashScope API Key (阿里云灵积,通义千问商业版): ");
243
+ if (dashscopeKey.trim()) {
244
+ envLines.push(`DASHSCOPE_API_KEY=${dashscopeKey.trim()}`);
245
+ }
246
+ const kimiKey = await question("Kimi (Moonshot) API Key: ");
247
+ if (kimiKey.trim()) {
248
+ envLines.push(`KIMI_API_KEY=${kimiKey.trim()}`);
249
+ }
250
+ const stepfunKey = await question("阶跃星辰 API Key: ");
251
+ if (stepfunKey.trim()) {
252
+ envLines.push(`STEPFUN_API_KEY=${stepfunKey.trim()}`);
253
+ }
254
+ const minimaxKey = await question("MiniMax API Key: ");
255
+ if (minimaxKey.trim()) {
256
+ envLines.push(`MINIMAX_API_KEY=${minimaxKey.trim()}`);
257
+ const minimaxGroup = await question("MiniMax Group ID: ");
258
+ if (minimaxGroup.trim()) {
259
+ envLines.push(`MINIMAX_GROUP_ID=${minimaxGroup.trim()}`);
260
+ }
261
+ }
262
+ const modelscopeKey = await question("ModelScope API Key (阿里魔搭社区,有免费额度): ");
263
+ if (modelscopeKey.trim()) {
264
+ envLines.push(`MODELSCOPE_API_KEY=${modelscopeKey.trim()}`);
265
+ }
266
+ // 通道配置
267
+ console.log("\n📱 步骤 2/3: 配置通讯平台\n");
268
+ console.log("支持的平台: 飞书, 钉钉");
269
+ console.log("(可选配置,直接回车跳过)\n");
270
+ const configFeishu = await question("是否配置飞书? (y/n): ");
271
+ if (configFeishu.toLowerCase() === "y") {
272
+ const feishuAppId = await question("飞书 App ID: ");
273
+ const feishuAppSecret = await question("飞书 App Secret: ");
274
+ if (feishuAppId.trim() && feishuAppSecret.trim()) {
275
+ envLines.push(`FEISHU_APP_ID=${feishuAppId.trim()}`);
276
+ envLines.push(`FEISHU_APP_SECRET=${feishuAppSecret.trim()}`);
277
+ const encryptKey = await question("飞书 Encrypt Key (可选): ");
278
+ if (encryptKey.trim()) {
279
+ envLines.push(`FEISHU_ENCRYPT_KEY=${encryptKey.trim()}`);
280
+ }
281
+ }
282
+ }
283
+ const configDingtalk = await question("是否配置钉钉? (y/n): ");
284
+ if (configDingtalk.toLowerCase() === "y") {
285
+ const dingtalkKey = await question("钉钉 App Key: ");
286
+ const dingtalkSecret = await question("钉钉 App Secret: ");
287
+ if (dingtalkKey.trim() && dingtalkSecret.trim()) {
288
+ envLines.push(`DINGTALK_APP_KEY=${dingtalkKey.trim()}`);
289
+ envLines.push(`DINGTALK_APP_SECRET=${dingtalkSecret.trim()}`);
290
+ const robotCode = await question("钉钉 Robot Code (可选): ");
291
+ if (robotCode.trim()) {
292
+ envLines.push(`DINGTALK_ROBOT_CODE=${robotCode.trim()}`);
293
+ }
294
+ }
295
+ }
296
+ // 服务器配置
297
+ console.log("\n🌐 步骤 3/3: 配置服务器\n");
298
+ const port = await question("服务器端口 (默认 18789): ");
299
+ envLines.push(`MOZI_PORT=${port.trim() || "18789"}`);
300
+ // 写入 .env 文件
301
+ console.log("\n");
302
+ if (envLines.length > 0) {
303
+ const envContent = envLines.join("\n") + "\n";
304
+ const envPath = path.join(process.cwd(), ".env");
305
+ const writeEnv = await question(`是否写入配置到 ${envPath}? (y/n): `);
306
+ if (writeEnv.toLowerCase() === "y") {
307
+ fs.writeFileSync(envPath, envContent);
308
+ console.log(`\n✅ 配置已保存到 ${envPath}`);
309
+ }
310
+ else {
311
+ console.log("\n📋 以下是您的配置,请手动保存到 .env 文件:\n");
312
+ console.log("---");
313
+ console.log(envContent);
314
+ console.log("---");
315
+ }
316
+ }
317
+ console.log(`
318
+ ╔════════════════════════════════════════════════════════════╗
319
+ ║ ║
320
+ ║ ✅ 配置完成! ║
321
+ ║ ║
322
+ ║ 下一步: ║
323
+ ║ ║
324
+ ║ 1. 检查配置: mozi check ║
325
+ ║ 2. 启动服务: mozi start ║
326
+ ║ 3. 测试聊天: mozi chat ║
327
+ ║ ║
328
+ ║ 文档: https://github.com/King-Chau/mozi ║
329
+ ║ ║
330
+ ╚════════════════════════════════════════════════════════════╝
331
+ `);
332
+ rl.close();
333
+ });
334
+ // 日志查看命令
335
+ program
336
+ .command("logs")
337
+ .description("查看日志")
338
+ .option("-f, --follow", "实时跟踪日志 (类似 tail -f)")
339
+ .option("-n, --lines <number>", "显示最后 N 行", "50")
340
+ .option("-l, --list", "列出所有日志文件")
341
+ .option("--date <date>", "查看指定日期的日志 (格式: YYYY-MM-DD)")
342
+ .option("--level <level>", "过滤日志级别 (debug, info, warn, error)")
343
+ .option("--pretty", "格式化输出 (默认开启)", true)
344
+ .action(async (options) => {
345
+ const logDir = getLogDir();
346
+ // 列出所有日志文件
347
+ if (options.list) {
348
+ console.log(`\n日志目录: ${logDir}\n`);
349
+ if (!existsSync(logDir)) {
350
+ console.log("暂无日志文件");
351
+ return;
352
+ }
353
+ const files = readdirSync(logDir)
354
+ .filter((f) => f.endsWith(".log"))
355
+ .sort()
356
+ .reverse();
357
+ if (files.length === 0) {
358
+ console.log("暂无日志文件");
359
+ return;
360
+ }
361
+ console.log("日志文件:");
362
+ for (const file of files) {
363
+ const filePath = join(logDir, file);
364
+ const stats = statSync(filePath);
365
+ const size = (stats.size / 1024).toFixed(1);
366
+ console.log(` ${file} (${size} KB)`);
367
+ }
368
+ return;
369
+ }
370
+ // 确定要查看的日志文件
371
+ let logFile;
372
+ if (options.date) {
373
+ logFile = join(logDir, `mozi-${options.date}.log`);
374
+ }
375
+ else {
376
+ logFile = getLogFile();
377
+ }
378
+ if (!existsSync(logFile)) {
379
+ console.error(`日志文件不存在: ${logFile}`);
380
+ console.log(`\n提示: 使用 'mozi logs --list' 查看所有日志文件`);
381
+ return;
382
+ }
383
+ console.log(`日志文件: ${logFile}\n`);
384
+ // 实时跟踪模式
385
+ if (options.follow) {
386
+ console.log("正在跟踪日志... (Ctrl+C 退出)\n");
387
+ const args = ["-f", logFile];
388
+ if (options.lines) {
389
+ args.unshift("-n", options.lines);
390
+ }
391
+ const tail = spawn("tail", args, { stdio: "pipe" });
392
+ tail.stdout.on("data", (data) => {
393
+ const lines = data.toString().split("\n");
394
+ for (const line of lines) {
395
+ if (!line.trim())
396
+ continue;
397
+ printLogLine(line, options.level, options.pretty);
398
+ }
399
+ });
400
+ tail.stderr.on("data", (data) => {
401
+ console.error(data.toString());
402
+ });
403
+ process.on("SIGINT", () => {
404
+ tail.kill();
405
+ process.exit(0);
406
+ });
407
+ return;
408
+ }
409
+ // 显示最后 N 行
410
+ const content = readFileSync(logFile, "utf-8");
411
+ const lines = content.split("\n").filter((l) => l.trim());
412
+ const lastN = parseInt(options.lines, 10) || 50;
413
+ const displayLines = lines.slice(-lastN);
414
+ for (const line of displayLines) {
415
+ printLogLine(line, options.level, options.pretty);
416
+ }
417
+ console.log(`\n显示最后 ${displayLines.length} 条日志`);
418
+ console.log(`提示: 使用 'mozi logs -f' 实时跟踪日志`);
419
+ });
420
+ /** 打印日志行 */
421
+ function printLogLine(line, levelFilter, pretty) {
422
+ try {
423
+ const log = JSON.parse(line);
424
+ // 级别过滤
425
+ if (levelFilter) {
426
+ const levelOrder = ["debug", "info", "warn", "error"];
427
+ const logLevel = levelOrder.indexOf(log.level?.toString() || "info");
428
+ const filterLevel = levelOrder.indexOf(levelFilter);
429
+ if (logLevel < filterLevel)
430
+ return;
431
+ }
432
+ if (pretty) {
433
+ // 格式化输出
434
+ const time = log.time ? new Date(log.time).toLocaleString() : "";
435
+ const level = (log.level || "INFO").toString().toUpperCase().padEnd(5);
436
+ const module = log.module ? `[${log.module}]` : "";
437
+ const msg = log.msg || "";
438
+ // 颜色
439
+ let levelColor = "\x1b[0m"; // reset
440
+ if (log.level === 30 || log.level === "info")
441
+ levelColor = "\x1b[32m"; // green
442
+ else if (log.level === 40 || log.level === "warn")
443
+ levelColor = "\x1b[33m"; // yellow
444
+ else if (log.level === 50 || log.level === "error")
445
+ levelColor = "\x1b[31m"; // red
446
+ else if (log.level === 20 || log.level === "debug")
447
+ levelColor = "\x1b[36m"; // cyan
448
+ console.log(`\x1b[90m${time}\x1b[0m ${levelColor}${level}\x1b[0m ${module} ${msg}`);
449
+ // 显示额外字段
450
+ const extraKeys = Object.keys(log).filter((k) => !["time", "level", "module", "msg", "name", "pid", "hostname"].includes(k));
451
+ if (extraKeys.length > 0) {
452
+ const extra = {};
453
+ for (const k of extraKeys)
454
+ extra[k] = log[k];
455
+ console.log(` \x1b[90m${JSON.stringify(extra)}\x1b[0m`);
456
+ }
457
+ }
458
+ else {
459
+ console.log(line);
460
+ }
461
+ }
462
+ catch {
463
+ // 非 JSON 格式,直接输出
464
+ console.log(line);
465
+ }
466
+ }
467
+ program.parse();
468
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 命令系统 - 斜杠命令处理
3
+ */
4
+ import type { InboundMessageContext } from "../types/index.js";
5
+ /** 命令参数 */
6
+ export interface CommandContext {
7
+ /** 原始消息上下文 */
8
+ message: InboundMessageContext;
9
+ /** 命令参数 (去除命令名后的部分) */
10
+ args: string;
11
+ /** 解析后的参数数组 */
12
+ argsArray: string[];
13
+ /** 命名参数 (--key=value 格式) */
14
+ namedArgs: Record<string, string>;
15
+ }
16
+ /** 命令处理器 */
17
+ export type CommandHandler = (ctx: CommandContext) => string | Promise<string>;
18
+ /** 命令定义 */
19
+ export interface CommandDefinition {
20
+ /** 命令名称 (不含斜杠) */
21
+ name: string;
22
+ /** 命令别名 */
23
+ aliases?: string[];
24
+ /** 命令描述 */
25
+ description: string;
26
+ /** 使用说明 */
27
+ usage?: string;
28
+ /** 处理函数 */
29
+ handler: CommandHandler;
30
+ /** 是否隐藏 (不在帮助中显示) */
31
+ hidden?: boolean;
32
+ }
33
+ /** 注册命令 */
34
+ export declare function registerCommand(command: CommandDefinition): void;
35
+ /** 批量注册命令 */
36
+ export declare function registerCommands(commands: CommandDefinition[]): void;
37
+ /** 获取命令 */
38
+ export declare function getCommand(name: string): CommandDefinition | undefined;
39
+ /** 获取所有命令 */
40
+ export declare function getAllCommands(): CommandDefinition[];
41
+ /** 检查是否为命令 */
42
+ export declare function isCommand(text: string): boolean;
43
+ /** 解析命令 */
44
+ export declare function parseCommand(text: string): {
45
+ name: string;
46
+ args: string;
47
+ argsArray: string[];
48
+ namedArgs: Record<string, string>;
49
+ } | null;
50
+ /** 执行命令 */
51
+ export declare function executeCommand(message: InboundMessageContext): Promise<string | null>;
52
+ /** 注册内置命令 */
53
+ export declare function registerBuiltinCommands(): void;
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO/D,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,OAAO,EAAE,qBAAqB,CAAC;IAC/B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,YAAY;AACZ,MAAM,MAAM,cAAc,GAAG,CAC3B,GAAG,EAAE,cAAc,KAChB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9B,WAAW;AACX,MAAM,WAAW,iBAAiB;IAChC,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,OAAO,EAAE,cAAc,CAAC;IACxB,qBAAqB;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD,WAAW;AACX,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAYhE;AAED,aAAa;AACb,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAIpE;AAED,WAAW;AACX,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEtE;AAED,aAAa;AACb,wBAAgB,cAAc,IAAI,iBAAiB,EAAE,CAMpD;AAOD,cAAc;AACd,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED,WAAW;AACX,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,GAAG,IAAI,CA2CP;AAID,WAAW;AACX,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BxB;AA8DD,aAAa;AACb,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}