Files
remoteconn-gitea/todo.md
2026-03-21 18:57:10 +08:00

16 KiB
Raw Blame History

remote connection

name: remoteConn

  • 主要需求
    iOS直连SSH+Vue3 + TypeScript + xterm.js + Capacitor + iOS 原生 SSH。
    支持web、小程序、iOS。
    iOS 应用Hybrid用于手机上快速 SSH 连接远程服务器,并提供“一键进入 Codex”能力连接到远程开发机后自动进入指定项目目录并启动 codex让用户在手机终端里做 AI coding读仓库、改文件、跑命令/测试)。
    xterm.js 负责终端渲染WebView 环境Codex 跑在远程服务器/开发机上用 Codex CLI。

  • 技术栈
    vue + typescript + xterm.js

功能需求

  • skill送给codex执行式codex如何落实openclaw有提供使用指引吗还是让ai自由发挥换句话说我把skill相关文件直接扔给codex和通过openclaw提供给codex有区别吗 后者会做的更好吗? - 20260318

  • 认证方式:密码、公钥、证书等。支持多服务器管理(增删改查)。
    - 20260224

  • 支持最近连接任务的日志记录。
    - 20260224

  • 兼容所有标准的SSH服务器实现包括但不限于

    • OpenSSH (所有现代版本)
    • Dropbear SSH
    • Bitvise SSH Server
    • Windows OpenSSH 实现
  • 支持codex交互App里做一个**“Codex 模式”**按钮:

    • 连接成功后自动发送cd <你的项目目录>, 项目支持从~(home)目录中选择。
    • 再自动发送codex
    • 让用户直接在 xterm.js 里和 Codex 对话下达任务 - 20260224
  • 客户端支持中文输入和交互

  • 参考obsidian实现支持增加插件插件放在~/.remoteconn。比如用styles.css,main.js,manifest.json三个文件定义。

  • 主题和界面自定义

    • 字体、大小、颜色选择
    • 配色选择,背景可以定制,默认自动从配色中选择与字体最高对比度颜色作为背景。
    • 界面配置丰富完善,功能齐全,易于操作,液态风格。 - 20260224
  • 配置中心中基础和认证关联选中服务器,终端、主体和安全改为全局配置
    - 20260224

  • iOS版本和小程序版本。

    • 2026-02-27 更新微信小程序基线工程已落地当前状态“持续对齐中v2.0.0)”;详情见:
      • docs/miniprogram-v2.0.0-alignment-audit-2026-02-27.md
      • apps/miniprogram/parity.v2.0.0.json
  • 配置更多,比如连接重试次数。分组。
    - 20260225

  • 服务器点击增加服务器,跳到服务器配置页,而不是直接生成一条。
    新增配置 -- 服务器配置页。配置如无改动,不增加。如有改动,点击返回,弹出提示是否保存,不保存服务器列表中不增加。点连接自动保存。
    - 20260225

  • 终端配置页中放一个预览方块面板放置在最前适配宽度高度hug内容内容能涵盖配置项中的内容并按配置同步更新显示。只是预览轻量。
    - 20260225

  • AI按钮需要在服务器管理增加。
    - 20260225已支持 assets/icons/ai.svg,与主题按钮色联动)

  • shell中针对codex连接增加一个textarea+发送。原因是xterm对于ai输入法会话内容管理太差还得使用系统原生组件。
    增加一个扩展折叠条带点击展开textarea+发送。展开后置于shell下方收缩后按钮浮动置于shell上方60%透明度。
    💡 新思路: 使用豆包语音大模型输入送到shell。

    • 按住输入如有效,输入框"强调色"stroke
    • 语音输入框挡住shell不弹软键盘。
      - 20260226TerminalVoiceInput 已接入,支持按住说话/取消/清空/发送)
  • 右下键盘工具栏条增加一个paste原因是xterm.js无法长按弹出paste内容。
    - 20260225

  • 弹keyboard能增加工具条吗比如tab键。
    - 20260226终端右下工具栏已增加 TAB 按钮)

  • shell增加夜间模式。
    - 20260225

  • “我的服务器”卡片支持上下移动并可视化反馈(拖拽手柄 + 跟手动效)。
    - 20260225move.svg 手柄拖拽排序,卡片凸起并跟随手指)

  • 在语音输入工具条中增加闪念idea.svgvoice、idea、send放在一起。UI行同取消和发送。闪念记录到本地数据库indexedDB中。分页显示每页15条。
    - 20260227

  • log页分页显示每页15条。
    - 20260227

  • 小程序版本AI能力。
    - 20260307

  • ssh relay能力。从A主机直接跳到B主机如同在A主机操作。
    - 20260307

  • 增加多语言支持,简体中文/繁体中文/English
    网关侧的提示没有办法切换语言,能不能收到一张映射表中,如语言选择非简体中文,查映射表。 -- 但这会增加开销(本地查应该快)

  • 增加“关于“页面,包括隐私政策/反馈等。
    - 20260308

  • 增加不同终端的同步能力先在gateway侧使用SQLite。
    - 20260309

  • 闪念左滑改为四个按钮新增两个按钮一个“已处理”“废弃”废弃文字中间显示删除线。四个按钮“废弃”“已处理”上下结构放在左边“复制”“删除”上下结构放右边。四个按钮不同颜色无gap按钮最外角圆角比如废弃按钮的左上方圆角。

  • 点击链接AI弹出窗口的设置放在全局配置“连接”-“AI连接”卡片中这样直连AI体验会比较好。

  • AI回复内容的朗读功能。 ⚠️ 20260313小程序语音播报能力已接入但当前播报文本提取与轮次稳定判定仍不够准确长时间交互还会放大小程序客户端响应压力。现阶段先列为待优化遗留问题暂不建议默认使用。

  • 全局配置终端配置中增加“显示语音输入按钮”开关,关闭后终端页面不显示语音按钮。 ⚠️ 20260313设置页原生开关在部分场景下存在“内胶囊与外框端侧 gap 视觉不完全一致”的问题;已尝试微调与自绘方案,当前未稳定改善,先作为遗留问题记录,暂不优化。

  • 适配copilot CLI和Claude Code
    ☑️ 已增加gh copilot cli

