Files
jasonhzhang b2dfa0f1cc feat!: 重构 CLI 架构与命令模型,重做鉴权体系并扩展服务能力
架构:
- 单 crate 拆分为 Cargo workspace,按职责分为三个 crate
- wecom:argv 调度、服务发现、schema 命令树、指令处理、沙箱 FS
- wecom-cli:入口装配、鉴权、配置与日志
- wecom-transport:传输后端、信封、端点目录、长任务轮询

命令模型:
- 调用格式改为 `<service> [resource...] <method> [flags]`
- 服务目录与方法 schema 由服务端下发并本地缓存
- 请求体支持 schema 命名参数、`--json`、`--set` 三种组合方式
- 新增 `--doc` / `--schema` / `--dry-run` 文档、预览与调试能力
- 新增 `--page-count` 自动分页与 `--output` / `--output-dir` 落盘
- 新增 `+` 前缀本地 helper 与内建 `schema`、`cache` 命令

鉴权:
- 命令收敛为 `auth init` / `auth show`,扫码为默认接入方式
- 凭据统一存放于 credentials.enc(AES-256-GCM,0600)
- 密钥优先使用系统 keyring,不可用时回退本地密钥文件
- token 失效时静默换取新 token 并重放一次请求
- 旧版凭据文件在启动时自动迁移

输出与约定:
- 错误以结构化 JSON 输出到 stdout,日志与提示一律走 stderr
- 明确退出码 0 成功、1 运行时错误、2 用法错误
- `--version` 输出携带发行渠道、构建时间与 commit id
- 新增按天滚动的 JSON Lines 日志目录与额外请求头注入
- 新增可选配置文件 config.json,环境变量优先级高于配置文件
- `--json` / `--set` 中的非法 JSON 自动修复并输出前后对照
- 文件落盘由 schema 指令与响应类型决定,默认写入临时目录

能力与 Skills:
- 新增邮件、在线表格、智能文档、微盘、媒体等服务品类
- 文档能力增强:搜索、重命名、成员权限与加入规则管理
- 内置 Skills 扩充至 14 个,改为按需引用的分层结构

工程:
- 引入 lefthook 管理 Git 钩子,pnpm 升级至 11
- 补齐 library-level 与 process-level 双层 e2e 框架
- 重写开发说明与 CLI 命令参考文档

BREAKING CHANGE:
- 调用格式由 `<category> <method> '<json>'` 改为服务/资源/方法路径
- 接口名与参数整体更名,脚本需按 `--help` / `--doc` 逐个核对迁移
- 品类标识调整:`msg` → `message`,`schedule` → `calendar`
- `wecom-cli init` 移除,改用 `wecom-cli auth init`
- `auth show --auth-status` 改为 `auth show --status`
- 错误输出由 stderr 文本改为 stdout 结构化 JSON
- `WECOM_CLI_LOG_FILE` 移除,改用 `WECOM_CLI_LOG_DIR`(传目录)
- 移除 MCP 传输后端与 JSON-RPC 模式
- 移除 service_base_url_override、access_token 等废弃配置
- 落盘规则改变:由 schema 指令与响应类型决定,可用 `--output` 覆盖
2026-08-14 14:50:44 +00:00

7.4 KiB
Raw Permalink Blame History

CLI 命令参考

本文档描述 wecom-cli 的命令模型、参数约定、运行时路径、环境变量与错误格式。

命令模型

wecom-cli 的命令分为四类:

形态 说明
wecom-cli <service> [resource...] <method> [flags] 调用远程服务方法。service 由服务端 discovery 动态下发,方法可能带嵌套资源路径(如 message aibot sessions list
wecom-cli <service> +<helper> [flags] 本地 helper+ 前缀),由产品层注册
wecom-cli auth <init|show> 授权管理(内建扩展命令)
wecom-cli schema ... / wecom-cli cache ... 内建命令(隐藏在 --help 之外,见下文)

说明:

  • 服务目录与工具 schema 均在线获取,因此查看帮助与调用工具需要凭证与网络。
  • 可用的 service 列表以 wecom-cli --help 实际输出为准。常见品类:message(消息)、mail(邮件)、doc(在线文档/文档管理)、sheet(在线表格)、smartsheet(智能表格)、smartpage(智能文档)、calendar(日程)、meeting(会议)、todo(待办)、disk(微盘)、contact(通讯录)、media(媒体文件)、identity(身份)。

配置凭证 auth

交互式配置企业微信机器人凭证,加密存储到本地(见「运行时路径」)。仅需执行一次:

# 配置凭证(交互式选择接入方式;非交互环境自动使用扫码接入)
wecom-cli auth init

# 查看授权状态
wecom-cli auth show

支持两种接入方式:

  • 扫码接入(推荐):终端展示二维码,使用企业微信扫码创建绑定;扫码等待超时为 5 分钟
  • 手动接入:输入 Bot ID 和 Secret,获取方式参考

auth init 参数

