fix(daemon): 稳定桌面源码联调运行时 - #57
Conversation
🤖 Luxiao PR 审查报告🤖 PR 审查报告 PR: fix(daemon): 稳定桌面源码联调运行时 关键问题🔴 Python 启动器的符号链接保留被扩大到所有 Application,削弱了原有可执行文件边界位置: 本次代码先调用 _require_controlled_executable(...)随后实际执行的是未经解析的原始路径: command_executable = _python_executable_for_application(
requested_executable,
...
)测试也明确把这一行为扩展到了普通 Python Application: def test_python_launcher_preserves_virtualenv_symlink_for_execution(...)这带来两个问题:
尤其测试允许以下结构:
这实际上改变了普通第三方 Application 的安全边界,与 PR 描述中“只为 Workspace 官方默认 Application 增加例外”“不扩大普通 Python Application 的可执行文件边界”不完全一致。 建议:
这是当前最主要的合并阻塞项。
|
🤖 Luxiao PR 审查报告🤖 PR 审查报告 PR: fix(daemon): 稳定桌面源码联调运行时 维度一:代码质量🏗️ 架构视角 — ✅整体改动遵守现有架构边界,没有把桌面端编排、默认 Application 业务逻辑或第三方 Application 管理职责下沉到 SDK。 主要判断:
需要注意的架构假设: 源码默认 Launcher 保留的是可变符号链接路径,而不是解析后的稳定文件。这是保持 POSIX venv 语义所必需的,但意味着安全模型依赖 Workspace 及其 🎨 产品视角 — ✅本次修改直接对应桌面源码联调中的三个高频问题:
处理方式比较克制:
一个轻微体验问题:
这不影响 Desktop 正常成对传参,但会改善诊断体验。 📏 规范视角 —
|
🤖 Luxiao PR 审查报告🤖 PR 审查报告 PR: fix(daemon): 稳定桌面源码联调运行时 关键审查发现P1 — 完整 Runtime 测试仍未通过,当前不能直接视为回归验证完成PR 说明中明确提到:完整 Runtime 测试在受管 Python 3.14 环境下仍存在子进程依赖缺失问题。 虽然该问题被解释为“既有测试依赖问题”,且聚焦测试已经覆盖官方源码默认 Application,但当前材料没有提供以下证据:
本次恰好修改了普通 Python Application 的执行路径语义: resolved_executable = _require_controlled_executable(...)
command_executable = _python_executable_for_application(
resolved_executable,
...
)因此,“普通 Application 使用解析后的基础 Python,导致丢失 venv 依赖”不能仅凭描述排除为本次变更造成的损伤。至少需要通过基线对照或明确的测试夹具修复来证明。 合并前要求:
P2 — Windows 缺少
|
完整 Runtime 测试基线对照为核对 Luxiao 审查提出的完整 Runtime 回归风险,使用完全相同的本机环境执行:
结果:
两边共同失败集合一致分布在以下文件:
代表用例 因此当前 PR 没有扩大完整 Runtime 的失败集合;相反,受管双 Python 环境切换链路由失败变为通过。共同失败仍需作为独立的本机代理/测试环境问题继续治理,但不应通过放宽第三方 Application launcher 权限绕过。 |
🤖 Luxiao PR 审查报告🤖 PR 审查报告 PR: fix(daemon): 稳定桌面源码联调运行时 维度一:代码质量🏗️ 架构视角 — ✅整体改动遵守现有职责边界,没有引入第二套 Daemon 或 Desktop 到 Device 的旁路。 做得较好的地方:
没有发现不合理的跨层耦合或功能蔓延。 需要保留的架构认知: POSIX 官方源码模式现在有意执行 venv launcher 的原始符号链接路径,而不是已验证的解析目标。这是维持 venv 语义所必需的特例,但意味着该模式信任 Workspace 自管 venv 在构建启动规格到实际创建进程期间不会被恶意替换。这个信任边界目前足够窄,且没有扩展给第三方 Application,可以接受。 🎨 产品视角 — ✅改动直接解决源码联调中的两个实际稳定性问题:
用户侧行为合理:
错误信息也足够明确,能够区分根目录不匹配、launcher 不匹配、受控目录逃逸和参数缺失。 📏 规范视角 — ✅代码规范整体良好:
两点非阻塞建议:
|
🤖 Luxiao PR 审查报告🤖 PR 审查报告 PR: fix(daemon): 稳定桌面源码联调运行时 关键发现1. 🔴 删除维护 REST API,但控制协议版本仍保持
|
abfc7d5 to
58ead6c
Compare
为源码默认 Application 增加根目录与启动器成对配置校验,并在 POSIX 保留受信任 venv 启动路径,在 Windows 校验 python.exe/pythonw.exe 不得通过重解析点逃出授权目录。 普通 Application 仅允许使用 Application Store 受管根目录内的 Python 启动路径,保留虚拟环境语义;包内可执行文件继续要求解析目标位于资源根目录。CLI 启动后台 Daemon 时不再将 venv Python 解析为基础解释器。 本机 Desktop/Device WebSocket channel 显式绕过系统代理,并兼容不同 websockets 版本。补齐 CLI 参数门禁、真实双 venv、代理、Windows 回退与逃逸、Daemon 路由及子进程回归测试,同时记录 POSIX 符号链接的本机信任边界。 本提交不删除维护 REST API、固件/SD 依赖,也不调整控制协议版本。
58ead6c to
a41db0b
Compare
|
已根据 Luxiao 审查报告完成整改并重新压缩为单提交:
当前提交: |
Comparison
origin/main...HEADWhat Changed
NO_PROXY/no_proxy用户原值可能丢失的问题,并补齐跨平台测试门禁Changed Files
M docs/contracts/runtime-profile-index.mdM src/watcherobot/cli.pyM src/watcherobot/runtime/daemon/__main__.pyM src/watcherobot/runtime/daemon/application/client.pyM src/watcherobot/runtime/daemon/application/launcher.pyM src/watcherobot/runtime/daemon/application/runtime.pyM tests/runtime/test_application_client.pyM tests/runtime/test_application_launcher.pyM tests/runtime/test_application_logging.pyM tests/runtime/test_application_runtime.pyA tests/runtime/test_daemon_entrypoint.pyM tests/runtime/test_daemon_runtime_routing.pyM tests/runtime/test_full_architecture_flow.pyM tests/test_cli_runtime.pyCommits
a41db0b fix(daemon): 收紧桌面源码联调运行时边界675da0c fix(runtime): 兼容 Windows 代理环境变量Validation
Risk Checks
src/watcherobot/cli.py中基础分支已存在的password=password参数透传;该行未被本 PR 修改,也不包含任何凭证值。Related Issue
Notes
DAEMON_CONTROL_PROTOCOL_VERSION,也不新增业务消息类型分支。linux-x64,与本 PR 运行时改动无关;PR 的跨平台 SDK CI 已全部通过。