Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# PRODUCT.md — Rename Oz to Warp Agent in settings and onboarding
|
||||
|
||||
Issue: https://github.com/warpdotdev/warp-external/issues/1063
|
||||
|
||||
## Summary
|
||||
|
||||
The in-app agent is being renamed from "Oz" to "Warp Agent" in the settings page
|
||||
and the onboarding agent slide. "Oz" is reserved for the cloud agent
|
||||
orchestration platform and must not be used for the in-app agent's user-facing
|
||||
strings in these surfaces. This change updates only user-visible copy; the cloud
|
||||
agent orchestration product continues to be surfaced as "Oz" wherever it
|
||||
currently is.
|
||||
|
||||
Figma: none provided.
|
||||
|
||||
## Goals / Non-goals
|
||||
|
||||
In-scope surfaces (user-facing strings change):
|
||||
|
||||
- The settings sidebar entry for the in-app agent under the "Agents" umbrella.
|
||||
- The primary heading on the AI settings page that labels the global AI enable
|
||||
toggle.
|
||||
- The onboarding agent slide header and the "disable" checkbox label on that
|
||||
slide.
|
||||
|
||||
Out of scope (must continue to say "Oz"):
|
||||
|
||||
- Anything that refers to the cloud agent orchestration platform, including the
|
||||
"Oz Cloud API Keys" settings subpage, the "Oz" harness in the harness
|
||||
selector, and any zero-state or blocklist strings that mention the cloud Oz
|
||||
agent.
|
||||
- Internal identifiers (enum variants, field names, action names, telemetry
|
||||
keys, settings keys, URL fragments) may keep the name `Oz`. This spec
|
||||
constrains user-visible strings only.
|
||||
- Other surfaces that mention "Oz" (agent view zero state, tab titles,
|
||||
documentation, etc.) are not covered by this issue and are not changed here.
|
||||
|
||||
## Behavior
|
||||
|
||||
1. On the settings sidebar, under the "Agents" umbrella, the first subpage entry
|
||||
is labeled "Warp Agent" (previously "Oz"). The ordering of subpages, the
|
||||
umbrella name ("Agents"), and all sibling subpages ("Profiles", "MCP
|
||||
servers", "Knowledge", "Third party CLI agents") are unchanged.
|
||||
|
||||
2. Opening that "Warp Agent" subpage renders the same settings content it did
|
||||
before this rename. No widgets, toggles, options, defaults, or telemetry
|
||||
change behavior as a result of this rename.
|
||||
|
||||
3. On the "Warp Agent" subpage, the primary page heading that sits above the
|
||||
global AI enable toggle reads "Warp Agent" (previously "Oz"). Typography,
|
||||
color, size, weight, and layout of the heading are unchanged; only the text
|
||||
differs.
|
||||
|
||||
4. The global AI enable toggle itself (its on/off state, its behavior when
|
||||
toggled, and the remote-session organization-policy warning shown next to it)
|
||||
is unchanged. The Sign-up CTA shown to anonymous users on this page is
|
||||
unchanged.
|
||||
|
||||
5. On the onboarding agent slide (the third onboarding step), the title reads
|
||||
"Customize your Warp Agent" (previously "Customize your Agent, Oz"). The
|
||||
subtitle "Select your in-app agent's defaults." is unchanged.
|
||||
|
||||
6. When the "new settings modes" feature flag is enabled and the slide renders
|
||||
the disable checkbox row, the checkbox label reads "Disable Warp Agent"
|
||||
(previously "Disable Oz"). Checkbox visual state, hit target, and click
|
||||
behavior are unchanged — toggling it still enables/disables the in-app agent
|
||||
for onboarding and still dims the upper sections of the slide while checked.
|
||||
|
||||
7. Search within settings still finds the in-app agent subpage when the user
|
||||
types any previously-matching search term (for example, terms already covered
|
||||
by the AI page's global widget search terms such as "ai", "agent", "next
|
||||
command", "api keys"). Additionally, typing "warp agent" finds this subpage.
|
||||
Typing "oz" is acceptable to continue matching this subpage so existing
|
||||
muscle memory is not broken, but is not required by this spec; search for
|
||||
"Oz Cloud API Keys" must continue to find the cloud platform subpage
|
||||
regardless.
|
||||
|
||||
8. Deep links and external callers that previously navigated to this subpage by
|
||||
section identifier continue to resolve to the same subpage. In particular,
|
||||
navigation requests that reference the legacy "Oz" section name still land on
|
||||
the renamed "Warp Agent" subpage. Navigation requests referencing "Warp
|
||||
Agent" also resolve to the same subpage.
|
||||
|
||||
9. The "Oz Cloud API Keys" subpage under the "Cloud platform" umbrella is
|
||||
unchanged — same label, same location, same behavior. No cloud-agent surface
|
||||
is renamed by this change.
|
||||
|
||||
10. Onboarding progress (step index, total step count, back/next navigation, the
|
||||
"disable agent" effect on subsequent onboarding state) is unchanged. Nothing
|
||||
about the Autonomy section, Default model section, upgrade banner, or
|
||||
plan-activated toast changes.
|
||||
|
||||
11. Accessibility: the settings sidebar item, the page heading, and the
|
||||
onboarding checkbox label expose the new visible text ("Warp Agent",
|
||||
"Disable Warp Agent") to assistive technologies. No separate aria-only label
|
||||
still announces "Oz" for the renamed surfaces.
|
||||
|
||||
12. The rename applies consistently across themes, appearances, and the new
|
||||
settings modes feature flag on/off. The only user-visible difference between
|
||||
flag states remains whether the "Disable Warp Agent" row renders at all; its
|
||||
label text does not depend on the flag.
|
||||
@@ -0,0 +1,185 @@
|
||||
# TECH.md — Rename Oz to Warp Agent in settings and onboarding
|
||||
|
||||
Issue: https://github.com/warpdotdev/warp-external/issues/1063
|
||||
Product spec: `specs/GH1063/product.md`
|
||||
|
||||
## Context
|
||||
|
||||
This is a rename of the in-app agent from "Oz" to "Warp Agent" across user-facing
|
||||
strings, the internal enum variants that back those strings, and all call-sites
|
||||
that referenced the old variant. "Oz" remains reserved for the cloud agent
|
||||
orchestration platform, so the rename must not touch any cloud surfaces.
|
||||
|
||||
Relevant code (prior state):
|
||||
|
||||
- `app/src/settings_view/mod.rs` — `SettingsSection::Oz` variant displayed as
|
||||
`"Oz"` in the sidebar. `FromStr` mapped `"Oz"` to `SettingsSection::Oz`.
|
||||
Default-subpage fallback and `is_ai_subpage` / `ai_subpages()` all referenced
|
||||
`SettingsSection::Oz`.
|
||||
- `app/src/settings_view/ai_page.rs` — `AISubpage::Oz` variant, heading literal
|
||||
`"Oz"`, and multiple description strings referencing "Oz" or "Oz agent".
|
||||
- `crates/onboarding/src/slides/agent_slide.rs` — header title
|
||||
`"Customize your Agent, Oz"` and checkbox label `"Disable Oz"`.
|
||||
- Approximately 15 additional files contained `SettingsSection::Oz` usages
|
||||
for navigation actions and settings page dispatch.
|
||||
|
||||
Out-of-scope references that must be preserved as "Oz" (verified by grep):
|
||||
|
||||
- `app/src/settings_view/mod.rs` — `SettingsSection::OzCloudAPIKeys` display
|
||||
`"Oz Cloud API Keys"` and its `FromStr` round-trip.
|
||||
- `app/src/terminal/view/ambient_agent/harness_selector.rs:62` — `Harness::Oz`
|
||||
display name "Oz" in the cloud agent harness menu.
|
||||
- `app/src/ai/blocklist/agent_view/zero_state_block.rs:388, 404` — "New Oz cloud
|
||||
agent conversation" / "New Oz agent conversation". Zero-state copy is not
|
||||
covered by issue #1063 and must not be touched in this PR.
|
||||
- "Oz changelog" toggle labels in `ai_page.rs` (`OtherAIWidget`) are kept as
|
||||
"Oz changelog" because they refer to Oz platform release notes, not the
|
||||
in-app agent.
|
||||
|
||||
## Proposed changes
|
||||
|
||||
1. `app/src/settings_view/mod.rs`
|
||||
- Rename `SettingsSection::Oz` variant to `SettingsSection::WarpAgent`.
|
||||
- In the `Display` impl, the `WarpAgent` arm writes `"Warp Agent"`.
|
||||
- In the `FromStr` impl, accept both `"Oz"` (backward-compat legacy name)
|
||||
and `"Warp Agent"` as parseable forms that map to
|
||||
`SettingsSection::WarpAgent`, per Behavior #8 in `product.md`.
|
||||
- Update `is_ai_subpage`, `ai_subpages()`, and the two default-subpage
|
||||
fallbacks (`SettingsSection::AI => SettingsSection::WarpAgent`) to use the
|
||||
new variant name.
|
||||
- Leave `SettingsSection::OzCloudAPIKeys` and its `"Oz Cloud API Keys"`
|
||||
display untouched. Do not alter the `"Agents"` umbrella name or subpage
|
||||
order.
|
||||
- Update the doc-comment on `SettingsSection::AI` to reference `WarpAgent`.
|
||||
|
||||
2. `app/src/settings_view/ai_page.rs`
|
||||
- Rename `AISubpage::Oz` variant to `AISubpage::WarpAgent`; update
|
||||
`AISubpage::from_section` and the `build_page` match arm accordingly.
|
||||
- In `GlobalAIWidget::render`, replace `Text::new_inline("Oz", ...)` with
|
||||
`Text::new_inline("Warp Agent", ...)`. Keep every other argument, style,
|
||||
alignment, and layout constant.
|
||||
- In `GlobalAIWidget::search_terms`, keep existing terms (including `"oz"`
|
||||
for legacy muscle memory, allowed by Behavior #7) and keep `"warp agent"`
|
||||
so the new label is directly searchable.
|
||||
- Replace all remaining user-visible description strings that referenced
|
||||
"Oz" or "Oz agent" with "the Warp Agent" / "Warp Agent" as appropriate.
|
||||
Specifically: command denylist/allowlist descriptions, base model
|
||||
description, codebase context description, MCP zero-state and
|
||||
allowlist/denylist descriptions, Rules description, Warp Drive context
|
||||
description, API keys description, and MCP servers description.
|
||||
- Preserve the two "Oz changelog" toggle labels in `OtherAIWidget` and
|
||||
`SettingActionPairDescriptions` unchanged — these refer to Oz platform
|
||||
release notes, not the in-app agent.
|
||||
|
||||
3. `crates/onboarding/src/slides/agent_slide.rs`
|
||||
- `render_header`: change paragraph text from `"Customize your Agent, Oz"`
|
||||
to `"Customize your Warp Agent"`. Keep font size, weight, layout, and
|
||||
surrounding subtitle unchanged.
|
||||
- `render_disable_oz_section`: change checkbox label from `"Disable Oz"` to
|
||||
`"Disable Warp Agent"`. Keep styling, spacing, `disable_oz_mouse` state
|
||||
handle, and the dispatched `AgentSlideAction::ToggleDisableOz` action
|
||||
unchanged.
|
||||
- Internal identifiers (`disable_oz_mouse`, `disable_oz` field on
|
||||
`AgentDevelopmentSettings`, `AgentSlideAction::ToggleDisableOz`,
|
||||
`render_disable_oz_section` function name) are kept as-is to avoid
|
||||
migration risk for persisted settings and telemetry.
|
||||
|
||||
4. Navigation call-sites (approximately 15 files)
|
||||
- All `SettingsSection::Oz` references in navigation actions, workspace
|
||||
dispatch, settings page helpers, and editable bindings are updated to
|
||||
`SettingsSection::WarpAgent`. Affected files include:
|
||||
`app/src/ai/blocklist/agent_view/agent_input_footer/mod.rs`,
|
||||
`app/src/ai/blocklist/block.rs`,
|
||||
`app/src/ai/blocklist/block/cli.rs`,
|
||||
`app/src/ai/blocklist/block/view_impl.rs`,
|
||||
`app/src/ai/blocklist/block/view_impl/common.rs`,
|
||||
`app/src/ai/blocklist/block/view_impl/output.rs`,
|
||||
`app/src/ai/blocklist/prompt/prompt_alert.rs`,
|
||||
`app/src/settings_view/billing_and_usage_page.rs`,
|
||||
`app/src/terminal/input.rs`,
|
||||
`app/src/terminal/input/inline_history/view.rs`,
|
||||
`app/src/terminal/input/models/data_source.rs`,
|
||||
`app/src/terminal/input/models/view.rs`,
|
||||
`app/src/terminal/profile_model_selector.rs`,
|
||||
`app/src/terminal/view.rs`,
|
||||
`app/src/workspace/mod.rs`,
|
||||
`app/src/workspace/view.rs`.
|
||||
|
||||
## Testing and validation
|
||||
|
||||
Runtime checks:
|
||||
|
||||
- `cargo fmt` and `cargo clippy --workspace --all-targets --all-features --tests
|
||||
-- -D warnings` must pass (per `WARP.md` PR workflow).
|
||||
- `cargo nextest run -p warp_app --no-fail-fast` or the relevant subset covering
|
||||
`settings_view::mod_test` must pass. The Display test asserts
|
||||
`SettingsSection::WarpAgent.to_string() == "Warp Agent"`. The `FromStr` test
|
||||
covers both `"Oz"` and `"Warp Agent"` resolving to
|
||||
`SettingsSection::WarpAgent`, exercising Behavior #8. All helper tests
|
||||
(`is_ai_subpage`, `ai_subpages_list_contains_all_ai_subpage_variants`,
|
||||
filter/visibility tests) are updated to reference `SettingsSection::WarpAgent`.
|
||||
Existing tests for `OzCloudAPIKeys` are left untouched to guard against
|
||||
accidentally renaming the cloud subpage.
|
||||
- `cargo nextest run -p onboarding` (if a test crate exists for the onboarding
|
||||
slide strings; otherwise, this rename is a pure string change and manual
|
||||
verification below suffices).
|
||||
|
||||
Behavior-to-verification mapping (from `product.md`):
|
||||
|
||||
- Behavior #1, #2, #3, #9: manually open the settings UI and confirm the
|
||||
sidebar entry reads "Warp Agent", the subpage renders unchanged content, the
|
||||
heading above the global toggle reads "Warp Agent", and the "Oz Cloud API
|
||||
Keys" entry under "Cloud platform" still reads "Oz Cloud API Keys".
|
||||
- Behavior #4: toggle the global AI switch and verify it still enables and
|
||||
disables AI features as before.
|
||||
- Behavior #5, #6, #10: launch onboarding (or jump to the agent slide via the
|
||||
existing onboarding test fixtures) and confirm the title, subtitle, disable
|
||||
checkbox label, autonomy options, and step progress are all correct.
|
||||
- Behavior #7: search within the settings modal using each of
|
||||
`"warp agent"`, `"ai"`, `"agent"`, `"oz"` (should still reach the subpage) and
|
||||
`"oz cloud"` (should reach the cloud subpage only).
|
||||
- Behavior #8: confirm both `"Oz"` and `"Warp Agent"` resolve to
|
||||
`SettingsSection::WarpAgent` via the `FromStr` round-trip test.
|
||||
- Behavior #11: no automated accessibility test exists for these labels; manual
|
||||
verification on macOS VoiceOver is sufficient since the visible text is the
|
||||
accessible label.
|
||||
- Behavior #12: toggle the `OpenWarpNewSettingsModes` feature flag and confirm
|
||||
the disable row only appears when enabled and always reads "Disable Warp
|
||||
Agent" when it does appear.
|
||||
|
||||
Manual verification artifacts:
|
||||
|
||||
- Screenshots of (a) settings sidebar with the "Agents" umbrella expanded,
|
||||
(b) the AI settings page heading, and (c) the onboarding agent slide in both
|
||||
feature-flag states.
|
||||
- After implementation, invoke the `verify-ui-change-in-cloud` skill per the
|
||||
repository rule for user-facing client changes.
|
||||
|
||||
## Risks and mitigations
|
||||
|
||||
- Risk: external deep links or persisted telemetry strings reference `"Oz"` and
|
||||
break. Mitigation: `FromStr` accepts both `"Oz"` and `"Warp Agent"` mapping to
|
||||
`SettingsSection::WarpAgent`, and the legacy `"oz"` search term is preserved so
|
||||
`oz`-based search still lands on the subpage.
|
||||
- Risk: accidentally renaming cloud Oz surfaces. Mitigation: grep for `"Oz"`
|
||||
literals confirms `harness_selector.rs`, `zero_state_block.rs`, and
|
||||
`OzCloudAPIKeys` are untouched. The "Oz changelog" toggle labels are
|
||||
explicitly preserved.
|
||||
- Risk: stale comments inside `agent_slide.rs` that still reference "Disable Oz"
|
||||
mislead future readers. Mitigation: internal identifiers (`disable_oz_mouse`,
|
||||
`AgentSlideAction::ToggleDisableOz`, etc.) intentionally retain the `oz` name;
|
||||
comments describing them are acceptable to leave as-is per `WARP.md`.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- `SettingsSection::Oz` and `AISubpage::Oz` enum variant renames have been
|
||||
completed as part of this implementation.
|
||||
- Internal identifiers (`disable_oz` setting field,
|
||||
`AgentSlideAction::ToggleDisableOz`, `render_disable_oz_section`,
|
||||
`disable_oz_mouse`, and related settings/telemetry keys) are intentionally
|
||||
kept as-is. They require more care around persisted settings, telemetry event
|
||||
names, and potentially GraphQL/analytics schemas.
|
||||
- The broader zero-state and blocklist strings that still say "Oz agent" (e.g.,
|
||||
in `zero_state_block.rs`) should be revisited in a follow-up issue once
|
||||
product confirms which of those belong to the in-app agent vs. the cloud agent
|
||||
orchestration platform.
|
||||
Reference in New Issue
Block a user