Files
pikasTech-unidesk/.agents/skills/unidesk-hwpod-ops/references/python-ui-node.md
T

4.5 KiB
Raw Blame History

Python 图形节点

当前权威来源

  • HWLAB 源码:YAML 选中的 v0.3 源工作区内 tools/hwlab-node.py
  • 应用形态:单文件 Python/tkinter 图形应用,包含 Windows 托盘、自动重连、日志轮转和自更新。
  • 本地状态:%USERPROFILE%\.hwlab\config.jsonstate.jsonlogs\hwlab-node.logupdate\
  • 默认公共入口:https://hwlab.pikapython.com
  • 更新元数据:GET /v1/hwlab-node/update?platform=windows&channel=stable&current=<version>
  • 发布文件:GET /v1/hwlab-node/download/hwlab-node.py;替换前校验元数据给出的 SHA。
  • 节点传输:主动出站连接 wss://<origin>/v1/hwpod-node/ws,完成注册和心跳。
  • 节点操作合同:hwpod-node-ops-v1

不要把版本号或 SHA 写入长期指令。每次操作从选中的运行面/源码重新读取。

桌面配置

当前应用暴露 serverUrlnodeIdautoConnect、更新设置和日志设置。应用有意不接受 CLI 参数或 HWLAB_* 环境变量。

必须使用目标 Windows 用户的原生解释器运行应用。从拥有 %USERPROFILE%\.hwlab 和托盘的同一交互登录上下文解析 python.exe,再把选中的解释器路径写入权威节点配置/启动声明。python --versionGet-Command python 和 tkinter 导入属于发现证据;WSL /usr/bin/python、SSH 侧辅助解释器或隐藏服务账号不能作为运行时。

本地配置只表达操作者偏好。平台声明仍然拥有:

  • 节点/通道和唯一 nodeId
  • HWPOD 资源与能力绑定;
  • 允许的工作区根目录;
  • WebSocket/认证 Secret 来源引用;
  • 受管登录/启动策略;
  • Windows 解释器路径/版本和交互用户;
  • 项目管理 MDTODO 来源。

状态证据

只采集有界、脱敏的事实:

$root = Join-Path $HOME ".hwlab"
[ordered]@{
  home = $HOME
  configExists = Test-Path (Join-Path $root "config.json")
  stateExists = Test-Path (Join-Path $root "state.json")
  logExists = Test-Path (Join-Path $root "logs\hwlab-node.log")
  interactiveShell = (Get-Process explorer -ErrorAction SilentlyContinue | Measure-Object).Count
} | ConvertTo-Json -Compress

只在需要时读取配置字段,并对未来可能出现的 Secret 字段脱敏。注册/运行证据优先使用云端 node.healthnode.versionnode.inventorynode.diagnostics 结果。

受控部署

部署属于 YAML-first UniDesk CLI 命令族,不属于操作者手工步骤。命令族必须提供有界的规划、状态和显式确认应用动作,并满足:

  • 从权威 YAML/配置引用解析节点/通道、Windows 路由、交互用户、pythonPath、运行目录、文件/更新入口、nodeId、SecretRefs、允许的工作区根和登录自启动策略;
  • 拒绝没有可解析且可达 trans 路由的目标;
  • 仅在 CLI 传输适配器内部使用 trans
  • 写入前校验下载文件的 SHA
  • 保证应用幂等,并报告写入文件指纹、配置指纹、解释器版本、启动注册、进程/注册表状态和脱敏阻塞项;
  • 避免把图形应用作为短 SSH/trans 请求的子进程启动;
  • 保持交互式 Windows 用户会话,使界面/托盘可见,并区分“已安装”和“界面可见且已注册”。

命令族不存在时只允许只读发现。人工下载、远端 PowerShell 写文件、临时计划任务和直接启动进程只属于诊断,不是部署证据。

每次必须检查的缺口

不要假设最新发布文件已经解决以下事项;必须检查选中的源码/版本:

  • 默认 nodeId 可能仍然绑定 D601。
  • 工作区操作可能接受请求提供的绝对路径,但没有配置允许列表或包含性检查。
  • 即使 cloud-api 支持 tokenWebSocket 注册也可能仍然缺少节点凭据。
  • 实际能力可能落后于云端合同,尤其是 apply-patch、UART 写入/JSON-RPC、Keil 和结构化阻塞项。
  • 图形窗口关闭到托盘不等于登录持久化;非交互会话中的计划任务可能隐藏界面/托盘。
  • 另一个任务、启动项或运行目录中可能仍有旧 Bun 运行器活动。

每个缺口必须分别暴露,不得增加本地兜底路径掩盖问题。

旧运行器漂移

旧运行器证据包括 bun.exe tools\hwpod-node.ts connect、旧 IP/端口云端地址、hwpod-node-runtime 和旧计划任务名。停止任何进程前,先比较 nodeId、云端地址、资源绑定和活动硬件任务。可能中断硬件操作的变更必须有明确维护窗口,并遵循 $dad-dev 流程。