diff --git a/packages/channels/weixin/src/api.ts b/packages/channels/weixin/src/api.ts index 73f7f8ea7..93ccbf4b6 100644 --- a/packages/channels/weixin/src/api.ts +++ b/packages/channels/weixin/src/api.ts @@ -35,7 +35,7 @@ function randomUin(): string { return btoa(String.fromCharCode(...buf)); } -function buildHeaders(token?: string): Record { +export function buildHeaders(token?: string): Record { const headers: Record = { 'Content-Type': 'application/json', 'X-WECHAT-UIN': randomUin(), diff --git a/packages/channels/weixin/src/login.ts b/packages/channels/weixin/src/login.ts index 8771b2373..0adeda226 100644 --- a/packages/channels/weixin/src/login.ts +++ b/packages/channels/weixin/src/login.ts @@ -2,6 +2,8 @@ * QR code login flow for WeChat iLink Bot. */ +import { buildHeaders } from './api.js'; + export interface LoginResult { connected: boolean; token?: string; @@ -54,7 +56,7 @@ export async function waitForLogin(params: { const resp = await fetch( `${apiBaseUrl}/ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(currentQrcodeId)}`, { - headers: { 'iLink-App-ClientVersion': '1' }, + headers: buildHeaders(), signal: controller.signal, }, ); diff --git a/packages/cli/src/commands/channel/start.ts b/packages/cli/src/commands/channel/start.ts index 2b7022622..ae5648932 100644 --- a/packages/cli/src/commands/channel/start.ts +++ b/packages/cli/src/commands/channel/start.ts @@ -183,7 +183,16 @@ async function startSingle(name: string): Promise { const channel = createChannel(name, config, bridge, { router }); channels.set(name, channel); registerToolCallDispatch(bridge, router, channels); - await channel.connect(); + + try { + await channel.connect(); + } catch (err) { + writeStderrLine( + `Error: ${err instanceof Error ? err.message : String(err)}`, + ); + bridge.stop(); + process.exit(1); + } writeServiceInfo([name]); writeStdoutLine(`[Channel] "${name}" is running. Press Ctrl+C to stop.`);