TZ/docs/core-package.md
2026-08-21 18:34:18 +08:00

96 lines
3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TZ Core Package v1
本规范定义 TZ 如何发现、校验和调用本地代理内核。core 包包含运行契约、二进制和该 core 固定的只读运行资源,不包含 profile、用户配置、secret、日志、PID 或缓存。
## 目录结构
稳定槽位名推荐使用 `mihomo``sing-box`
```text
<data_dir>/cores/
└── mihomo/
├── core.toml
├── mihomo
├── Country.mmdb # Mihomo GEOIP 规则数据库
├── GeoSite.dat # Mihomo GEOSITE 规则数据库
├── LICENSE # 可选
├── NOTICE # 可选
└── README.md # 可选TZ 不解析
```
目录名必须与 `core.name` 完全一致。完整版本保存在 `core.version`;需要多版本并存时使用完整槽位名,例如 `mihomo-1.19.14`
Mihomo 标准包固定携带 `Country.mmdb``GeoSite.dat`。生成配置实际引用 GEOIP/GEOSITE 时TZ 才把缺失资源复制到 `state/runtime/<core>/`;用户无需逐个 profile 手工下载。自制 Mihomo core 包也应携带这两个文件,否则 TZ 会在 build/check 阶段给出明确提示。
## Manifest
```toml
schema_version = 1
[core]
name = "mihomo"
family = "clash"
version = "1.19.18"
binary = "mihomo"
os = "linux"
arch = "x86_64"
[runtime]
entrypoint = "config.yaml"
format = "yaml"
[capabilities.config]
mixed_proxy = true
http_proxy = true
socks_proxy = true
api = true
dns = true
tun = true
[commands.start]
args = ["-d", "{workdir}", "-f", "{config}"]
[commands.check]
args = ["-t", "-d", "{workdir}", "-f", "{config}"]
[commands.version]
args = ["-v"]
```
字段约束:
- schema 当前仅支持 `1`,未知字段会被拒绝。
- name 只允许 ASCII 字母、数字、点、下划线和连字符。
- family/format 当前只允许 `clash/yaml``sing-box/json`
- os/arch 必须等于当前运行平台的 Rust target 常量。
- binary 与 entrypoint 必须是单个相对文件名,禁止绝对路径和 `..`
- binary 必须是普通可执行文件。
- start 必填check、version、reload 可选。命令存在即表示支持对应动作。
- 参数只支持 `{config}``{workdir}`TZ 直接执行 binary不经过 shell。
## 安装方式
手工复制是标准方式,无注册数据库:
```bash
cp -a ./mihomo <data_dir>/cores/mihomo
chmod +x <data_dir>/cores/mihomo/mihomo
tz core list
```
本地便捷导入:
```bash
tz core add ./mihomo
tz core info mihomo
tz core use mihomo
tz core remove mihomo
```
`core add` 只接收本地目录,不接收 URL。它会拒绝符号链接和特殊文件复制到 staging重新校验后原子移动重名直接拒绝。成功后不自动选择或启动。
`core remove` 在受管进程运行时拒绝。服务停止时可以删除当前 core并原子清空 current同时清理同名 generated/runtime 派生目录。
## 网络分发
网络下载不属于 `core add`。未来 `core install` 必须使用可信 registry 提供的外部 SHA256且 URL 只能是 HTTP/HTTPS请求和每次重定向前必须拒绝 localhost、环回、私有和保留地址。