参数 说明
--noninteractive 跳过交互选择,直接使用扫码接入(CI/脚本/管道等非交互环境适用)
--no-browser 扫码时不自动打开浏览器
--output-qrcode <PATH> 将二维码输出为 PNG 文件(仅支持当前目录下的路径,如 qr.png
--manual 跳过交互选择,手动输入 Bot ID 和 Secret(需要终端)

auth show 参数

默认输出人类可读的 StatusBot ID

参数 说明
--status 仅输出 authorized / unauthorized 单行,便于脚本判断

查看帮助 --help

支持获取各级命令的使用方式:

# 列出所有支持的命令和品类
wecom-cli --help

# 列出指定品类下的所有工具
wecom-cli <service> --help

# 列出指定工具所需的输入
wecom-cli <service> [resource...] <method> --help

此外,每个服务与方法都支持文档 flag:

  • wecom-cli <service> --schema / --doc:输出服务 schema / 文档
  • wecom-cli <service> <method> --schema / --doc:输出方法 schema / 文档(含 TS 类型声明)

--version 输出格式:wecom-cli <version> (<distribution> <RFC 3339 构建时间> <git_commit_id>)

调用工具

通用格式:

wecom-cli <service> [resource...] <method> [--param value ...] [--json '<JSON>'] [flags]

请求体有三种给出方式,可组合:

方式 说明
命名参数 由方法 schema 生成的 clap 参数(如 --id root),类型与必填性以 --help 为准
--json '<JSON>' 直接给定完整请求体 JSON 字符串
--set path=value 深层路径覆盖,可重复(如 --set extra.flag=true);非法 JSON 片段会自动修复

示例:

# 无参方法(含嵌套资源路径)
wecom-cli message aibot sessions list

# --json 给定请求体
wecom-cli doc search --json '{"keywords":["周报"],"limit":10}'

执行相关 flag(所有方法通用):

Flag 说明
--dry-run 仅在本地校验并打印将发送的请求,不实际调用
--page-count <n> 启用游标式自动分页,最多拉取 n 页;输出为 NDJSON(每行一页)
--page-delay <ms> 分页请求间隔毫秒数,默认 100
--output / -o <file> 将响应体写入文件
--output-dir <dir> 将响应与附件写入目录(分页时生成 <method>.ndjson

输出形态:

  • 默认:compact JSON 输出到 stdout
  • 写文件/下载:stdout 输出 DownloadResult JSON(含 content_typefile_pathsize),文件以 0600 权限落盘
  • 分页:NDJSON 多行输出

内建命令

以下命令隐藏在 --help 之外,面向调试与集成场景:

wecom-cli schema list                        # 列出所有服务及方法 schema
wecom-cli schema get <service.resource.method>  # 获取指定方法 schema(点分隔路径)
wecom-cli cache status                       # 查看 discovery 缓存状态
wecom-cli cache clear                        # 清除所有 discovery 缓存

运行时路径

项目 默认位置 备注
配置目录 ~/.config/wecom 可由 WECOM_CLI_CONFIG_DIR 覆盖
凭据文件 <config_dir>/credentials.enc auth init 时创建;AES-256-GCM 加密(0600),bot 信息与 token 共存于同一文件
加密密钥 系统 keyring 或 <config_dir>/.encryption_key 无系统 keyring 时的文件回退(0600
discovery 缓存 <config_dir>/cache 服务目录与 schema 缓存,TTL 60 秒
临时目录 <system_tmp>/wecom 媒体下载、请求暂存等;可由 WECOM_CLI_TMP_DIRconfig.jsontmp_dir 覆盖

环境变量

变量 作用
WECOM_CLI_CONFIG_DIR 覆盖默认配置目录
WECOM_CLI_TMP_DIR 覆盖临时目录根目录
WECOM_CLI_ADDITIONAL_HEADERS 额外请求头,值为 JSON objectRecord<string, string>);同时支持 WECOM_CLI_ADDITIONAL_HEADERS_* 后缀形式的多个变量,取值同为 JSON object
WECOM_CLI_LOG_LEVEL 打开 stderr 文本日志并设置过滤级别(如 debugwecom=trace;非法值回退 warn
WECOM_CLI_LOG_DIR 打开 JSON Lines 日志输出,按天写入 <dir>/ww.log.<日期>UTC+8

配置文件 config.json

存放于 <config_dir>/config.json,全部字段可选:

{
    "headers": { "X-Custom": "value" },
    "tmp_dir": "/tmp/wecom-custom"
}
字段 作用
headers 额外请求头(别名 additional_headers
tmp_dir 覆盖临时目录根目录

说明:

  • 环境变量优先级高于配置文件。
  • access token 不允许经 config.json 配置,仅来自 credentials.enc

退出码与错误格式

退出码 含义
0 成功(含 --help / --version
1 运行时错误(网络、鉴权、IO、后台业务错误等)
2 用法错误(参数缺失、未知命令等;后台返回用法类错误码时也会渲染当前命令 help)

错误以结构化 JSON 输出到 stdout

{
    "error": {
        "type": "AuthError",
        "code": 893201,
        "message": "..."
    }
}
  • CLI 自身错误的 code 段:893000893099lib)、893100893199transport)、893200893299bin),893999 为共享兜底码。
  • 后台业务错误(errcode != 0)直接透传后台响应体与原 errcode
  • 日志与提示信息一律走 stderr,不污染 stdout 的 JSON 输出。