Skip to content

feat(desktop): manage remote runtime host credentials - #3419

Draft
M4n5ter wants to merge 12 commits into
apache:mainfrom
M4n5ter:feat/desktop-runtime-host-credentials
Draft

feat(desktop): manage remote runtime host credentials#3419
M4n5ter wants to merge 12 commits into
apache:mainfrom
M4n5ter:feat/desktop-runtime-host-credentials

Conversation

@M4n5ter

@M4n5ter M4n5ter commented Aug 21, 2026

Copy link
Copy Markdown
Member
English

Summary

Add credential maintenance to the per-computer management surface for SSH-managed Runtime Hosts. Desktop can inspect non-secret credential metadata, identify its own credential, rotate it through the existing verified pairing path, and explicitly revoke an obsolete credential.

Credential authority remains in Runtime Host. Desktop invokes Host-local operator commands over SSH, secrets never enter renderer state or terminal output, and privileged access-management mutations remain restricted to the Host-local operator; ordinary remote Client grants and remotely available operations are unchanged.

Fixes #3418

Verification

  • npm run typecheck
  • npm run lint
  • npm run format:check
  • npm run astryx:surface-inventory
  • affected Desktop and CLI tests
  • isolated CLI release package build
  • Desktop end-to-end list, revoke, and rotate against a managed Linux Runtime Host

AI use

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope: Codex implemented and verified the change under maintainer direction and review

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No
简体中文

概要

为 SSH 托管的 Runtime Host 增加 per-computer credential 维护界面。Desktop 可以查看不含 secret 的 credential metadata、识别自身 credential、通过现有已验证 pairing 路径安全轮换,并明确撤销废弃 credential。

Credential authority 仍属于 Runtime Host。Desktop 只通过 SSH 调用 Host-local operator command;secret 不进入 renderer state 或 terminal output,privileged access-management mutation 仍仅限 Host-local operator;普通 remote Client grants 与远程可用 operations 保持不变。

Fixes #3418

验证

  • npm run typecheck
  • npm run lint
  • npm run format:check
  • npm run astryx:surface-inventory
  • 受影响的 Desktop 与 CLI tests
  • 隔离环境中的 CLI release package 构建
  • 在 managed Linux Runtime Host 上通过 Desktop 完成 list、revoke 与 rotate 端到端验证

AI 使用

  • 没有生成式工具作出实质贡献
  • 生成式工具作出了实质贡献

工具与范围:Codex 在维护者指导与审核下实现并验证了本次变更

Checklist

  • 测试覆盖本次变更,且缺少变更时会失败
  • lint、format、typecheck 与受影响 suites 已在本地通过

本 PR 是否改变行为?

  • 是——已在概要中说明

@M4n5ter
M4n5ter force-pushed the feat/desktop-runtime-host-credentials branch from 2b3b777 to 6591058 Compare August 21, 2026 14:00
@M4n5ter
M4n5ter force-pushed the feat/desktop-runtime-host-management branch from 1626713 to 9f4b20a Compare August 22, 2026 05:53
@M4n5ter
M4n5ter force-pushed the feat/desktop-runtime-host-credentials branch 2 times, most recently from fc936dc to 9c8d008 Compare August 22, 2026 06:00
@M4n5ter
M4n5ter force-pushed the feat/desktop-runtime-host-management branch from a1ffaea to 3e22749 Compare August 22, 2026 07:45
@M4n5ter
M4n5ter force-pushed the feat/desktop-runtime-host-credentials branch 2 times, most recently from 3949ceb to 4301916 Compare August 22, 2026 08:15
@M4n5ter
M4n5ter deleted the branch apache:main August 22, 2026 10:34
@M4n5ter M4n5ter closed this Aug 22, 2026
@M4n5ter M4n5ter reopened this Aug 22, 2026
@M4n5ter
M4n5ter changed the base branch from feat/desktop-runtime-host-management to main August 22, 2026 10:40
@M4n5ter
M4n5ter force-pushed the feat/desktop-runtime-host-credentials branch 4 times, most recently from ea92ae6 to 085b137 Compare August 22, 2026 13:57
M4n5ter added 11 commits August 22, 2026 22:13
Add Host-local credential metadata, safe Desktop credential rotation, and explicit revocation through the existing SSH management plane. Credential mutation remains owned by Runtime Host access authority, while secrets stay out of renderer and terminal projections.

Generated-by: Codex
Advertise credential management through the persisted operator contract so Desktop never exposes actions an older deployment cannot execute. Keep metadata inspection read-only and align framed access operations around one action-discriminated protocol.

Generated-by: Codex
Derive Desktop credential replacements from the active Host credential and fence access management while pairing recovery is unresolved. Negotiate operator capabilities per invocation so upgraded operators remain compatible with older Desktop clients.

Generated-by: Codex
Derive replacement credentials from the active Host-owned authority record and guard rotation and revocation with atomic credential state checks. Reject disabled-profile rotation before remote mutation so the UI cannot leave an unusable pending credential.

Generated-by: Codex
Require explicit confirmation before credential rotation reconnects a managed Host, and bound pairing finalization through the dispatched request. Simplify guarded revocation around stable credential identity while preserving recoverable unknown outcomes.

Generated-by: Codex
Treat an already-absent target as a satisfied revocation while retaining an atomic active-credential fence. Keep Desktop identity validation at the SSH adapter boundary so the Host protocol stays client-agnostic.

Generated-by: Codex
Warn before revocation disconnects clients using an active credential, and exercise rotation recovery through the real profile service path. Reuse the shared UTF-8 truncation boundary for framed access errors.

Generated-by: Codex
Bind a prepared replacement to the exact managed profile, service, and current credential resolved before SSH begins. Pairing recovery now preserves unreadable journals and reconnects a valid pre-rebind target in the same startup, while revoke confirmation consistently warns about interruption.

Generated-by: Codex
Keep existing credential operation codecs at epoch 36 and move rotation-only guards into separately named additive operations. This preserves ordinary mixed-version Remote Host connections while keeping credential rotation atomic and Host-authoritative.

Also prevent unfinished pairing recovery from overriding profile lifecycle choices and disable access mutations while the managed service is offline.
Persist the managed-service uninstall intent before invoking the remote operator, and retry the idempotent uninstall before cleanup. This keeps credential pairing recovery authoritative and prevents an interrupted uninstall from discarding the binding needed for repair.

Generated-by: Codex
Apply the repository source-header policy to credential management files introduced by this branch after rebasing onto the new audit gate.

Generated-by: Codex
@M4n5ter
M4n5ter force-pushed the feat/desktop-runtime-host-credentials branch from 085b137 to 627ea13 Compare August 22, 2026 14:14
Persist a cleanup-only phase after remote service uninstall so retries never depend on an operator that cleanup may have removed. Bind management dialog state to its Host and use urgent busy updates so stale async results cannot cross profiles.

Generated-by: Codex
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(desktop): manage access credentials for remote Runtime Hosts

1 participant