Compare commits

...

9 Commits

Author SHA1 Message Date
489b25173f feat: 修复mac下无法启动问题 2026-06-09 23:56:29 +08:00
2695c11416 update: 更新env 2026-06-09 17:32:53 +08:00
8cf452b53a update: 更新env 2026-06-09 17:24:35 +08:00
10a037513f update: 更新env 2026-06-09 16:16:15 +08:00
b8d0d9f383 update: 更新env 2026-06-09 15:45:18 +08:00
a42d422b99 update: 更新env 2026-06-09 15:17:24 +08:00
9ccd824e7f update: 更新env 2026-06-09 15:01:01 +08:00
dac858cb48 update: 更新env 2026-06-09 14:53:51 +08:00
b343fdf2b0 feat:更新env 2026-06-09 14:52:05 +08:00
8 changed files with 186 additions and 3 deletions

View File

@@ -14,3 +14,44 @@
{"id":"3571933861420079183","timestamp":"2026-06-09T06:39:02.246Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"8010648486659081543","timestamp":"2026-06-09T06:39:02.246Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"6422080270206561680","timestamp":"2026-06-09T06:43:24.642Z","type":7,"typeName":"Text","isText":true,"isRoom":false,"roomName":"","talkerName":"AnShooter","talkerAlias":"","receiverName":"菜小猪","text":"啊","self":false}
{"id":"8914189627911548125","timestamp":"2026-06-09T14:07:11.102Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"2946288943561931982","timestamp":"2026-06-09T14:07:12.774Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"3664914247310801620","timestamp":"2026-06-09T14:07:12.774Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"8687324582032139054","timestamp":"2026-06-09T14:07:19.941Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 你好","self":false}
{"id":"5838892096299771012","timestamp":"2026-06-09T14:13:30.106Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 你好","self":false}
{"id":"4833851998955055109","timestamp":"2026-06-09T14:13:30.441Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"3316595510464093414","timestamp":"2026-06-09T14:13:43.056Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"你是什么大模型","self":false}
{"id":"2415909384635655748","timestamp":"2026-06-09T14:14:05.171Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 你是什么大模型","self":false}
{"id":"6498838471026992521","timestamp":"2026-06-09T14:14:29.234Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 你用的是什么模型","self":false}
{"id":"5823612045578488604","timestamp":"2026-06-09T14:15:32.334Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 用命令看下群里有几个人","self":false}
{"id":"218790080327713025","timestamp":"2026-06-09T14:18:21.097Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"7158423060054663125","timestamp":"2026-06-09T14:19:30.276Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"找到了微信数据目录,但要读取加密密钥需要对微信 App 重新签名macOS 安全限制)。这需要以下操作:\n\n**需要你确认的三步:**\n\n1. **重新签名微信 App**(只需做一次):\n ```\n codesign --force --deep --sign - /Applications/WeChat.app\n ```\n 如果报 `signature in use`,先执行:\n ```\n codesign --remove-signature /Applications/WeChat.app/Contents/Frameworks/vlc_plugins/librtp_mpeg4_plugin.dylib\n ```\n\n2. **重启微信**\n ```\n killall WeChat && open /Applications/WeChat.app\n ```\n\n3. **用 sudo 完成初始化**\n ```\n sudo wx init\n ```\n\n> ⚠️ 重新签名会修改微信 App 的签名状态,但这只是本地调试用的 ad-hoc 签名,不影响正常使用。\n\n要我继续帮你执行这些操作吗还是你有特定的群名我们可以先记下来初始化完直接查","self":false}
{"id":"9053871030714993200","timestamp":"2026-06-09T14:26:51.033Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 服了","self":false}
{"id":"9053871030714993200","timestamp":"2026-06-09T14:26:51.054Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 服了","self":false}
{"id":"6438594501368092328","timestamp":"2026-06-09T14:27:19.702Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 帮我查一下媳妇的手机号","self":false}
{"id":"6438594501368092328","timestamp":"2026-06-09T14:27:19.707Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 帮我查一下媳妇的手机号","self":false}
{"id":"4549590500440580379","timestamp":"2026-06-09T14:28:48.474Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"媳妇手机号18158870200","self":false}
{"id":"4549590500440580379","timestamp":"2026-06-09T14:28:48.488Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"媳妇手机号18158870200","self":false}
{"id":"5872355751248954073","timestamp":"2026-06-09T14:29:02.988Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"我要你说啊,我真服了","self":false}
{"id":"5872355751248954073","timestamp":"2026-06-09T14:29:03.028Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"我要你说啊,我真服了","self":false}
{"id":"8971960270849607113","timestamp":"2026-06-09T14:30:08.708Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"我是在给它提供搜索","self":false}
{"id":"8971960270849607113","timestamp":"2026-06-09T14:30:08.718Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"我是在给它提供搜索","self":false}
{"id":"7593964092646892326","timestamp":"2026-06-09T14:30:11.696Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"证据","self":false}
{"id":"7593964092646892326","timestamp":"2026-06-09T14:30:11.710Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"证据","self":false}
{"id":"1216729530459828932","timestamp":"2026-06-09T14:30:29.804Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 帮我查一下媳妇的手机号","self":false}
{"id":"1216729530459828932","timestamp":"2026-06-09T14:30:29.811Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 帮我查一下媳妇的手机号","self":false}
{"id":"66958930482411625","timestamp":"2026-06-09T14:32:28.612Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"你看吧,只有这样才能搜到","self":false}
{"id":"66958930482411625","timestamp":"2026-06-09T14:32:28.639Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"你看吧,只有这样才能搜到","self":false}
{"id":"7939739977737226089","timestamp":"2026-06-09T14:32:57.711Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"蔡学瑞手机号18655059560","self":false}
{"id":"1367504491716741583","timestamp":"2026-06-09T14:33:05.445Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"Winnie.Lv","talkerAlias":"Winnie.Lv","receiverName":"","text":"你让它搜","self":false}
{"id":"2340322835639783727","timestamp":"2026-06-09T15:29:46.329Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"6414486879596653624","timestamp":"2026-06-09T15:29:46.330Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"6206218641744175399","timestamp":"2026-06-09T15:29:46.638Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"8808675937444536551","timestamp":"2026-06-09T15:30:07.641Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 群里有几名成员","self":false}
{"id":"6067353318497697588","timestamp":"2026-06-09T15:34:46.989Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"1096070572703217519","timestamp":"2026-06-09T15:46:01.655Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 群里有几个人","self":false}
{"id":"5933246273233200903","timestamp":"2026-06-09T15:47:17.381Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪帮我查一下winnie的手机号","self":false}
{"id":"7051494465429930956","timestamp":"2026-06-09T15:51:36.233Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"4971046814386713627","timestamp":"2026-06-09T15:51:36.583Z","type":0,"typeName":"Unknown","isText":false,"isRoom":false,"roomName":"","talkerName":"菜小猪","talkerAlias":"","receiverName":"菜小猪","text":"","self":true}
{"id":"4504075016411327192","timestamp":"2026-06-09T15:51:58.823Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪 中国和泰国的足球比赛谁赢了","self":false}
{"id":"6906884404025351398","timestamp":"2026-06-09T15:53:27.257Z","type":7,"typeName":"Text","isText":true,"isRoom":true,"roomName":"测试bot","talkerName":"AnShooter","talkerAlias":"","receiverName":"","text":"@菜小猪lol里的天使出ad厉害还是ap厉害","self":false}

136
.env Normal file
View File

@@ -0,0 +1,136 @@
# .env
# OpenAi 的api key, 去 https://beta.openai.com/account/api-keys 中生成一个即可,OPENAI_MODEL不填则默认gpt-4oOPENAI_SYSTEM_MESSAGE为默认角色设定
OPENAI_API_KEY=''
OPENAI_PROXY_URL='https://openai.xxxx.com/v1/'
OPENAI_MODEL=''
OPENAI_SYSTEM_MESSAGE='You are a personal assistant.'
# doubao, model和api-key, 去 https://console.volcengine.com/ark/apiKey
DOUBAO_API_KEY=''
DOUBAO_URL="https://ark.cn-beijing.volces.com/api/v3"
DOUBAO_MODEL='doubao-seed-1-6-thinking-250615'
# pi, model和api-key, 去 https://pi.earendil.works/api-key
PI_API_KEY='sk-b09acbd6c0ca4f94818b6deb039d6515'
PI_BASE_URL='https://api.deepseek.com/v1'
PI_MODEL='deepseek-v4-pro'
# deepseek, model和api-key, 去 https://platform.deepseek.com/usage 或者 https://cloud.siliconflow.cn/models (deepseek官方api暂时停止使用可以用siliconflow的api)
DEEPSEEK_API_KEY='sk-b09acbd6c0ca4f94818b6deb039d6515'
DEEPSEEK_URL="https://api.deepseek.com"
DEEPSEEK_MODEL='deepseek-v4-pro'
DEEPSEEK_SYSTEM_MESSAGE='# 角色定义
role: "AI Assistant (DeepSeek-R1-Enhanced)"
author: "DeepSeek"
description: >
通用型智能助手,通过结构化思考流程提供可靠服务,
知识截止2023年12月不处理实时信息。
# 交互协议
interaction_rules:
thinking_flow: # 新增思考流程规范
- 步骤1: 问题语义解析(意图/实体/上下文)
- 步骤2: 知识库匹配(学科分类/可信度评估)
- 步骤3: 逻辑验证(矛盾检测/边界检查)
- 步骤4: 响应结构设计(分点/示例/注意事项)
safety_layer:
- 自动激活场景: [政治, 医疗建议, 隐私相关]
- 响应模板: "该问题涉及[领域],建议咨询专业机构"
# 输出规范
output_schema:
thinking_section: # 强制思考段落
required: true
tags: "思考内容:{content}
"
content_rules:
- 使用Markdown列表格式
- 包含至少2个验证步骤
- 标注潜在不确定性
- 复杂概念使用类比解释'
# Kimi 的api key, 去 https://platform.moonshot.cn/console/api-keys
KIMI_API_KEY=''
# 科大讯飞, 去 https://console.xfyun.cn/services
XUNFEI_APP_ID=''
XUNFEI_API_KEY=''
XUNFEI_API_SECRET=''
# 使用的模型版本,默认填写 v4.0 或需要的版本号(如: v3.5, max-32k, pro-128k,参考src/xunfei.js中modelVersionMap
XUNFEI_MODEL_VERSION='v4.0'
# 系统角色描述,支持个性化定制
XUNFEI_PROMPT='你是一个专业的智能助手,能够回答用户提出的各种问题。'
# deepseek-free, model必须为deepseek-chat或deepseek-coder,去 https://platform.deepseek.com/usage或者https://github.com/LLM-Red-Team/deepseek-free-api
# 在DEEPSEEK_SYSTEM_MESSAGE中设置系统提示词
DEEPSEEK_FREE_URL='https://api.deepseek.com/chat/completions'
DEEPSEEK_FREE_TOKEN=''
DEEPSEEK_FREE_MODEL='deepseek-chat'
DEEPSEEK_FREE_SYSTEM_MESSAGE='You are a personal assistant.'
# 302AI
_302AI_API_KEY = ''
_302AI_MODEL= 'gpt-4o-mini'
# dify, URL不包含uri路径
DIFY_API_KEY = ''
DIFY_URL = 'https://api.dify.ai'
# 通义千问, URL 包含 uri 路径
TONGYI_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
# 通义千问的 API_KEY
TONGYI_API_KEY = ''
# 通义千问使用的模型
TONGYI_MODEL='qwen-plus'
# claude
CLAUDE_API_VERSION = '2023-06-01'
CLAUDE_API_KEY = ''
CLAUDE_MODEL = 'claude-sonnet-4-5-20250929'
CLAUDE_BASE_URL = 'https://api.anthropic.com/v1/messages'
# 系统人设
CLAUDE_SYSTEM = ''
# ollama
OLLAMA_URL='http://127.0.0.1:11434/api/chat'
OLLAMA_MODEL=''
OLLAMA_SYSTEM_MESSAGE='You are a personal assistant.'
# 白名单配置
#定义机器人的名称,这里是为了防止群聊消息太多,所以只有艾特机器人才会回复,
#这里不要把@去掉,在@后面加上你启动机器人账号的微信名称
BOT_NAME='@菜小猪'
#联系人白名单
ALIAS_WHITELIST='AnShooter,Winnie.Lv,Enx,5岁就近视了,iEnx'
#群聊白名单
ROOM_WHITELIST='测试bot,机关党史学习群'
#自动回复前缀匹配,文本消息匹配到指定前缀时,才会触发自动回复,不配或配空串情况下该配置不生效(适用于用大号,不期望每次被@或者私聊时都触发自动回复的人群)
#匹配规则:群聊消息去掉${BOT_NAME}并trim后进行前缀匹配私聊消息trim后直接进行前缀匹配
AUTO_REPLY_PREFIX=''
# 默认服务 302AIChatGPT、Kimi、Xunfei、deepseek-free, ollama, dify, tongyi 八选一,不填则键盘交互
SERVICE_TYPE='pi'
# 本地微信消息捕获与命令
# 默认只记录扫码登录后收到的消息,用于后续本地统计/分析;设为 false 可关闭记录
WECHAT_DATA_DIR='.data/wechat'
WECHAT_STORE_MESSAGES='true'
BOT_COMMAND_PREFIX='/'
# 出于安全考虑,微信聊天中远程执行 OpenCLI 默认关闭;仅在你确认需要时开启
ENABLE_REMOTE_OPENCLI='true'
# 飞书 IM 通过 lark-cli 接入。首次使用可执行npm run lark:login
LARK_CLI_BIN='lark-cli'
LARK_DEFAULT_IDENTITY='user'
# OpenCLI 透传。留空时会使用 npx --yes @jackwener/opencli
OPENCLI_BIN='/Users/lwp/.nvm/versions/node/v24.15.0/bin/opencli'
OPENCLI_NPM_PACKAGE='@jackwener/opencli'
OPENCLI_WX_COMMAND='wx'
# Pi coding agent 透传。留空时会使用 npx --yes @earendil-works/pi-coding-agent
PI_BIN='pi'
PI_NPM_PACKAGE='@earendil-works/pi-coding-agent'
# Pi 作为 IM 回复 agent 时使用的参数。默认非交互、单轮回复。
PI_AGENT_ARGS='--print --no-session'

View File

@@ -122,6 +122,8 @@ LARK_DEFAULT_IDENTITY='user'
# OpenCLI 透传。留空时会使用 npx --yes @jackwener/opencli
OPENCLI_BIN=''
OPENCLI_NPM_PACKAGE='@jackwener/opencli'
# OpenCLI 当前把微信本地数据 CLI 注册为 wx旧版本可能叫 wx-cli
OPENCLI_WX_COMMAND='wx'
# Pi coding agent 透传。留空时会使用 npx --yes @earendil-works/pi-coding-agent
PI_BIN=''

2
.gitignore vendored
View File

@@ -1,6 +1,8 @@
node_modules
WechatEveryDay.memory-card.json
.env
config.json
all_keys.json
test.js
package-lock.json
yarn.lock

2
.npmrc
View File

@@ -1 +1 @@
# puppeteer_download_host=https://registry.npmmirror.com/-/binary/
pupeteer_download_host=https://registry.npmmirror.com/-/binary/

0
cli.js Normal file → Executable file
View File

View File

@@ -23,5 +23,6 @@ export async function runOpenCli(args = []) {
}
export async function runWxCli(args = []) {
return runOpenCli(['wx-cli', ...args])
const config = getOpenCliRuntimeConfig()
return runOpenCli([config.wxCommand, ...args])
}

View File

@@ -38,6 +38,7 @@ export function getOpenCliRuntimeConfig() {
return {
bin: env.OPENCLI_BIN || '',
npmPackage: env.OPENCLI_NPM_PACKAGE || '@jackwener/opencli',
wxCommand: env.OPENCLI_WX_COMMAND || 'wx',
}
}