@fnnas-labs/fnos-cli
fnOS 命令行客户端与 Agent Skill,支持 macOS、Linux 和 Windows 的 x64、arm64。需要 Node.js 18+ 与 npm。
了解飞牛 NAS 与 fnOS,访问 飞牛官网。
安装与升级
npx -y --package=@fnnas-labs/fnos-cli@latest fnos-cli install
fnos-cli --version
fnos-cli --help
该命令安装同版本全局 CLI,并把对应 Skill 安装到 ~/.agents/skills/fnos-cli。已运行的 Agent 可能需要重启才能发现 Skill。现有安装不会自动更新;重复安装命令可显式升级。npm 处理发布期间 latest 可能仍为上一版,执行新能力前检查版本和帮助。
npx -y --package=@fnnas-labs/fnos-cli@latest fnos-cli install --skill-only
npx -y --package=@fnnas-labs/fnos-cli@latest fnos-cli install --project
npx -y --package=@fnnas-labs/fnos-cli@latest fnos-cli install --skip-skill
--skill-only 只安装 Skill;--project 安装到当前项目 .agents/skills/fnos-cli;--skip-skill 只安装 CLI。也可不全局安装,直接用 npx -y --package=@fnnas-labs/fnos-cli@latest fnos-cli --help。
新版只提供 fnos-cli,不提供旧兼容入口。需要重新 OAuth 授权:状态与其他产品隔离,仅使用 FNOS_CLI_* 配置变量。旧凭据不迁移、不读取、不删除。升级只清理能确认归属且未经修改的旧入口和 Skill;未知归属或修改过的内容保留并提示。
授权
安装不等于登录。把 NAS 目标和 profile 告诉 Agent,Agent 生成授权链接:
fnos-cli --profile home --host <nas-host> login --authorize-only --agent-name '<agent>'
用户在浏览器自行登录并授权,把一次性 code 主动发回 Agent;无需运行终端。Agent 以相同目标、profile、执行主机、系统用户和配置环境执行 login --code '<code>',检查令牌保存并做只读验证。完整流程见包内 skill/reference/oauth.md。不提供密码或 token;code 可能留在聊天、工具调用记录和进程参数中。SSH 和容器不自动共享状态;macOS Keychain 可能需要系统批准。用户也可主动选择普通 login 的手动终端流程。
DSH 集成
fnOS 保留 DSH 支持,使用同包的 Skill 和启动器。集成说明见包内 npm/README.dsh.md;两步授权无需交互终端,用户仍自行在浏览器登录并回传 code。
许可
本包使用标准 MIT,版权主体为 Guangzhou TR Intelligent Manufacturing Technology Co., Ltd.。许可覆盖分发的 CLI、Skill 与集成代码,不覆盖 NAS 操作系统、服务端或 API 访问授权。详见包内 LICENSE;第三方声明 保留在公开仓库中。
首次运行与缓存
安装包携带固定版本的轻量启动器。首次执行 fnos-cli --version、--help 或业务命令时,启动器只下载当前执行主机对应的一份 CLI,按包内 SHA-256 校验后运行。下载提示写入 stderr,不混入业务 JSON;安装 Skill 文档不会触发下载,跳过 npm 安装脚本也能首次运行。
首次使用需要联网访问一个可用下载源。缓存准备好后,同一产品、版本和平台的后续调用无需连接下载站。缓存位于当前用户的系统缓存目录下,以命令、版本和平台隔离,无需管理员权限,不修改 PATH,也不读取旧产品登录态。
更新 npm 包或重新安装 Skill 是显式升级;已有入口继续使用自己固定的版本,不会自动升级或删除其他版本。下载失败后重新执行原命令即可重试。校验失败不会执行下载内容;若提示缓存损坏,先确认没有初始化进程运行,再移除提示的缓存目录并重试。残留锁同样只在确认初始化进程已停止后清理。
镜像配置
下载顺序是 GitHub Release、用户配置的兼容 npm 二进制镜像、公共 npmmirror。启动器优先读取环境变量 npm_config_registry;没有设置时,npm 可用则读取 npm config get registry 的有效值。缓存已存在时不再读取这些配置或访问下载站。
镜像基址须为不含用户名、密码、查询参数、空白或反斜杠的 HTTPS URL,可包含企业路径前缀。默认 npmjs registry 不提供二进制接口,会被跳过。镜像使用 /-/binary/fnos-cli/v<版本>/<资产名> 路径;普通 npm registry 可能没有此接口,失败后会继续下一源。环境变量设为空字符串时跳过自定义镜像。
所有源获取同一个固定版本,并使用包内摘要校验。网络或 HTTP 失败会继续下一源;成功收到的内容若大小或摘要不符,立即停止,本次不会尝试其他来源。所有来源都失败后可重新执行原命令。公共镜像的可用性取决于对应产品、版本资产的收录与同步;客户端具备回退逻辑不代表镜像已完成收录。