文档

CLI 命令参考、MApp 开发规范、API 接口列表。Agent 可将此文档作为输入,生成操作 vzhan 容器的 Skill。

§1 CLI 命令参考

所有命令支持 --json 输出,统一信封格式: {"exit_code":<int>,"data":<object|null>,"error":<object|null>}。 Agent 优先使用 --json 解析结果。

1.1 网络命令

swarm — P2P 节点管理

命令功能状态
swarm peers列出已连接的对等节点stable
swarm id查看本节点标识(NodeId + PeerId)stable
swarm addrs列出已知节点的网络地址stable
swarm connect手动连接到指定地址的节点stable
swarm disconnect断开与指定地址的连接stable
swarm filters管理地址过滤器stable
swarm local查看本地网络地址stable
# 查看对等节点 Leither swarm peers --json
# 查看本节点标识 Leither swarm id

dht — 分布式哈希表

命令功能状态
dht netsizeDHT 网络节点总数stable
dht showDHT 路由表详情(LAN/WAN 分表)stable
dht get从 DHT 读取键值stable
dht put向 DHT 写入键值stable
dht findpeer在 DHT 中查找指定 Peerstable

1.2 文件命令

files — MFS 文件系统

命令功能状态
files ls列出 MFS 目录内容stable
files stat显示文件/目录状态信息stable
files cp复制文件或目录stable
files mv移动文件或重命名stable
files rm删除文件stable
files mkdir创建目录stable
files flush将路径数据刷写到磁盘stable
files check检查哪些文件本地不可用stable

1.3 应用命令

lapp — MApp 管理

命令功能状态
lapp uploadapp上传并部署 MApp 到当前节点stable
lapp showapp列出所有已部署的 MApp 及详情stable
lapp release发布 MApp 到 P2P 网络stable
lapp backup备份应用数据stable
lapp restore从备份恢复应用stable
lapp delver删除指定版本stable
lapp uploadfile上传文件到应用stable
lapp setdomain设置应用域名stable
lapp resetref重置应用引用stable

lpki runapp — 运行 MApp

命令功能状态
lpki runapp --id <id>通过容器 ID 运行 MAppstable
lpki runapp --local <path>从本地路径开发调试运行stable
lpki runscript在容器中运行脚本stable

MApp 部署后自动注册 HTTP 路由。Agent 通常直接通过 curl http://127.0.0.1:4800/entry?aid=<id>&ver=cur 调用 MApp,无需 runapp 子命令。

1.4 身份命令

lpki — PKI 密码学体系

命令功能状态
lpki genkey生成密钥对stable
lpki genpk从私钥导出公钥stable
lpki gencert生成证书(CA 签名)stable
lpki genpkcert生成公钥证书stable
lpki gensid生成会话 IDstable
lpki signppt对 PPT 令牌签名stable
lpki verifyppt验证 PPT 令牌签名stable
lpki addkey将密钥添加到节点stable
lpki id显示节点 IDstable
lpki show显示对象信息stable
lpki grantservice向目标节点授权服务stable
lpki reqservice从节点请求服务授权stable
lpki shell启动交互式 Shellstable
# 生成密钥和证书 Leither lpki genkey -o user.key Leither lpki genca -k user.key -m "name=user" -o user.ca
# 上传 MApp(需作者密钥签名) Leither lapp uploadapp ./myapp -k user.key

1.5 存储命令

mimei — MiMei 去中心化存储

命令功能状态
mimei create创建新的 MiMei 数据对象stable
mimei add添加文件或目录到 MiMeistable
mimei get读取 MiMei 内容stable
mimei ls列出 MiMei 目录内容stable
mimei show显示 MiMei 详情stable
mimei sync跨节点同步 MiMei 数据stable
mimei backup备份当前版本到上一版本stable
mimei restore从备份恢复数据stable
mimei diagnose对 MiMei 数据库运行健康检查stable
mimei repair修复 MiMei 数据库(MAC 重建等)stable
mimei rebackup修复备份错误stable
mimei publish发布 MiMei 到 P2P 网络stable
mimei findprovs查找提供此 MiMei 的节点stable
mimei provide宣告本节点提供此 MiMeistable
mimei setright设置 MiMei 权限stable
mimei setdomain设置 MiMei 域名stable
# 诊断 MiMei 健康状态 Leither mimei diagnose <mid>
# 跨节点对比(远程诊断) Leither mimei diagnose <mid> -n <node>
# 修复 MAC 不一致 Leither mimei repair <mid>
# 从对端同步数据 Leither mimei sync <mid>

1.6 系统命令