问题修复

  • AI 在线状态当前不是通过官方状态接口获取,而是依赖“启动时置位 + 退出时 OSC 标记清位 + 本地会话快照续接”的前台态模型。
    已确认 Codex CLI / Copilot CLI 当前没有公开的“查询当前前台在线状态”接口OpenAI / GitHub 官方状态页只能反映服务可用性,不能反映某台远端机器上的当前 AI 会话是否仍在前台。
    现状风险:如果用户在其它终端里手动启动或退出 codex / copilot,当前客户端状态可能失真。
    ⚠️ 20260318先按遗留问题登记暂不处理。

  • 小程序终端在快速滑动历史区时,仍会出现毫秒级停顿,观感上会打断连续滚动;该问题与此前“快速滑动只滚动一两行”的已收口问题分开记录。
    ⚠️ 20260318先按遗留问题登记暂不处理。

  • 小程序 shell 内点击激活区呼出输入法后,使用豆包输入法语音输入,长按输入过程中会中途退出语音输入状态,导致语音录入被打断。 复现路径:终端页 -> 点击 shell 激活区 -> 呼出豆包输入法长按语音输入 -> 说话过程中中断. ⚠️ 20260318先按遗留问题登记暂不处理。

  • 小程序终端在 Codex 等 AI 持续输出期间,点击 shell 激活区弹出软键盘后,输入框/激活区仍可能发生跳跃,导致无法稳定连续输入。 复现路径:终端页 -> 启动 Codex/其它 AI 持续输出 -> 点击 shell 激活区 -> 弹出软键盘 -> 尝试连续输入。 ⚠️ 20260319先按遗留问题登记暂不处理。

  • 不给用户反馈:[gavin@kvm-douboer ~]$ if [ -n "$ZSH_VERSION" ]; then export LANG="${LANG:-zh_CN.UTF-8}"; export LC_CTYPE="${LC_CTYPE:-$LANG}"; if [ -z "$LC_ALL" ]; then export LC_ALL="$LANG"; fi; stty iutf8 2>/dev/null; setopt MULTIBYTE PRINT_EIGHT_BIT 2>/dev/null; unsetopt PROMPT_SP 2>/dev/null; PROMPT_EOL_MARK=''; fi; stty echo 2>/dev/null
    - 20260224
    20260225 - 该问题修复了,迭代过程中又复现了。

  • 点击codex连接现在显示如下。要求不显示连接细节以下5行不显示。显示两条toast提示"codex工作目录~/workspace不存在“ 和 服务器未装codex
    [gavin@kvm-douboer ~]$ cd "$HOME"/'workspace'
    /home/gavin/workspace: No such file or directo
    ry.
    [gavin@kvm-douboer ~]$ command -v codex
    [gavin@kvm-douboer ~]$ codex --sandbox workspace-write
    codex: Command not found.
    - 20260225预检输出已吞掉仅在真实失败时 toast点击连接后窗口立即关闭

  • 点连接还会偶发出现提示符被吃掉的情况。需要用户再enter一次才出现。
    [gavin@kvm-douboer ~]$ Activate the web console with: systemctl enable --now co
    ckpit.socket
    Last login: Tue Feb 24 16:35:11 2026 from 115.193.12.66
    光标
    ☑️ 目前没有出现

  • 同一个连接的历史记录,重连后丢失,已解决。又复现了。
    - 20260225

  • 字体选择无效。可能是修复中文显示问题时产生的?两者有冲突吗?
    - 20260225

  • 刷新“我的服务器”页面,已连接的会话不应该断开,除非网络断开、超时等原因。
    - 20260225

  • 禁用所有页面的双指缩放。 - 20260225
    - 20260225viewport + gesture/touchmove/wheel 三层拦截)

    • 20260226新增 double-tap/dblclick 防缩放补丁)
  • 路由懒加载失败时自动恢复,避免用户白屏后无感知卡死。
    - 20260226新增动态导入失败单次自动刷新恢复15s 窗口限流)

  • 桌面放置remoteconn书签本地数据库数据不共享
    系统机制,不共享

  • 键盘工具栏,点击会折叠。原来改好,又出现问题了。
    原因是:语音层叠加在键盘层之上,拦截范围过大。
    修改语音层拦截逻辑参考键盘展开态保护、折叠态不保护折叠态仅仅保护voice.svg
    - 20260227

  • 小程序光标位置修复。xterm光标计算逻辑是什么
    - 20260307

  • 小程序codex交互卡顿和按钮点击阻塞问题。
    - 20260310

  • vim显示异常文字没有按主题渲染。
    - 20260310

  • 问题codex在交互过程中正常情况下底部始终4行高度3行加亮块文字居中例如“> Use /skills to list available skills”内容变化这个只是例子。第4行一般是“ gpt-5.4 xhigh · 53% left · ~/remoteconn”。
    小程序中,只看到加亮块的前两行,即”空白行+文字“下面2行空白行和 gpt-5.4 xhigh……看不到。在codex内容输出更新过程中偶尔会看到整个块大部分情况看不到整个块输出过程中上下闪动。先理解问题不动代码避免回归问题。应该是部分codex返回的标记没有被正确处理可以看下这几行codex送过来是什么哪些没有被处理
    - 20260311

  • 小程序问题连接后在codex中交互后返回服务器列表点连接再进shell向下滑页面上方出现空白顶部一行有时还有类似5;2H这样的文字。
    测试复现连接codex后输入“当前项目结构”codex输出完成后返回服务器列表再点连接进shell向下翻历史记录。
    - 20260311

