feat(cli): nerve remote — named remote daemon aliases #148

Merged
xiaomo merged 2 commits from feat/147-nerve-remote into main 2026-04-27 04:07:55 +00:00
Owner

What

Implements nerve remote command group for managing named aliases for remote daemon connections (git-remote style).

Why

Currently connecting to remote daemons requires typing --host 192.168.2.58:9800 --api-token secret every time. Named aliases let users do nerve --remote luming status instead.

Closes #147

Changes

  • packages/cli/src/remotes.ts — Core module: loadRemotes(), saveRemotes(), resolveRemote(), getDefaultRemoteName(). Reads/writes ~/.nerve/remotes.json with 0o600 permissions.
  • packages/cli/src/commands/remote.ts — citty command group with 7 subcommands: add, list, show, set-url, set-token, remove, default.
  • packages/cli/src/cli-global.ts — Added --remote/-r flag parsing. Priority: --host overrides --remote. Calls resolveRemote() to populate host/token.
  • packages/cli/src/cli.ts — Registered remoteCommand in subCommands.
  • packages/cli/src/tests/remote.test.ts — 7 tests covering all remotes.ts functions.

Ref

## What Implements `nerve remote` command group for managing named aliases for remote daemon connections (git-remote style). ## Why Currently connecting to remote daemons requires typing `--host 192.168.2.58:9800 --api-token secret` every time. Named aliases let users do `nerve --remote luming status` instead. Closes #147 ## Changes - **packages/cli/src/remotes.ts** — Core module: loadRemotes(), saveRemotes(), resolveRemote(), getDefaultRemoteName(). Reads/writes ~/.nerve/remotes.json with 0o600 permissions. - **packages/cli/src/commands/remote.ts** — citty command group with 7 subcommands: add, list, show, set-url, set-token, remove, default. - **packages/cli/src/cli-global.ts** — Added --remote/-r flag parsing. Priority: --host overrides --remote. Calls resolveRemote() to populate host/token. - **packages/cli/src/cli.ts** — Registered remoteCommand in subCommands. - **packages/cli/src/__tests__/remote.test.ts** — 7 tests covering all remotes.ts functions. ## Ref - #147
xingyue added 1 commit 2026-04-27 02:05:07 +00:00
- Add remotes.ts with loadRemotes/saveRemotes/resolveRemote/getDefaultRemoteName
- Add remote command with add/list/show/set-url/set-token/remove/default subcommands
- Add --remote/-r global flag to cli-global.ts (priority: --host > --remote)
- Register remote command in cli.ts
- Add tests for remotes module
xiaoju added 1 commit 2026-04-27 04:03:53 +00:00
xiaomo approved these changes 2026-04-27 04:07:49 +00:00
xiaomo left a comment
Owner

Code Review — APPROVED

整体质量不错,设计清晰,测试覆盖到位。

⚠️ Warnings

  1. loadRemotes 未校验 JSON 结构 — remotes.ts:21 直接 JSON.parse 后用 ?? 取字段,文件损坏时会静默产生奇怪行为。建议加 isPlainRecord 校验或 try-catch。

💡 Suggestions

  1. nerve remote set-token 无法清除 token — positional 必填,无法设为 null。考虑支持空字符串或 --clear flag。
  2. default remote 未自动生效 — getDefaultRemoteName() 已实现但未接入 flag 解析。可作为 follow-up。
  3. flaky test skip 与 remote 无关 — 建议拆独立 commit,不阻塞。

Reviewed by 小墨 🖊️

## Code Review — APPROVED ✅ 整体质量不错,设计清晰,测试覆盖到位。 ### ⚠️ Warnings 1. **loadRemotes 未校验 JSON 结构** — remotes.ts:21 直接 JSON.parse 后用 ?? 取字段,文件损坏时会静默产生奇怪行为。建议加 isPlainRecord 校验或 try-catch。 ### 💡 Suggestions 1. **nerve remote set-token 无法清除 token** — positional 必填,无法设为 null。考虑支持空字符串或 --clear flag。 2. **default remote 未自动生效** — getDefaultRemoteName() 已实现但未接入 flag 解析。可作为 follow-up。 3. **flaky test skip 与 remote 无关** — 建议拆独立 commit,不阻塞。 *Reviewed by 小墨 🖊️*
xiaomo merged commit 2447a78f00 into main 2026-04-27 04:07:55 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
No Label
3 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#148