mirror of https://github.com/jackwener/wx-cli.git
feat: npm wrapper + CI publish, fix README YAML/JSON description
parent
6cdc806642
commit
47d17aeccf
|
|
@ -13,16 +13,29 @@ jobs:
|
||||||
include:
|
include:
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
target: aarch64-apple-darwin
|
target: aarch64-apple-darwin
|
||||||
name: wx-macos-arm64
|
asset: wx-macos-arm64
|
||||||
|
npm_dir: darwin-arm64
|
||||||
|
bin: wx
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
target: x86_64-apple-darwin
|
target: x86_64-apple-darwin
|
||||||
name: wx-macos-x86_64
|
asset: wx-macos-x86_64
|
||||||
|
npm_dir: darwin-x64
|
||||||
|
bin: wx
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
target: x86_64-unknown-linux-gnu
|
target: x86_64-unknown-linux-gnu
|
||||||
name: wx-linux-x86_64
|
asset: wx-linux-x86_64
|
||||||
|
npm_dir: linux-x64
|
||||||
|
bin: wx
|
||||||
|
- os: ubuntu-latest
|
||||||
|
target: aarch64-unknown-linux-gnu
|
||||||
|
asset: wx-linux-arm64
|
||||||
|
npm_dir: linux-arm64
|
||||||
|
bin: wx
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
target: x86_64-pc-windows-msvc
|
target: x86_64-pc-windows-msvc
|
||||||
name: wx-windows-x86_64.exe
|
asset: wx-windows-x86_64.exe
|
||||||
|
npm_dir: win32-x64
|
||||||
|
bin: wx.exe
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
|
@ -33,38 +46,98 @@ jobs:
|
||||||
with:
|
with:
|
||||||
targets: ${{ matrix.target }}
|
targets: ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Cache cargo registry
|
- name: Install cross-compile tools (Linux arm64)
|
||||||
|
if: matrix.target == 'aarch64-unknown-linux-gnu'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -q
|
||||||
|
sudo apt-get install -y gcc-aarch64-linux-gnu
|
||||||
|
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Cache cargo
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.cargo/registry
|
~/.cargo/registry
|
||||||
~/.cargo/git
|
~/.cargo/git
|
||||||
target
|
target
|
||||||
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-cargo-
|
restore-keys: ${{ runner.os }}-${{ matrix.target }}-cargo-
|
||||||
|
|
||||||
- name: Build release
|
- name: Build release
|
||||||
run: cargo build --release --locked --target ${{ matrix.target }}
|
run: cargo build --release --locked --target ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Rename binary (Unix)
|
- name: Copy binary (Unix)
|
||||||
if: matrix.os != 'windows-latest'
|
if: matrix.os != 'windows-latest'
|
||||||
run: |
|
run: |
|
||||||
cp target/${{ matrix.target }}/release/wx ${{ matrix.name }}
|
cp target/${{ matrix.target }}/release/wx ${{ matrix.asset }}
|
||||||
|
cp target/${{ matrix.target }}/release/wx npm/platforms/${{ matrix.npm_dir }}/bin/wx
|
||||||
|
|
||||||
- name: Rename binary (Windows)
|
- name: Copy binary (Windows)
|
||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
run: |
|
run: |
|
||||||
copy target\${{ matrix.target }}\release\wx.exe ${{ matrix.name }}
|
copy target\${{ matrix.target }}\release\wx.exe ${{ matrix.asset }}
|
||||||
|
copy target\${{ matrix.target }}\release\wx.exe npm\platforms\${{ matrix.npm_dir }}\bin\wx.exe
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.name }}
|
name: ${{ matrix.asset }}
|
||||||
path: ${{ matrix.name }}
|
path: ${{ matrix.asset }}
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: npm-${{ matrix.npm_dir }}
|
||||||
|
path: npm/platforms/${{ matrix.npm_dir }}/bin/
|
||||||
|
|
||||||
- name: Upload to GitHub Release
|
- name: Upload to GitHub Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
with:
|
with:
|
||||||
files: ${{ matrix.name }}
|
files: ${{ matrix.asset }}
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
publish-npm:
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|
||||||
|
- name: Download all platform binaries
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: npm-*
|
||||||
|
path: npm-bins/
|
||||||
|
|
||||||
|
- name: Place binaries into platform packages
|
||||||
|
run: |
|
||||||
|
for dir in darwin-arm64 darwin-x64 linux-x64 linux-arm64; do
|
||||||
|
mkdir -p npm/platforms/$dir/bin
|
||||||
|
cp npm-bins/npm-$dir/wx npm/platforms/$dir/bin/wx
|
||||||
|
chmod +x npm/platforms/$dir/bin/wx
|
||||||
|
done
|
||||||
|
mkdir -p npm/platforms/win32-x64/bin
|
||||||
|
cp npm-bins/npm-win32-x64/wx.exe npm/platforms/win32-x64/bin/wx.exe
|
||||||
|
|
||||||
|
- name: Publish platform packages
|
||||||
|
run: |
|
||||||
|
for dir in darwin-arm64 darwin-x64 linux-x64 linux-arm64 win32-x64; do
|
||||||
|
cd npm/platforms/$dir
|
||||||
|
npm publish
|
||||||
|
cd ../../..
|
||||||
|
done
|
||||||
|
env:
|
||||||
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
|
- name: Publish main package
|
||||||
|
run: |
|
||||||
|
cd npm/wx-cli
|
||||||
|
npm publish
|
||||||
|
env:
|
||||||
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
|
||||||
15
README.md
15
README.md
|
|
@ -18,14 +18,20 @@
|
||||||
|
|
||||||
- **零依赖安装** — 单一 Rust 二进制,一行命令装完
|
- **零依赖安装** — 单一 Rust 二进制,一行命令装完
|
||||||
- **毫秒级响应** — 后台 daemon 持久缓存解密数据库,mtime 不变则复用
|
- **毫秒级响应** — 后台 daemon 持久缓存解密数据库,mtime 不变则复用
|
||||||
- **AI 友好** — `--json` 输出纯 JSON,方便 LLM agent 直接调用
|
- **AI 友好** — 默认 YAML 输出,`--json` 切换为 JSON,方便 LLM agent 直接调用
|
||||||
- **完全本地** — 数据不出本机,实时解密,无需全量预解密
|
- **完全本地** — 数据不出本机,实时解密,无需全量预解密
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
**macOS / Linux**
|
**npm(推荐,全平台)**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install -g wx-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
**macOS / Linux(curl)**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/jackwener/wx-cli/main/install.sh | bash
|
curl -fsSL https://raw.githubusercontent.com/jackwener/wx-cli/main/install.sh | bash
|
||||||
|
|
@ -49,6 +55,7 @@ irm https://raw.githubusercontent.com/jackwener/wx-cli/main/install.ps1 | iex
|
||||||
| macOS Apple Silicon | `wx-macos-arm64` |
|
| macOS Apple Silicon | `wx-macos-arm64` |
|
||||||
| macOS Intel | `wx-macos-x86_64` |
|
| macOS Intel | `wx-macos-x86_64` |
|
||||||
| Linux x86_64 | `wx-linux-x86_64` |
|
| Linux x86_64 | `wx-linux-x86_64` |
|
||||||
|
| Linux arm64 | `wx-linux-arm64` |
|
||||||
| Windows x86_64 | `wx-windows-x86_64.exe` |
|
| Windows x86_64 | `wx-windows-x86_64.exe` |
|
||||||
|
|
||||||
macOS / Linux:`chmod +x wx && sudo mv wx /usr/local/bin/`
|
macOS / Linux:`chmod +x wx && sudo mv wx /usr/local/bin/`
|
||||||
|
|
@ -137,9 +144,9 @@ wx export "张三" --format markdown -o chat.md
|
||||||
wx export "AI群" --since 2026-01-01 --format json
|
wx export "AI群" --since 2026-01-01 --format json
|
||||||
```
|
```
|
||||||
|
|
||||||
### JSON 输出(AI agent 用)
|
### 输出格式
|
||||||
|
|
||||||
所有命令加 `--json` 输出机器可读的 JSON:
|
默认输出 YAML,加 `--json` 切换为 JSON(适合 AI agent / `jq` 处理):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wx sessions --json
|
wx sessions --json
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "@wx-cli/darwin-arm64",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"description": "wx-cli binary for macOS arm64",
|
||||||
|
"os": ["darwin"],
|
||||||
|
"cpu": ["arm64"],
|
||||||
|
"files": ["bin/"],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"publishConfig": { "access": "public" }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "@wx-cli/darwin-x64",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"description": "wx-cli binary for macOS x64",
|
||||||
|
"os": ["darwin"],
|
||||||
|
"cpu": ["x64"],
|
||||||
|
"files": ["bin/"],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"publishConfig": { "access": "public" }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "@wx-cli/linux-arm64",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"description": "wx-cli binary for Linux arm64",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["arm64"],
|
||||||
|
"files": ["bin/"],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"publishConfig": { "access": "public" }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "@wx-cli/linux-x64",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"description": "wx-cli binary for Linux x64",
|
||||||
|
"os": ["linux"],
|
||||||
|
"cpu": ["x64"],
|
||||||
|
"files": ["bin/"],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"publishConfig": { "access": "public" }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "@wx-cli/win32-x64",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"description": "wx-cli binary for Windows x64",
|
||||||
|
"os": ["win32"],
|
||||||
|
"cpu": ["x64"],
|
||||||
|
"files": ["bin/"],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"publishConfig": { "access": "public" }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
const PLATFORM_PACKAGES = {
|
||||||
|
'darwin-arm64': '@wx-cli/darwin-arm64',
|
||||||
|
'darwin-x64': '@wx-cli/darwin-x64',
|
||||||
|
'linux-x64': '@wx-cli/linux-x64',
|
||||||
|
'linux-arm64': '@wx-cli/linux-arm64',
|
||||||
|
'win32-x64': '@wx-cli/win32-x64',
|
||||||
|
};
|
||||||
|
|
||||||
|
const platformKey = `${process.platform}-${process.arch}`;
|
||||||
|
const pkg = PLATFORM_PACKAGES[platformKey];
|
||||||
|
|
||||||
|
if (!pkg) {
|
||||||
|
console.log(`wx-cli: no binary for ${platformKey}, skipping`);
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const ext = process.platform === 'win32' ? '.exe' : '';
|
||||||
|
|
||||||
|
try {
|
||||||
|
const binaryPath = require.resolve(`${pkg}/bin/wx${ext}`);
|
||||||
|
if (process.platform !== 'win32') {
|
||||||
|
fs.chmodSync(binaryPath, 0o755);
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
console.log(`wx-cli: platform package ${pkg} not installed`);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"name": "wx-cli",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"description": "Query your local WeChat data from the command line. Designed for LLM agent tool calls.",
|
||||||
|
"bin": {
|
||||||
|
"wx": "bin/wx.js"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"postinstall": "node install.js"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"bin/",
|
||||||
|
"install.js"
|
||||||
|
],
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@wx-cli/darwin-arm64": "0.1.1",
|
||||||
|
"@wx-cli/darwin-x64": "0.1.1",
|
||||||
|
"@wx-cli/linux-x64": "0.1.1",
|
||||||
|
"@wx-cli/linux-arm64": "0.1.1",
|
||||||
|
"@wx-cli/win32-x64": "0.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"keywords": ["wechat", "cli", "wx", "llm", "ai", "sqlite", "sqlcipher"],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/jackwener/wx-cli"
|
||||||
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue