当前位置: 首页 > news >正文

claw-code 源码详细分析:Remote / SSH / Teleport / Deep Link——运行时分支爆炸怎样用「模拟模式」先收束状态机?

涉及源码src/remote_runtime.pysrc/direct_modes.pysrc/main.pysrc/bootstrap_graph.pytests/test_porting_workspace.py


1. 分支爆炸在说什么

真实 Agent/IDE Harness 里,「当前跑在哪」往往不是二元的,而是多维组合

  • 控制面:本机进程 / 远程控制会话 / SSH 到另一台机器 /「Teleport」类工作区跳转;
  • 链路面:直连后端 / 经上游代理 / 深链唤起带 query;
  • 数据面cwd、凭证、环境变量、信任门是否打开、是否允许执行 shell。

若一开始就把这些全部写进bootstrap_sessionQueryEnginePort,会出现:

  • 条件组合指数级增长,单测难以覆盖;
  • 网络/flaky业务逻辑缠在一起,排障困难;
  • CLI 与 UI难以对齐「同一种模式」的命名。

模拟模式策略是:先把「有哪些模式」和「每种模式对外暴露什么最小状态」钉死,实现体暂时是占位返回值,从而收束状态机的对外边界,再接真实 I/O。


2. 本仓库里的两块实现:remote_runtimevsdirect_modes

2.1 远程族:RuntimeModeReport(remote / ssh / teleport)

# 6:25:src/remote_runtime.py@dataclass(frozen=True)classRuntimeModeReport:mode:strconnected:booldetail:strdefas_text(self)->str:returnf'mode={self.mode}\nconnected={self.connected}\ndetail={self.detail}'defrun_remote_mode(target:str)->RuntimeModeReport:returnRuntimeModeReport('remote',True,f'Remote control placeholder prepared for{target}')defrun_ssh_mode(target:str)->RuntimeModeReport:returnRuntimeModeReport('ssh',True,f'SSH proxy placeholder prepared for{target}')defrun_teleport_mode(target:str)->RuntimeModeReport:returnRuntimeModeReport('teleport',True,f'Teleport resume/create placeholder prepared for{target}')

收束点

  • 一模式一函数run_remote_mode/run_ssh_mode/run_teleport_mode,入口清晰,未来可在函数内换实现而不扩散调用点。
  • 报告结构固定mode+connected+detail,CLI 与人类 diff 都稳定。
  • 无网络、无子进程:移植期确定性输出,CI 只断言mode=...子串即可。

2.2 直连族:DirectModeReport(direct-connect / deep-link)

# 6:21:src/direct_modes.py@dataclass(frozen=True)classDirectModeReport:mode:strtarget:stractive:booldefas_text(self)->str:returnf'mode={self.mode}\ntarget={self.target}\nactive={self.active}'defrun_direct_connect(target:str)->DirectModeReport:returnDirectModeReport(mode='direct-connect',target=target,active=True)defrun_deep_link(target:str)->DirectModeReport:returnDirectModeReport(mode='deep-link',target=target,active=True)

收束点:显式保留target(深链 URI、工作区 id 等未来可解析),与远程族用detail字符串承载上下文略有不同——属于演进期可统一的报告形状(例如将来抽共用ModeReport基类)。


3. CLI:一子命令一模态,help 写明 simulate

# 68:77:src/main.pyremote_parser=subparsers.add_parser('remote-mode',help='simulate remote-control runtime branching')remote_parser.add_argument('target')ssh_parser=subparsers.add_parser('ssh-mode',help='simulate SSH runtime branching')ssh_parser.add_argument('target')teleport_parser=subparsers.add_parser('teleport-mode',help='simulate teleport runtime branching')teleport_parser.add_argument('target')direct_parser=subparsers.add_parser('direct-connect-mode',help='simulate direct-connect runtime branching')direct_parser.add_argument('target')deep_link_parser=subparsers.add_parser('deep-link-mode',help='simulate deep-link runtime branching')deep_link_parser.add_argument('target')
# 171:185:src/main.pyifargs.command=='remote-mode':print(run_remote_mode(args.target).as_text())return0ifargs.command=='ssh-mode':print(run_ssh_mode(args.target).as_text())return0ifargs.command=='teleport-mode':print(run_teleport_mode(args.target).as_text())return0ifargs.command=='direct-connect-mode':print(run_direct_connect(args.target).as_text())return0ifargs.command=='deep-link-mode':print(run_deep_link(args.target).as_text())return0

收束状态机的方式

  1. 用户意图 → 子命令离散状态,不靠「再猜一个 flag 组合」。
  2. target是唯一自由变量,先统一成字符串,后续再在各自run_*内做解析/校验。
  3. bootstrap/turn-loop解耦:当前PortRuntime.bootstrap_session不读取这些模式——避免「单条命令里藏六种 runtime」,先把模式探针做成独立 CLI,符合分阶段集成

4. 测试如何把「模式」钉成契约

# 196:202:tests/test_porting_workspace.pydeftest_remote_mode_clis_run(self)->None:remote_result=subprocess.run([sys.executable,'-m','src.main','remote-mode','workspace'],check=True,capture_output=True,text=True)ssh_result=subprocess.run([sys.executable,'-m','src.main','ssh-mode','workspace'],check=True,capture_output=True,text=True)teleport_result=subprocess.run([sys.executable,'-m','src.main','teleport-mode','workspace'],check=True,capture_output=True,text=True)self.assertIn('mode=remote',remote_result.stdout)self.assertIn('mode=ssh',ssh_result.stdout)self.assertIn('mode=teleport',teleport_result.stdout)
# 238:244:tests/test_porting_workspace.pydeftest_bootstrap_graph_and_direct_modes_run(self)->None:graph_result=subprocess.run([sys.executable,'-m','src.main','bootstrap-graph'],check=True,capture_output=True,text=True)direct_result=subprocess.run([sys.executable,'-m','src.main','direct-connect-mode','workspace'],check=True,capture_output=True,text=True)deep_link_result=subprocess.run([sys.executable,'-m','src.main','deep-link-mode','workspace'],check=True,capture_output=True,text=True)self.assertIn('Bootstrap Graph',graph_result.stdout)self.assertIn('mode=direct-connect',direct_result.stdout)self.assertIn('mode=deep-link',deep_link_result.stdout)