功能优化

  • 点击右上角的时延,增加曲线图。

  • 点击其它区域右下角键盘如展开可折叠。注意键盘展开frame大小不响应区需扩大避免误操作
    - 20260224已完成v1.0.8

  • FIGMA重构配置其它icon & UIconsole 工具区 2248/2251 交互已完成)
    - 20260224已完成v1.0.8

  • xterm shell区域下可以增加原生textarea主要用于发送codex内容原因是shell被xterm接管语音输入等体验变差。但shell中运行codextextarea输入内容如何交互送给codex
    - 20260226已落地“语音输入面板 + textarea + sent 才提交到 shell”

  • 体积优化
    这两份构建结果这么大,分析原因?
    dist/assets/index-CYJREDsN.js 236.92 kB │ gzip: 85.49 kB
    dist/assets/TerminalPanel-CwPWrWRx.js 421.71 kB │ gzip: 108.58 kB
    ☑️

  • 扫描所有界面提示,更加友好准确,提示窗口更加美观。(比如,都叫连接错误,没有区分超时还是服务器不可用等等)
    - 20260224

  • 所有页面的“返回”,语义保持一致。
    返回的语义统一为:返回历史上一页,如没有历史页,返回按钮灰色。页面导航用右下角的显示按钮。
    - 20260225

  • 重新规范页面按钮位置、语义。顶部,左边(左上)显示本页操作按钮,右边(右上)显示页面信息;底部,左边(左下)返回,右边(右下)导航到其它页面。
    所以,全局配置的,自动优化背景、保存、日志导出按钮应在左上。

  • 配置中统一时间单位都用ms。
    暂不需要

  • 重构配置页UI
    - 20260225

  • 给"请点击右上角“重连“开关或……" 增加一个圆角8pxpadding四方4px的底框文字颜色使用背景色背景颜色使用文字色opacity 80%
    - 20260225

  • “我的服务器”列表,如果当前服务器已连接(比如连接后,返回列表,连接还在),这时按钮使用“强调色”,此时点击按钮不重新断开又重连,直接使用原来的连接。
    ☑️ 点另一台时,旧连接会被主动断开,不断开旧连接需要做成多会话架构。但这会增加连接开销。,换服务器重新连接更加经济。

  • 20260226 性能&体验优化:

    • 语音输入起始有延后大约2-3sec。
    • 提高停顿的容忍度,大模式是否有参数?
    • 弹出软键盘后voice.svg上推不回来。
    • "正在初始化终端"加载速度优化。
      - 20260227
    • 移动voice后点激活区弹软键盘点其它区域键盘收回voice按钮位置会被推到顶部。
      - 20260227
  • 检查本地缓存机制。原因是svg图标等素材的加载有些慢。
    - 20260227

  • main.css 1700+行,冗余精简。
    ☑️ 减到1500+,不确定是否足够精简

