- 拆模块:CHV 从 cloud/sandbox.py 巨类拆到 cloud/chv/(executor/ pool/config/api_client/ssh_transport/disk/errors),sandbox 只留 兼容 re-export,旧导入路径与新路径是同一对象 - 去重复:goal 解析、host 顶层参数、runner 超时抽成共享 helper, Local 与 CHV 在矩阵输入下结论全等(Docker goal-resume 变体 有意保留内联版,见 PR 描述) - 安全:SSH host key 按 VM 钉死(state_dir/<vm>/known_hosts, ssh-keyscan 首次捕获 TOFU),废除 no + /dev/null;CHV_SSH_USER 空串与 CHV_SSH_PORT 越界直接拒绝,不静默 fallback - execute 语义:只读已运行 VM,未运行报 vm_not_running,不为 status 起 VM - 预热池:registry 落盘、重启载入只当孤儿、reconcile 清理、 损坏 quarantine;条目仍一次性,绝不复用脏 VM - 长任务:VM 中途死亡判 interrupted(断点可续跑);中途心跳 经评估不做(无客内进度信号可采) - #215 未合并:只列复用清单,不复制模块 测试:原 42 项 + 新 24 项全过;相关旧套件与 cloud 全量 1496 项 全过(skipped=4)。验证仍是 mock + 干跑 + 单元测试,未做真机、 压测、安全审计;堆叠于 #216 之上,base 为 feat-cloud-hypervisor。
31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
"""执行器基类(叶子模块,不依赖 cloud.sandbox 与 cloud.chv,
|
||
避免循环导入)。
|
||
|
||
原来在 cloud/sandbox.py 里;拆分后 Local/Docker/Cloud
|
||
执行器(sandbox.py 内)与 CloudHypervisorExecutor
|
||
(cloud/chv/executor.py)共用这一个类对象,isinstance
|
||
判断与旧路径 `from cloud.sandbox import Executor` 都不变
|
||
(sandbox.py 会 re-export 它)。
|
||
"""
|
||
|
||
|
||
class Executor:
|
||
"""执行器基类。
|
||
|
||
task 是 dict,含 id、project_id、repo、prompt、branch(可选)。
|
||
execute(task) -> dict,至少含 executor、task_id、status、stdout。
|
||
"""
|
||
|
||
def execute(self, task) -> dict:
|
||
raise NotImplementedError("子类必须实现 execute(task)")
|
||
|
||
def goal_task(self, task) -> dict:
|
||
"""目标循环(host.py goal):turn→验测→喂回重试。
|
||
|
||
子类实现;默认不支持(CloudExecutor 的通用 HTTP 协议里
|
||
没有 goal/验测概念,调它会如实失败,不静默降级成普通
|
||
dispatch)。结果 dict 除 execute() 的字段外另含:
|
||
goal_met(True/False/None=无结论)、goal_error。
|
||
"""
|
||
raise NotImplementedError("该执行器不支持 goal 模式")
|