RFC: nerve remote — named remote daemon aliases #147

Closed
opened 2026-04-27 01:54:47 +00:00 by xingyue · 0 comments
Owner

Summary

git remote 一样管理远程 daemon 连接别名,避免每次手动输入 --host + --api-token

Motivation

当前访问远程 daemon 需要:

nerve --host 192.168.2.58:9800 --api-token secret status

多台设备(鹿鸣、团子、小橘)时每次都要记 IP 和 token,很不方便。期望:

nerve --remote luming status
nerve -r tuanzi workflow list

Proposal

新增 nerve remote 命令组

# 添加 remote
nerve remote add luming 192.168.2.58:9800 --token secret

# 列出所有 remote
nerve remote list

# 查看详情
nerve remote show luming

# 修改
nerve remote set-url luming 100.89.82.86:9800
nerve remote set-token luming new-secret

# 删除
nerve remote remove luming

# 设置默认 remote(可选,让 --remote 不带参数时使用)
nerve remote default luming

全局 flag

# 用别名替代 --host + --api-token
nerve --remote luming status
nerve -r luming sense list

# 如果设了 default remote
nerve -r status   # 等价于 nerve --remote <default> status

存储

存在 ~/.nerve/remotes.json(用户级,不跟项目走):

{
  "remotes": {
    "luming": { "host": "192.168.2.58:9800", "token": "secret" },
    "tuanzi": { "host": "100.89.82.86:9800", "token": "abc123" },
    "xiaoju": { "host": "100.103.156.93:9800" }
  },
  "default": "luming"
}

实现要点

  • cli-global.ts: 新增 --remote / -r 全局 flag 解析,从 remotes.json 读取 host/token 注入
  • commands/remote.ts: 新命令组,CRUD 操作 remotes.json
  • 优先级: --host > --remote > default remote > 本地 Unix socket
  • 存储位置: ~/.nerve/remotes.json,不放 nerve.yaml(因为 remote 是用户级配置,不是项目级)
  • token 安全: 文件权限 0600,nerve remote list 显示时 token 脱敏(***

兼容性

  • --host / --api-token 继续保留,不做 breaking change
  • --remote 只是语法糖,内部复用 resolveDaemonTransport() + HttpTransport

Implementation Plan

步骤 内容 文件
1 remotes.json 读写工具函数 packages/cli/src/remotes.ts (new)
2 nerve remote 命令组 packages/cli/src/commands/remote.ts (new)
3 cli-global.ts 支持 --remote / -r packages/cli/src/cli-global.ts
4 resolveDaemonTransport 集成 packages/cli/src/daemon-client.ts
5 测试 packages/cli/src/tests/remote.test.ts (new)

Ref

  • 现有 transport 选择: resolveDaemonTransport() in daemon-client.ts
  • 全局 flag 解析: cli-global.ts (--host, --api-token)
  • HTTP transport: http-transport.ts
  • 相关: #133 (HTTP API + CLI remote)
## Summary 像 `git remote` 一样管理远程 daemon 连接别名,避免每次手动输入 `--host` + `--api-token`。 ## Motivation 当前访问远程 daemon 需要: ```bash nerve --host 192.168.2.58:9800 --api-token secret status ``` 多台设备(鹿鸣、团子、小橘)时每次都要记 IP 和 token,很不方便。期望: ```bash nerve --remote luming status nerve -r tuanzi workflow list ``` ## Proposal ### 新增 `nerve remote` 命令组 ```bash # 添加 remote nerve remote add luming 192.168.2.58:9800 --token secret # 列出所有 remote nerve remote list # 查看详情 nerve remote show luming # 修改 nerve remote set-url luming 100.89.82.86:9800 nerve remote set-token luming new-secret # 删除 nerve remote remove luming # 设置默认 remote(可选,让 --remote 不带参数时使用) nerve remote default luming ``` ### 全局 flag ```bash # 用别名替代 --host + --api-token nerve --remote luming status nerve -r luming sense list # 如果设了 default remote nerve -r status # 等价于 nerve --remote <default> status ``` ### 存储 存在 `~/.nerve/remotes.json`(用户级,不跟项目走): ```json { "remotes": { "luming": { "host": "192.168.2.58:9800", "token": "secret" }, "tuanzi": { "host": "100.89.82.86:9800", "token": "abc123" }, "xiaoju": { "host": "100.103.156.93:9800" } }, "default": "luming" } ``` ### 实现要点 - **cli-global.ts**: 新增 `--remote` / `-r` 全局 flag 解析,从 remotes.json 读取 host/token 注入 - **commands/remote.ts**: 新命令组,CRUD 操作 remotes.json - **优先级**: `--host` > `--remote` > default remote > 本地 Unix socket - **存储位置**: `~/.nerve/remotes.json`,不放 nerve.yaml(因为 remote 是用户级配置,不是项目级) - **token 安全**: 文件权限 0600,`nerve remote list` 显示时 token 脱敏(`***`) ### 兼容性 - `--host` / `--api-token` 继续保留,不做 breaking change - `--remote` 只是语法糖,内部复用 resolveDaemonTransport() + HttpTransport ## Implementation Plan | 步骤 | 内容 | 文件 | |------|------|------| | 1 | remotes.json 读写工具函数 | packages/cli/src/remotes.ts (new) | | 2 | `nerve remote` 命令组 | packages/cli/src/commands/remote.ts (new) | | 3 | cli-global.ts 支持 `--remote` / `-r` | packages/cli/src/cli-global.ts | | 4 | resolveDaemonTransport 集成 | packages/cli/src/daemon-client.ts | | 5 | 测试 | packages/cli/src/__tests__/remote.test.ts (new) | ## Ref - 现有 transport 选择: `resolveDaemonTransport()` in daemon-client.ts - 全局 flag 解析: cli-global.ts (`--host`, `--api-token`) - HTTP transport: http-transport.ts - 相关: #133 (HTTP API + CLI remote)
This repo is archived. You cannot comment on issues.
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#147