Files
Mujoco_WASM/CHANGELOG.md
T
chenlin 26bb5634bd
web-platform-ci / Standalone decision service (no cloud credentials) (push) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (push) Has been cancelled
web-platform-ci / Playwright E2E (push) Has been cancelled
lekiwi-compatibility / cpu-compatibility (push) Has been cancelled
refactor: release v1.0.5 安全精简与网站发布
2026-09-29 09:55:08 +08:00

450 lines
68 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 更新日志
本项目的重要变更记录在此文件中,版本标签使用 `v主版本.次版本.修订版本` 格式(历史标签使用大写 `V`)。
## [未发布]
## [1.0.5] - 2026-09-29
### 网站发布与安全精简
- 版本号与锁文件根包元数据同步为 `1.0.5`,不升级依赖;包含下述完整安全精简及网站导入选项清理。
- 网站已发布 `20260929T014129Z-v1-0-5`,上一版本 `20260928T035026Z-import-options` 保留为回滚目标;白名单发布包校验、离线构建、运行时契约预检、容器健康检查及 OpenResty 配置校验通过。前后端成对切换,访客会话重建,原服务器密钥 stat 与持久预算数据库 inode 保留。
- 发布前重新通过九项门禁/双构建:前端 156 文件/797 项,后端 166 通过/27 项既有 opt-in 跳过;只更新版本元数据,没有升级依赖。
- 公网非付费验收 14/14 通过(网站/iframe/导入/会话/Python/预设 8 项,内置机器人与双相机 6 项);28 个线上静态文件匹配发布清单,公网 HTML/主 JS 与本地构建逐字节一致。未调用付费模型、未启动真实训练。
- 发布证据:`build/website-deployment/v1.0.5/`;本地门禁:`build/code-simplification/release-v1.0.5/`。
### 代码安全精简(2026-09-28)
#### 最终交付汇总
全部 14 个计划阶段完成;基线为 `7ebe9092ba29a6674d6f5c4153f31214dd6f2319`。以下规模与限制记录截至精简计划验收时(当时未提交、打标签或部署),不含后续版本发布元数据和文档更新;发布结果见本版本条目。
| 宿主文件(`web_platform/src/`) | 基线行数 | 最终行数 | 宿主减少 |
| --- | ---: | ---: | ---: |
| `app/App.tsx` | 3272 | 1217 | 2055 |
| `simulation/SimulationSession.ts` | 1417 | 1210 | 207 |
| `viewer/MuJoCoViewer.ts` | 1391 | 1267 | 124 |
| `training/LocalTrainingPanel.tsx` | 1178 | 807 | 371 |
| **合计** | **7258** | **4501** | **2757** |
- **迁移与新增边界**:30 个新增生产模块,共 4897 行,包含迁移实现、导入、显式类型/端口、Hook 依赖与组合代码,不是净删除量。App 新增 16 个领域/界面 Hook、3 个组合组件和命令组件;项目清单辅助 1 个,Session 类型/采集模块 2 个,Viewer 几何/展示模块 2 个,训练表单/展示模块 5 个。
- **实际清理**:删除 4 个已证实无用声明,相关生产代码净减 23 行;另将 3 个内部辅助函数取消 export。数值算法、公开兼容类型、协议/Golden 和真实扩展入口未删。移除 App 已无用途的全文件依赖检查豁免,没有新增豁免。
- **净变化口径**:计入 Git 跟踪变更和本次未跟踪源码/测试;生产代码净增 **2117 行**(不是净删 2757 行),测试净增 **3096 行**(19 个新测试文件 3093 行,既有 E2E 追加 3 行断言)。文档净增 **137** 行,全仓净增 **5350** 行;忽略目录 `plans/`、`build/` 及生成产物不计入。逐文件数据见 `build/code-simplification/final-size-report.json`。
- **模块边界**:资源/ref 单一所有者;地图交互与创作文件事务分开,避免万能编辑 Hook;没有新全局 store。App 保留显式领域接口和布局,最终 1217 行高于参考目标,未为行数强行压缩或引入共享万能 context。
- **验证**:前端 156 文件/797 项(较基线新增 19 文件/117 项),后端 166 项通过;typecheck、TS/Python lint、双构建、契约哈希及 diff 检查通过。生产运行时依赖图 239 模块/540 条边,无循环。Session 101 / Viewer 131 个非提取成员逐字未变,物理时钟/控制权/几何资源释放保留原实现。
- **浏览器验收**:计划 63 项全部通过:本地 App/布局 41,网站 5,内置机器人生产构建/开发 StrictMode 各 6,语言控制 5。双相机的既有姿态阈值未变,新增切换/隐藏后时间仍为 0.000 s 的断言。另用独立本地浏览器专项确认工具 tab 与侧栏隐藏/显示保留训练表单状态且没有 API/训练连接请求。
- **模式隔离**:网站无训练/外控入口及 tuning HTML/chunk,本地均保留;两者保留 Python、ONNX、语言控制、导入和相机功能。业务 MODE 判断仍只在 `websiteConfig.ts`,Vite 构建判断未改,无新增模式框架。
- **跳过/限制**:训练服务 24 项既有 opt-in 跳过(4 项真实环境/GPU smoke 或 rollout、10 项需显式预训练源、9 项真实单文件探针、1 项 CPU runner);决策服务 3 项原生 Codex opt-in 跳过。未启用上述开关、未访问生产/付费上游、未启动真实训练;不把本次结构验收当成所有物理任务收敛证明。浏览器仅用进程级文件轮询绕过系统 inotify 额度,未修改系统限制;保留既有第三方 externalization/大 chunk 构建警告,最终前端 lint 无警告。
- **证据**:最终门禁 `build/code-simplification/final-verification-verified/`;契约/成员/依赖核验 `final-verification/`;完整浏览器日志与专项截图 `final-browser/`。原始失败与修正后的日志均保留,未放宽门禁、协议或既有数值容差。
#### 分阶段记录
- 完成步骤 13:最终九项门禁/双构建通过,前端 156 文件/797 项,后端 166 通过/27 既有 opt-in 跳过;计划浏览器验收 63 项全部通过(本地 41、网站 5、内置生产/开发各 6、语言 5)。内置相机额外断言切换/隐藏后时间仍为 0.000 s,两套均复验通过;既有相机数值容差未变。12 份契约哈希一致,Session 101 / Viewer 131 个非提取成员逐字未变,239 个生产模块的运行时依赖图无循环。保留构建既有第三方 externalization/大 chunk 警告,未启用真实 GPU/训练/上传/Codex opt-in。证据:`final-verification-verified/`、`final-verification/`、`final-browser/`。
- 完成步骤 12:新增 4 项真实 MODE 配置矩阵测试,验证网站禁用训练/外控但保留 Python、ONNX、语言控制、URDF profile/相机增强且不自动联网。定向 17 项、全前端 156 文件/797 项及全部门禁通过;后端 166 通过/27 既有跳过。产物断言确认本地有 index/tuning HTML 与调参 chunk,网站只有 index 且无调参 chunk;业务 MODE 判断仍仅 `websiteConfig.ts`,配置/Vite 未修改。证据:`mode-matrix/`。
- 完成步骤 11:`WorkbenchTools.tsx` 稳定组合原 lazy 面板及 agent/外控节点,访问历史仍由 App 持有,未引入新 store。定向 45 项、全前端 155 文件/793 项及九项门禁/双构建通过,后端 166 通过/27 既有跳过;真实 WASM 主工作台预设加载、语言目标和连续自由坐标抓放通过(仅回环假上游)。App 当前 1217 行;保留显式共享 ref/领域端口和布局,不为参考行数目标冒险压缩。证据:`app-workbench-tools/`。
- 提取 `useAgentScene.ts` 的预设加载、身份桥接与草稿失效 effect;失效 effect 单独在原位置调用,保持 Viewer effect 次序和取消/确认逻辑。定向 51 项、全前端 155 文件/793 项及全部门禁通过,后端 166 通过/27 既有跳过。现有工具挂载/agent 不随首个 snapshot 重挂载表征亦通过,可作为工具组合提取基线。证据:`app-agent-scene/`。
- agent 提取前补充取消/机器人身份、拒绝工程替换不下载、任务会话身份及配置重置 3 项表征;定向 51 项、全前端 155 文件/793 项及九项门禁/双构建通过,后端 166 通过/27 既有跳过。证据:`app-agent-characterization/`。
- 提取 `usePolicyWorkflow.ts`:ONNX/移动策略、训练场景导出与导航重置桥接;保留双锁、SHA-256/大小校验、会话身份检查、暂停恢复及成功后缓存顺序。定向 38 项、全前端 155 文件/790 项及九项门禁/双构建通过,后端 166 通过/27 既有跳过。证据:`app-policy-workflow/`。
- 策略桥接提取前新增成功后缓存、加载锁/暂停恢复、扩展名/64 MiB 上限 3 项表征。测试使用有效的无部署元数据 ModelProto 字段及假运行时,不修改协议 fixture;定向 36 项、全前端 155 文件/790 项和全部门禁通过,后端 166 通过/27 既有跳过。证据:`app-policy-characterization-verified/`。
- 提取 `usePythonController.ts`:脚本缓存/校验、运行时进度、状态互通及报错上下文不变。定向 36 项、全前端 155 文件/787 项及全部九项门禁/双构建通过,后端 166 通过/27 既有跳过;真实 WASM Python 导入启用、持续步进/重载 2 项通过。证据:`app-python-controller/`。
- Python 桥接提取前补充失败缓存/路径重试/启用移除及缺失路径/扩展名上下文 2 项测试;定向 27 项、全前端 155 文件/787 项及九项门禁/双构建通过,后端 166 通过/27 既有跳过。证据:`app-python-characterization/`。
- 提取 `useSimulationActions.ts`,手动/遥测操作继续委托原 adapter,agent 重置仍按会话身份转交预设加载,不新增时钟。定向 38 项、全前端 155 文件/785 项和九项门禁/双构建通过;后端 166 通过/27 既有跳过。证据:`app-simulation-actions/`。
- 手动/遥测提取前新增 3 项表征:暂停/单步/重置/速度次序、参数拒绝不刷新源码、遥测配置/录制操作;完善测试 Props 与参数后,定向 34 项、全前端 155 文件/785 项及九项门禁/双构建通过,后端 166 通过/27 既有跳过。证据:`app-actions-characterization-verified/`。
- 提取 `useMapAuthoring.ts` 的场景文件创建、地图转换/导出与编辑提交入口;5 个函数经语法树词法叶节点比较,在 ref/action 别名、动态导入路径及格式归一化后与 HEAD 相同。移除未使用的 Viewer 参数;稳定 setter 单独列为 Hook 依赖,消除新增依赖警告,并移除 App 已无用途的整文件 `exhaustive-deps` 豁免。定向 37 项、全前端 155 文件/782 项及九项门禁/双构建通过(前端 lint 无警告);后端 166 项通过/27 项既有跳过;创建拖放、重力承载、只读转换、V3 编辑、首次放弃 5 项真实 WASM 测试通过。App 1826 → 1595 行;证据:`build/code-simplification/app-map-authoring-verified/`。步骤 11 的控制/桥接与工具组合、步骤 12–14 仍未完成。
- 提取 `useMapEditor.ts` 的交互/预览绑定、选择、放置模式、草稿回调及高度查询;四组 effect 保留原次序与身份检查,15 个迁移动作与 HEAD 的参数/函数体在 ref/格式归一化后相同。定向 37 项、全前端 155 文件/782 项及九项门禁/双构建通过;后端 166 项通过/27 项既有跳过;资产创建拖放、属性联动、连续地形拖放、V3 编辑及只读地图转换 5 项真实 WASM 测试通过。App 2018 → 1826 行;证据:`build/code-simplification/app-map-editor/`。创作文件事务另行提取,避免形成万能编辑 Hook。
- 地图编辑交互提取前新增 3 项表征:待绑定资产/选择只转交一次、草稿复制及加载锁保护、视口最新实例变换与卸载解绑。补齐测试中的 ViewerSelection 类型后,定向 28 项、全前端 155 文件/782 项及全部门禁通过;后端 166 项通过/27 项既有跳过。证据:`build/code-simplification/app-map-editor-characterization-verified/`。
- 提取 `useMapScene.ts` 的实例放置、共享预览、提交/放弃事务;复用原草稿/清单领域函数,不向编辑 Hook 反向依赖。18 个迁移函数中 17 个与 HEAD 的参数/函数体在 ref 命名及格式归一化后相同,另一读取函数沿用步骤 9 已验证的清单辅助。定向 36 项、全前端 155 文件/779 项及九项门禁/双构建通过;后端 166 项通过/27 项既有跳过;4 项真实 WASM 地图回滚/编辑测试通过。App 2324 → 2018 行;证据:`build/code-simplification/app-map-scene/`。
- 步骤 11 地图事务提取前新增 5 项 App 表征:首次场景放弃的 provisional 文件清理、失败清单恢复/显式重试、提交期间新草稿及历史保留、未引用 provisional 剔除、原生 URDF 拒绝地图注入。定向 27 项、全前端 155 文件/779 项及九项门禁/双构建通过,后端 166 项通过/27 项既有跳过。证据:`build/code-simplification/app-map-scene-characterization/`。
- 完成步骤 10:提取 `useWorkspaceDrop.ts`,保留手势内同步获取文件句柄、共享导入锁、地图库优先、世界落点和错误清理;新增 6 项嵌套拖放、提示及三类地图库委托测试。定向 29 项、导入器补充定向 16 项、全前端 155 文件/774 项及全部九项门禁/双构建通过;后端 166 项通过/27 项既有跳过,契约哈希和 `git diff --check` 通过。证据:`build/code-simplification/app-workspace-drop/`。App 累计 3272 → 2324 行,四个宿主合计 7258 → 5608 行;这是迁移缩减,不是全仓净删除。步骤 11–14 和最终完整浏览器验收仍未完成,未提交版本。
- 拖放提取前新增 3 项表征:手势内同步扫描/重复锁、扫描失败恢复、地图库优先和世界落点;URDF 回退断言等待实际异步 UI 完成,而不只等待较早的 `loading=false`。定向 14 项、全前端 154 文件/768 项及全部九项门禁/双构建通过;后端 166 项通过/27 项既有跳过。证据:`build/code-simplification/app-drop-characterization-verified/`;原失败日志保留,未放宽门禁或数值容差。
- 提取 `useProjectImport.ts`:文件选择、导入进度、URL 下载/取消、共享锁、工程关闭与资源清理;不新建共享状态容器。定向 38 项、全前端 154 文件/765 项及全部九项门禁/双构建通过,后端 166 项通过/27 项既有跳过;开发态 StrictMode 内置机器人 URL 自动导入/刷新及双相机真实 WASM 验证通过。证据:`build/code-simplification/app-project-import/`。
- 工程导入提取前新增 4 项 App 表征:StrictMode URL 单次下载/手动锁竞争、卸载后迟到下载、下载失败后手动恢复及关闭工程清理。定向 29 项、全前端 154 文件/765 项及全部九项门禁/双构建通过,后端 166 项通过/27 项既有跳过。证据:`build/code-simplification/app-import-characterization/`。
- 提取 `useModelLoading.ts` 的模型替换事务、URDF 确认/跳过、profile/base 回退;ref 单一所有权、锁和 attach/rollback/release 次序不变。新增 4 项取消/外控失败回归,清理迁移后未使用导入;定向 22 项、全前端 154 文件/761 项及全部九项门禁/双构建通过,后端 166 项通过/27 项既有跳过;真实 WASM 源码重载、URDF 增强、失败保留会话另有 3 项通过。证据:`build/code-simplification/app-model-loading-verified/`。
- 原 App 加载事务新增 7 项表征:成功顺序、失败保留入口/暂停态/源码、attach 回滚、视觉警告非致命、加载锁、applied/草稿隔离、URDF 确认回退与跳过。修正测试替身自动 mock 的原型方法覆盖及类型装配后,定向 16 项、全前端 153 文件/757 项和全部九项门禁/双构建通过;后端 166 项通过/27 项既有跳过。证据:`build/code-simplification/app-loading-characterization/`。
- Viewer 设置同步收拢至生命周期模块,按原顺序保留“显示设置 → 场景/agent effect → 相机/主题”两个设置组;不增加时钟。新增次序/吸附回归,定向 10 项、全前端 152 文件/750 项及全部九项门禁/双构建通过,后端 166 项通过/27 项既有跳过。证据:`build/code-simplification/app-viewer-settings/`。
- 提取 `useViewerLifecycle.ts` 的异步初始化/初始设置与资源解绑,保留 active 取消、viewerReady 身份检查、retired adapter 释放/替换顺序和首轮动作闭包;帧/选择回调及后续设置 effect 暂留 App,避免改变业务 effect 顺序。新增 2 项迟到初始化取消/构造失败表征;定向 13 项、全前端 151 文件/749 项及全部门禁/双构建通过;后端 166 项通过、27 项既有跳过。开发态 StrictMode URL 导入/刷新和真实 WASM 双相机位置/朝向验收另有 1 项通过。证据:`build/code-simplification/app-viewer-initialization/`。
- 提取 `useMapWorkspaceState.ts` 的地图状态/ref 与草稿派生视图,保留事务显式同步 ref 的时机,不将 UI setter 自动应用到物理基线。新增 4 项默认值/基线分离/计数/跨实例选择测试;定向 19 项、全前端 151 文件/747 项及全部门禁/双构建通过;后端 166 项通过、27 项既有跳过。真实 WASM 的首次场景放弃、共享草稿/回滚、失败保留会话另有 3 项通过(测试进程使用文件轮询)。证据:`build/code-simplification/app-map-state/`。
- 阶段 2.5 补充真实 WASM 浏览器验收:平台骨架/单模型、源码重载、未保存确认、URDF 驱动器/摄像头及无效模型诊断共 5 项通过。首次因系统 inotify 监听额度 `ENOSPC` 无法启动;仅为测试进程设置 `CHOKIDAR_USEPOLLING=1 CHOKIDAR_INTERVAL=1000` 后成功,未改系统参数或测试标准。证据:`build/code-simplification/app-low-risk-browser-polling/`;原始环境失败日志保留。
- 提取 `useProjectSource.ts`,保留 profile/缓存保存/通知/加载顺序、URDF 与 MJCF/ZIP 导出和不同错误上下文;共享清单 ref 不另建副本。新增 3 项回归;按 lint 提示显式命名 `manifestRef`,无新增规则豁免。阶段 2.5 完成,`App.tsx` 暂由 3272 降至 2946 行;定向 17 项、全前端 150 文件/743 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/app-project-source-verified/`。
- 提取 `project/workspaceManifest.ts` 的缓存路径、URDF link 名称、provisional 文件剔除与地图 authoring 读取,沿用现有地图解析器、不缓存可变文档。新增 4 项回归;定向 18 项、全前端 149 文件/740 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-manifest-helpers/`。
- 提取 `WorkbenchDialogs.tsx`,仅组合既有根级弹窗及命令面板;源码编辑器继续 lazy,URDF 按路径重置,入口选择仍留在原视口内。复用原组件 Props,未新建全局状态;定向 19 项、全前端 148 文件/736 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-dialogs/`。
- 提取 `WorkspaceNotices.tsx` 组合现有错误恢复/Toast,保留错误优先级、按诊断时间重置展开,以及“仅携带路径的模型编译错误可重试”。新增 2 项回归;定向 13 项、全前端 148 文件/736 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-notices/`。
- 提取 `useWorkbenchFeedback.ts`,编译/导入/普通通知共享一个稳定发布入口,消除重复 ID、20 条封顶与 Toast 插入;类别、文本、时间及诊断构造不变。新增 3 项通知/诊断测试;定向 14 项、全前端 147 文件/734 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-feedback/`。
- 将命令目录提取至 `workbenchCommands.tsx`,以无状态 `WorkbenchCommandPalette` 组合原面板;命令 ID/标签/禁用规则不变。最初纯工厂调用触发 React refs/purity 检查,改用明确组件 Props 边界,不增加 lint 豁免;新增 3 项目录/状态/回调测试,证明渲染不执行动作。定向 14 项、全前端 146 文件/731 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-commands-verified/`。
- 提取 `useWorkbenchChrome.ts` 的界面状态、全屏与布局动作,组合已有主题/侧栏 Hook;显示偏好持久化仍在原 Viewer 同步 effect,不改变物理资源所有权。新增 3 项布局/工具/全屏清理测试;定向 17 项、全前端 145 文件/728 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-chrome/`。
- 提取 `useWorkbenchShortcuts.ts`,复用 `keyboard.ts`;不改变逐次渲染监听、大小写、repeat、输入/模态规则。新增 3 项与现有地图 capture 快捷键的组合测试,确认 R 缩放不触发物理重置、动作更新和卸载清理。定向 21 项、全前端 144 文件/725 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-shortcuts/`。
- App 原实现新增 7 项编排表征:StrictMode 有效 Viewer/卸载、快捷键新闭包与输入/模态优先级、显示偏好损坏回退、工具/agent 挂载稳定及禁止自动网络请求。修正测试替身的缺失方法,并改用自动 mock 避开 Vitest 手动 factory 的并发 import 限制;未修改 App 实现,初次失败日志保留。定向 7 项、全前端 143 文件/722 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/app-characterization-final/`。
- 提取 `meshPresentation.ts` 的矩阵、材质与高亮更新,保留碰撞颜色/深度/透明规则、粗糙度及关节高亮优先级。阶段 2.4 完成:`MuJoCoViewer.ts` 1391 → 1267 行;AST 复核 131 个非提取成员与 HEAD 原文一致,缓存/释放、渲染调度、DPR、阴影与传感器相机不变。定向 12 项、全前端 142 文件/715 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/viewer-mesh-presentation/`。
- 提取 `geometryFactory.ts`,复用现有 heightfield/mesh-id helper,保留胶囊算法、细分与 typed-array 批量复制;几何/纹理缓存和释放继续归 Viewer 所有。定向 10 项、全前端 142 文件/715 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/viewer-geometry-factory/`。
- Viewer 提取前新增 7 项表征,锁定 primitive/胶囊细分、mesh/heightfield 数组、矩阵排列、凸包 dataid、碰撞高亮及共享/动态资源释放。定向 12 项、全前端 142 文件/715 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/viewer-mesh-characterization/`。
- Session 快照 actuator/joint/body 只读采集提取至 `snapshotReaders.ts`,保留数值表达式、数组顺序、单位、默认名和句柄 finally 清理。阶段 2.3 完成:`SimulationSession.ts` 1417 → 1210 行;AST 逐方法复核确认另外 69 个方法/构造器/getter 与 HEAD 原文一致。定向 22 项、全前端 141 文件/708 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/simulation-snapshot-readers/`。
- 在原 `SimulationSession.snapshot()` 上新增 7 项表征,覆盖四种 actuator 类型与阈值、多通道、限位显示、控制权只读、数组复制、不步进/不写物理数组以及嵌套异常释放句柄。定向 18 项、全前端 141 文件/708 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/simulation-snapshot-characterization/`。
- 将 Session 公共类型原样迁移至 `simulationTypes.ts`,通过原模块 type re-export 保持所有既有导入路径;关节限位内部类型命名复用,未改任何仿真方法。定向 22 项、全前端 140 文件/701 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/simulation-types/`。
- 训练任务默认值集中至 `trainingForm.ts`,新增 3 项 Go2/LeKiwi 默认参数回归,保留任务切换写入次序。阶段 2.2 完成:`LocalTrainingPanel.tsx` 从 1178 行降至 807 行(迁移/拆分 371 行,非净删除);5 个辅助/展示模块共 619 行,连接 epoch、1500ms 轮询和协议生命周期仍在原面板。定向 33 项、全前端 140 文件/701 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/training-task-defaults/`。
- 提取 `TrainingJobSection.tsx`:作业状态、日志、评估和成果展示与父级异步操作分离,继续训练/新建的状态写入仍由原面板持有。新增 3 项操作边界测试;定向 24 项、全前端 140 文件/698 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/training-job-section/`。
- 提取 `TrainingTaskFields.tsx` 的受控地形/传感器与移动任务配置区,沿用已有训练类型和父组件状态,保留折叠后输入、默认范围与任务切换。定向 21 项、全前端 139 文件/695 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/training-task-fields/`。
- 原样提取训练 `Field/NumberField` 至 `TrainingFields.tsx`,保留输入 Number 转换、范围/步长、标签与 Tooltip。定向 21 项、全前端 139 文件/695 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/training-fields/`。
- 提取 `trainingForm.ts` 的 GPU 解析、参数校验和请求构造,保留可选字段、校验顺序、移动任务 W&B/sourceJobId 行为及场景编译/上传顺序。新增 9 项纯函数测试;定向 30 项、全前端 139 文件/695 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/training-form/`。
- 提取训练展示辅助至 `trainingPresentation.ts`,原样保留活动状态、作业中文标签及地形/参数标签。定向 21 项、全前端 138 文件/686 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/training-presentation/`。
- 训练面板拆分前新增 6 项请求表征,锁定完整 Flat 请求、CPU 空 GPU 列表、GPU 分隔/重复编号及非法输入不提交行为;原实现未改。修正新测试的 Testing Library 选项类型后,定向 21 项、全前端 138 文件/686 项和全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过。证据:`build/code-simplification/training-characterization-verified/`(首次失败日志另保留)。
- 原子收窄 `controller/PythonControllerRuntime.ts` 的 `getPythonRuntime` 导出面,保留 Pyodide 初始化与控制调度。定向 13 项、前端 680 项及全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。阶段 2.1 六个文件全部独立验收,生产代码净减 23 行。证据:`build/code-simplification/cleanup-python-loader-export/`。
- 原子收窄 `simulation/PhysicsAdapter.ts` 的 `getMujocoModule` 导出面,WASM 初始化缓存、失败重试及加载事务不变。定向 8 项、前端 680 项及全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/cleanup-mujoco-loader-export/`。
- 原子收窄 `project/cachedFiles.ts` 的 `isEditableSource` 导出面,保留其文件内调用和实现。定向 6 项、前端 680 项及全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/cleanup-cached-files-export/`。
- 原子清理 `tuning/domain.ts`:删除无引用的 `latestCompletedTrial` 及专属类型导入,奖励参数、目标权重与状态目录不变。定向 6 项、前端 680 项及全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/cleanup-tuning-domain/`。
- 原子清理 `tuning/ScalarRingBuffer.ts`:移除无调用的 `snapshotSeries`、专属 `BufferedMetricSeries` 及多余类型导入,不改环形缓冲实现。定向 6 项、前端 680 项及全部前后端门禁/双构建通过;后端 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/cleanup-scalar-ring-buffer/`。
- 原子清理 `app/editorSelection.ts`:删除无引用的 `isMapEditorSelection`,保留全部选择类型。定向 8 项、前端 680 项及全部前后端门禁/双构建通过;后端仍为 166 项通过、27 项既有跳过,契约哈希不变。证据:`build/code-simplification/cleanup-editor-selection/`。
- 完成四个核心大文件的只读审查与分阶段计划审批。重构前工作区干净,12 个契约文件与 HEAD 完全一致;未修改物理算法、控制频率、Schema 或 Golden。
- 原始基线全部通过:typecheck、前端 lint、137 文件/680 项前端单测、本地/网站双构建、Python lint;控制桥接 16 项、决策服务 48 项、训练服务 102 项通过,另有决策服务 3 项及训练服务 24 项既有可选/环境测试跳过。构建第三方 externalization/大型 chunk 和 Python 弃用警告保留。日志与源码/契约 SHA-256 位于 `build/code-simplification/baseline-20260928T055602Z/`;未部署或调用付费模型。
### 网站导入选项清理(2026-09-28)
- 网站版 URDF/ZIP 导入弹窗移除 LeKiwi v1、LeKiwi Bundle 的“移动操作训练场景”选项及训练提示;不沿用已移除的初始训练选择。保留通用转换、普通 LeKiwi profile、语言控制与本地版训练功能。
- 新增网站/本地边界单测及 URDF/ZIP 真实 WASM 导入回归。TypeScript、定向 ESLint/格式检查、137 文件/680 项前端单测、48 项后端测试(另有 3 项既有可选门禁跳过)、网站/本地双构建和网站假上游回归 5/5 通过。
- 已发布网站 `20260928T035026Z-import-options`,回滚版本为 `20260924T081555Z-language-render-fix`;公网非付费检查 8/8 通过,HTML/主 JS 与本次构建逐字节一致。沿用既有后端与代理配置,密钥文件、持久预算目录及 iframe 白名单不变;本次无付费模型调用。发布证据位于 `build/website-deployment/import-options-20260928/`。
## [1.0.3] - 2026-09-24
### 预设场景清晰度与语言搬运监督修复
- 将已上线的预设渲染与语言搬运修复归档为 `v1.0.3`,同步 npm 包与锁文件版本;提交仅包含源码、测试及文档,不纳入密钥、运行预算、构建产物和测试日志。
- 提交前复验:TypeScript、137 文件/675 项前端单测、48 项后端测试(另有 3 项既有可选门禁跳过)、定向 TS/Python lint 和变更文件格式检查通过;本次归档不重复部署或付费推理。
- 主视口和腕部/前置相机采用 2048² 场景适配柔和阴影、纹理 mipmap/各向异性过滤及有上限的 GPU 超采样;修复 DPR 同时放大 CSS 画布导致裁切、抵消子视口清晰度的问题。保留全部 CAD 网格、物理参数和软件 WebGL 的控制延迟预算。
- Jev 请求补充下一技能含义、阶段前置条件、相邻技能完成上下文和等待期间物理冻结语义,避免将抓取前空爪、抬升验证前未 secure、放置后恢复支撑误当故障。保留官方 choice 与 deny/uncertain/stop,不重排概率、不强行放行。Noul/Choice 停止显示中文原因兜底,终态保留被否决的决策以便诊断。
- 新增默认预设真实 API 专项入口(显式授权、最多 2 次 LLM/14 次 Jev、无自动重试)、高 DPI 双相机及监督语义回归。675 项前端单测通过;硬件浏览器真实 DeepSeek+Jev 完成默认 B 区搬运 0.728882 m。中途模型误停、上游网络中断及软件渲染并行测试超时如实保留,非稳定性/多种子证明;详见 `docs/website-language-render-fix.md`。
- 用户授权后同步发布网站前后端为 `20260924T081555Z-language-render-fix`,上一版 `20260924T065821Z-language-v2` 保留。发布包/线上静态资源及运行时 Jev 源码哈希一致、容器健康;公网非付费检查 6/6、RTX 高 DPI 双相机验证通过。密钥、持久预算和 iframe 配置保持不变;本次发布验证没有新增付费推理,随后按用户要求归档为 Git 版本 `v1.0.3`。
## [1.0.2] - 2026-09-24
### LeKiwi 语言控制、内置机器人与网站嵌入
- 将 v1.0.1 之后的网站托管模型、自然语言动作/搬运、内置 LeKiwi 与双摄像头、部署与指定域名 iframe 嵌入变更归档为 `v1.0.2`,同步 npm 包与锁文件版本。正式内置机器人保留来源与许可证,不纳入密钥、个人模型、构建产物或测试日志;真实 v2 云模型抓放仍待单独授权验收。
- 本次提交前复验:TypeScript 检查、17 文件/120 项定向前端测试通过;决策服务 44 项通过、3 项可选门禁跳过。已通过的公网应用及 iframe 检查各 3/3,本次不重复付费调用或部署。提交清单检查排除运行凭据与产物,内置 ZIP 的 SHA-256/许可证核验通过。
- 网站 iframe 来源白名单新增 `https://cadworld.robotquan.com`:移除冲突的 `X-Frame-Options: DENY`,CSP `frame-ancestors` 仅允许本站及该来源,不使用通配符;保持既有 Strict/HttpOnly/Secure Cookie、Origin/CSRF 校验和 CORS 限制。已热更新线上配置,后端未重启;公网 iframe 正向/拒绝与会话验证 3/3 通过,不调用付费推理。同事实际页面尚未接入验收,示例与配置备份见 `docs/website-embedding.md`。
- 网站已发布 `20260924T065821Z-language-v2`,前后端同步上线,回滚版本为 `20260924T052730Z-dual-camera`。打包白名单与 Docker 镜像补齐 v2 任务/场景契约;发布脚本新增无网络、无密钥挂载的导入/目标解析预检,失败不切换线上。公网非付费检查 3/3 通过:预设加载、文字指令/本地停止、双相机、Python 与会话/配置保护正常;线上 HTML 哈希匹配构建产物。既有服务器密钥/持久预算身份不变,验证未发起付费模型调用;真实 v2 推理待验收。详见 `docs/lekiwi-language-v2-release.md`。
- LeKiwi 语言控制 v2:本地/网站统一极简文字面板,支持显式预设加载、A/B 命名目标及支撑区域内的 XY/XYZ 世界坐标。执行不重置方块、不移动台面;保留移动/转向、地图/RL 和双相机,模型配置改由同源后端托管。
- 控制分层为 LLM 意图/计划 → Jev Choice/Noul/Score → 参数化 IK/接近/抓放执行 → 原 MuJoCo 伺服。增加跨阶段统一任务预算、严格版本/目标/单位验证、支撑面绑定、净空与接触保护;评分仅供诊断,物理成功与硬安全不可由模型覆盖。保留旧 v1 基线与 API 夹具。
- 精简验收:主工作台真实 WASM+假 HTTP 上游连续搬到 B 区及自由坐标成功,有效搬运 0.728882/0.241201 m、最终误差 7.54/8.92 mm;scratch 标定、真实夹爪锁开失败、旧 v1 种子0、网站移动/转向/停止通过。实现阶段定向测试及双构建通过,未跑全仓/训练、未调用真实模型;随后网站已部署(见上述发布记录);详见 `docs/lekiwi-agent.md`。修复空工作台加载机器人时控制面板因 DOM 分支变化卸载、取消正在进行的预设加载的问题。
- 补齐 LeKiwi 双摄像头:前置固连 `Camera-Model-v3`,腕部固连 `Camera-Model-v3-1`,分别依据源 URDF/STL 设定独立光心与旋转。左下角支持前置/腕部视角切换,默认前置;仅切换显示,不重载模型、不推进物理、不改变控制权。多相机转换幂等、仅添加一套 IMU;补充双镜头源坐标、显示切换、真实 WASM 导出与腕部/底盘随动回归。发布 `20260924T052730Z-dual-camera`,655 项单测、公网双视角 6/6、原非付费回归 2/2 和独立真实 WASM 随动验证 1/1 通过,未调用付费模型。
- 修复 URL 自动导入 LeKiwi 的摄像头误挂支架、偏移与侧向朝向:改为固定在 `Camera-Model-v3` 前置镜头光心,依据原 URDF/STL 变换设置 wxyz,保留朝前/向上 10° 的 CAD 安装姿态并避免自身遮挡;不改原 ZIP 或动力学。通用转换增加归一化四元数支持,显式挂载点不存在时拒绝静默换点。新增源 URDF 光心/光轴、非法四元数与真实 WASM 导出相机世界位姿回归。发布 `20260924T050135Z-camera-fix`,648 项单测、公网自动导入 6/6 与原非付费回归 2/2 通过,未调用付费模型。
- 新增 URL 参数 `robot=lekiwi-v1`:从服务器下载内置 LeKiwi ZIP,校验后自动选择 URDF/profile 并导入真实 WASM,跳过手动上传与配置弹窗,默认暂停且不触发付费模型。内置包原样保留许可/来源,Vite 输出带内容哈希的静态资产;无参数不下载,拒绝任意地址/未知/重复参数,下载失败可恢复手动导入。新增 15 项单测和 6 项浏览器回归,覆盖开发态 StrictMode、刷新与生产构建;发布为 `20260924T043358Z-builtin-robot`,640 项前端单测、公网自动导入 6/6 及原非付费回归 2/2 通过,公网 ZIP 哈希与原包一致。接入文档与验收记录见 `docs/builtin-robots.md`。
- 按用户最新要求改为服务器内置 DeepSeek `deepseek-flash`+OpenRouter Jev `typesafe/jev-1.13`,网页移除密钥/模型/订阅配置。仅两项授权变量经 SSH 输入配置到服务器 0400 只读文件,不随静态站点/镜像/Git 发布;增加跨会话、跨容器保留的 60 次/小时、600 次/24h 全站调用限额及配置锁定。
- 网站新增自然语言前进/后退(0.01–1 m)、左/右转(1–180°),方向不明先询问。DeepSeek 结构化理解+Jev 意图检查;当前位姿闭环驱动、物理误差验收,无重载/瞬移或独立时钟;停止/隐藏/迟到响应/控制权与碰撞、姿态、时限保护保留。本地模式不变。
- 发布 `20260924T035108Z-hosted`:625 前端/43 后端测试及本地工作台回归通过,假上游+真实 WASM 移动/转向/中断/抓放通过,公网非付费 2/2。真实模型前进约 0.496631 m、左转约 89.828887° 成功;附带抓放在松开后被 Jev 选择 stop,未完整通过,未重试或跳过安全判定。本轮实际 4 次 DeepSeek+13 次 Jev,测试会话已销毁;详见 `docs/website-hosted-control-2026-09-24.md`。以下记录为此前 BYOK 阶段历史,不代表当前界面。
- 经用户授权完成一次公网 DeepSeek `deepseek-flash`+OpenRouter Jev `typesafe/jev-1.13` 真实物理抓放:1 次规划/11 次判定、47.220 s 仿真、0.5937274 m 搬运,成功后销毁测试会话;无自动重试/模型切换,未将 Jev 密钥复用于其他规划模型。Jev 报告费用 $0.000642894,DeepSeek 未报告费用,不能视为零。
- 修正网站任务输入的能力误导:mock 指令不可编辑,明确目前只有固定单方块抓放;自定义中文任务阻止启动并可恢复标准指令,不再无视编辑继续旧任务。这是防误执行保护,不是自由语言任务功能;原本地模式不改。订阅设备码失败提示移至登录按钮旁,说明未取得验证链接及需要手动打开官方页面;服务器官方链路仍受限,不宣称恢复订阅。
- 增加显式授权、无凭据落盘/trace 的公网单回合测试与前端防误执行/设备码展示回归;615 项单元测试、双构建、网站假上游 2/2 通过。提示修补发布为 `20260924T023534Z-web`,原 `v1.0.1` Git 标签不变;详见 `docs/website-acceptance-2026-09-24.md`。
## [1.0.1] - 2026-09-24
### CADWorld 网站发布与 LeKiwi 智能抓放集成
- 将当前网站及其依赖的 LeKiwi/移动操作源码归档为 `v1.0.1`,同步 npm 包与锁文件版本;不包含密钥、个人模型、构建产物或测试日志。611 项前端单元测试、39 项决策服务测试和公网浏览器 3/3 已通过;公网真实付费 API 验收仍等待用户自带密钥,不将本地既有真实调用或公网 mock 验收等同于本次云端真实 API 验收。
- CADWorld 网站已部署至 `https://cadworld-sim.robotquan.com`,版本 `20260923T130923Z-web`;验证 HTTPS 签发/续期 dry-run、内部端口隔离、前后端成对回滚与后台异常自动重启。公网浏览器 3/3 通过,真实 WASM mock 抓放搬运 0.5937274 m;订阅入口实测明确返回 `codex_rpc_failed` 并清理,未登录/推理。真实 API 调用等待用户自带密钥,详见 `docs/website-release-2026-09-23.md`。
- 新增 CADWorld website 构建与同源公开 BYOK 网关:匿名安全 Cookie/CSRF、逐会话密钥/配置/任务/取消/预算隔离、TTL 清理、IP/全局并发限制,保留本机 Bearer 模式;公网仅允许固定 DeepSeek/OpenRouter 上游,不接受任意 URL。
- 网站模型设置精简为 LLM API_KEY/模型选择与独立 Jev OpenRouter API_KEY,原子保存不推理;保留固定 Codex 0.147.0 官方设备码订阅登录,账号进程隔离、失败不切换付费 API。训练/调参/外控仅在 website 模式隐藏,原本地功能不删除。
- 增加生产构建下的真实后端/假 HTTP 上游、双浏览器会话隔离与真实 WASM mock 抓放验收;增加锁版本离线镜像、最小权限 Compose、1Panel/OpenResty HTTPS、证书自动续期与成对发布/回滚配置。真实云端 API 和订阅推理需要用户另行提供凭据/交互,不冒充已验收。
- 高面数二进制 STL 通过保留全部顶点精度/绕序/三角形的 OBJ 兼容层导入,保留原始资产哈希,支持派生资源缓存、取消、预算与完整工程 ZIP 导出。A / `lekiwi-v1` 三个轮各恢复 314,244 面 CAD 视觉,碰撞配方/惯性不变;旧缺轮 MJCF 需重转。
- 增加真实 WASM 完整轮、ZIP 重导、重复释放、原生训练快照与性能验收。软件 WebGL 高面数外控视口降为低频刷新以保留原 500 ms 安全看门狗,不减面、不修改物理时钟;性能与失败边界见 `docs/lekiwi-mesh-compatibility.md`。
- 增加 A 单方块双支撑台的确定性抓放基线、scratch-data 五轴阻尼 IK 和独立接触/运输/放置评估。5 个冻结 ±2 mm 小扰动种子真实 WASM 5/5 通过,持物平移约 0.594 m;不代表任意场景泛化、RL 收敛或模型闭环。
- 新增版本化智能任务契约、取消/超时/迟到响应隔离及 `agent` 独占控制票据。只有当前物理回调可写执行器,等待模型不补积压物理步;agent 所有者下同一基线通过。
- 新增独立回环 `decision_server/`:共享契约 Python 校验、内存密钥、Host/Origin/token 防护、取消/预算、OpenAI Responses/兼容 Chat 与 TypeSafe/OpenRouter Jev 专用协议,无静默降级。按用户授权显式读取 `.env` 两项变量;OpenRouter Jev 与 DeepSeek `deepseek-flash` 的合成状态真实单请求通过,不代表物理闭环已完成。
- 增加 LLM—Jev—本地技能的异步邮箱调度、逐技能物理门禁、任务暂停/单技能步进和有界恢复/重规划;真实 API 不降级 mock,模型等待不推进物理,安全故障立即停止。mock 决策 + 真实 WASM 闭环 5/5 通过,旧基线 6 项也通过;每回合 1 次规划/11 次判定、持物搬运约 0.594 m。步骤 8 时 Vitest 599 项通过;后续真实双 API 回合见下文,订阅回合仍需用户登录。
- 新增固定 Codex 0.147.0 官方 stdio 登录/状态/模型/结构化规划/中断,仓库外独立 HOME 与仅会话认证,匹配版本的无工具目录及每模型离线工具注入门禁。5 个当前可见模型门禁和真实 stdio 假推理通过;真实订阅登录/推理仍待用户交互验收。新增独立无云凭据 CI、服务/原生门禁测试及第三方许可。
- 主工作台新增 LeKiwi 智能抓放、模型连接/官方订阅管理、任务暂停/单技能步进、受限目标编辑与证据导出;A 文件导入→mock 完整物理成功→导出/重置的真实主视口用例通过。软件渲染仅为 agent 降低完整 CAD 绘制频率,仍复用唯一 advance。地图草稿与后台训练保留,切回 RL 重建其原场景。独立页 HTML、两个启动组件及 Vite 入口已移除,构建仅保留主工作台和 tuning;两模型物理/ONNX 夹具保留。步骤 9 时前端 605 项测试通过。
- 用户确认以已通过的 DeepSeek + Jev 真实闭环完成最终验收,计划标记 10/10。ChatGPT 隔离官方登录已确认,但订阅推理用例在模型调用前因 UI 选择器未匹配中止;补充下拉框可访问名称及显式 opt-in 用例。用户随后要求结束验收,未再运行订阅推理,LLM/Jev 请求均为 0,临时会话已关闭;不将登录成功称为订阅抓放成功。
- 最终验收新增真实双 API 主视口用例(显式 opt-in、最多 1 次 LLM/12 次 Jev),DeepSeek `deepseek-flash` + OpenRouter Jev 两轮均成功:每轮 1 次规划/11 次判定、47.220 s 仿真、0.593727 m 有效搬运、7.689 mm 放置误差。修复浏览器原生 fetch receiver,未保存的配置草稿阻止沿用旧付费连接;不把未报告费用记为零。ChatGPT 订阅仍待用户交互登录,不宣称已通过。
- 补充真实 WASM 持续空抓/一次空抓后成功恢复/对齐失败/滑落/锁肩/超速/导航超时/真实 IK 不可达及两目标角点,10/10 通过。增加臂卡住实测保护,恢复目标从实测位置初始化;5 个生命周期迟到响应不写入/不步进,8 次模型与 IK 循环共 48 个原生句柄确认释放,heap 后 6 次稳定在 1567.75 MiB。
- 最终 Vitest 129 文件/608 项、typecheck、TS/Python lint、build 通过;模型服务 28 项含单独启用的原生离线门禁通过。旧工作台/地图/调参 92 通过、6 可选跳过;LeKiwi 20/20、两模型物理/ORT 2/2;agent→RL 场景隔离、一键训练/策略导入与继续训练通过。LeRobot 60 s/1800 动作、RTT P95 27.593 ms、零超时/丢请求。全仓格式检查仅余四个既有文件,不覆盖原有工作;详见 `docs/lekiwi-agent.md`。
- 移动操作升级 `mobile-manipulator-v2`:92 维观测包含上次动作与积分目标,臂目标限速 0.5 rad/s、物理子步实际速度保护;废除全行程位置跳变,拒绝旧68维策略。Bundle 修复关节级 ±1 N·m 限力覆盖舵机限力造成的姿态下垂/碰撞,Go2 不变。
- 参考 IsaacLab Franka reach 的动作缩放、动作变化率/关节速度惩罚与课程结构,新增底盘接近→末端接近→抓取放置阶段。支持可关闭的导航示教初始化、保守 PPO 微调、种子随机化、服务内 checkpoint 接续和独立评估;未达到至少10回合/80%成功率/零安全终止,禁止进入下一阶段。新增共享控制 golden、参数/接续门槛与真实 CPU/ONNX 回归。
- 更新 `docs/mobile-training-curriculum.md` 记录实测导航结果和限制;不把短程导出视为抓取收敛,不修改或启动外部 IsaacLab 环境。
- LeKiwi v1/Bundle 训练统一至主工作台「控制台 → 强化学习任务」:自动同步场景、启动后台 SB3 PPO、轮询日志/Loss/奖励、停止任务、自动导出 ONNX 与部署元数据并一键导入当前仿真。移除独立实验页训练包下载入口,新增变体选择与任务专属超参,保留 Go2 流程。
- 增加认证有界场景快照 API、机器人/路径/资产校验、按任务依赖就绪检查及 `--mobile-python` 隔离解释器;避免 MuJoCo 3.11 移动任务升级现有 Go2 环境。主会话推断校验权重/配置/场景 SHA-256、固定68→12张量,控制权切换/暂停/重载使迟到结果失效。
- 补充前后端任务创建、参数、日志、取消、成果物与策略生命周期回归;两种真实模型完成主控制台短程 PPO→ONNX→浏览器推断端到端冒烟。短训练验证链路,不代表抓取收敛、实机部署或跨形态泛化。
- 新增 `/mobile.html` 移动操作 RL 实验页和三层模块:复用 ZIP/MEMFS/查看器,分别适配原始 LeKiwi 与本次实测的 Link1–Link4 bundle;固定 68 维观测、12 维动作、阶段奖励/成功判据和 50 Hz 控制,支持位置/速度伺服、遥操/ONNX 切换、鼠标拖动物体与目标、奖励和性能显示。
- 新增浏览器训练场景导出、对称 Python Gymnasium 环境、可选 PPO 入口及 PyTorch→ONNX 导出/ORT 数值校验;跨语言 golden、真实 WASM/原生 MuJoCo 短轨迹、鼠标拖动、候选回滚和 ONNX 过期结果回归。没有预训练抓取策略、实机标定或跨形态泛化承诺。
- 移动操作管理器采用单步进所有者、串行事务与双槽 VFS,避免不断变化的资源路径扩张原生网格缓存;先释放查看器资源再删除旧 model/data,回滚时刷新因共享 WASM heap 增长失效的 views。新增 `docs/mobile-manipulator.md` 的接口、资源/碰撞近似与性能验证边界说明。
- LeKiwi profile 新增保守的 URDF 语义等价校验:允许显示名、换色、XML 重排及等价数值/RPY,不再只凭文件哈希拒绝非机械变体;保留完整运动链/物理属性检查,并校验全部 45 个源网格。结构变化报告具体缺失/新增关节与属性,新增实际输入 SHA-256 溯源及真实 WASM 控制/导出重载回归。
- 通用导入修复重新打包的 ROS URI 和 `meshes/package://` 错误前缀,保留工程内相对路径并拒绝歧义;profile 预检查失败不再创建未释放的临时 MEMFS 工作区。
- 新增 `docs/lekiwi-urdf-compatibility.md`:记录 `New_urdf` 两份 ZIP 的实际结构、来源哈希和控制适配边界。两包由旧五臂轴加夹爪变为七个新活动轴,不能复用旧九路控制/碰撞;修复资源引用后仍受 314,244 面轮 STL 超过 MuJoCo 200,000 面上限约束,不宣称已完成新机构仿真或 LeRobot 适配。
## [0.10.1] - 2026-09-20
### 初步集成 LeKiwi,优化碰撞模型
- LeKiwi 碰撞配方升级到 revision 4:新增隔离环境的离线 CoACD 全臂“从视觉生成碰撞体”管线,校验固定 URDF/STL 来源、版本/参数缓存和配方指纹;18 个视觉网格(含焊接附件)的 538 个分解凸包经配合区分割得到 1,220 个零附加质量碰撞体,替代旧胶囊和 revision 2/3 手工分段。旧 MJCF 必须从原始 URDF 重新转换,参考仓库及训练/LeRobot 环境不改。
- 移除整对相邻连杆排除,以关节局部装配几何分割、有限配合例外和保守整周包络筛选启用 5,581 对结构接触;修复 Mirror/Square 穿入,避免跨轴承区域凸包误锁肩旋。采用 1 ms 物理步长,保持协议、关节范围、单写入者与 500 ms 看门狗;新增 108 次原 CAD 覆盖探针、六关节双向扫掠、实际接触/反向脱离和性能回归。完整几何有额外开销,不承诺任意穿透初态、高速运动或硬实时;已知引擎诊断限制见碰撞数据说明。
- 机器人 profile 的关节角改为只读,底层拒绝直接 qpos 位姿写入、单独重置关节及忽略限位,禁用关节拖动入口,避免网页姿态编辑绕过物理;手动执行器目标及统一外控仍通过物理积分运动,普通模型的姿态编辑不变。夹爪间隙验收增加独立三角面距离 oracle,不依赖异常零距离查询或放宽断言。
- 修正夹爪开度方向与闭合限位,补齐指尖/指面接触并支持碰撞几何显示;保留早期 revision 2/3 手工分段的历史重建工具,当前运行时统一使用 revision 4,旧 MJCF 必须从原始 URDF 重新转换。
- LeKiwi 终端遥操作新增五个臂关节与夹爪正反点动、可配置速度和空格停止点动;同一30Hz循环合成底盘/臂动作,从实测初始姿态与限幅确认目标累加,保留超时撤权;补充按键表、leader接入边界、单测和真实PTY/浏览器物理回归。
- 修复 LeKiwi/通用桥接将暂停超过500ms误报为观测过期:优先提示播放并重新授权,底层禁止暂停时授权且不切换控制权;保留运行中的500ms安全看门狗,补充回归与键盘演示排障说明。
- 新增通用机器人 V1 契约、共享 TS/Python fixtures、模型地址绑定与单写入者仲裁;保留现有 Python、Go2 ONNX 和训练接口。
- 新增显式 LeKiwi v1:可重建固定来源资产、简化被动滚子/碰撞与九路伺服,真实 WASM 验证全向运动、臂/夹爪和障碍阻挡;不是实机标定。
- 新增独立回环控制桥、通用同步 Python SDK 和实际 LeRobot 0.6.1 插件;CPU 依赖隔离在 build/venvs/lerobot,不改训练环境或上游源码。
- 控制台集成 profile 校验、连接/token、明确授权、状态/新鲜度与安全停止;控制凭据仅在页面内存。覆盖 lease/epoch、确认目标与实测状态区分、重载/回滚、过期消息、隐藏/冻结和旧控制回调隔离。
- 外控使用独立固定步长调度,软件渲染时关闭阴影并限制3D绘制为5FPS,为30Hz通信保留主线程时间;非硬实时、非锁步。修复跨 reset 的观测序号判断及冻结后迟到动作续租问题。
- 增加普通桥接 CI 与独立固定 CPU LeKiwi 兼容任务、完整工作台60秒真实控制证据、部署/安全/能力矩阵和许可证记录;相机、LeRobot 数据集和实际 RL 训练仍不支持。
## [0.9.5] - 2026-09-09
- 修复外力拖动箭头起点停留在初始位置:保存拾取点的 body 局部坐标,每帧随部件平移和旋转更新,即使鼠标静止也持续跟随;保持现有外力方向/大小控制,补充位姿跟随与释放清理测试。
- 小坐标轴拖动增加与主视口相同参数的阻尼惯性,松手后逐帧减速且保持总旋转幅度;新操作、手势取消及资源清理可终止惯性,补充衰减与中断测试。
- 坐标轴拖动灵敏度对齐主视口高度与旋转速度;点击轴向采用约 300ms 平滑过渡,支持鼠标操作中断,补充幅度与过渡回归测试。
- 修复右下角 XYZ 方向指示器无法交互:支持左键拖动旋转视角、点击轴字母切换对应正轴视图及点击负轴端点切换反向视图;保持观察中心与距离,隔离场景点击,处理拖动取消与资源清理,并补充交互回归测试。
## [0.9.4] - 2026-09-09
- 前端设计优化:升级蓝黑、电光青与少量紫色的 Cyber HUD 视觉,保留亮色主题;统一工作台、欢迎界面、共享控件、浮层和源码/调参窗口材质。
- 恢复自调参平台左侧会话与 Trial、中间指标与排行、右侧决策与审批的三栏布局;窄屏纵向排列,保留审批与 Monaco Diff 操作。
- 增加运行状态呼吸与交互微光,支持减少动态效果、强制色彩和无模糊能力回退;侧栏采用静态材质,避免大面积实时模糊影响仿真性能。
- 优化欢迎页与源代码入口、执行器控件密度和重复参数提示,将训练地图操作文案统一为“同步场景地图”。
- 补充双主题材质、状态动效、回退及三栏布局回归测试和设计交付说明;性能数据仅为无头 Chromium 短时特效开关对照,不代表真实 GPU 或重型模型基准。
## [0.9.3] - 2026-09-08
- 重构绿色主工作台:紧凑全局入口、可收起资源/上下文侧栏,统一状态、仿真/地图工具、草稿、摄像头与风险槽位;窄屏临时布局不覆盖桌面偏好。
- 逐模块整理地图、Body/Joint/Actuator、Python/ONNX、训练与录制的信息层级,保留单位、主动作、兼容限制及危险后果;控制台首次懒挂载后保留输入与任务状态。
- 独立调参改为指标/排行主区和会话/决策侧展,保留审批、Monaco 差异、参数护栏及停止入口;主工作台/调参共享深浅主题,换主题不丢图表缩放或编辑草稿。
- 统一 Tooltip/Popover/对话框边界、全屏 Portal 与顶层 Escape;修复 Dialog 焦点恢复、Monaco 模型释放顺序、摄像头实际渲染槽位,以及浅色主按钮对比色被共享 CSS 覆盖的问题。
- 补深浅主题五档布局、领域/调参/系统截图和交互回归,同步设计文档及旧 E2E 入口。训练/调参布局采用 mock;真实训练、Agent、外部真实策略/上传服务和长期性能不作为本次 UI 验收通过项。
## [0.9.2] - 2026-09-08
- 修复custom_boxes因起终点编辑使同步状态持续失效而无法训练:移除训练面板起终点坐标显示与编辑,训练/调参启动时自动重新编译已应用碰撞场景,并自动选择满足净空、最小距离和连通性约束的参考点。
## [0.9.1] - 2026-09-08
- Go2避障训练改为每个episode从同一连通自由区域随机采样起终点并随机化初始朝向,保证障碍/边界净空和最小目标距离;固定三seed评估及浏览器部署仍使用声明的参考起终点,兼顾泛化与可比性。
- 修正基础策略上传存储错误分类:文件打开/写入/关闭失败返回503并提示检查磁盘空间/权限;流读取超时或连接截断仍返回400,均保留临时清理与socket超时复位。
- 完成普通训练与自调参共用单文件.pt/.onnx上传入口:默认服务直接连接、Go2 legacy47模板确认、自动选择内容ID/文件SHA、取消及同文件重试;任务/连接epoch变化保留旧选择并隔离晚到响应,上传中禁止启动。补双面板真实HTTP浏览器验收与4环境×1iteration CPU ONNX-derived PPO/导出/统计恢复检查(仅链路验证)。
- 新增Go2 legacy47单文件.pt/受限MLP ONNX上传后端,无需管理员注册/邻接配置;认证有界二进制接收、CPU限额安全校验、持久化内容SHA来源,复用普通训练/自调参warm-start与rung自身resume。ONNX只继承确定性网络,明确模板假设、合成normalizer count及fresh训练状态;双UI文件选择待接入。
- 修复跨任务奖励preset混入Flat:以持久化来源session恢复权威taskId,读写与训练入口完整验证任务schema;跨任务或损坏来源在创建作业前拒绝,Flat菜单仅展示已确认Flat的preset。
- 修复导航设定拖回起点误触:超过5px后持续记为拖动,取消/Esc/清理/卸载清空整个手势,下一次正常点击不受影响。
- 新增显式multi_ring_raycast三层48射线/97维部署,旧缺省32射线/81维不变;task/ONNX严格模式、pitch/yaw角度及顺序白名单,浏览器观测、真实ORT shape、导航面板/PiP动态线数贯通。
- multi奖励仅按已验证标准底板顶面几何分类过滤地面,观测保留实际地板距离;缓存静态box/方向并优化解析slab,补真实CPU/WASM/GPU短smoke及48ray整帧基准。仍存在层间/侧后/坑盲区,未实现局部高程图。
- 修复训练CLI未导入仓库任务注册模块导致直接启动Flat/Rough/Obstacle失败;保留独立解释器三seed评估与调参导航速度。事务导入失败面板改为保留完整diagnostic detail,不再用“模型编译失败”摘要掩盖ORT shape/初始化错误。
- 新增已应用场景静态碰撞多实例→权威custom_boxes导出,保留世界坐标并诚实标记AABB/标准底板近似;前后端严格校验布局、摩擦、数量及起终点圆形安全区,贯通任务JSON/ONNX与最小坐标配置。
- 新增 Go2 避障目标贴地呼吸信标、一次性点击设定目标模式、实时目标坐标/距离和目标复位;保持81维观测与异步held-action,输入与地图操纵器互斥。
- 本地训练卡片新增可折叠Loss/Reward趋势,按迭代去重补全并有界保留500点;复用共享Canvas图表,综合指标独立缩放,曲线平滑但保留原值。
- 新增 Go2 前视32射线避障训练任务、自定义地形参数、配套碰撞地图与81维ONNX浏览器部署闭环,支持PiP和射线显示。
- 自定义地图与策略采用候选会话事务,真实ONNX初始化/graph校验或地图绑定失败时保留原场景、策略和物理状态;默认Flat兼容旧无metadata的47维导出。
- 对齐原Go2训练模型的关节armature、足端接触参数和自碰撞mask,补充真实WASM/CPU射线、动力学参数及浏览器回归测试。短训练仅验证链路,不代表避障收敛。
## [0.8.3] - 2026-09-04
### 新增
- 增加视口浮动地图工具栏(`MapViewportTools`),在视口上方提供变换模式切换、坐标空间切换和快捷对齐工具。
- 增加三维场景大纲树(`SceneOutliner`),直观查看场景中机器人、地图实例及层级结构。
- 增加视口快捷键挂载(`useMapEditorShortcuts`),支持快速切换操纵器模式、聚焦对象和撤销操作。
- 增加属性检查器面板(`MapObjectInspector` 与 `RobotInspector`),支持精确调节地图对象位姿与机器人关节/执行器。
- 增加右侧栏自适应 Tab 与多工具工作区容器(`RightSidebarTabs`、`WorkspaceToolsPanel`)。
- 增加拖拽式连续数值调节输入组件(`ScrubbableNumberInput`)与通用垂直双栏拆分面板(`VerticalSplitPane`)。
### 变更
- 重构并收敛模型控制侧栏(`ModelControlsSidebar`)与工程侧栏(`ProjectSidebar`),移除冗余的行内变换逻辑。
- 优化地图编辑面板(`MapEditorPanel`)与物理地图面板(`PhysicalMapPanel`),与统一检查器架构对齐。
- 清理已落地的历史设计草案与计划文档。
## [0.8.2] - 2026-09-03
### 新增
- 将自调参工作台重构为高内聚的组件群:Session 列表导航轨(`TuningSessionRail`)、控制工具栏(`TuningControlToolbar`)、Agent 决策时间线(`AgentDecisionTimeline`)、指标对比看板(`MetricsComparisonBoard`)、排行榜(`TuningLeaderboard`)、日志控制台(`TuningConsole`)与参数差异对比器(`RewardConfigDiffEditor`)。
- 建立自调参集中式状态管理(`tuningStore.ts`)与自适应轮询逻辑(`useTuningPolling.ts`)。
- 引入标量环形缓冲区(`ScalarRingBuffer.ts`),优化长周期 TensorBoard 曲线的高频更新与渲染性能。
- 服务端增加单步执行令牌(Step Token)调度,支持逐轮审批模式下的受控单步推进。
- 服务端增加参数约束 CAS 校验护栏与会话级别约束同步。
- 支持同会话内安全 Trial 的一键回滚与基准重设(Rollback)。
## [0.8.1] - 2026-09-03
### 新增
- 统一地图资产库与多实例堆叠系统(`MapAssetLibrary`、`MapStackComposer`),支持同源地图资产多次放置与独立位姿变换。
- 新增参数化地图实时预览图层(`ParametricMapPreviewLayer`),在视口中实时预览程序化地形与碰撞体变换。
- 新增程序地形贴合与落位计算(`sceneSurface.ts`),支持认证资产在程序化地形上自动重力落位。
- 引入地图场景草稿事务化编译(`mapSceneDraft`、`EditableMapDraftCommit`),保障物理、视觉与出生点数据同步更新。
- 增强地图对象拾取与选择机制(`compiledMapPick`),支持点击穿透、空白取消与实时变换操纵。
## [0.8.0] - 2026-09-02
### 新增
- 增加基于 DeepSeek Agent 的强化学习奖励函数自调参系统(`training_server/tuning/`),结合训练曲线与固定评估指标提出受限参数 patch。
- 支持全自动(Automatic)与逐轮审批(Approval)双调度模式,集成多阶段晋级(Successive-Halving)资源淘汰机制。
- 新增固定多场景评估逻辑(`evaluate.py`),通过固定 seed 和组合运动指令产出与奖励权重无关的客观综合评分。
- 新增 SQLite/WAL 存储管理,持久化保留调参会话、Trial 状态、参数护栏、审计记录与 TensorBoard 标量数据。
- 新增独立的自调参 Web 工作台(`web_platform/tuning.html`,`web_platform/src/tuning/`),包含实时曲线可视化组件(`ScalarChart.tsx`)。
- 训练服务支持将最佳配置保存为不可变预设并在普通训练中复用,支持导出最佳 `policy.onnx`。
- 本地训练面板(`LocalTrainingPanel.tsx`)与训练客户端集成自调参能力探测与快速跳转入口。
## [0.7.3] - 2026-09-01
### 新增
- 将默认 `Unitree-Go2-Flat` 训练所需的 PPO 环境、奖励/观测配置、ONNX 导出逻辑和 Go2 模型资产内置到 `training_server/rl/`。
### 变更
- 训练服务默认使用仓库内置训练器,不再要求单独克隆 `unitree_rl_mjlab`;仍可通过 `--trainer-root` 覆盖。
## [0.7.2] - 2026-09-01
### 变更
- 前端改为“应用壳 + 业务域 + 共享组件”的目录结构,并补充架构与依赖边界文档。
- 拆分工程侧栏、模型控制侧栏、执行器控制和通用侧栏容器,降低单文件职责和跨域耦合。
- 将地图、控制器、强化学习、本地训练和遥测面板及测试与各自业务域共置。
- 将遥测模块从仿真调度目录独立到 `telemetry/`,保留通过显式接口与 `SimulationSession` 集成。
## [0.7.1] - 2026-09-01
### 新增
- 增加浏览器内仿真遥测记录模块,可配置记录 Body、采样频率和样本上限。
- 记录位置、移动速度、机身侧倾/俯仰/偏航角、角速度、累计里程、接触与驱动指标。
- 增加实时数据与摘要面板,并支持导出稳定列结构的 CSV 和 Schema V1 JSON。
- 提供 `TelemetrySource`、`registerDataChannel` 及记录生命周期接口,便于扩展业务指标和其他仿真后端。
- 仿真重置使用数据分段,避免跨重置计算错误速度;达到样本上限时自动停止。
## [0.6.1] - 2026-08-28
### 新增
- 固定并强制使用 Node.js、npm、Prettier 和 Ruff 开发工具版本。
- 为核心导入、仿真数学、状态管理和训练客户端增加覆盖率门槛。
- Git 标签触发的自动构建、校验和与 GitHub Release 工作流。
- 本地训练服务随机 Bearer Token 鉴权、Host 校验和任务历史上限。
- 训练进程启动/取消竞态回归测试和 SIGTERM 受控退出。
### 变更
- Playwright CI 改用版本固定的 Chromium。
- TypeScript、TSX、配置和文档统一使用 Prettier 格式化。
- Python 训练服务统一使用 Ruff 检查和格式化。
## [0.6.0] - 2026-08-28
### 变更
- 将仓库重构为以 `web_platform/` 为核心的 Web 应用仓库。
- MuJoCo 运行时改为依赖官方 `@mujoco/mujoco` npm 包。
- 移除原生 C++、Python、MJX、Unity、桌面模拟器、CMake 和上游测试镜像。
- 将训练桥接服务和 Python 控制器示例提升到仓库根目录。
## [0.5.2] - 2026-08-28
### 变更
- 优化响应式工作区、可访问性、首屏加载、纹理兼容性和视口交互。
- 增加碰撞体、坐标系、关节轴、质心和惯量辅助可视化。
### 未发布 — Obstacle DeepSeek 自调参
- 新增Obstacle专属四标量schema与真实reward/导航command应用,保持Flat与护栏CAS语义;导出/浏览器执行配套目标速度。
- 增加固定3seed/1000步、首terminal前捕获的客观导航评价,固定权重和成功/跌倒硬门槛;custom保持权威地图并诚实标注;真实checkpoint/观测统计加载、逐seed进程隔离和失败关闭。
- 自调参界面支持任务选择、专属参数/评估展示、terrain/sensor/custom配置交接及最佳Obstacle策略事务导入;增加mock Agent、打分算例、CAS、argv配置与GPU评估验证。
### 未发布 — 已训练基础策略迁移与持续导航
- 普通训练与自调参增加已验证基础策略选择、checkpoint/SHA和兼容观测展示;管理员本地注册来源,内容寻址只读快照,拒绝客户端任意路径、symlink、unsafe反序列化及失效来源。
- 严格迁移47维actor到47/81/97:新增列零初始化,保留源归一化统计/count;新trial重置critic/optimizer/iteration,同trial晋级只resume自己的checkpoint,导出保留无路径来源metadata。
- 服务重启后的非终态session等待显式恢复,审计原状态并使旧pending proposal失效重提;保留来源、约束和Approval模式,防重复resume worker。
- 移除浏览器Obstacle交互导航20秒截止,保留训练/固定三seed评估协议及跌倒/越界安全停止;设点不自动启用策略,明确显示暂停/未启用/错误状态。
- 新增来源安全、SHA快照、trial续训/重启、双面板和真实WASM/ORT持续换目标回归;4env×1iteration仅证明初始化与优化,空旷地图实测不代表复杂障碍收敛。
### 未发布 — 基础策略目录刷新安全修复
- 修复普通训练在刷新服务目录后清掉失效来源、静默降级随机初始化的问题;保留已选内容ID,不按同别名自动替换新内容。
- 两种训练面板统一对目录缺项、验证失败及任务不兼容来源显示失效提示,禁用启动并在handler再次拦截;必须用户明确从头训练或选择有效来源。显式切换任务仍清空选择。
- 增加两面板A→B、not-ready、缺项及兼容性变更的真实组件刷新回归,验证失效时零启动请求及用户明确选择后的请求体。