学习点:断言稳定键mode=...),不断言占位文案全文——占位升级时少碎测试


5. 与「启动叙事」对齐:bootstrap_graph

# 16:26:src/bootstrap_graph.pydefbuild_bootstrap_graph()->BootstrapGraph:returnBootstrapGraph(stages=('top-level prefetch side effects','warning handler and environment guards','CLI parser and pre-action trust gate','setup() + commands/agents parallel load','deferred init after trust','mode routing: local / remote / ssh / teleport / direct-connect / deep-link','query engine submit loop',))

作用:在文档/评审层把模式路由标成独立阶段,与query engine submit loop前后分明——提醒实现者:先定 mode,再进会话循环,而不是在循环里隐式猜环境。


6. 与src/remote/占位包的关系

src/remote/等目录通过reference_data/subsystems/remote.json归档体量元数据(见result/12.md),代表未来真实远程子系统的代码位置
当前可执行的「模式探针」remote_runtime.py/direct_modes.py+main,二者分层先 CLI 契约与小报告对象再填包内实现


7. 后续接真实现时的建议(仍防爆炸)

  1. 统一RuntimeContextSessionTransport:内含mode: Enumtarget: str、可选credentials_handle,由单一工厂根据 CLI/配置构造,避免在十处if ssh
  2. 真实连接失败→ 仍返回结构化报告connected=False,detail=错误原因),与现在形状兼容,便于 UI 与日志。
  3. 再把 mode 注入bootstrap_session:例如PortRuntime.bootstrap_session(..., transport=...),单测里注入 fake transport,保持无网可跑。
  4. 组合爆炸用表驱动测试(mode, target_validity) -> expected_report,而非复制五个集成测试。

8. 小结

  • Remote / SSH / Teleport / Direct-connect / Deep-link在本仓库中通过独立子命令 + 小型不可变报告 dataclass + 纯函数入口实现模拟模式
  • 状态机被收束在:离散 CLI 分支固定文本键mode=与核心bootstrap_session暂时分离三层。
  • bootstrap_graph把「mode routing」写成显式阶段,与submit loop解耦叙事。
  • 这是典型Harness 移植节奏:先可测、无 I/O 的模态面,再填远程包与真实链路

http://www.cnnetsun.cn/news/1727587.html

相关文章:

  • 深入理解 C# 架构思维:继承的界限、多态的解耦与属性的封装
  • 项目介绍 MATLAB实现基于经验启发式搜索(EHS)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢
  • 跷跷板效应:在亚马逊,为何一个品牌无法同时称霸两个心智山头
  • ---------------------- 1. 初始化配送数据!这里只需要改这里就完事 -...
  • Anthropic 炸场新品 Claude Code 源码遭扒?深度解析 18 个核心组件架构!
  • 无片外电容LDO电路设计 完整IP现成电路,具有过温保护和过流保护,带隙,BUFFER都有 性...
  • OpenClaw+Phi-3-mini-128k-instruct:技术博客自动生成与Hexo部署
  • 三步掌握高效提取全平台支持的音乐平台歌词提取工具使用指南
  • Laravel1.x:初代PHP框架的起点
  • 基于yolov26+pyqt5的无人机视角河道水面垃圾检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • Agent落地方法论入门到精通(非常详细),帮你避坑收藏这篇就够了!
  • GLM-4.1V-9B-Base赋能SpringBoot后端:构建智能内容审核微服务
  • 微信聊天记录导出恢复/备份/离线查看工具(支持最新版4.1及以上)
  • 低代码技术如何重构钣金工厂的数字化生产链路
  • 告别ifconfig手忙脚乱:MobaXterm一键SSH连接VMware Ubuntu的保姆级图解
  • 如何用tts-vue快速搭建本地语音合成系统:终极免费教程
  • 告别模型臃肿:手把手教你用vLLM部署NVFP4量化的DeepSeek模型(附完整配置)
  • 双卡 A100 + Ollama 生产部署从安装、踩坑、调优到最终可上线方案
  • 智慧车站三维空间智能管控系统白皮书——构建“全域感知 × 连续认知 × 动态调度”的交通枢纽空间智能中枢
  • 别再只做静态分析了!用DPABI解锁小鼠脑功能动态连接(Temporal Dynamic Analysis详解)
  • 用Maven打包SpringBoot项目的正确姿势:从配置到验证的保姆级指南
  • MacBook上5分钟搞定JMeter环境:从JDK检查到永久汉化(保姆级避坑指南)
  • 别再只盯着比特币挖矿了!手把手带你搞懂PoW、PoS、DPoS到底该怎么选(附实战场景分析)
  • Vue + Iframe 实战:打造企业级流程配置中心
  • 沿海城市创新力为何更强?
  • Lean语言+AI入门基础教程(非常详细),编译器验证数学证明看这篇就够了!
  • 塞尔达存档定制工具:解锁海拉鲁冒险的无限可能
  • 李慕婉-仙逆-造相Z-Turbo 生成Matlab算法脚本:从数学公式到可执行代码
  • 告别GUI:用纯脚本高效处理GRACE RL06数据的完整工作流分享
  • WinThumbsPreloader:让Windows图片预览提速80%的缓存优化工具