Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Desktop "Add node" button invokes PIN-pairing, not manual-node registration — no UI surface for nvpair-manual-nodes

未关闭
#92 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 5 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
74/100
Issue 类型
功能
描述清晰度
描述清楚
活跃度
活跃
技术栈
electron, typescript
领域
desktop

调研方向

从 desktop/src/ui/components/AddNodeModal.tsx 开始,并阅读 services/nvpair-manual-nodes/README.md 以了解 node/add 请求的结构。跟踪现有的 relay 和 desktop/src/electron/service-bridge/manual-nodes-store.ts,包括 modular-supervisor.ts:replayManualNodes()。当 Add node 流程提供手动节点注册、保存该条目并在重启后重放该条目时,即完成。

由索引模型根据 Issue 内容生成。

描述

Desktop "Add node" button triggers PIN-pairing, not manual-node registration

Summary

The desktop UI's Settings → Cluster → Add node button (AddNodeModal.tsx)
is the only obvious entry point for adding a node by IP address, but it
actually invokes PIN-pairing (useInvitePairing().start(ip)), not the
nvpair-manual-nodes registration that a user would expect from the label
"Add node". There is no UI surface anywhere in the desktop app to add a
node to nvpair-manual-nodes. Combined with the in-memory-only state of
nvpair-manual-nodes, this means a user with a peer reachable over Tailscale
/ VPN has no documented path to make the peer stay online.

Reproduction

  1. Open Settings → Cluster.
  2. Click Add node.
  3. Type the peer's Tailscale IP (e.g. 100.121.35.74) → click Invite.
  4. Observe: pairing handshake fires (PIN prompt on the other side); on accept
    the cluster membership grows but configs/manual-nodes.json remains [].

Code reference

desktop/src/ui/components/AddNodeModal.tsx:

const handleManualInvite = useCallback(() => {
    const ip = manualIp.trim()
    if (!ip) return
    void pairing.start(ip)            // <- PIN-pairing, not nvpair-manual-nodes
}, [manualIp, pairing])

The render shows this only as a manual-IP invite — there is no second button or
tab for "register as manual node".

Why this matters

The nvpair-manual-nodes worker exists specifically to probe peers by IP when
mDNS can't reach them (e.g. across VPNs). It is documented in
services/nvpair-manual-nodes/README.md and supported via JSON-RPC
(node/add with { address, name?, tls_port?, mtls? }). The Electron-side
store (desktop/src/electron/service-bridge/manual-nodes-store.ts) already
persists entries in configs/manual-nodes.json and replays them via
modular-supervisor.ts:replayManualNodes() on startup. All the wiring exists
except the UI surface.

Suggested fix

Add a second control to AddNodeModal.tsx (e.g. a tab "Add as manual node"
or a checkbox "Skip pairing — register for direct probing only") that calls
the broker's node/add relay with { address, name }. The store already
saves on success.

Workaround

Edit ~/.config/Nvidia Corporation/Personal AI Router/configs/manual-nodes.json
by hand with the documented schema [{id, address, name}] and restart the app
— the supervisor will replay it on startup. See companion issue for the
upstream symptom this addresses.

Environment

  • nvpair 0.1.1
  • Linux 7.2.5-3-omarchy
主要语言
Go
星标
1.6k
派生
266
平均合并
3 天 15 小时
30 天内合并 PR
23

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

NVIDIA/Personal-AI-Router 的其他 Issue

查看 NVIDIA/Personal-AI-Router 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。