命令功能状态
run启动 Leither 服务(-d 后台运行)stable
stop停止 Leither 服务stable
version显示版本、架构、API 版本stable
getvar查询系统变量(如 getvar verstable
update更新 Leither 到最新版本stable
stat ledger查询用户账本统计stable
stat mimei查询 MiMei 统计stable
stat user查询用户统计stable
notify发送邮件通知stable
init初始化 Leither 服务配置stable
mcpMCP 协议工具集beta

§2 MApp 开发规范

MApp(MiMei Application)是 vzhan 容器中的可执行应用,支持 Go 和 JavaScript 语言。 应用通过解释执行(不编译为原生二进制),自动注册 HTTP 路由。

2.1 应用结构

myapp/ ├── main.go # 主程序(Go MApp 入口) ├── utils.go # 工具函数 ├── config.json # 配置文件 └── .manifest # 清单文件(自动生成)

2.2 Go MApp — RunMApp 模式(推荐)

实现 RunMApp 函数,通过 Entry 参数路由到不同处理逻辑。

package main
import ( "fmt" "github.com/3and4/Leither/lapi" )
func RunMApp(Entry string, Request map[string]string, args []any, wr io.Writer) (any, error) { lapi := lapi.GetLApi()
switch Entry { case "test": return "Hello from test entry", nil case "process": return processData(Request, args) default: return fmt.Sprintf("Entry: %s", Entry), nil } }

2.3 Go MApp — main 函数模式

func main() { lapi := lapi.GetLApi() request := lapi.GetRequest() args := lapi.GetArgs()
// 处理逻辑 fmt.Fprintln(lapi.GetWriter(), "Hello from main") }

2.4 JavaScript MApp

JS 文件作为独立入口点,通过 entry 参数指定。每个 .js 文件对应一个入口名。

# JS MApp 可用入口示例(来自 testjs 应用) runmapp, testlog, testtx, testw
# 通过 entry 参数调用 curl "http://127.0.0.1:4800/entry?aid=<id>&ver=cur&entry=runmapp"

2.5 部署命令

# 1. 生成密钥 Leither lpki genkey -o user.key
# 2. 上传应用(部署到当前节点) Leither lapp uploadapp ./myapp -k user.key
# 3. 发布到 P2P 网络(其他节点自动同步) Leither lapp release -a myapp
# 4. 本地开发调试 Leither lpki runapp --local ./myapp test_entry -r "param1=value1" -a user.key

2.6 关键约束

  • MApp 由 Leither 解释执行,不编译为独立可执行文件。用 go build 检查语法,不用 go run
  • Go MApp 导入路径为 github.com/3and4/Leither/lapi
  • 部署后自动注册 HTTP 路由:http://127.0.0.1:4800/entry?aid=<id>&ver=cur
  • 应用代码和资源存储在 MiMei(IPFS 兼容的内容寻址存储)中,通过 P2P 网络自动同步

§3 HTTP API 参考

Leither 节点通过 HTTP 接口对外提供服务。MApp 部署后自动注册路由,Agent 可直接通过 HTTP 调用。

3.1 系统端点

端点方法功能状态
/getvar?name=<key>GET查询系统变量(ver、ServicePort 等)stable
/entryGETMApp 执行入口——核心路由
参数:aid, mid, ver, entry, nid
stable
/api/v0/versionPOSTIPFS 组件版本(非 Leither 整体状态)stable

3.2 /entry — MApp 执行端点

MApp 的核心调用入口。部署后每个应用自动获得此路由。

参数必需说明
aid应用 ID(从 lapp showapp 获取)
ver推荐版本号(cur 或数字)。默认最新
entry入口名(对应 RunMApp 的 Entry 参数或 JS 文件名)
midMiMei ID(指定数据源)
nid远程节点 ID(跨节点 RPC 调用)
# 基础调用 curl "http://127.0.0.1:4800/entry?aid=1ZLw8a9HvMnlnDzvo9JtktjW_3j&ver=cur"
# 指定入口 curl "http://127.0.0.1:4800/entry?aid=<id>&ver=cur&entry=whoami"
# 跨节点调用 curl "http://127.0.0.1:4800/entry?aid=<id>&nid=<peer-id>"

3.3 lapi — MApp 内可用接口

MApp 代码中通过 lapi.GetLApi() 获取的 API 实例,提供以下能力:

接口方法示例功能
IBackEndGetLApi(), GetArgs(), GetRequest()获取 API 实例和请求上下文
ISession会话状态读写跨请求持久化
IBEAppDataMMOpenAppData()打开应用专属 MiMei 数据库
ILogDebug(), Info(), Warn(), Error()分级日志输出
IAuth身份验证操作签名、验证
IVarActGetVar(), SetVar()键值存储(读写系统/应用变量)
IMiMeiMiMeiSync()MiMei 数据操作和同步
INetSwarmPeers(), SwarmConnect()P2P 网络操作

MApp 只能访问 lapi 公开层接口。内部 API(api.LApi)包含更多方法(ITunnel、IDNS、INode、IIpfs、ISystem 等),仅供 Leither 内部使用。详见 MApp 容器架构文档

3.4 HTTP 响应格式

MApp 的返回值通过 io.Writer 输出。返回类型决定响应格式:

  • 字符串 / 数字 → 直接写入响应体
  • HTML 模板 → 自动渲染(模板引擎使用 Go text/template
  • 复杂对象 → 通过 fmt.Fprintln(wr, obj) 输出
  • 错误 → 返回 HTML 错误页面:<html><title>Error</title><body>Error:...</body></html>