SuperAPI AI 工具集

create-launch-modal

编程与开发

查看项目

更新于 10-16 06:01

技能介绍

用途

本技能用于在 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 检查抑制。
  • 已看过:不显示——该设置跨设备全局持久化。

以上步骤、文件路径与代码片段均来自官方说明,实际实现时需依据代码库现状适配。关于收费、平台限制等其它信息暂未提供。