makecindy / makecindy/cindy

feat(remote): SSH 会话按远端凭证发现 provider 与模型能力

Open
#65 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
2.7k
Forks
395
Avg merge
21h 48m
Merged PRs (30d)
776

Description

## 背景

模型列表已收敛为动态事实源:Anthropic 由本机 Claude.ai OAuth + SDK `supportedModels()` / HTTP `/v1/models` 发现,OpenAI 由本机 Codex `models_cache.json` 发现,XD 由本机账号的网关 `/models` 发现。

SSH 远程工作区的 agent 进程与凭证位于远端主机,但当前 `Maker` 的 `Capabilities.availableModels` 仍是 desktop 进程级全局数组;`capabilitiesForSession()` 只对远端 Codex 的 rewind 做覆盖。Claude `RemoteQuery` 也明确未暴露 `supportedModels`,Codex remote transport 同样没有 per-host model discovery。

因此会出现:

- 本机未登录、远端已登录:远程会话模型列表可能为空,无法选择远端实际可用模型。
- 本机已登录、远端未登录或账号不同:远程会话会错误复用本机模型清单与能力元数据。
- 多台 SSH host 使用不同账号时,无法按 host 隔离模型清单。

手机版 / device-link 控制场景已通过现有 `maker:provider:list` 与 capabilities 隧道读取被控 desktop 的事实源,本 issue 只跟踪 SSH 远程工作区。

## 目标

为 SSH 远程会话提供按 `remoteHostId + agentKind` 隔离的 provider/model discovery,并让 session capabilities 与实际执行远端一致,不再复用本机清单冒充远端能力。

## 建议拆分

- Claude cc-manager protocol:为远端 `Query.supportedModels()` 增加 RPC(需同步评估 `cindy-server` / protocol 兼容边界)。
- Codex remote transport:从远端 app-server / cache 获取模型注册表,返回规范化能力元数据。
- maker-core:支持 per-session capabilities resolver 或创建 session 时注入远端 capabilities,避免修改 agent 全局数组。
- desktop host:按 host + agent 缓存、失效、广播;远端断连 / 换号时清理。
- renderer:远程草稿 / 已建会话只消费目标 host 的 provider 与 capabilities。

## 验收

- 本机与远端账号状态相反时,远程 picker / 校验均以远端为准。
- 两台远端 host 使用不同模型清单时互不串。
- 远端断连、换号、daemon 版本不支持 discovery 时 fail closed,并有明确兼容提示。
- 覆盖 Claude / Codex、resume、切模型、device-link 控制远程 session 的测试。

关联规则:AGENTS.md 规则 26(远程连接 / 手机版适配或显式跟踪)。

Contributor guide

Open the contributing guide

Research direction

Start with AGENTS.md rule 26 and trace the SSH flow across the Claude cc-manager protocol, Codex remote transport, maker-core, desktop host, and renderer. Review the existing provider-list and capabilities paths before defining the per-host discovery and session resolver boundaries. Done means remote sessions use isolated host credentials and capabilities, handle disconnects or unsupported daemons safely, and cover Claude, Codex, resume, model switching, and device-link cases.

Written by the indexing model from the issue text.

Assessment

Tech stack
electron, typescript
Domain
backend, desktop, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.