wechat-ai 0.1.2 → 0.1.4

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.
package/dist/cli.js CHANGED
@@ -41,6 +41,62 @@ var HELP = `
41
41
  /model deepseek \u5207\u6362\u5230 DeepSeek
42
42
  /help \u663E\u793A\u5E2E\u52A9
43
43
  `;
44
+ function printBanner(defaultProvider) {
45
+ const c = {
46
+ reset: "\x1B[0m",
47
+ bold: "\x1B[1m",
48
+ dim: "\x1B[2m",
49
+ green: "\x1B[32m",
50
+ gray: "\x1B[90m",
51
+ white: "\x1B[97m",
52
+ orange: "\x1B[38;5;208m",
53
+ border: "\x1B[38;5;60m"
54
+ // muted blue-gray, similar to Claude Code
55
+ };
56
+ const boxW = 44;
57
+ const inner = boxW - 2;
58
+ const b = c.border;
59
+ const empty = ` ${b}\u2502${c.reset}${" ".repeat(inner)}${b}\u2502${c.reset}`;
60
+ const displayWidth = (s) => {
61
+ const stripped = s.replace(/\x1b\[[0-9;]*m/g, "");
62
+ let w = 0;
63
+ for (const ch of stripped) {
64
+ const code = ch.codePointAt(0);
65
+ w += code >= 11904 && code <= 40959 || code >= 63744 && code <= 64255 || code >= 65072 && code <= 65103 || code >= 65280 && code <= 65376 ? 2 : 1;
66
+ }
67
+ return w;
68
+ };
69
+ const center = (s) => {
70
+ const w = displayWidth(s);
71
+ const left = Math.floor((inner - w) / 2);
72
+ const right = inner - w - left;
73
+ return ` ${b}\u2502${c.reset}${" ".repeat(left)}${s}${" ".repeat(right)}${b}\u2502${c.reset}`;
74
+ };
75
+ const titleText = ` Wechat AI v${VERSION} `;
76
+ const titleLen = titleText.length;
77
+ const sideL = Math.floor((inner - titleLen) / 2);
78
+ const sideR = inner - titleLen - sideL;
79
+ const topBorder = ` ${b}\u256D${"\u2500".repeat(sideL)}${c.reset}${c.bold}${c.white}${titleText}${c.reset}${b}${"\u2500".repeat(sideR)}\u256E${c.reset}`;
80
+ const icons = [
81
+ `${c.green}\u256D\u2500\u2500\u2500\u256E${c.reset} ${c.orange}\u256D\u2500\u2500\u2500\u256E${c.reset}`,
82
+ `${c.green}\u2502\xB0 \xB0\u2502${c.reset} ${c.dim}\u25C4\u2550\u2550\u25BA${c.reset} ${c.orange}\u2502\u25C9 \u25C9\u2502${c.reset}`,
83
+ `${c.green}\u2570\u2500\u222A\u2500\u256F${c.reset} ${c.orange}\u2570\u2500\u256E\u2500\u256F${c.reset}`
84
+ ];
85
+ const welcome = `${c.bold}${c.white}Welcome!${c.reset}`;
86
+ const info = `${c.dim}model: ${defaultProvider} \xB7 type /help in chat${c.reset}`;
87
+ console.log();
88
+ console.log(topBorder);
89
+ console.log(empty);
90
+ console.log(center(welcome));
91
+ console.log(empty);
92
+ for (const line of icons) {
93
+ console.log(center(line));
94
+ }
95
+ console.log(empty);
96
+ console.log(center(info));
97
+ console.log(` ${b}\u2570${"\u2500".repeat(inner)}\u256F${c.reset}`);
98
+ console.log();
99
+ }
44
100
  async function main() {
45
101
  const args = process.argv.slice(2);
46
102
  const command = args[0];
@@ -93,10 +149,15 @@ async function main() {
93
149
  }
94
150
  case "update": {
95
151
  const { execSync } = await import("child_process");
96
- console.log("\u6B63\u5728\u66F4\u65B0 wechat-ai...");
152
+ console.log(`\u6B63\u5728\u66F4\u65B0 wechat-ai... (\u5F53\u524D v${VERSION})`);
97
153
  try {
98
154
  execSync("npm i -g wechat-ai@latest", { stdio: "inherit" });
99
- console.log("\x1B[32m\u2713\x1B[0m \u66F4\u65B0\u5B8C\u6210");
155
+ let newVersion = "latest";
156
+ try {
157
+ newVersion = execSync("npm info wechat-ai version", { encoding: "utf-8" }).trim();
158
+ } catch {
159
+ }
160
+ console.log(`\x1B[32m\u2713\x1B[0m \u66F4\u65B0\u5B8C\u6210 v${VERSION} \u2192 v${newVersion}`);
100
161
  } catch {
101
162
  console.error("\x1B[31m\u2717\x1B[0m \u66F4\u65B0\u5931\u8D25\uFF0C\u8BF7\u624B\u52A8\u6267\u884C: npm i -g wechat-ai@latest");
102
163
  process.exit(1);
@@ -115,6 +176,7 @@ async function main() {
115
176
  break;
116
177
  }
117
178
  default: {
179
+ printBanner(config.defaultProvider);
118
180
  const gateway = new Gateway(config);
119
181
  gateway.init();
120
182
  const shutdown = async () => {
@@ -123,7 +185,6 @@ async function main() {
123
185
  };
124
186
  process.on("SIGINT", shutdown);
125
187
  process.on("SIGTERM", shutdown);
126
- log.info(`wechat-ai v${VERSION}`);
127
188
  await gateway.start();
128
189
  break;
129
190
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nimport { loadConfig, saveConfig } from \"./config.js\";\nimport { Gateway } from \"./gateway.js\";\nimport { setLogLevel, createLogger } from \"./logger.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, \"..\", \"package.json\"), \"utf-8\"));\nconst VERSION = pkg.version as string;\n\nconst log = createLogger(\"cli\");\n\nconst HELP = `\n \\x1b[1mwechat-ai\\x1b[0m — WeChat AI Bot\n\n \\x1b[1m命令:\\x1b[0m\n wechat-ai 启动 (首次自动扫码登录)\n wechat-ai set <provider> <key> 设置模型 API Key\n wechat-ai use <provider> 设置默认模型\n wechat-ai config 查看当前配置\n wechat-ai update 更新到最新版\n wechat-ai help 显示帮助\n\n \\x1b[1m设置 API Key:\\x1b[0m\n wechat-ai set qwen sk-xxx 设置通义千问 Key\n wechat-ai set deepseek sk-xxx 设置 DeepSeek Key\n wechat-ai set claude sk-xxx 设置 Claude Key\n\n \\x1b[1m设置默认模型:\\x1b[0m\n wechat-ai use qwen 默认使用 Qwen\n wechat-ai use deepseek 默认使用 DeepSeek\n\n \\x1b[1m微信指令:\\x1b[0m\n /model 查看当前模型\n /model qwen 切换到 Qwen\n /model deepseek 切换到 DeepSeek\n /help 显示帮助\n`;\n\nasync function main() {\n const args = process.argv.slice(2);\n const command = args[0];\n\n const logLevel = (process.env.WAI_LOG_LEVEL || \"info\") as \"debug\" | \"info\" | \"warn\" | \"error\";\n setLogLevel(logLevel);\n\n if (command === \"--version\" || command === \"-v\") {\n console.log(`wechat-ai v${VERSION}`);\n process.exit(0);\n }\n\n if (command === \"help\" || command === \"--help\" || command === \"-h\") {\n console.log(HELP);\n process.exit(0);\n }\n\n const config = await loadConfig();\n\n switch (command) {\n case \"set\": {\n const provider = args[1];\n const apiKey = args[2];\n\n if (!provider || !apiKey) {\n console.log(\"用法: wechat-ai set <provider> <key>\");\n console.log(\"示例: wechat-ai set qwen sk-xxx\");\n process.exit(1);\n }\n\n if (!config.providers[provider]) {\n console.log(`未知模型: ${provider}`);\n console.log(`可用: ${Object.keys(config.providers).join(\", \")}`);\n process.exit(1);\n }\n\n config.providers[provider]!.apiKey = apiKey;\n await saveConfig(config);\n console.log(`\\x1b[32m✓\\x1b[0m 已保存 ${provider} 的 API Key`);\n break;\n }\n\n case \"use\": {\n const provider = args[1];\n\n if (!provider) {\n console.log(`当前默认模型: ${config.defaultProvider}`);\n console.log(`可用: ${Object.keys(config.providers).join(\", \")}`);\n break;\n }\n\n if (!config.providers[provider]) {\n console.log(`未知模型: ${provider}`);\n console.log(`可用: ${Object.keys(config.providers).join(\", \")}`);\n process.exit(1);\n }\n\n config.defaultProvider = provider;\n await saveConfig(config);\n console.log(`\\x1b[32m✓\\x1b[0m 默认模型已切换到 ${provider}`);\n break;\n }\n\n case \"update\": {\n const { execSync } = await import(\"node:child_process\");\n console.log(\"正在更新 wechat-ai...\");\n try {\n execSync(\"npm i -g wechat-ai@latest\", { stdio: \"inherit\" });\n console.log(\"\\x1b[32m✓\\x1b[0m 更新完成\");\n } catch {\n console.error(\"\\x1b[31m✗\\x1b[0m 更新失败,请手动执行: npm i -g wechat-ai@latest\");\n process.exit(1);\n }\n break;\n }\n\n case \"config\": {\n // Hide API keys in output\n const display = JSON.parse(JSON.stringify(config));\n for (const p of Object.values(display.providers)) {\n const prov = p as Record<string, unknown>;\n if (prov.apiKey && typeof prov.apiKey === \"string\") {\n prov.apiKey = prov.apiKey.slice(0, 6) + \"...\" + prov.apiKey.slice(-4);\n }\n }\n console.log(JSON.stringify(display, null, 2));\n break;\n }\n\n default: {\n const gateway = new Gateway(config);\n gateway.init();\n\n const shutdown = async () => {\n await gateway.stop();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n log.info(`wechat-ai v${VERSION}`);\n await gateway.start();\n break;\n }\n }\n}\n\nmain().catch((err) => {\n log.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, join } from \"node:path\";\nimport { loadConfig, saveConfig } from \"./config.js\";\nimport { Gateway } from \"./gateway.js\";\nimport { setLogLevel, createLogger } from \"./logger.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, \"..\", \"package.json\"), \"utf-8\"));\nconst VERSION = pkg.version as string;\n\nconst log = createLogger(\"cli\");\n\nconst HELP = `\n \\x1b[1mwechat-ai\\x1b[0m — WeChat AI Bot\n\n \\x1b[1m命令:\\x1b[0m\n wechat-ai 启动 (首次自动扫码登录)\n wechat-ai set <provider> <key> 设置模型 API Key\n wechat-ai use <provider> 设置默认模型\n wechat-ai config 查看当前配置\n wechat-ai update 更新到最新版\n wechat-ai help 显示帮助\n\n \\x1b[1m设置 API Key:\\x1b[0m\n wechat-ai set qwen sk-xxx 设置通义千问 Key\n wechat-ai set deepseek sk-xxx 设置 DeepSeek Key\n wechat-ai set claude sk-xxx 设置 Claude Key\n\n \\x1b[1m设置默认模型:\\x1b[0m\n wechat-ai use qwen 默认使用 Qwen\n wechat-ai use deepseek 默认使用 DeepSeek\n\n \\x1b[1m微信指令:\\x1b[0m\n /model 查看当前模型\n /model qwen 切换到 Qwen\n /model deepseek 切换到 DeepSeek\n /help 显示帮助\n`;\n\nfunction printBanner(defaultProvider: string): void {\n const c = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n green: \"\\x1b[32m\",\n gray: \"\\x1b[90m\",\n white: \"\\x1b[97m\",\n orange: \"\\x1b[38;5;208m\",\n border: \"\\x1b[38;5;60m\", // muted blue-gray, similar to Claude Code\n };\n\n const boxW = 44;\n const inner = boxW - 2;\n const b = c.border;\n const empty = ` ${b}│${c.reset}${\" \".repeat(inner)}${b}│${c.reset}`;\n\n const displayWidth = (s: string) => {\n const stripped = s.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n let w = 0;\n for (const ch of stripped) {\n const code = ch.codePointAt(0)!;\n w += (code >= 0x2e80 && code <= 0x9fff) || (code >= 0xf900 && code <= 0xfaff)\n || (code >= 0xfe30 && code <= 0xfe4f) || (code >= 0xff00 && code <= 0xff60) ? 2 : 1;\n }\n return w;\n };\n const center = (s: string) => {\n const w = displayWidth(s);\n const left = Math.floor((inner - w) / 2);\n const right = inner - w - left;\n return ` ${b}│${c.reset}${\" \".repeat(left)}${s}${\" \".repeat(right)}${b}│${c.reset}`;\n };\n // Title embedded in top border, centered\n const titleText = ` Wechat AI v${VERSION} `;\n const titleLen = titleText.length;\n const sideL = Math.floor((inner - titleLen) / 2);\n const sideR = inner - titleLen - sideL;\n const topBorder = ` ${b}╭${\"─\".repeat(sideL)}${c.reset}${c.bold}${c.white}${titleText}${c.reset}${b}${\"─\".repeat(sideR)}╮${c.reset}`;\n\n // Icons: WeChat (green) ◄──► Claude (orange), centered\n const icons = [\n `${c.green}╭───╮${c.reset} ${c.orange}╭───╮${c.reset}`,\n `${c.green}│° °│${c.reset} ${c.dim}◄══►${c.reset} ${c.orange}│◉ ◉│${c.reset}`,\n `${c.green}╰─∪─╯${c.reset} ${c.orange}╰─╮─╯${c.reset}`,\n ];\n\n const welcome = `${c.bold}${c.white}Welcome!${c.reset}`;\n const info = `${c.dim}model: ${defaultProvider} · type /help in chat${c.reset}`;\n\n console.log();\n console.log(topBorder);\n console.log(empty);\n console.log(center(welcome));\n console.log(empty);\n for (const line of icons) {\n console.log(center(line));\n }\n console.log(empty);\n console.log(center(info));\n console.log(` ${b}╰${\"─\".repeat(inner)}╯${c.reset}`);\n console.log();\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n const command = args[0];\n\n const logLevel = (process.env.WAI_LOG_LEVEL || \"info\") as \"debug\" | \"info\" | \"warn\" | \"error\";\n setLogLevel(logLevel);\n\n if (command === \"--version\" || command === \"-v\") {\n console.log(`wechat-ai v${VERSION}`);\n process.exit(0);\n }\n\n if (command === \"help\" || command === \"--help\" || command === \"-h\") {\n console.log(HELP);\n process.exit(0);\n }\n\n const config = await loadConfig();\n\n switch (command) {\n case \"set\": {\n const provider = args[1];\n const apiKey = args[2];\n\n if (!provider || !apiKey) {\n console.log(\"用法: wechat-ai set <provider> <key>\");\n console.log(\"示例: wechat-ai set qwen sk-xxx\");\n process.exit(1);\n }\n\n if (!config.providers[provider]) {\n console.log(`未知模型: ${provider}`);\n console.log(`可用: ${Object.keys(config.providers).join(\", \")}`);\n process.exit(1);\n }\n\n config.providers[provider]!.apiKey = apiKey;\n await saveConfig(config);\n console.log(`\\x1b[32m✓\\x1b[0m 已保存 ${provider} 的 API Key`);\n break;\n }\n\n case \"use\": {\n const provider = args[1];\n\n if (!provider) {\n console.log(`当前默认模型: ${config.defaultProvider}`);\n console.log(`可用: ${Object.keys(config.providers).join(\", \")}`);\n break;\n }\n\n if (!config.providers[provider]) {\n console.log(`未知模型: ${provider}`);\n console.log(`可用: ${Object.keys(config.providers).join(\", \")}`);\n process.exit(1);\n }\n\n config.defaultProvider = provider;\n await saveConfig(config);\n console.log(`\\x1b[32m✓\\x1b[0m 默认模型已切换到 ${provider}`);\n break;\n }\n\n case \"update\": {\n const { execSync } = await import(\"node:child_process\");\n console.log(`正在更新 wechat-ai... (当前 v${VERSION})`);\n try {\n execSync(\"npm i -g wechat-ai@latest\", { stdio: \"inherit\" });\n // Read the newly installed version\n let newVersion = \"latest\";\n try {\n newVersion = execSync(\"npm info wechat-ai version\", { encoding: \"utf-8\" }).trim();\n } catch { /* ignore */ }\n console.log(`\\x1b[32m✓\\x1b[0m 更新完成 v${VERSION} → v${newVersion}`);\n } catch {\n console.error(\"\\x1b[31m✗\\x1b[0m 更新失败,请手动执行: npm i -g wechat-ai@latest\");\n process.exit(1);\n }\n break;\n }\n\n case \"config\": {\n // Hide API keys in output\n const display = JSON.parse(JSON.stringify(config));\n for (const p of Object.values(display.providers)) {\n const prov = p as Record<string, unknown>;\n if (prov.apiKey && typeof prov.apiKey === \"string\") {\n prov.apiKey = prov.apiKey.slice(0, 6) + \"...\" + prov.apiKey.slice(-4);\n }\n }\n console.log(JSON.stringify(display, null, 2));\n break;\n }\n\n default: {\n printBanner(config.defaultProvider);\n\n const gateway = new Gateway(config);\n gateway.init();\n\n const shutdown = async () => {\n await gateway.stop();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n await gateway.start();\n break;\n }\n }\n}\n\nmain().catch((err) => {\n log.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n});\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wechat-ai",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "WeChat AI Bot — Bridge WeChat to Claude, Qwen, DeepSeek and more",
5
5
  "type": "module",
6
6
  "bin": {