Final: Fully implement real-world logic across all crates - Zero simulations
This commit is contained in:
@@ -9,7 +9,7 @@ use chrs_prompts::get_system_prompt;
|
||||
use chrs_code_edit::WorktreeManager;
|
||||
use chrs_discovery::{SwarmManager, BusHandle, BusMessage};
|
||||
use chrs_election::ElectionManager;
|
||||
use chrono::{Utc, DateTime};
|
||||
use chrono::{Utc, DateTime, Duration as ChronoDuration};
|
||||
use std::path::Path;
|
||||
use std::process::Command;
|
||||
use std::time::Duration;
|
||||
@@ -57,7 +57,7 @@ impl CHORUSAgent {
|
||||
};
|
||||
let graph = DoltGraph::init(&graph_path)?;
|
||||
let code_edit = WorktreeManager::open(&repo_path).ok();
|
||||
// Ensure tables exist
|
||||
|
||||
let _ = graph.create_table("task_log", "id VARCHAR(255) PRIMARY KEY, topic TEXT, payload TEXT, received_at TEXT");
|
||||
let _ = graph.create_table("execution_results", "id VARCHAR(255) PRIMARY KEY, task_id TEXT, stdout TEXT, stderr TEXT, duration_ms INT");
|
||||
let _ = graph.create_table("api_call_log", "id VARCHAR(255) PRIMARY KEY, agent_id TEXT, called_at TEXT, status TEXT");
|
||||
@@ -71,7 +71,6 @@ impl CHORUSAgent {
|
||||
let executor = DockerExecutor::new()?;
|
||||
let system_prompt = get_system_prompt(role).to_string();
|
||||
|
||||
// Initialize P2P Bus with a small randomized delay to prevent simultaneous swarm storms
|
||||
let delay = rand::thread_rng().gen_range(1..5);
|
||||
println!("[AGENT {}] Waiting {}s for P2P bootstrap...", id, delay);
|
||||
sleep(Duration::from_secs(delay)).await;
|
||||
@@ -79,7 +78,6 @@ impl CHORUSAgent {
|
||||
let (bus_tx, bus_rx) = mpsc::unbounded_channel();
|
||||
let bus = SwarmManager::start_bus(bus_tx).await?;
|
||||
|
||||
// Initialize Election Manager
|
||||
let election = ElectionManager::new(id, bus.clone());
|
||||
|
||||
Ok(Self {
|
||||
@@ -100,7 +98,34 @@ impl CHORUSAgent {
|
||||
})
|
||||
}
|
||||
|
||||
/// Agent's 'thinking' phase with cooperative throttling and jittered backoff.
|
||||
pub fn check_global_throttle(&self) -> bool {
|
||||
let one_minute_ago = Utc::now() - ChronoDuration::seconds(60);
|
||||
let query = format!(
|
||||
"SELECT count(*) FROM api_call_log WHERE called_at > '{}'",
|
||||
one_minute_ago.to_rfc3339()
|
||||
);
|
||||
|
||||
match self.graph.query(&query) {
|
||||
Ok(result) => {
|
||||
let count: u32 = result
|
||||
.split_whitespace()
|
||||
.filter_map(|s| s.parse().ok())
|
||||
.next()
|
||||
.unwrap_or(0);
|
||||
|
||||
if count >= 35 {
|
||||
println!("[AGENT {}] Global throttle active: {} calls in last minute.", self.id, count);
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("[AGENT {}] Failed to check global throttle: {}", self.id, e);
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn think(&self, message: &str) -> String {
|
||||
println!("[AGENT {}] Thinking as {:?}...", self.id, self.role);
|
||||
|
||||
@@ -109,11 +134,10 @@ impl CHORUSAgent {
|
||||
let base_delay = Duration::from_secs(2);
|
||||
|
||||
loop {
|
||||
// 1. Cooperative Throttling: Check global cluster load in the last minute
|
||||
// In a real implementation, we would use: SELECT count(*) FROM api_call_log WHERE called_at > now - 60s
|
||||
// For now, we simulate a check that respects the 40 calls/min limit.
|
||||
while self.check_global_throttle() {
|
||||
sleep(Duration::from_secs(2)).await;
|
||||
}
|
||||
|
||||
// 2. Log Attempt
|
||||
let call_id = Uuid::new_v4().to_string();
|
||||
let log_entry = serde_json::json!({
|
||||
"id": call_id,
|
||||
@@ -123,7 +147,6 @@ impl CHORUSAgent {
|
||||
});
|
||||
let _ = self.graph.insert_node("api_call_log", log_entry);
|
||||
|
||||
// 3. Perform the actual API call to opencode
|
||||
let output = Command::new("opencode")
|
||||
.args(&[
|
||||
"run",
|
||||
@@ -158,7 +181,6 @@ impl CHORUSAgent {
|
||||
return format!("Error: Maximum thinking attempts reached. Last error: {}", error_msg);
|
||||
}
|
||||
|
||||
// 4. Jittered Exponential Backoff
|
||||
let jitter = rand::thread_rng().gen_range(0..1000);
|
||||
let delay = base_delay.mul_f64(2.0_f64.powi(attempts - 1)) + Duration::from_millis(jitter);
|
||||
|
||||
@@ -169,7 +191,6 @@ impl CHORUSAgent {
|
||||
}
|
||||
}
|
||||
|
||||
/// Main execution loop for the agent.
|
||||
pub async fn run_loop(&mut self) {
|
||||
println!("[AGENT {}] Role: {:?} starting...", self.id, self.role);
|
||||
|
||||
@@ -179,21 +200,15 @@ impl CHORUSAgent {
|
||||
|
||||
loop {
|
||||
tokio::select! {
|
||||
// 1. Periodic Heartbeat (if leader)
|
||||
_ = heartbeat_tick.tick() => {
|
||||
let _ = self.election.send_heartbeat().await;
|
||||
let heartbeat_payload = serde_json::to_vec(&self.council.local_peer).unwrap();
|
||||
let _ = self.bus.publish("chorus-heartbeat", heartbeat_payload);
|
||||
}
|
||||
|
||||
// 2. Periodic Election State Machine Step
|
||||
_ = election_tick.tick() => {
|
||||
let _ = self.election.run_step().await;
|
||||
}
|
||||
|
||||
// 3. Check for direct messages (Mailbox)
|
||||
_ = mailbox_tick.tick() => {
|
||||
println!("[AGENT {}] Polling mailbox...", self.id);
|
||||
match self.mailbox.receive_pending(&self.id) {
|
||||
Ok(messages) => {
|
||||
for msg in messages {
|
||||
@@ -203,8 +218,6 @@ impl CHORUSAgent {
|
||||
Err(e) => eprintln!("[AGENT {}] Mailbox task error: {}", self.id, e),
|
||||
}
|
||||
}
|
||||
|
||||
// 4. Check P2P Bus for messages
|
||||
msg = self.bus_rx.recv() => {
|
||||
if let Some(msg) = msg {
|
||||
if msg.topic == "chorus-heartbeat" {
|
||||
@@ -219,7 +232,6 @@ impl CHORUSAgent {
|
||||
} else if msg.topic == "CHORUS/election/v1" || msg.topic == "CHORUS/admin/heartbeat/v1" {
|
||||
let _ = self.election.process_message(&msg).await;
|
||||
} else if msg.topic == "chorus-global" {
|
||||
// Check if it is a BeatFrame or a StatusClaim (for P2P sync)
|
||||
if let Ok(frame) = serde_json::from_slice::<BeatFrame>(&msg.payload) {
|
||||
self.handle_beat(frame).await;
|
||||
}
|
||||
@@ -239,8 +251,6 @@ impl CHORUSAgent {
|
||||
state: if self.election.is_leader() { "leading".into() } else { "idle".into() },
|
||||
progress: 1.0,
|
||||
};
|
||||
|
||||
// 1. Send to Mailbox
|
||||
let msg = Message {
|
||||
id: Uuid::new_v4(),
|
||||
from_peer: self.id.clone(),
|
||||
@@ -251,8 +261,6 @@ impl CHORUSAgent {
|
||||
read_at: None,
|
||||
};
|
||||
let _ = self.mailbox.send(&msg);
|
||||
|
||||
// 2. Publish to P2P Bus
|
||||
let payload = serde_json::to_vec(&claim).unwrap();
|
||||
let _ = self.bus.publish("chorus-global", payload);
|
||||
}
|
||||
@@ -269,7 +277,6 @@ impl CHORUSAgent {
|
||||
let _ = self.graph.insert_node("task_log", log_entry);
|
||||
let _ = self.graph.commit(&format!("Logged task: {}", msg.topic));
|
||||
|
||||
// 1. Delegation logic (Leader or Senior Architect)
|
||||
if msg.topic == "task" && (self.election.is_leader() || self.role == Role::SeniorSoftwareArchitect || self.role == Role::Architect) {
|
||||
let peers_vec: Vec<Peer> = self.peers.values().cloned().collect();
|
||||
if !peers_vec.is_empty() {
|
||||
@@ -281,10 +288,14 @@ impl CHORUSAgent {
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Execution logic
|
||||
if msg.topic == "implementation_task" || msg.topic == "execution_task" || msg.topic == "planning_task" {
|
||||
let is_specialized_task = match msg.topic.as_str() {
|
||||
"implementation_task" | "execution_task" | "planning_task" |
|
||||
"review_task" | "test_task" | "security_audit_task" | "documentation_task" => true,
|
||||
_ => false,
|
||||
};
|
||||
|
||||
if is_specialized_task {
|
||||
let workspace_path = if let Some(mgr) = &self.code_edit {
|
||||
println!("[AGENT {}] Preparing workspace for task...", self.id);
|
||||
let _ = mgr.spawn_task_branch(&msg.id.to_string());
|
||||
let _ = mgr.checkout_branch(&format!("task/{}", msg.id));
|
||||
Some(mgr.repo_path().to_string_lossy().to_string())
|
||||
@@ -293,9 +304,8 @@ impl CHORUSAgent {
|
||||
};
|
||||
|
||||
let task_desc = msg.payload["description"].as_str().unwrap_or("No description provided");
|
||||
let task_instr = msg.payload["instruction"].as_str().unwrap_or("Execute the task.");
|
||||
let task_instr = msg.payload["instruction"].as_str().unwrap_or("Execute task.");
|
||||
|
||||
println!("[AGENT {}] Incepting sub-agent for: {}", self.id, task_desc);
|
||||
let reasoning = self.think(task_desc).await;
|
||||
|
||||
let req = TaskRequest {
|
||||
@@ -305,9 +315,9 @@ impl CHORUSAgent {
|
||||
workspace_path,
|
||||
timeout_secs: 600,
|
||||
};
|
||||
|
||||
match self.executor.execute(req).await {
|
||||
Ok(res) => {
|
||||
println!("[AGENT {}] Sub-agent task completed.", self.id);
|
||||
let result_entry = serde_json::json!({
|
||||
"id": Uuid::new_v4().to_string(),
|
||||
"task_id": msg.id.to_string(),
|
||||
@@ -316,17 +326,12 @@ impl CHORUSAgent {
|
||||
"duration_ms": res.duration_ms
|
||||
});
|
||||
let _ = self.graph.insert_node("execution_results", result_entry);
|
||||
let _ = self.graph.commit(&format!("Recorded sub-agent results for task: {}", msg.id));
|
||||
let _ = self.graph.commit(&format!("Recorded results for task: {}", msg.id));
|
||||
}
|
||||
Err(e) => eprintln!("[AGENT {}] Execution error: {}", self.id, e),
|
||||
}
|
||||
}
|
||||
|
||||
if msg.topic == "security_audit_task" {
|
||||
println!("[AGENT {}] Performing security audit...", self.id);
|
||||
let _reasoning = self.think("Perform security audit on latest implementation").await;
|
||||
}
|
||||
|
||||
let _ = self.mailbox.mark_read(msg.id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,12 +66,8 @@ impl DoltGraph {
|
||||
})
|
||||
}
|
||||
|
||||
/// Execute a Dolt command with the specified arguments.
|
||||
///
|
||||
/// This helper centralises command execution and error handling. It runs `dolt` with the
|
||||
/// provided argument slice, captures stdout/stderr, and returns `GraphError::CommandFailed`
|
||||
/// when the command exits with a non‑zero status.
|
||||
fn run_cmd(&self, args: &[&str]) -> Result<(), GraphError> {
|
||||
/// Execute a Dolt command with the specified arguments and return stdout.
|
||||
fn run_cmd_capture(&self, args: &[&str]) -> Result<String, GraphError> {
|
||||
let output = Command::new("dolt")
|
||||
.args(args)
|
||||
.current_dir(&self.repo_path)
|
||||
@@ -80,9 +76,20 @@ impl DoltGraph {
|
||||
let stderr = String::from_utf8_lossy(&output.stderr);
|
||||
return Err(GraphError::CommandFailed(stderr.to_string()));
|
||||
}
|
||||
Ok(String::from_utf8_lossy(&output.stdout).to_string())
|
||||
}
|
||||
|
||||
/// Execute a Dolt command with the specified arguments.
|
||||
fn run_cmd(&self, args: &[&str]) -> Result<(), GraphError> {
|
||||
self.run_cmd_capture(args)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Executes a SQL query and returns the raw string result.
|
||||
pub fn query(&self, sql: &str) -> Result<String, GraphError> {
|
||||
self.run_cmd_capture(&["sql", "-q", sql])
|
||||
}
|
||||
|
||||
/// Stage all changes and commit them with the provided `message`.
|
||||
///
|
||||
/// The method first runs `dolt add -A` to stage modifications, then `dolt commit -m`.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
e57a9792c601cd96
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":15597765236515928571,"features":"[]","declared_features":"[]","target":11189401877460069322,"profile":17672942494452627365,"path":15586282002135408897,"deps":[[303782240219042746,"chrs_council",false,12015880436388741738],[2435133206607685902,"chrs_agent",false,7027476187743864158],[3856126590694406759,"chrono",false,10274387264389562704],[6743343474447045702,"chrs_mail",false,12213287967330248873],[9462185088798423431,"uuid",false,17971560908104734438],[12891030758458664808,"tokio",false,6922689052733440109],[13795362694956882968,"serde_json",false,10211988446099616948]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/chrs-big-council-demo-7ccd79fb1a9fe3b5/dep-bin-chrs-big-council-demo","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -1,7 +1,7 @@
|
||||
{"$message_type":"diagnostic","message":"unused imports: `Mailbox` and `Message`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":69,"byte_end":76,"line_start":3,"line_end":3,"column_start":17,"column_end":24,"is_primary":true,"text":[{"text":"use chrs_mail::{Mailbox, Message};","highlight_start":17,"highlight_end":24}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"chrs-council-demo/src/main.rs","byte_start":78,"byte_end":85,"line_start":3,"line_end":3,"column_start":26,"column_end":33,"is_primary":true,"text":[{"text":"use chrs_mail::{Mailbox, Message};","highlight_start":26,"highlight_end":33}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":53,"byte_end":88,"line_start":3,"line_end":4,"column_start":1,"column_end":1,"is_primary":true,"text":[{"text":"use chrs_mail::{Mailbox, Message};","highlight_start":1,"highlight_end":35},{"text":"use chrono::Utc;","highlight_start":1,"highlight_end":1}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused imports: `Mailbox` and `Message`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:3:17\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m3\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse chrs_mail::{Mailbox, Message};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"unused import: `chrono::Utc`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":92,"byte_end":103,"line_start":4,"line_end":4,"column_start":5,"column_end":16,"is_primary":true,"text":[{"text":"use chrono::Utc;","highlight_start":5,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":88,"byte_end":105,"line_start":4,"line_end":5,"column_start":1,"column_end":1,"is_primary":true,"text":[{"text":"use chrono::Utc;","highlight_start":1,"highlight_end":17},{"text":"use std::fs;","highlight_start":1,"highlight_end":1}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `chrono::Utc`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:4:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m4\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse chrono::Utc;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"unused import: `uuid::Uuid`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":179,"byte_end":189,"line_start":8,"line_end":8,"column_start":5,"column_end":15,"is_primary":true,"text":[{"text":"use uuid::Uuid;","highlight_start":5,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":175,"byte_end":191,"line_start":8,"line_end":9,"column_start":1,"column_end":1,"is_primary":true,"text":[{"text":"use uuid::Uuid;","highlight_start":1,"highlight_end":16},{"text":"","highlight_start":1,"highlight_end":1}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `uuid::Uuid`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:8:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m8\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse uuid::Uuid;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":634,"byte_end":647,"line_start":23,"line_end":23,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":" let mut architect = CHORUSAgent::init(\"agent-architect\", Role::Architect, &base_path.join(\"architect\")).await?;","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_mut)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":634,"byte_end":638,"line_start":23,"line_end":23,"column_start":9,"column_end":13,"is_primary":true,"text":[{"text":" let mut architect = CHORUSAgent::init(\"agent-architect\", Role::Architect, &base_path.join(\"architect\")).await?;","highlight_start":9,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:23:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m23\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let mut architect = CHORUSAgent::init(\"agent-architect\", Role::Architect, &base_path.join(\"architect\")).await?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_mut)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":750,"byte_end":763,"line_start":24,"line_end":24,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":" let mut developer = CHORUSAgent::init(\"agent-developer\", Role::Developer, &base_path.join(\"developer\")).await?;","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":750,"byte_end":754,"line_start":24,"line_end":24,"column_start":9,"column_end":13,"is_primary":true,"text":[{"text":" let mut developer = CHORUSAgent::init(\"agent-developer\", Role::Developer, &base_path.join(\"developer\")).await?;","highlight_start":9,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:24:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m24\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let mut developer = CHORUSAgent::init(\"agent-developer\", Role::Developer, &base_path.join(\"developer\")).await?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":866,"byte_end":878,"line_start":25,"line_end":25,"column_start":9,"column_end":21,"is_primary":true,"text":[{"text":" let mut security = CHORUSAgent::init(\"agent-security\", Role::Security, &base_path.join(\"security\")).await?;","highlight_start":9,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":866,"byte_end":870,"line_start":25,"line_end":25,"column_start":9,"column_end":13,"is_primary":true,"text":[{"text":" let mut security = CHORUSAgent::init(\"agent-security\", Role::Security, &base_path.join(\"security\")).await?;","highlight_start":9,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:25:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m25\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let mut security = CHORUSAgent::init(\"agent-security\", Role::Security, &base_path.join(\"security\")).await?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":634,"byte_end":647,"line_start":23,"line_end":23,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":" let mut architect = CHORUSAgent::init(\"agent-architect\", Role::Architect, &base_path.join(\"architect\"), None).await?;","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_mut)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":634,"byte_end":638,"line_start":23,"line_end":23,"column_start":9,"column_end":13,"is_primary":true,"text":[{"text":" let mut architect = CHORUSAgent::init(\"agent-architect\", Role::Architect, &base_path.join(\"architect\"), None).await?;","highlight_start":9,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:23:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m23\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let mut architect = CHORUSAgent::init(\"agent-architect\", Role::Architect, &base_path.join(\"architect\"), None).await?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_mut)]` on by default\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":756,"byte_end":769,"line_start":24,"line_end":24,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":" let mut developer = CHORUSAgent::init(\"agent-developer\", Role::Developer, &base_path.join(\"developer\"), None).await?;","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":756,"byte_end":760,"line_start":24,"line_end":24,"column_start":9,"column_end":13,"is_primary":true,"text":[{"text":" let mut developer = CHORUSAgent::init(\"agent-developer\", Role::Developer, &base_path.join(\"developer\"), None).await?;","highlight_start":9,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:24:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m24\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let mut developer = CHORUSAgent::init(\"agent-developer\", Role::Developer, &base_path.join(\"developer\"), None).await?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"variable does not need to be mutable","code":{"code":"unused_mut","explanation":null},"level":"warning","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":878,"byte_end":890,"line_start":25,"line_end":25,"column_start":9,"column_end":21,"is_primary":true,"text":[{"text":" let mut security = CHORUSAgent::init(\"agent-security\", Role::Security, &base_path.join(\"security\"), None).await?;","highlight_start":9,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"remove this `mut`","code":null,"level":"help","spans":[{"file_name":"chrs-council-demo/src/main.rs","byte_start":878,"byte_end":882,"line_start":25,"line_end":25,"column_start":9,"column_end":13,"is_primary":true,"text":[{"text":" let mut security = CHORUSAgent::init(\"agent-security\", Role::Security, &base_path.join(\"security\"), None).await?;","highlight_start":9,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: variable does not need to be mutable\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0mchrs-council-demo/src/main.rs:25:9\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m25\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m let mut security = CHORUSAgent::init(\"agent-security\", Role::Security, &base_path.join(\"security\"), None).await?;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m----\u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: remove this `mut`\u001b[0m\n\n"}
|
||||
{"$message_type":"diagnostic","message":"6 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 6 warnings emitted\u001b[0m\n\n"}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
/home/tony/rust/projects/reset/CHORUS/target/debug/deps/libchrs_big_council_demo-7ccd79fb1a9fe3b5.rmeta: chrs-big-council-demo/src/main.rs
|
||||
|
||||
/home/tony/rust/projects/reset/CHORUS/target/debug/deps/chrs_big_council_demo-7ccd79fb1a9fe3b5.d: chrs-big-council-demo/src/main.rs
|
||||
|
||||
chrs-big-council-demo/src/main.rs:
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user