Implement next-gen modules: chrs-code-edit (Git), chrs-discovery (LibP2P), and chrs-observer (TUI)

This commit is contained in:
anthonyrawlins
2026-03-04 03:41:41 +11:00
parent 5ff504f864
commit 7d1a64d805
6 changed files with 252 additions and 0 deletions

46
chrs-code-edit/src/lib.rs Normal file
View File

@@ -0,0 +1,46 @@
//! chrs-code-edit: Autonomous Git-based code editing for CHORUS.
use git2::{Repository, BranchType};
use std::path::Path;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum EditError {
#[error("Git error: {0}")]
Git(#[from] git2::Error),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
}
/// Manages isolated Git worktrees/branches for agent tasks.
pub struct WorktreeManager {
repo: Repository,
}
impl WorktreeManager {
/// Open an existing repository.
pub fn open<P: AsRef<Path>>(path: P) -> Result<Self, EditError> {
let repo = Repository::open(path)?;
Ok(Self { repo })
}
/// Create a new branch for a specific task.
///
/// **Why**: Isolation ensures that agents do not conflict with each other
/// or the main branch while performing autonomous edits.
pub fn spawn_task_branch(&self, task_id: &str) -> Result<String, EditError> {
let branch_name = format!("task/{}", task_id);
let head = self.repo.head()?.peel_to_commit()?;
self.repo.branch(&branch_name, &head, false)?;
println!("[CODE-EDIT] Spawned branch: {}", branch_name);
Ok(branch_name)
}
/// Checkout a specific branch.
pub fn checkout_branch(&self, branch_name: &str) -> Result<(), EditError> {
let obj = self.repo.revparse_single(&format!("refs/heads/{}", branch_name))?;
self.repo.checkout_tree(&obj, None)?;
self.repo.set_head(&format!("refs/heads/{}", branch_name))?;
Ok(())
}
}