内容
# wfcli
`wfcli` 是一个用于终端、MCP 客户端和 Linux/Proton 游戏内伴侣的 Warframe 数据工具包。一个共享的 Erlang/OTP 守护进程拥有网络访问、缓存、查询、监视、Warframe 市场请求、本地玩家观察和 Forma 规划。
## 组件
| 组件 | 角色 |
| --- | --- |
| [`wfcli`](#命令行客户端) | 终端客户端和 stdio MCP 服务器。它解析参数并格式化守护进程返回的数据。 |
| [`wfdaemon`](docs/daemon.md) | 用于数据、持久性、查询、监视、市场访问、玩家状态和规划的受监督的 OTP 服务。 |
| [`wfcompanion`](docs/companion.md) | 原生 Linux/Proton 观察器和 Wayland 叠加层。它发布本地玩家观察数据并显示上下文数据,例如遗物价格。 |
| [`wfcore`](docs/developer/shared_utilities.md) | 无进程 OTP 库,包含共享协议、模式、路径和值助手。 |
客户端在需要时启动 `wfdaemon`。并发客户端重用其解析的数据和限速网络工作。守护进程通常在空闲后停止;显式启动和登录自动启动可以使其保持运行。
## 需求
CLI 和守护进程:
- Erlang/OTP 29
- Rebar3
- GNU Make
伴侣构建:
- Rust 和 Cargo
- Git、CMake、C/C++ 编译器和 `jq`
- MinGW-w64 用于 Proton 调试输出助手
- `ccache` 是可选的
伴侣运行时:
- KDE Plasma on Wayland、KScreen 和 Spectacle
- Tesseract 5 with English `eng.traineddata`
FFmpeg with `libvpx-vp9` 仅需要用于动画叠加层预览。`zip` 被 `make package` 需要。
## 从源码构建
构建开发和生产树:
```bash
git submodule update --init
make build
```
开发构建,包含调试信息和主机 Erlang 运行时:
```bash
make dev
```
生产构建,优化 Rust,剥离 Erlang 调试信息,并包含自包含的 relx 守护进程版本:
```bash
make prod
```
生成的文件使用这些根目录:
```text
_build/ Rebar3 和 Cargo 编译器输出
.cache/ Rebar3 下载和 ccache 数据
dev/ 暂存开发可执行文件和版本
prod/ 暂存生产可执行文件和版本
```
根链接使两个环境在存储库位于 `PATH` 时直接可用:
| 开发 | 生产 |
| --- | --- |
| `wfclid` | `wfcli` |
| `wfdaemond` | `wfdaemon` |
| `wfcompaniond` | `wfcompanion` |
有用目标:
```bash
make dev-erlang
make prod-erlang
make dev-companion
make prod-companion
make native-compile-commands
make test
make check
make package
```
`make native-compile-commands` 为 Blend2D、AsmJit、原生渲染器桥和 MinGW 调试输出助手准备 clangd 元数据。跟踪的 VSCode 设置使用该数据库和根 Cargo 工作区自动。
`make package` 在 `releases/` 下写入 `.tar.gz` 和 `.zip` 存档。生产可执行文件位于 `prod/bin/` 下;私有运行时文件位于 `prod/libexec/` 下。
`wfcompaniond` 在 Warframe 活动时显示一个小的诊断 HUD。它报告守护进程、游戏观察器、调试输出和遗物场景状态。生产 `wfcompanion` 不显示此 HUD。
## 命令行客户端
聚焦命令提供常见的视图,而无需查询语法:
```bash
wfcli fissures
wfcli alerts --watch
wfcli baro --inventory
wfcli teshin
wfcli archimedea
wfcli market 'saryn prime set'
```
使用内置帮助获取完整的命令界面:
```bash
wfcli --help
wfcli help commands
wfcli fissures --help
```
### 查询和监视
查询语言搜索世界状态、官方导出、选定 WFCD 数据、市场元数据和本地玩家观察:
```bash
wfcli query 'dataset=worldstate type=fissure hard=true'
wfcli query 'dataset=codex toxin OR heat'
wfcli query 'dataset=market lowest_sell<50'
wfcli watch 'dataset=worldstate type=alert'
```
参见 [查询语言和监视](docs/query.md) 获取语法、数据集、分页、原始源访问和监视行为。
### Forma 规划
```bash
wfcli forma-plan --config ./wisp.yml --visualize
wfcli visualize --plan ./wisp.plan.yml
```
生成的文件默认为配置文件目录。参见 [Forma 规划器和可视化](docs/forma-plan.md)。
### 守护进程控制
普通命令自动启动守护进程。显式控制支持持久运行、诊断、更新和登录启动:
```bash
wfcli daemon status
wfcli daemon start
wfcli daemon start --idle-shutdown
wfcli daemon autostart enable
wfcli daemon update
wfcli daemon stop
```
参见 [守护进程生命周期和更新](docs/daemon.md)。
### Linux 伴侣
Steam 启动模式是首选的,因为它在 Warframe 启动和停止时启动和停止伴侣,并为只读玩家数据收集器提供所需的进程关系。在 Steam 中,打开 **Warframe > 属性 > 通用 > 启动选项** 并设置:
```bash
/absolute/path/to/wfcli/prod/bin/wfcompanion launch -- %command%
```
仅在独立运行时使用 `wfcli companion start`。生命周期、可见性、诊断和叠加层预览通过 CLI 保持可用:
```bash
wfcli companion status
wfcli companion show
wfcli companion hide
wfcli companion probe
wfcli companion screenshot ./capture.png
wfcli companion relic-ocr ./capture.png
wfcli companion preview relic-rewards
wfcli companion preview --all
```
参见 [Linux/Proton 伴侣](docs/companion.md) 获取启动选项、运行时依赖项、交互控制、玩家数据和故障排除。
### MCP
`wfcli mcp` 是一个换行分隔的 stdio MCP 服务器。它启动或重用 `wfdaemon` 并返回结构化数据而无需终端格式化:
```bash
codex mcp add wfcli -- /absolute/path/to/wfcli/prod/bin/wfcli mcp
```
参见 [MCP 服务器](docs/mcp.md) 获取工具、资源和取消行为。
## 文档
- [`wfcli`](#命令行客户端): [数据源](docs/data-sources.md)、 [查询语言](docs/query.md) 和 [Forma 规划器](docs/forma-plan.md)
- [`wfdaemon`](docs/daemon.md): 生命周期、空闲策略、systemd 和更新
- [`wfcompanion`](docs/companion.md): Proton 观察、OCR、叠加层和诊断
- [`wfcli mcp`](docs/mcp.md): MCP 工具和资源
- [贡献者文档](docs/DEVELOPER.md): 所有权、内部机制和工作流程
## 许可证
项目代码在 Apache-2.0 下许可;参见 [LICENSE.md](LICENSE.md)。该许可证不授予第三方组件或 Digital Extremes 的 Warframe 资产的权利。这些资产仍然受 [Warframe 内容政策](https://www.warframe.com/en/contentpolicy) 的约束。出处和许可证说明位于 `apps/wfcompanion/vendor/` 和 `apps/wfcompanion/assets/` 下的相关文件旁边。