未来计划

  • 考虑与内容创作联动

  • 网关高并发测试。

  • codex上下文管理通过保存response id断开后下次连接带上response id的方式来恢复上下文。
    暂不需要 能够探测ai连接情况。

  • ssh连接管理/连接池,代价太大,暂不需要。

  • 记录用户活跃度到SQLite作为后续统计分析使用。 -- 需要配套web统计入口暂不实现。

  • 稳定以后做并发测试重点关注终端网关和语音网关。测试部署在macmini和云主机上的使用体验。
    可以考虑网关部署在macminiweb側部署在云主机提高web响应速度。

  • 现在总体时延不稳定。kvm服务器处理能力弱当网络快。mac处理能力强但链路长。如果把webserver部署在kvm上网关在mac会提升用户体验吗

  • 记录用户ID活跃度到SQLite作为后续统计分析使用。 -- 需要配套web统计入口暂不实现。

  • 全部重绘制图表练习figma钢笔。

  • 连接macmini和linux server提示分别pid完全相同对吗
    {"level":30,"time":202602251259051230,"pid":76942,"hostname":"gavin-mac-mini.local","ip":"127.0.0.1","disconnectActor":"client","disconnectReasonCode":"switch","disconnectReasonText":"客户端主动触发断开","msg":"收到客户端断开请求"}
    {"level":30,"time":202602251259455420,"pid":76942,"hostname":"gavin-mac-mini.local","ip":"127.0.0.1","disconnectActor":"client","disconnectReasonCode":"switch","disconnectReasonText":"客户端主动触发断开","msg":"收到客户端断开请求"}
    目前按浏览器,是单会话架构,多会话架构会增加开销,暂不实现。