MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / session_prompt

Function session_prompt

crates/opencode-server/src/routes.rs:1632–1803  ·  view source on GitHub ↗
(
    State(state): State<Arc<ServerState>>,
    Path(id): Path<String>,
    Json(req): Json<SessionPromptRequest>,
)

Source from the content-addressed store, hash-verified

1630}
1631
1632async fn session_prompt(
1633 State(state): State<Arc<ServerState>>,
1634 Path(id): Path<String>,
1635 Json(req): Json<SessionPromptRequest>,
1636) -> Result<Json<serde_json::Value>> {
1637 let prompt_text = if let Some(message) = req.message.as_deref() {
1638 message.to_string()
1639 } else if let Some(command) = req.command.as_deref() {
1640 req.arguments
1641 .as_deref()
1642 .map(|args| format!("/{command} {args}"))
1643 .unwrap_or_else(|| format!("/{command}"))
1644 } else {
1645 return Err(ApiError::BadRequest(
1646 "Either `message` or `command` must be provided".to_string(),
1647 ));
1648 };
1649
1650 {
1651 let sessions = state.sessions.lock().await;
1652 if sessions.get(&id).is_none() {
1653 return Err(ApiError::SessionNotFound(id));
1654 }
1655 }
1656
1657 let config = CONFIG_STATE.read().await;
1658 let (provider, provider_id, model_id) =
1659 resolve_provider_and_model(&state, req.model.as_deref(), config.model.as_deref(), None)?;
1660 drop(config);
1661
1662 let task_state = state.clone();
1663 let session_id = id.clone();
1664 let task_variant = req.variant.clone();
1665 let task_agent = req.agent.clone();
1666 let task_model = model_id.clone();
1667 let task_provider = provider_id.clone();
1668 tokio::spawn(async move {
1669 let mut session = {
1670 let sessions = task_state.sessions.lock().await;
1671 let Some(session) = sessions.get(&session_id).cloned() else {
1672 return;
1673 };
1674 session
1675 };
1676 set_session_run_status(&task_state, &session_id, SessionRunStatus::Busy).await;
1677
1678 if let Some(variant) = task_variant.as_deref() {
1679 session
1680 .metadata
1681 .insert("model_variant".to_string(), serde_json::json!(variant));
1682 } else {
1683 session.metadata.remove("model_variant");
1684 }
1685 session.metadata.insert(
1686 "model_provider".to_string(),
1687 serde_json::json!(&task_provider),
1688 );
1689 session

Callers

nothing calls this directly

Calls 14

set_session_run_statusFunction · 0.85
newFunction · 0.85
readMethod · 0.80
broadcastMethod · 0.80
add_textMethod · 0.80
getMethod · 0.45
cloneMethod · 0.45
removeMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected