Files
opsxshell/AGENTS.md
T
Logan.LiandCursor 9ce71795b8 feat: add terminal broadcast, context menu, and shell close
Complete multi-pane broadcast, standard terminal right-click actions, batch host selection with progress, and native ssh_close_shell so closing a pane tears down the remote shell.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-05 19:53:39 +08:00

2.8 KiB
Raw Blame History

OpsXShell 开发指南

OpsXShell 是基于 Tauri 2、Rust、React 和 TypeScript 的轻量 SSH/SFTP 运维终端。产品强调便捷、人性化、操作简单实用,不加入审计、审批或堡垒机功能。

架构

  • src/:React 界面、Zustand 状态和 XTerm.js 终端。
  • src/platform/:唯一的 Tauri 命令与事件适配入口。
  • src/platform/sftp.ts:固定 localPath/remotePath 方向,区分远程文本读写与文件传输。
  • src/utils/terminalPipeline.ts:终端输入、UTF-8 输出、背压和错误边界。
  • src-tauri/src/commands/:精简命令边界和统一响应。
  • src-tauri/src/services/:SSH、SFTP、隧道、PTY、串口、存储和凭据服务。转发 Listener 必须由 TunnelManager 统一持有和取消。
  • src-tauri/src/services/ssh/:认证、known_hosts、代理/跳板、路径和 SFTP,禁止重新堆回 ssh.rs。
  • src-tauri/src/services/tunnel/:运行模型、SOCKS5 协议和 Relay;运行态只能由 TunnelManager 持有。
  • shared/types/:渲染层共享 TypeScript 契约。
  • test/:Vitest 基础测试与验收。

React 不直接访问 SSH、文件系统或加密实现。新增原生能力时先定义 Rust command,再更新 src/desktop.d.ts、src/platform/desktop.ts 和 test/setup.ts。

规则

  • 未由 Rust 后端实现的能力不能在界面中显示为可用。
  • 会话密码、私钥口令和代理密码必须由 Rust 加密后落盘。
  • 不保存终端命令历史;批量命令结果仅保留在当前窗口。
  • 主机密钥使用 ~/.ssh/known_hosts 校验。
  • 主密钥位于 ~/.opsxshsell/master.key,Unix 目录权限 0700、文件权限 0600。
  • 保持常用流程简短,高级配置默认收起。
  • 端口转发规则可持久化,运行中状态不得持久化;界面的停止操作必须关闭真实原生 Listener。
  • 复制转发规则不得复制运行态;运行中的规则修改前必须先停止 Listener。
  • SFTP read/write 不得作为 upload/download 的别名,本地路径与远程路径不得使用位置含糊的调用。
  • 大模型新配置必须先用临时凭据完成真实测试,测试期间不得写 settings 或 secrets;连接字段变化后保存必须重新锁定。
  • AI 远程执行只能复用当前活跃 SSH connection;按 strict/balanced/permissive 模式决定确认阈值,critical 始终硬拒绝;不建立独立 podexec/Kubernetes 凭据边界,也不保存命令或工具输出。
  • ssh:// 禁止携带密码或静默直连;冷启动与运行中唤起都必须通过原生有界队列交付给快速连接确认。

命令

npm run dev
npm run acceptance:quick
npm run acceptance:full
npx tauri build --bundles app

平台安装包必须在目标系统实机验收。没有签名凭据时不得宣称完成签名、公证或自动更新发布。