feat: 网络源测速、回环中继与宿主环境隔离 (M14 T14.1~T14.9) - #7
Merged
ClozyA merged 36 commits intoSep 12, 2026
Conversation
- 新增 doc/契约补充-v1-增补2.md:C16 测速排序、C17 回环中继、C18 进度字节字段与细目、C19 Python 源目录增补 - 架构设计回写四处:镜像与网络策略规则 2/6/8、NDJSON 进度段、stage 表、依赖同步与插件边界增补 - 任务拆分登记 M14(T14.1~T14.7)与 TODO-EL-14,变更记录一条;README / current/README / 增补 1 交叉引用;AGENTS.md 状态表 - doc/current/M14/设计-M14-网络源测速与回环中继.md:接口形态、失败语义、安全边界、逐任务 TDD 计划 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- ProgressEvent 追加 item / source / bytesPerSecond,缺失即省略、不输出 null - 新增 StageNetworkProbe,与架构设计 stage 表同序 - human renderer 渲染 [item] @source 与 MB/s 吞吐;NDJSON 保持整数字节 - contracttest 追加三个可选字段的类型断言 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
新增 internal/mirror/probe.go:Prober 对 Plan 内全部源并行发带 Range 窗口的 GET,记录 TTFB、窗口吞吐与 Accept-Ranges 能力;预算到期时正在读的源按已读 字节计吞吐并记 OK,尚未收到响应头的源记失败。探针失败只写进 ProbeResult.Err,只有 ctx 取消或参数非法才返回 error。report 回调在调用方 goroutine 上串行执行;预算到期会取消全部请求并等待 goroutine 退出。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
新增 internal/mirror/rank.go:RankPlan 把显式首选 key 钉在最前,其余探测成功的 源按吞吐降序、TTFB 升序排列,失败与缺失的源排最后并保持原相对顺序,官方源可以 排到任何位置。Plan 增加 Seal() 供缓存键使用;包内新增 newPlan 让重排结果带正确 seal,可直接交给 Rotator。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- PlanLock 用 BurntSushi/toml v1.5.0 解析 uv.lock,从根项目 dependencies 沿 marker 可达边收集包,extra 边展开 optional-dependencies - evaluateMarker 支持 ==/!=/</<=/>/>=/in/not in/and/or/括号,python 版本按数字段比较;未知变量按可达处理并计入 Skipped - 每包按 cp312 > abi3 > py3 的 win_amd64 wheel、其次 none-any、否则 sdist 选制品;输出 PyPI 原路径、大小与 sha256 - 真实 dev@cca4ac486 锁夹具:95 个制品 143,023,892 字节,darwin/linux 专属包与 dev 组被排除 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
新包 internal/relay:Start 只监听 tcp4 127.0.0.1:0,ctx 取消或 Close 即收口 (有界 30 s,只删除中继自己创建的暂存文件);三条固定前缀之外一律 404, 路径任一段为空、"." 或 ".."(编码前后都检查)视为穿越;/simple/ 只接受 GET, 另两条接受 GET/HEAD;同一文件的并发请求共享一次取回,取回挂在中继 ctx 下。 config.Layout 新增 RelayStagingDir()(runtime/cache/downloads/relay), 位于下载缓存之下,cleanup 随 download-temp 一并删除。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
新增 internal/mirror/probecache.go:ProbeCache 按 Kind 缓存 RankPlan 的结果, 键是输入 Plan 的 Seal(),TTL 默认 30 分钟,过期即未命中并移除;零值可用、 mutex 零值、并发安全;Lookup 返回结果切片副本,Store 对不自洽的输入静默忽略。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 中继路径可注入 UV_HTTP_TIMEOUT(uv 只在中继整文件就绪后收到响应),宿主同名变量仍被剔除 - pythonDownloadPath 从 uv python list 的 JSON 清单取 Windows x86_64 目标版本的 URL,去掉 github / releases.astral.sh 官方 base 得到探针相对路径 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
按增补 2 C19 在 KindPython 目录的 gh-proxy 之前加入 astral (https://releases.astral.sh/github/python-build-standalone/releases/download), 这是 uv 0.12.3 自己的默认下载地址,此前目录把它漏掉了。它不是官方位,github 仍是唯一官方源,validateCatalog 不变;同步更新对 Python 源顺序做硬断言的既有测试。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
取回引擎:登记过的 Item 按 size / sha256 校验后交付,未登记文件(含 .metadata 旁车与 /python/)先 HEAD 首个可用上游取 Content-Length 与 Accept-Ranges 再取回、 不校验;逐源单流 GET,连接超时 / 读空闲失速(注入定时器)/ 非 2xx / 哈希不符 记 AttemptOutcome 后换下一个源从头取,同源两次哈希不符即从该路由剔除,全部 失败 502 并记 FileFailure(失败不缓存,后续请求可重试);文件槽位 ≤ MaxFiles; 上游 URL 只由 Upstream.Base + path 拼出,重定向 ≤ 10 跳且禁止降级 HTTP。 聚合进度 tracker(200 ms 节流、最近 1 s 吞吐、完成 / 失败强制回调、回调失败即 停止中继)与 ledger(Files / Bytes / BySource / Failures)随引擎接入。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- planBuilder 增加 ctx 参数,NewService 接受 WithPlanBuilder 注入实测排序;默认仍按目录顺序 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
已知大小 ≥ ChunkThreshold 且支持 Range 的源 ≥ 2 时按 ChunkSize 切片入栈, ≤ MaxChunksPerFile 个 worker 各绑定一个源逐片取回并按偏移写入预分配的 part; 片失败回栈、该源对本文件标失败、worker 退出;支持 Range 的源耗尽后剩余片退化为 单流由剩余源接管。拼接后整文件校验 sha256,不符时参与源全部标失败但不计入剔除。 进度按文件记各源贡献,Source 报贡献最多的源;片失败前已计入的字节撤回。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
/simple/<name>/ 按上游顺序取第一个 200 的索引页:Accept 头透传(HTML / JSON 两种索引),响应体内该源自己的 packages 前缀(Upstream.RewriteFrom)改写为 <BaseURL>/packages/,Content-Type 透传、Content-Length 重算;相对链接不需改写, 中继与 PyPI 保持同样的相对布局。索引页超过 64 MiB 视为该源失败;请求方离开或 Close 都能打断正在进行的索引取回。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- mirror.PlanFunc / CatalogPlanFunc:默认目录顺序,供实测排序注入 - Bootstrapper、networkExecutor、PythonService、DependenciesService、ProductionEnvironment 各自接受 planner 注入,默认行为不变 - 取消错误原样上抛,不再退回默认策略重试 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
用注入时钟锁定进度回调口径:时钟静止时只有首个字节与完成时的强制报告两次, 推进 200 ms 整即再次报告,最近 1 s 吞吐窗口丢弃过期样本;未登记文件在 HEAD 后并入总量,Register 幂等且不触发回调。Summary 的失败列表按到达顺序封顶 32 项, 返回值是快照,改动不回流中继内部状态。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
用 barrier 锁定两条并发口径:同一文件的并发请求共享一次取回,完成后的重复请求 直接从暂存交付,上游只见到一次 GET;MaxFiles 占满时后到的文件在引擎内等待槽位 (同包测试观察点 slotWaiting),槽位释放前不打上游,释放后照常取回。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 有探针目标的 Kind 首次取顺序时并行探测并按吞吐排序,结果进程内缓存;无目标按目录顺序、不联网 - 探测失败与排序失败只退回目录顺序并写诊断日志;只有取消与报告回调错误会上抛 - 同一 Kind 的并发首次调用只探测一次;Results 按最终尝试顺序输出供 result.details Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- mirror.NewLoopbackRewrite 只接受 http://127.0.0.1:<port> 作为锁改写目标(规则 8 回环例外的唯一形态) - DependenciesService:在线同步先规划锁内制品并登记探针目标,起中继后一次 uv sync --frozen,锁副本前缀指向中继; 中继起不来退回 T13.4 轮换;中继报告文件失败映射 MIRROR_EXHAUSTED 并带 details.relay - PythonService:分发包经中继 python 路由下载,探针目标取自 uv 清单;起不来退回环境变量轮换 - ProductionEnvironment 默认启用中继,WithProductionRanker 注入测速器与探针登记 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- SupervisionInfrastructure.RelayBaseURL 非空时 AUTO_MAS_MIRROR_PACKAGE_INDEX / AUTO_MAS_MIRROR_PYTHON 以回环 simple / python 路由开头,只接受 http://127.0.0.1:<port> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- CLI 每次会话建立 mirror.Ranker:探测结果发 network.probe 事件,result.details 带 networkProbe; 生产工厂经 holder 取实测顺序,测试注入的工厂不受影响 - backend supervise 在任何 spawn 前起中继并注入回环首项,后台按实测顺序替换 packages / simple 上游, 监督结束等待测速退出并关闭中继;中继起不来退回直连列表 - relay.Server.SetUpstreams 支持运行期替换上游顺序,已剔除的源不回流 - E2E 断言改为「回环首项 + 上游目录顺序」 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- python.install 与 dependencies.sync 的 running 事件带 current/total/percent/item/source/bytesPerSecond,字节单调、总量未知时不带数值 - result.details 增加 relay 与 pythonRelay 摘要(增补 2 C18 第 7 条) - 假环境服务可回放中继进度;补 network.probe 事件形态与 details 结构测试 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- network.probe 只测首字节的成功探测不再报 bytesPerSecond=0(0 专指失败,缺失表示无吞吐可报),前端不再把 git 源误判为不可用 - uv.download 的 running 带 item / source(由 bootstrap 轮换回调填入 DownloadProgress.Source)与按时钟差算出的 bytesPerSecond - 增补 2 C18 第 2、5 条同步修订 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- backend supervise:中继诊断先进缓冲 sink,后端 Logger 建立(每次尝试)后 attach 冲刷,Logger 关闭时退回缓冲;起不来的原因、后台换序结果与引擎 warning 都进监督日志 - 依赖同步与 Python 安装的 RelayLog 出口接到操作日志:中继起不来、收口失败与引擎换源/哈希不符/剔除都有记录 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 别的 worker 完成 ≥ 2 片而它不到 1/4、且在飞 ≥ 1.5 秒 → 判慢:取消其片、已收字节保留并计入贡献、剩余范围交给快源、该源挪到路由末位 - 队列已空时快源接手落后者未过半的最后一片,不再干等 - 都慢不判慢;片龄不足(首字节延迟、调度抖动)不判慢;判慢不算失败、不进 failures - 增补 2 C17 第 4 条与设计文档同步 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 队列已空时若落后者片龄不足 1.5 秒,快 worker 用注入定时器等到够龄(或对方先有变化)再判一次; 黑盒里 numpy 的一个片因此从「等 pypi 15 秒连接超时」变成快源接手 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
用户报告全局 %APPDATA%\uv\uv.toml 把默认索引指到腾讯镜像后,Runtime 的 `uv lock --check` 对 dev 锁误报 LOCKFILE_OUTDATED:UV_NO_SYSTEM_CONFIG 只挡 系统级配置。现固定注入 UV_NO_CONFIG=1(项目自身 [tool.uv.sources] 不受影响, uv 0.12.3 实测)。同日按用户要求审计全部宿主穿透,uv 0.12.3 实测另修三处: - HTTP(S)_PROXY / ALL_PROXY 会把回环中继的请求也送进代理,NO_PROXY=localhost 不豁免 127.0.0.1:NO_PROXY 合并大小写变体、补齐 127.0.0.1,localhost 后以 唯一规范键下发,代理变量本身原样继承; - PYTHONHOME / PYTHONPATH / PYTHONSAFEPATH / PYTHONWARNINGS 等原样穿过 uv run 到受监督后端:宿主 PYTHON* 按前缀剔除,只放行 PYTHONIOENCODING / PYTHONUTF8 / PYTHONUNBUFFERED / PYTHONDONTWRITEBYTECODE,并剔除 VIRTUAL_ENV / CONDA_PREFIX 一类虚拟环境标记;RunOptions.Environment 显式注入不受影响; - FORCE_COLOR / CLICOLOR_FORCE 压过 UV_COLOR=never,RUST_LOG 不加 -v 也倾倒 TRACE:颜色与 Rust 调试变量不下传。 契约增补 2 新增 C20,架构文档注入变量块与任务拆分同步;黑盒:修复前 exe 在 该配置下 LOCKFILE_OUTDATED,修复后 succeeded。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
复核建议:C20 第 6 条「名单只作用于宿主」此前只用 PYTHONPATH 锁定,补上 VIRTUAL_ENV 与 FORCE_COLOR 的显式注入存活断言;TestRunner_LoopbackNeverProxied 改为逐个清掉宿主任意大小写的 NO_PROXY,非 Windows 平台也稳定;架构文档注明 完整名单以 C20 第 3、4 条为准。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Sorry @qiyinxi, your pull request is larger than the review limit of 150,000 diff characters
This was referenced Sep 11, 2026
qiyinxi
added a commit
to AUTO-MAS-Project/AUTO-MAS
that referenced
this pull request
Sep 11, 2026
## 摘要 MFW 专项的运行环境准备与脚本运行此前会被电脑上的全局 uv 配置文件和 `PYTHON*` 环境变量带偏(与 Runtime 侧 [AUTO-MAS-Runtime#7](AUTO-MAS-Project/AUTO-MAS-Runtime#7) 里的「宿主配置与 Python 环境隔离」是同一类问题)。受 Runtime 监督时这些已在 Runtime 边界剔除,但旧启动链路(`AUTO_MAS_RUNTIME_MODE=off`)与开发态直接继承宿主环境,后端要自己守住同一条线。 - **运行池全部 uv 调用统一 `--no-config`**:`uv venv` / `uv python find` / `uv python install` / `uv pip install` / `uv pip freeze` 此前都会读用户级与项目级 `uv.toml`(只有 `uv python list` 和 `cache prune` 带了),额外 `[[index]]`、`offline`、`exclude-newer`、`resolution` 都能把池的解析带偏;索引与镜像只由池自己的候选逻辑决定。 - **四处环境构造共用一份剔除名单**(新增 `automas_maafw_runtime_pool/host_environment.py`):运行池 uv/pip、worker、项目 agent、agent 的 pip 检测此前各自维护一份 `os.environ.pop` 名单且互不一致——`PYTHONHOME` / `PYTHONUSERBASE` 都剔了,`PYTHONWARNINGS=error`(第一条 DeprecationWarning 就崩)、`PYTHONOPTIMIZE`、`PYTHONINSPECT`(进程退不出)、`PYTHONDEVMODE` 却原样穿过去,worker 还把宿主 `PYTHONPATH` 追加进自己的 import 路径。现在 `PYTHON*` 按前缀剔除、只放行 `PYTHONIOENCODING` / `PYTHONUTF8` / `PYTHONUNBUFFERED` / `PYTHONDONTWRITEBYTECODE` / `PYTHONNOUSERSITE`,另剔除 `VIRTUAL_ENV` / `CONDA_PREFIX` 等环境指向、`PIP_TARGET` 等安装位置覆盖、颜色强制与 Rust 调试变量;每处在此基础上再显式设置自己要的值。 - `PIP_INDEX_URL` / `AUTO_MAS_*` 等有意留给用户的开关不在名单内,行为不变。 ## 本地验证 - 本 PR 不带测试改动:宿主环境隔离的 6 个纯逻辑用例(过滤函数、四处环境构造的结果)与运行池命令的 `--no-config` 断言只在本地跑,全部通过。 - 补漏:agent 隔离 venv 的 `python -m venv` / `uv venv --seed` 兜底、worker 侧引导 venv、三处 `python -c` 探测(venv/ensurepip 可用性、运行池 ABI 自检)也改用同一份剔除后的环境,`uv venv --seed` 带 `--no-config`。 - `python -m pytest tests -q` → 775 passed, 3 skipped;`python -m pytest tests --collect-only -q` 退出码 0;改动文件 `ruff check` / `ruff format --check` 全过(`cache.py` 与既有测试文件的 I001 是 dev 基线就有的,未动);`scripts/changelog.py check` 通过。 - 真起子进程验证:宿主给 `PYTHONPATH=C:\bogus`、`PYTHONWARNINGS=error` 时,用 `build_runner_environment` 构造的环境拉起 worker 解释器,`import ...automas_maafw_runner.worker` 正常、DeprecationWarning 不再变成崩溃、`sys.flags.safe_path` 仍为 True。 ## 取舍 - agent 隔离 venv 与池的 pip 兜底仍读 `pip.ini`:`--index-url` 已显式传所以索引不受影响,而旧启动链路下国内用户还靠 `pip.ini` 里的镜像,不动。 - 项目自带的 pretask 可执行文件继续继承宿主环境,那是项目自己的进程。 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
ClozyA
added a commit
to AUTO-MAS-Project/AUTO-MAS
that referenced
this pull request
Sep 12, 2026
## 摘要 - 初始化界面接入 Runtime 增补 2(C16 / C18)新增的进度信息:安装 Python 与依赖时显示当前文件、真实字节进度、下载速度与来源;下载前各源测速的结果(`network.probe` 阶段)按「源名 + 速度」列出,只测首字节的成功探测只显示源名,不再被当作不可用。 - Electron 侧 NDJSON 解析与 `runtimeInitializationService` 桥接 `progress.item` / `source` / `bytesPerSecond` 与 `current` / `total`(百分比按字节现算,缺 `total` 时退回 Runtime 给的 `percent`);旧版 Runtime 没有这些字段时界面与现状完全一致,不多占位。 - 新增 `byteFormat` 工具与 `networkActivity` 组合逻辑;zh-CN / en-US / ja-JP 文案齐全。 ## 依赖 这些字段来自 Runtime PR [AUTO-MAS-Project/AUTO-MAS-Runtime#7](https://github.com/AUTO-MAS-Project/AUTO-MAS-Runtime/pull/7)。**本 PR 先以草稿开着**:等 Runtime 发出新版本后再补一个提交把 `res/runtime-version.txt` 从 `v0.1.6` 钉到新版本、转为可合并;在那之前合入只会得到与现状一致的界面(字段缺失时全部隐藏)。 ## 本地验证 - 前端:`yarn typecheck`、`yarn lint` 退出码 0;`yarn test` → 486 passed,唯一失败是 `electron/services/backendService.test.ts` managed 模式那条 5 s 超时用例,该文件与 dev 基线逐字节一致,非本 PR 引入。 - 夹具 `__fixtures__/bootstrap-network-relay.ndjson` 取自真实 Runtime 输出样本;用该样本回放,界面显示「文件名 · 已下载/总量 · 速度 · 来源」与测速列表。 - 已基于当前 `dev`(`2e163cc71`)rebase,`scripts/changelog.py check` 通过。 🤖 Generated with [Claude Code](https://claude.com/claude-code) ## Sourcery 摘要 在初始化接口中公开运行时下载源探测结果和字节级传输详情,同时保持与旧版运行时的兼容性。 新功能: - 在运行时初始化期间显示下载源探测结果和当前文件传输详情,包括进度、速度和来源。 错误修复: - 将仅成功获取第一个字节的源探测结果视为可用,而不是不可用。 增强功能: - 通过 Electron 初始化事件传递可选的运行时网络和字节进度元数据,同时保留旧版运行时的行为。 - 在字节总数可用时根据字节总数计算进度,并在总数发生变化时保持阶段进度单调递增。 - 集中字节数和传输速度的格式化处理,并为中文、英文和日文添加本地化的来源状态消息。 - 当网络信息出现或消失时,保持初始化详情布局稳定。 测试: - 增加对 NDJSON 解析、运行时进度桥接、基于字节的百分比计算、网络活动缩减与格式化、旧版兼容性以及字节格式化工具的测试覆盖。 <details> <summary>Original summary in English</summary> ## Sourcery 摘要 在初始化界面中展示运行时源探测结果和字节级下载进度,同时保持与旧版运行时的兼容性。 新功能: - 在运行时初始化期间显示下载源探测结果和当前文件传输详情,包括字节进度、速度和源。 - 为中文、英文和日文用户添加本地化的初始化详情。 错误修复: - 将仅成功获取首字节的源探测结果视为可用,而不是不可用。 增强功能: - 通过 Electron 传递可选的运行时网络和字节进度元数据,同时保持与旧版运行时的行为一致。 - 在字节总量可用时根据字节总量计算进度,并在总量变化时保持显示的阶段进度单调递增。 - 当网络信息出现或消失时,保持初始化详情布局稳定。 - 集中字节数和传输速度的格式化逻辑,以便在各下载界面中复用。 测试: - 增加对 NDJSON 解析、运行时进度桥接、基于字节的进度计算、网络活动减少与格式化、旧版运行时兼容性以及字节格式化的测试覆盖。 <details> <summary>Original summary in English</summary> ## Sourcery 摘要 在初始化界面展示下载源测速和实时传输详情,同时兼容不提供这些信息的旧版 Runtime。 新功能: - 显示 Runtime 初始化期间的下载源测速结果及当前文件的字节进度、速度和来源。 错误修复: - 将仅成功获取首字节的下载源正确视为可用,而非不可用。 改进: - 扩展初始化进度数据在 Runtime、Electron 与前端之间的传递,并在缺少新字段时保持旧版 Runtime 的原有行为。 - 根据真实字节数计算并保持单调的初始化进度,同时统一字节量和传输速度格式化及多语言展示。 - 稳定初始化详情区域布局,避免网络信息出现或消失时页面跳动。 测试: - 增加 Runtime NDJSON 解析、进度桥接、字节进度计算、网络活动归并、格式化、旧版兼容性及端到端初始化流程的测试覆盖。 <details> <summary>Original summary in English</summary> ## Summary by Sourcery 在初始化界面展示下载源测速和实时传输详情,同时兼容不提供这些信息的旧版 Runtime。 New Features: - 显示 Runtime 初始化期间的下载源测速结果及当前文件的字节进度、速度和来源。 Bug Fixes: - 将仅成功获取首字节的下载源正确视为可用,而非不可用。 Enhancements: - 扩展初始化进度数据在 Runtime、Electron 与前端之间的传递,并在缺少新字段时保持旧版 Runtime 的原有行为。 - 根据真实字节数计算并保持单调的初始化进度,同时统一字节量和传输速度格式化及多语言展示。 - 稳定初始化详情区域布局,避免网络信息出现或消失时页面跳动。 Tests: - 增加 Runtime NDJSON 解析、进度桥接、字节进度计算、网络活动归并、格式化、旧版兼容性及端到端初始化流程的测试覆盖。 </details> </details> </details> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: AoXuan <aoxuan233@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
M14「网络源测速与回环中继」(T14.1
T14.9),契约见C20,协议版本保持 1)。doc/契约补充-v1-增补2.md(C16摘要
Range窗口、3 秒预算、30 分钟缓存),按实测顺序尝试;官方源参与测速、可以排第一;--mirror仍钉最前,--offline不测速。新 stagenetwork.probe。127.0.0.1:<临时端口>起一个纯 HTTP 中继,主项目依赖与 Python 分发包经它下载——逐文件多源回退、≥ 8 MiB 的文件按 2 MiB 分片最多 4 源并行、已知sha256的文件先校验再交给 uv;uv 只见到一个回环源,锁副本改写为中继地址后一次uv sync --frozen,UV_PYTHON_INSTALL_MIRROR指向中继。中继起不来时退回 T13.4 的轮换路径。backend supervise期间中继常驻,作为运行池镜像列表首项下发。python.install/dependencies.sync发锁文件与Content-Length声明的真实current/total/percent;progress追加可选字段item/source/bytesPerSecond(缺失 = 只测首字节的成功探测);result.details追加networkProbe/relay。releases.astral.sh。%APPDATA%\uv\uv.toml此前会让uv lock --check对着别的索引误报LOCKFILE_OUTDATED(UV_NO_SYSTEM_CONFIG只挡系统级),现固定注入UV_NO_CONFIG=1;宿主PYTHON*(四个编码缓冲变量除外)、VIRTUAL_ENV/CONDA_PREFIX、颜色变量与RUST_LOG不再穿到 uv 与受监督后端;HTTP(S)_PROXY原样继承但NO_PROXY必含127.0.0.1,localhost——uv 会把回环中继的请求也送进代理,且NO_PROXY=localhost不豁免127.0.0.1(uv 0.12.3 实测)。验证
gofmt/go vet/go build/go test ./... -count=1/git diff --check全部 exit 0;go test -race ./...exit 0;internal/mirror、internal/relay、internal/protocol-count=100exit 0。bootstrap --version v5.5.0-beta.3三次:34.8 / 60.4 / 24.5 s,全部成功、0 个文件失败;依赖 95 个制品 143 MB 从 2~3 个源分片取回,第二次证明探针读数会失真而中继的逐文件判慢能纠回来(记录在doc/current/M14/设计文档第 9 节)。uv.toml指向腾讯索引时dependencies check报LOCKFILE_OUTDATED,修复后succeeded。uv.download缺细目字段)已在本分支修复。配套
AUTO-MAS 侧 TODO-EL-14(桥接与展示
item/source/bytesPerSecond)在另一个 PR;它依赖本 PR 发版后把res/runtime-version.txt钉到新版本。🤖 Generated with Claude Code