Skip to main content

systemprompt_cli/commands/core/contexts/
edit.rs

1//! `core contexts edit` command.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use anyhow::{Context, Result};
7use clap::Args;
8use systemprompt_agent::repository::context::ContextRepository;
9use systemprompt_logging::CliService;
10
11use super::resolve::resolve_context;
12use super::types::ContextUpdatedOutput;
13use crate::context::CommandContext;
14use crate::session::get_or_create_session;
15use crate::shared::CommandOutput;
16
17#[derive(Debug, Args)]
18pub struct EditArgs {
19    #[arg(help = "Context ID (full, partial prefix, or name)")]
20    pub context: String,
21
22    #[arg(long, help = "New name for the context")]
23    pub name: String,
24}
25
26pub(super) async fn execute(args: EditArgs, ctx: &CommandContext) -> Result<CommandOutput> {
27    let session_ctx = get_or_create_session(ctx).await?;
28    let pool = ctx.db_pool().await?;
29    execute_with_pool(args, &session_ctx.session, &pool, &ctx.cli).await
30}
31
32pub async fn execute_with_pool(
33    args: EditArgs,
34    session: &systemprompt_cloud::CliSession,
35    pool: &systemprompt_database::DbPool,
36    config: &crate::cli_settings::CliConfig,
37) -> Result<CommandOutput> {
38    let repo = ContextRepository::new(pool)?;
39
40    let context_id = resolve_context(&args.context, &session.user_id, &repo).await?;
41
42    repo.update_context_name(&context_id, &session.user_id, &args.name)
43        .await
44        .context("Failed to update context")?;
45
46    let output = ContextUpdatedOutput {
47        id: context_id.clone(),
48        name: args.name.clone(),
49        message: format!("Context renamed to '{}'", args.name),
50    };
51
52    if !config.is_json_output() {
53        CliService::success(&output.message);
54        CliService::key_value("ID", context_id.as_str());
55        CliService::key_value("Name", &args.name);
56    }
57
58    Ok(CommandOutput::card_value("Context Updated", &output))
59}