用途
本技能用于在 Warp 客户端中创建一个一次性启动弹窗(one-time launch modal),常见用途包括功能发布公告(如 "Orchestrate any agent, anywhere"、"Warp is now open-source")和新用户引导。它总结了该模式的规范实现与完整检查清单,适合需要在 Warp 代码库中新增此类弹窗的开发者。
主要能力
技能给出从零到一的实现步骤,覆盖以下方面:
- 自定义图标:如需新增图标,需先在
crates/warp_core/src/ui/icons.rs的 Icon 枚举中添加枚举值并在From<Icon>映射中补充路径,SVG 文件放置于app/assets/bundled/svg/,采用与现有图标一致的 24×24 viewBox 格式。 - 功能开关:在
crates/warp_features/src/lib.rs中新增FeatureFlag,并可加入DOGFOOD_FLAGS用于内部试用。 - 设置字段:在
app/src/settings/ai.rs的define_settings_group!(AISettings, ...)内添加布尔字段。该字段并非用户可见设置,而是用于记录弹窗是否已展示,采用全局同步(不遵循用户同步设置)且为私有,以保证同一用户在任意设备上只看到一次。 - OneTimeModalModel:在
app/src/workspace/one_time_modal_model.rs中完成字段添加、初始化、针对新用户的预关闭处理、公开 API 方法、私有 setter、加入is_any_modal_open、触发函数以及从check_and_trigger_all_modals调用等。 - 视图:在
app/src/workspace/view/<name>_launch_modal/下创建mod.rs与view.rs,可参考orchestration_launch_modal/view.rs进行改写。 - 工作区接线:在
app/src/workspace/view.rs与app/src/workspace/mod.rs中完成模块声明、导入、字段、订阅、渲染、事件处理与焦点辅助方法等接线。 - 调试动作:在
app/src/workspace/action.rs中添加打开与重置状态两个调试动作,并在命令面板中设为不可见。
使用方式
按步骤依次实施:先处理所需自定义图标,然后添加功能开关,接着添加设置字段和触发逻辑,再创建视图,最后完成工作区接线并加入调试动作。
视图实现要点
- 颜色来源:优先使用 Warp 主题令牌。背景面使用
appearance.theme().surface_3()(或其它surface_*令牌);主文本/副文本使用main_text_color(...)与sub_text_color(...);叠加/悬停填充使用surface_overlay_1()/surface_overlay_2();细边框使用outline()。终端颜色强调(如洋红色发布徽章)使用appearance.theme().terminal_colors().normal.magenta,低透明度背景用appearance.theme().ansi_overlay_1(magenta)。避免硬编码十六进制颜色。 - 主视觉图:存放在
app/assets/async/png/onboarding/<name>_launch_banner.png。宽高比很关键:若图片宽于MODAL_WIDTH/HERO_HEIGHT(420/92 ≈ 4.57),需将 hero 的ConstrainedBox包在Clipped::new(...)中以防cover()缩放时横向溢出;尺寸正好为 420×92 的图片无需Clipped;仅高度更大的图片(宽高比小于 4.57)也无需该处理。 - "New" 徽章:使用标准徽章——高 24 px、水平内边距 8 px、字号 14 px、胶囊圆角,洋红色来自终端主题色。
- URL:始终使用
https://,不要用http://。
适用场景
适用于需要在 Warp 客户端内新增一次性发布弹窗的开发者,包括功能公告和引导流程。参考实现位于 app/src/workspace/view/orchestration_launch_modal/,为最新且规范的示例。
限制与行为说明
- 新注册用户:不显示弹窗——在 AuthComplete 新用户分支中已被预关闭。
- 未登录用户:不显示——没有 AuthComplete 触发不会发生。
- 已有用户且开关启用:在云偏好设置加载后的首次启动时显示。
- Integration 渠道:不显示——被
Channel::Integration检查抑制。 - 已看过:不显示——该设置跨设备全局持久化。
以上步骤、文件路径与代码片段均来自官方说明,实际实现时需依据代码库现状适配。关于收费、平台限制等其它信息暂未提供。