//! Contains helper functions for constructing URLs to various Zed-related pages.//!//! These URLs will adapt to the configured server URL in order to construct//! links appropriate for the environment (e.g., by linking to a local copy of//! zed.dev in development).use gpui::App;use release_channel::ReleaseChannel;use settings::Settings;use crate::ClientSettings;fn server_url(cx: &App) -> &str { &ClientSettings::get_global(cx).server_url}fn docs_url(cx: &App) -> String { let server_url = server_url(cx); match ReleaseChannel::try_global(cx).unwrap_or_default() { ReleaseChannel::Stable => { format!("{server_url}/docs") } ReleaseChannel::Preview => { format!("{server_url}/docs/preview") } ReleaseChannel::Dev | ReleaseChannel::Nightly => { format!("{server_url}/docs/nightly") } }}/// Returns the URL to the account page on zed.dev.pub fn account_url(cx: &App) -> String { format!("{server_url}/account", server_url = server_url(cx))}/// Returns the URL to the start trial page on zed.dev.pub fn start_trial_url(cx: &App) -> String { format!( "{server_url}/account/start-trial", server_url = server_url(cx) )}/// Returns the URL to the upgrade page on zed.dev.pub fn upgrade_to_zed_pro_url(cx: &App) -> String { format!("{server_url}/account/upgrade", server_url = server_url(cx))}/// Returns the URL to Zed's terms of service.pub fn terms_of_service(cx: &App) -> String { format!("{server_url}/terms-of-service", server_url = server_url(cx))}/// Returns the URL to Zed AI's privacy and security docs.pub fn ai_privacy_and_security(cx: &App) -> String { format!( "{docs_url}/ai/privacy-and-security", docs_url = docs_url(cx) )}/// Returns the URL to Zed's edit prediction documentation.pub fn edit_prediction_docs(cx: &App) -> String { format!("{docs_url}/ai/edit-prediction", docs_url = docs_url(cx))}pub fn skills_docs(cx: &App) -> String { format!("{docs_url}/ai/skills", docs_url = docs_url(cx))}/// Returns the URL to Zed's Agent sandboxing documentation.////// Pass `section` to deep-link to a specific section anchor on the page (for/// example, `Some("installing-bubblewrap")`); pass `None` to link to the top of/// the page.////// Unlike the account/app links above, this targets `zed.dev/docs` (via/// [`release_channel::docs_url`]) rather than the configured `server_url`: the/// docs are a static site hosted on `zed.dev`, so pointing at a local dev/// `server_url` would 404.pub fn sandboxing_docs(section: Option<&str>, cx: &App) -> String { let base = release_channel::docs_url("ai/sandboxing", cx); match section { Some(section) => format!("{base}#{section}"), None => base, }}pub fn llm_provider_docs(cx: &App) -> String { format!("{docs_url}/ai/llm-providers", docs_url = docs_url(cx))}/// Returns the URL to Zed's ACP registry blog post.pub fn acp_registry_blog(cx: &App) -> String { format!( "{server_url}/blog/acp-registry", server_url = server_url(cx) )}pub fn shared_agent_thread_url(session_id: &str) -> String { format!("zed://agent/shared/{}", session_id)}
//! Contains helper functions for constructing URLs to various Zed-related pages.
//!
//! These URLs will adapt to the configured server URL in order to construct
//! links appropriate for the environment (e.g., by linking to a local copy of
//! zed.dev in development).
use gpui::App;
use release_channel::ReleaseChannel;
use settings::Settings;
use crate::ClientSettings;
fn server_url(cx: &App) -> &str {
&ClientSettings::get_global(cx).server_url
}
fn docs_url(cx: &App) -> String {
let server_url = server_url(cx);
match ReleaseChannel::try_global(cx).unwrap_or_default() {
ReleaseChannel::Stable => {
format!("{server_url}/docs")
}
ReleaseChannel::Preview => {
format!("{server_url}/docs/preview")
}
ReleaseChannel::Dev | ReleaseChannel::Nightly => {
format!("{server_url}/docs/nightly")
}
}
}
/// Returns the URL to the account page on zed.dev.
pub fn account_url(cx: &App) -> String {
format!("{server_url}/account", server_url = server_url(cx))
}
/// Returns the URL to the start trial page on zed.dev.
pub fn start_trial_url(cx: &App) -> String {
format!(
"{server_url}/account/start-trial",
server_url = server_url(cx)
)
}
/// Returns the URL to the upgrade page on zed.dev.
pub fn upgrade_to_zed_pro_url(cx: &App) -> String {
format!("{server_url}/account/upgrade", server_url = server_url(cx))
}
/// Returns the URL to Zed's terms of service.
pub fn terms_of_service(cx: &App) -> String {
format!("{server_url}/terms-of-service", server_url = server_url(cx))
}
/// Returns the URL to Zed AI's privacy and security docs.
pub fn ai_privacy_and_security(cx: &App) -> String {
format!(
"{docs_url}/ai/privacy-and-security",
docs_url = docs_url(cx)
)
}
/// Returns the URL to Zed's edit prediction documentation.
pub fn edit_prediction_docs(cx: &App) -> String {
format!("{docs_url}/ai/edit-prediction", docs_url = docs_url(cx))
}
pub fn skills_docs(cx: &App) -> String {
format!("{docs_url}/ai/skills", docs_url = docs_url(cx))
}
/// Returns the URL to Zed's Agent sandboxing documentation.
///
/// Pass `section` to deep-link to a specific section anchor on the page (for
/// example, `Some("installing-bubblewrap")`); pass `None` to link to the top of
/// the page.
///
/// Unlike the account/app links above, this targets `zed.dev/docs` (via
/// [`release_channel::docs_url`]) rather than the configured `server_url`: the
/// docs are a static site hosted on `zed.dev`, so pointing at a local dev
/// `server_url` would 404.
pub fn sandboxing_docs(section: Option<&str>, cx: &App) -> String {
let base = release_channel::docs_url("ai/sandboxing", cx);
match section {
Some(section) => format!("{base}#{section}"),
None => base,
}
}
pub fn llm_provider_docs(cx: &App) -> String {
format!("{docs_url}/ai/llm-providers", docs_url = docs_url(cx))
}
/// Returns the URL to Zed's ACP registry blog post.
pub fn acp_registry_blog(cx: &App) -> String {
format!(
"{server_url}/blog/acp-registry",
server_url = server_url(cx)
)
}
pub fn shared_agent_thread_url(session_id: &str) -> String {
format!("zed://agent/shared/{}", session_id)
}