Skip to content

UX: guide local dashboard pairing with hub identity and an origin-specific next action #4208

Closed

Description

@lidge-jun

Area

Dashboard

What are you trying to accomplish?

After connecting a Windows machine to a hub, open its local dashboard and inspect this machine's usage or shared settings without having to reconstruct the authentication procedure from source code.

What prevents this today?

The CLI connection can succeed while the local browser still needs a separate hub session. In the observed relay-mode UI, the pairing form contains a one-time code input and a technical sentence about a fixed relay destination, but does not identify where to obtain the code or provide an origin-specific command.

The direct-mode help says to paste a code created on the hub; relay mode replaces that help with a relay implementation detail. A user can reasonably try the data-plane key or administrator token because the relationship between those credentials and a browser pairing code is not explained at this decision point.

This is distinct from #4055, which asks for persistent login/session lifetime. No authentication lifetime change is requested here.

What should OpenCodex do?

Make the first meaningful action discoverable:

  • Name the already-configured hub and state that the model/client connection is established while this browser still needs authorization.
  • Provide one primary action, such as “Get pairing instructions,” with a safe copyable command generated for the exact current browser origin. State clearly that it runs on the hub.
  • Explain that the one-time browser code is different from the model API credential and administrator token.
  • Keep the fixed-relay implementation explanation under optional connection details instead of making it the only help.
  • For expired/refused codes, offer a clear way to obtain a new code and retry; do not persist the secret or relax origin binding.
  • After success, reveal the existing usage view with its source and “This machine / Entire hub” scope control.

Example usage or interface

Suggested copy, not a request for these exact words:

This computer is connected to Hub A.
Authorize this browser to view hub data.

[Get pairing instructions]

Run on Hub A:
ocx gui pair --origin http://127.0.0.1:10100

Paste the returned one-time code here.

The origin must come from the active page, not a hardcoded localhost spelling. If the hub cannot be administered by this user, show the request-to-operator path instead of implying they have permission.

Alternatives or workarounds

SSH to the hub and look up ocx gui --help; separately open the remote administrator console. Both work for experts but require knowledge the pairing form could supply.

Additional context

Observed on client 2.50.0 with hub dev 2.51.0. Source: gui/src/connect-pairing.ts:33, especially the mutually exclusive explanatory text at line 35. Existing machine-scoped usage controls are at gui/src/pages/Usage.tsx:968; this proposal is about reaching them, not rebuilding their aggregation.

Design rationale: reduce decisions and repeated lookup work; expose the next safe action; retain authentication boundaries; use progressive disclosure for transport details. Acceptance should cover first visit, already paired, expired/refused code, hub unreachable, and keyboard-only completion.

Checks

  • I searched existing issues and documentation.
  • This request describes a concrete OpenCodex workflow rather than merely naming a desired technology.
  • I removed secrets and personal data.

Activity

  1. lidge-jun commented on Sep 10, 2026

    @lidge-jun
    OwnerAuthor

    리뷰 · 우선순위 55 / 80

    로컬 대시보드 페어링 UI 가 “다음에 뭘 하면 되는지”를 origin 단위로 안내하지 않습니다. CLI 연결은 됐는데 브라우저는 별도 허브 세션이 필요하고, relay 모드에서는 고정 릴레이 설명만 있고 코드를 어디서 받는지·어떤 명령으로 받을지가 비어 있습니다. direct 모드는 “허브에서 만든 코드 붙여넣기” 정도만 있습니다. 사용자는 데이터 플레인 키나 관리자 토큰을 페어링 코드로 오해하기 쉽습니다. #4055(세션 수명)와는 다른, 지금 이 순간의 next-action UX 문제입니다.

    현재 dev HEAD 6101140ff(2.51.0) 의 gui/src/connect-pairing.ts 는 target.transport === "relay" 이면 connection.pairing.relayWarning, 아니면 connection.pairing.body 만 보여 줍니다. origin 특정 ocx gui pair --origin … 같은 복사 가능한 다음 행동이 없습니다. #4206(페어링 중 ocx start 오안내)과 같은 화면이라 UX 배치가 자연스럽습니다. 우선순위는 #4206 보다 조금 낮지만, 같이 고치면 한 번에 “잘못된 재시작”과 “코드 어디서?”를 줄일 수 있습니다.

    라인 - gui/src/connect-pairing.ts ~:35 — relayWarning vs body 분기만; origin·발급 경로·CLI 다음 행동 없음
    경로/심볼 - connection.pairing.* i18n 키 — 코드 입력 UI 중심; hub identity / origin-specific command 부재
    경로/심볼 - #4206 Dashboard error — 같은 connected-dashboard 표면에서 충돌하는 안내

    메인테이너의 판단이 필요한 지점

    너의 추천
    페어링 패널에 hub identity 와 origin 특정 다음 행동(예: ocx gui pair --origin … 또는 허브에서 코드 발급하는 위치)을 넣으세요. #4206 과 UX 배치를 권장합니다. 데이터 플레인 키/관리자 토큰과 페어링 코드를 구분하는 한 줄도 넣으세요.

    이 댓글은 grok-bot이 작성했습니다

  2. lidge-jun commented on Sep 13, 2026

    @lidge-jun
    OwnerAuthor

    Resolved on dev by #4378, landed today as part of a 36-pull-request batch.

    gui/src/connect-pairing.tsx names the hub, builds an origin-specific command (ocx gui pair --origin "<origin>") for copying, and warns against pasting API or admin credentials into the pairing field.

    Verified against origin/dev at 72601a173 after the batch landed, rather than from the pull request description. Closing on that evidence; reopen if the behavior does not match on your setup.

  3. RHODIZSECURITY commented on Sep 26, 2026

    @RHODIZSECURITY
    Contributor

    Additional live case from a non-loopback HTTPS hub dashboard:

    • runtime role: hub
    • management origin: remote HTTPS hostname
    • management auth required
    • no GUI session yet

    In this state the Remote Link page could render the dead-end local-session warning even though the hub itself was healthy and reachable. A focused UI patch makes the existing ConnectPairingForm the primary surface for this exact condition and derives the pairing command from the active browser origin, e.g. ocx gui pair --origin "https://<hub-origin>".

    The change does not relax origin binding, does not persist the one-time code, and keeps ordinary admin-token behavior on the other pages unchanged.

    Live validation on the affected hub: one-time grant -> browser GUI session -> /api/link/status HTTP 200 through the published management origin.

    I am preparing this as a narrow patch against current dev rather than duplicating the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestguiDashboard, tray, settings UI

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions