# 弹性收纳预览 使用生产 Notch 的机器人、状态视图和原生窗口,只提供本地模拟任务;不连接 DSH,不调用模型。 在仓库根目录运行: ```sh npm run build:elastic-preview open "dist/DSH Notch Elastic Preview.app" ``` - 抓住 Notch 向任意方向拖动,短距离二维跟手,拉远时阻力渐强,外壳从固定右端向抓住的左端连续收窄;左端和里面的机器人、文字随拉伸一起变细,松手后沿同一形变恢复。 - 单次拖动前 128 pt 保持 1:1,之后平滑增加阻力,最多接近 240 pt。 - 小幅拖动会回到原位;回弹过程中可以再次抓住并改变方向。 - 收纳只把原外壳平移进屏幕,保留原高度和连续圆角,左侧露出 8 pt;悬停多露出到 14 pt,不改变原外壳的宽高。 - 拉出凸起再松手,恢复当前任务状态。悬停本身不会展开。 - 右键可收起或恢复;预览窗口的“恢复”按钮也可恢复。 - 待机、运行中、等待选择均为本地模拟。关闭预览不会退出 DSH。 - 隐藏时普通运行更新保持收纳;新完成、失败或问题会完整弹回。重新藏好后,同一条提醒的重复更新不会再次弹出。 快捷键:`⌘1` 待机,`⌘2` 运行中,`⌘3` 等待选择,`⌘R` 恢复,`⌘0` 显示预览控制,`⌘Q` 退出预览。性能检查:`⌘T` 记录下一次回弹,`⌘P` 在 3 秒后回放固定斜向收纳并记录帧间隔;结果写入 `/tmp/dsh-notch-motion/frames-*.json`。测量期间不要并行截图或读取辅助功能树。数据衡量应用更新,不是屏幕实际呈现帧率。 形状检查:`⌘4`、`⌘5`、`⌘6` 分别停在短、中、长距离的水平拉伸,方便直接比较左端厚度;`⌘R` 恢复并退出检查。只改变预览姿态,不操作真实会话。 关注事件检查:先拖动收纳,`⌘2` 模拟运行中(保持隐藏),`⌘7` 模拟完成、`⌘8` 模拟失败、`⌘3` 模拟新问题(完整弹回)。手动再收纳后重复同一快捷键,应继续隐藏。`⌘1` 清空本地状态后可重新开始。 收纳手势与正式入口共用 `EdgeDockModel`、`EdgeDockController` 和 `EdgeDockSurface`。预览窗口允许获得主窗口焦点,方便独立操作;正式 Notch 仍是非激活浮动窗口。正式入口会记住手动收纳状态,但本次预览不会修改该偏好。 验证命令:`npm run test:edge-dock`。检查连续拖动、释放无跳变、回弹中反向抓取、恢复途中任务尺寸变化、准确端点、命中区域和减少动态效果。设置 `NOTCH_EDGE_OUTPUT` 可指定原生静态帧输出目录。 这是候选功能。构建预览不会替换已安装的 `DSH.app`,也不会激活 Host 插件。 算法基准:`sh macos/Tests/edge-algorithm-bench.sh`;可加 Git 提交号比较旧版。只编译当前/指定提交的纯弹簧与轮廓代码,不连接 DSH、不操作正式窗口。完整结果见 [算法验证](../../docs/elastic-edge-dock.md#解析弹簧与轮廓复用--2026-09-21)。