9.9 KiB
9.9 KiB
name, description
| name | description |
|---|---|
| unidesk-trans | UniDesk SSH 透传与 apply-patch 语法 — `trans ROUTE OPERATION` 分布式执行入口,包含 route 语法、workspace/k3s/Windows 路由、apply-patch envelope 格式、sh/bash/py/upload/download operation 和 60s 短连接约束。用户提到 trans、tran、ssh 透传、远端执行、apply-patch、apply_patch、远端 patch、k3s route、workspace route 时使用。 |
UniDesk Trans
分布式 SSH 透传入口。trans <route> <operation> 中 route 只定位目标,后续 token 都属于 operation parser。
遵循 Skill(cli-spec):无输出、超时伪装成无匹配和 argv 边界丢失均视为 CLI 契约故障。
高频 route
trans D601:/home/ubuntu/workspace/unidesk-dev git status --short --branch
trans D601:k3s kubectl get pods -A
trans D601:k3s:namespace:workload[:container] logs --tail 120
trans D601:win ps <<'PS'
trans D601:win/c/test cat README.md
trans D601:win/c/test rg -i needle .
trans D601:win/c/test git diff --check
trans D601:win/c/test git commit -m 'fix: update docs'
trans D601:win/c/test git exact-commit status
trans D601:win/c/test git exact-commit plan --path src/main.c
trans D601:win/c/test git exact-commit run --path src/main.c --message 'fix: exact change' --confirm
trans D601:win/c/test git exact-commit gc-auto --confirm
trans gh:/owner/repo/issue/<number> cat
专项参考:
- Host workspace、k3s、Windows、GitHub issue/PR route 见 references/routes.md。
- sh/bash/argv/py/upload/download/kubectl/logs/skills/tcp-pool 操作见 references/operations.md。
- 跨 60 秒短连接的临时 build、GPU、模型或硬件 smoke 见 references/remote-experiment-smoke.md。
- apply-patch envelope 和 quoting 陷阱见 references/apply-patch.md。
P0 边界
trans --help是高频直接阅读入口:- 顶层默认使用紧凑文本,只展示 route 语法、operation 分组和
trans --help <operation>下钻索引;JSON 必须由显式机器输出参数请求。 - 顶层与 scoped help 都必须有界且直接返回;出现
outputTruncated或 dump 即视为 CLI 缺陷。 - 未知 help scope 和可预测参数错误必须紧凑、无 stack;只有显式 debug/raw 错误模式可以披露 stack,内部异常不得冒充输入错误。
- 修复帮助过长时必须收敛信息结构,禁止提高 stdout 阈值。
- 默认超限输出不得创建 dump;先返回语义化窄查询。
- dump 只允许用于显式
--full、--raw、UNIDESK_TRAN_STREAM_DUMP=1或确实无法预先界定的一次性异常证据。
- 顶层默认使用紧凑文本,只展示 route 语法、operation 分组和
- 远端文本修改直接使用
trans <route> apply-patch <<'PATCH';不要先建临时 patch 文件,也不要 download/upload/sed 拼临时 diff 代替 patch。 upload/download仅用于必要的二进制文件或生成物:- 远端文本读取优先使用
cat/head/tail/rg; - 已知文本路径默认在传输和本地目标写入前返回
text-transfer-discouraged; - 确需整体搬运文本生成物时显式加
--allow-text-transfer,成功结果记录 override 且继续校验字节数和 SHA-256。
- 远端文本读取优先使用
apply-patch检测到交互 TTY 且没有 stdin 时立即返回apply-patch-stdin-required和 quoted heredoc 示例,不等待 60 秒超时。- Host/WSL 与 Windows route 的
apply-patch优先走 fs adapter bulk update path;不要为了规避旧的read-b64-block/write-b64-argv慢路径改用临时脚本写文件。 apply-patch v2字节与完整性边界:- POSIX host/workspace 更新已有文件时必须保留原 mode,包括可执行位;新建文件继续服从目标端 umask,不按扩展名猜测权限。
- localized replacement 必须保留纯 CRLF 和
legacy-single-byte文件的原始字节风格。 - legacy 文件只允许可保持的单字节 replacement。
- original/final integrity mismatch 会重新只读采集当前文件并输出 adapter、stage、expected/current bytes、SHA-256、newline 和 encoding 摘要。
- 诊断不披露文件正文,也不回退
apply-patch-v1。
- 当前 HWLAB node/lane source workspace 的正式预检/同步入口是
bun scripts/cli.ts hwlab nodes control-plane source-workspace sync --node <node> --lane <lane> --confirm和source-workspace status;不要把裸trans <node>:<workspace> git fetch ...当成当前 HWLAB node/lane workspace 预检/修复入口。 sh/bash必须显式声明 shell;单进程命令优先 direct argv 或已知 operation。sh/bash不接受-c等 shell 选项;错误返回ssh-sh-option-unsupported,并在连接前退出。- shell 逻辑使用
trans <route> sh <<'SH' ... SH;单进程直接使用trans <route> <command> [args...]。
- 普通 trans/ssh 短连接硬预算 60s;长 CI/CD、trace、logs、build、硬件流程必须 submit-and-poll。
- 一次性远程实验不得临时发明第二套状态协议:
- 使用 远程临时实验 smoke 的参数合同;
- 复用同一模板的后台 job、证据和清理合同。
/mnt/<drive>WSL host workspace 由 root 透传执行时,CLI 自动把 workspace owner uid 桥接到进程级SUDO_UID,让 Git 信任 Windows 挂载目录而不写全局safe.directory;非 Git 命令和普通 Linux workspace 不改变所有权信任。- Windows route 的
win是 route plane,operation 直接写ps、cmd、git或只读 fs 操作pwd|ls|cat|head|tail|stat|wc|rg;不要写成trans D601:win/... win ps,也不要把 POSIX shell 当 Windows shell。 - Windows
rg:- 调用 Windows PATH 中的原生
rg.exe。 - 支持一个或多个
-e|--regexp、--files、-g|--glob、--max-count、--max-files和--timeout-ms。 - stderr 固定输出
UNIDESK_WINDOWS_RG_SUMMARY,包含matched、fileCount、elapsedMs、timeout和encoding。 - 默认预算来自
config/unidesk-cli.yaml#trans.windowsFs.rg。 - 超时输出
UNIDESK_WINDOWS_RG_HINT code=timeout exitCode=124 action=narrow-scope-or-add-glob。 - 缺少
rg.exe时返回 127 和安装或 PowerShell 替代提示。
- 调用 Windows PATH 中的原生
- Windows
wc支持-l|--lines、-w|--words、-m|--chars和-c|--bytes;skills支持--name <精确名称>与--filter <文本>,单个 skill 查询不应先拉取全量列表。 - Windows
head/tail:- 支持
-n N、-nN、--lines=N和 GNU 简写-N。 - 两者按行流式裁剪,不能在裁剪前因整文件超过通用读取门禁而失败。
- PowerShell prelude 将
Get-Content默认编码固定为 UTF-8,读取 UTF-8 Markdown 时应与cathelper 保持一致。
- 支持
- Windows
ps '<PowerShell source>'的单个参数按 PowerShell 源码执行;ps <command> <arg...>的多个参数按 argv 边界执行,Windows native application 通过显式命令行引用保留python -c代码、路径、encoding 和字典 key 中的嵌套引号。 trans/tran是 PATH wrapper,不是bun scripts/cli.ts的根子命令;误写bun scripts/cli.ts trans ...时应读取结构化trans-root-cli-entrypoint-moved错误,并改用trans <route> <operation> [args...]。- cwd 语义按运行面分层:
- host/workspace 将绝对 cwd 写入 route,例如
trans NC01:/root/unidesk exec git status --short; - k3s workload 使用 route cwd 后缀或
exec --cwd /workspace -- <command>; - host/workspace 误用
exec|argv|sh|bash --cwd会在连接前返回trans-host-cwd-belongs-in-route与精确替代命令,禁止继续试探远端参数。
- host/workspace 将绝对 cwd 写入 route,例如
- Direct argv 会保留调用端已经形成的每个 argv token,包括空格和中文;需要 shell 语法时仍显式使用
sh、bash、Windowscmd或ps。 - Windows workspace 中依赖 Windows PATH、解释器或工具链的命令优先走
<provider>:win/<drive>/<path> cmd|ps;不得因同一 WSL provider 的 host/WSL plane 缺少python、编译器或其他命令,就判断 Windows plane 也未安装。Windows Python 例如trans G14-WSL:win/d/Work/CONSTAR_workspace cmd python --version。 /mnt/<drive>workspace 的命令返回command not found时,CLI 会输出对应:win/<drive>/... cmd的UNIDESK_SSH_HINT;该提示只建议核对 Windows plane,不改变原命令退出码。- Windows
githelper 拒绝包含%format 等需 shell review 的复杂参数时,按错误提示改用trans <route>:win/... ps '<PowerShell command>',不要反复改写 directgitargv 绕过校验。 - Windows 固定脏 worktree 的精确提交规则:
- 使用
git exact-commit plan明确列出一个或多个--path; run必须提供--message和--confirm;- helper 使用临时 index 和 HEAD old-value CAS,只更新选中路径的 index,并验证未选中路径的 staged/unstaged 状态不变;
status只读披露git count-objects -v;gc-auto只调用 Git 自身的git gc --auto,保留 reflog 和 recent-object 规则,禁止直接git prune。
- 使用
- 从本地 Bash 调用一行 Windows
ps时,PowerShell 表达式外层使用单引号,保护$、$_和$_.Property不被本地 shell 提前展开;复杂或多行 PowerShell 改用ps <<'PS'heredoc。 - 单行
ps源码若因本地 shell 展开而以缺失左值的=开始,CLI 在远端执行前返回ssh-windows-powershell-local-expansion,并给出$p、$_的单引号示例和 quotedPSheredoc。 - 扩展 Windows helper 时保持 operation-scoped PowerShell payload;不要把多操作大脚本塞进 single
EncodedCommand。
何时读取 reference
- 不确定 route 语法、k3s/workspace/Windows 定位时,读 references/routes.md。
- 编写远端 patch 前,读 references/apply-patch.md。
- 需要 shell heredoc、Python、upload/download 或超时处理时,读 references/operations.md。