MCPcopy Create free account
hub / github.com/GCWing/BitFun / prepare_session

Method prepare_session

src/apps/cli/src/modes/exec.rs:388–455  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

386 }
387
388 async fn prepare_session(&self) -> Result<String> {
389 let resume_id = self.session_options.resume.as_deref();
390 let workspace = self
391 .workspace_path
392 .clone()
393 .or_else(|| std::env::current_dir().ok())
394 .unwrap_or_else(|| PathBuf::from("."));
395
396 let resolved_resume = if self.session_options.continue_last || resume_id == Some("last") {
397 let sessions = self.agent.coordinator().list_sessions(&workspace).await?;
398 Some(
399 sessions
400 .first()
401 .map(|session| session.session_id.clone())
402 .ok_or_else(|| anyhow::anyhow!("No history sessions for current project"))?,
403 )
404 } else {
405 resume_id.map(ToString::to_string)
406 };
407
408 if self.session_options.fork_session {
409 let source_session_id = resolved_resume
410 .clone()
411 .or_else(|| self.session_options.session_id.clone())
412 .ok_or_else(|| {
413 anyhow::anyhow!("--fork-session requires --continue, --resume, or --session")
414 })?;
415 let (_session, turns) = self
416 .agent
417 .coordinator()
418 .restore_session_view(&workspace, &source_session_id)
419 .await?;
420 let source_turn_id = turns
421 .last()
422 .map(|turn| turn.turn_id.clone())
423 .ok_or_else(|| anyhow::anyhow!("Session has no persisted turns to fork"))?;
424 let path_manager = bitfun_core::infrastructure::try_get_path_manager_arc()
425 .map_err(|error| anyhow::anyhow!(error.to_string()))?;
426 let persistence_manager =
427 bitfun_core::agentic::persistence::PersistenceManager::new(path_manager)
428 .map_err(|error| anyhow::anyhow!(error.to_string()))?;
429 let result = persistence_manager
430 .branch_session(
431 &workspace,
432 &bitfun_core::agentic::persistence::session_branch::SessionBranchRequest {
433 source_session_id: source_session_id.clone(),
434 source_turn_id,
435 },
436 )
437 .await?;
438 self.agent.restore_session(&result.session_id).await?;
439 return Ok(result.session_id);
440 }
441
442 if let Some(session_id) = resolved_resume.as_deref() {
443 self.agent.restore_session(session_id).await?;
444 return Ok(session_id.to_string());
445 }

Callers 1

runMethod · 0.80

Calls 10

try_get_path_manager_arcFunction · 0.85
branch_sessionMethod · 0.80
ensure_sessionMethod · 0.80
cloneMethod · 0.45
okMethod · 0.45
list_sessionsMethod · 0.45
coordinatorMethod · 0.45
restore_session_viewMethod · 0.45
restore_sessionMethod · 0.45

Tested by

no test coverage detected