Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ export interface Config {
workingDirectory: string;
model?: string;
systemPrompt?: string;
/** 是否已向用户推送过首次欢迎/引导消息(全局只发一次) */
welcomed?: boolean;
}

const CONFIG_DIR = join(homedir(), ".wechat-claude-code");
Expand All @@ -24,6 +26,7 @@ export function loadConfig(): Config {
workingDirectory: parsed.workingDirectory || DEFAULT_CONFIG.workingDirectory,
model: parsed.model,
systemPrompt: parsed.systemPrompt,
welcomed: parsed.welcomed,
};
mkdirSync(config.workingDirectory, { recursive: true });
return config;
Expand All @@ -36,11 +39,12 @@ export function loadConfig(): Config {

export function saveConfig(config: Config): void {
mkdirSync(CONFIG_DIR, { recursive: true });
const data: Record<string, string> = {
const data: Record<string, string | boolean> = {
workingDirectory: config.workingDirectory,
};
if (config.model) data.model = config.model;
if (config.systemPrompt) data.systemPrompt = config.systemPrompt;
if (config.welcomed) data.welcomed = true;
writeFileSync(CONFIG_PATH, JSON.stringify(data, null, 2) + "\n", "utf-8");
if (process.platform !== "win32") {
chmodSync(CONFIG_PATH, 0o600);
Expand Down
17 changes: 17 additions & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ import { MessageType, type WeixinMessage } from './wechat/types.js';

const MAX_MESSAGE_LENGTH = 4000;

const WELCOME_TEXT = `👋 你好!我是接在你电脑上的 Claude Code。直接在这里发消息,就能让我帮你处理任务——读写文件、跑命令、写代码、分析图片和文档都行。

常用命令:
/help 查看全部命令
/status 查看当前会话状态
/clear 清空上下文、开始新对话
/stop 停止正在执行的任务

支持文字、语音、图片、文件,发一条试试看吧。`;

// Extensions eligible for auto-push when detected in Claude's response
const AUTO_PUSH_EXTENSIONS = new Set([
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.bmp', '.svg', '.ico',
Expand Down Expand Up @@ -362,6 +372,13 @@ async function handleMessage(
const imageItem = extractFirstImageUrl(msg.item_list);
const fileItem = extractFirstFileItem(msg.item_list);

// 首次交互:推送一次欢迎/引导,避免新用户面对空白聊天框、不知道能干啥
if (!config.welcomed) {
config.welcomed = true;
saveConfig(config);
await sender.sendText(fromUserId, contextToken, WELCOME_TEXT);
}

// Drop non-command messages while processing (priority commands already handled upstream)
if (session.state === 'processing' && !userText.startsWith('/')) {
return;
Expand Down