From 489b25173f0f8ea9d95eb06d5dc8da2de16c0d50 Mon Sep 17 00:00:00 2001 From: cirry <812852553@qq.com> Date: Tue, 9 Jun 2026 23:56:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8Dmac=E4=B8=8B=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E5=90=AF=E5=8A=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .data/wechat/messages.jsonl | 41 +++++++++++++++++++++++++++++++++++++ .env | 3 ++- .env.example | 2 ++ .gitignore | 4 +++- .npmrc | 2 +- cli.js | 0 src/adapters/opencli.js | 3 ++- src/config/env.js | 1 + 8 files changed, 52 insertions(+), 4 deletions(-) mode change 100644 => 100755 cli.js diff --git a/.data/wechat/messages.jsonl b/.data/wechat/messages.jsonl index 5d56257..1133e35 100644 --- a/.data/wechat/messages.jsonl +++ b/.data/wechat/messages.jsonl @@ -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} diff --git a/.env b/.env index c2bd0e4..4936235 100644 --- a/.env +++ b/.env @@ -125,8 +125,9 @@ LARK_CLI_BIN='lark-cli' LARK_DEFAULT_IDENTITY='user' # OpenCLI 透传。留空时会使用 npx --yes @jackwener/opencli -OPENCLI_BIN='' +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' diff --git a/.env.example b/.env.example index ebab9e7..2fd2b66 100644 --- a/.env.example +++ b/.env.example @@ -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='' diff --git a/.gitignore b/.gitignore index d4ee56c..914a212 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,12 @@ node_modules WechatEveryDay.memory-card.json .env +config.json +all_keys.json test.js package-lock.json yarn.lock Chromium.app .DS_Store -.idea \ No newline at end of file +.idea diff --git a/.npmrc b/.npmrc index c863edf..7299b6e 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -puppeteer_download_host=https://registry.npmmirror.com/-/binary/ \ No newline at end of file +pupeteer_download_host=https://registry.npmmirror.com/-/binary/ diff --git a/cli.js b/cli.js old mode 100644 new mode 100755 diff --git a/src/adapters/opencli.js b/src/adapters/opencli.js index a4a569c..7d186ab 100644 --- a/src/adapters/opencli.js +++ b/src/adapters/opencli.js @@ -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]) } diff --git a/src/config/env.js b/src/config/env.js index 42c0620..87dd4a9 100644 --- a/src/config/env.js +++ b/src/config/env.js @@ -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', } }