@fly-ai/flyai-cli

中文文档
1.0.16发布于 2026/04/21MITES Module近 30 天下载 1.7万

飞猪酒店、机票查询命令行工具(streamable_http)

原始使用文档
文档目录8 节
  1. 依赖
  2. 构建配置(profile)
  3. 构建方法
  4. 运行
  5. 隐私与请求头 x-ff-ctx
  6. 载荷概要
  7. 环境变量(隐私相关)
  8. License

flyai-cli

飞猪酒店、机票查询命令行工具(TypeScript,streamable_http MCP)。

依赖

  • Node.js >= 18
  • 安装:npm install

构建配置(profile)

默认凭证与签名字符串在构建时写入 src/build-profile.ts,由 scripts/generate-build-config.mjs 根据 profile 生成。

  1. 复制模板:cp profile.example.json profile.json

  2. 编辑 profile.json,填写 defaultAuthorization、signSecret 等(profile.json 已加入 .gitignore,勿提交密钥)。

  3. 运行时可用环境变量 FLYAI_SIGN_SECRET 覆盖构建期写入的 signSecret(非空则优先),便于分发 bundle 时不把密钥打进产物、改由部署环境注入;须与 MCP 侧配置的密钥一致。

  4. 可选:通过环境变量指定 profile 路径(相对仓库根目录或绝对路径):

    export FLYAI_PROFILE=/path/to/your-profile.json
    

未提供 profile.json 且未设置 FLYAI_PROFILE 时:不覆盖仓库里已有的 src/build-profile.ts,直接作为默认配置参与编译。仅当该文件也不存在时,才会用 profile.example.json 生成一份(例如全新克隆且未提交 build-profile.ts 时)。

构建方法

命令说明
npm run generate:build-config有 FLYAI_PROFILE 或 profile.json 时据此写入 src/build-profile.ts;否则若已有 src/build-profile.ts 则跳过
npm run build先执行 generate:build-config(prebuild),再 tsc 编译到 dist/,并为 dist/index.js 加可执行权限
npm run build:bundle先 generate:build-config,再用 esbuild 打单文件 dist/flyai-bundle.cjs(含 commander 等依赖)
npm run build:bundle:obfuscate一条指令:先 generate:build-config,再 esbuild 打包并混淆;产出 dist/flyai-bundle.plain.cjs(未混淆中间产物)与 dist/flyai-bundle.cjs(混淆终产物,package.json 的 flyai-bundle 入口)
npm run build:fullbuild + build:bundle:obfuscate(完整编译 + 混淆单文件包)

说明:npm run build 与 npm run build:bundle 会通过 prebuild / prebuild:bundle 自动跑 profile 生成;混淆单文件包请直接用 npm run build:bundle:obfuscate(已内含 generate:build-config,无需再单独执行)。供安全审计时优先使用 npm run build 或 npm run build:bundle(无 obfuscate);混淆构建请保留并对照 dist/flyai-bundle.plain.cjs。

运行

  • 开发(含生成配置、编译、启动):npm run dev
  • 编译产物:node dist/index.js <command> ...
  • 单文件包:node dist/flyai-bundle.cjs(需先执行对应 bundle 构建);若使用混淆构建,还可直接运行未混淆的 node dist/flyai-bundle.plain.cjs 便于排查问题
  • 全局命令:在仓库根目录执行 npm link 后使用 flyai <command> ...

隐私与请求头 x-ff-ctx

每个 MCP 请求会携带 x-ff-ctx:内容为 gzip 后的 JSON,若已配置 signSecret(或运行时 FLYAI_SIGN_SECRET)则再经 AES-256-GCM 加密后 Base64。典型用途包括风控、滥用检测与客户端环境一致性校验。CLI 默认不采集主机名、系统用户名、主目录;CPU 仅传核数,不传型号。具体字段实现见 src/machine-info.ts、src/device-id.ts。

在变更默认设备标识之前,请与飞猪 MCP / 风控侧确认,避免影响鉴权、签名或风控策略。

载荷概要

  • machine:platform、arch、CPU 核数、内存档位(粗分档 GB)、osType、nodeVersion、osReleaseMajor(内核/系统主版本号)
  • fingerprint:主语言标签(不含完整 locale)、UA 风格 platform、User-Agent 字符串、硬件并发数、粗设备内存档、clientSurface: cli、时区偏移、deviceId(对随机种子做 SHA256 的 64 位 hex)。种子来自 ~/.flyai/device-id 或临时目录文件;不读取 Linux machine-id、macOS IOPlatformUUID、Windows MachineGuid。

环境变量(隐私相关)

变量取值说明
FLYAI_SIGN_SECRET非空字符串覆盖构建期 signSecret,用于 x-ff-ctx 加密与请求 HMAC;须与服务端一致

License

MIT

版本与发布记录

@fly-ai/flyai-cli 共发布 14 个版本,首次发布于 2026/03/20;过去 12 个月发布了 14 个版本。

版本发布日期距今
1.0.16latest2026/04/216 个月前
1.0.152026/04/216 个月前
1.0.142026/03/317 个月前
1.0.112026/03/307 个月前
1.0.102026/03/307 个月前
1.0.92026/03/307 个月前

关于 @fly-ai/flyai-cli 的常见问题

@fly-ai/flyai-cli 是什么?

飞猪酒店、机票查询命令行工具(streamable_http)

如何安装 @fly-ai/flyai-cli?

在项目目录运行 npm install @fly-ai/flyai-cli,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 flyai,可以用 npx flyai 直接运行。

@fly-ai/flyai-cli 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/fly-ai__flyai-cli 是否存在。

@fly-ai/flyai-cli 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fly-ai/flyai-cli 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@fly-ai/flyai-cli 可以商用吗?

@fly-ai/flyai-cli 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fly-ai/flyai-cli 的下载量有多少?

根据 npm 官方下载统计,@fly-ai/flyai-cli 在 2026/10/15 – 2026/11/13 这 30 天内被下载 16,792 次,日均约 560 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fly-ai/flyai-cli 还在维护吗?

最新版本 1.0.16 发布于 2026/04/21(6 个月前);至今共发布 14 个版本,其中过去 12 个月发布了 14 个;首次发布于 2026/03/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。