mod address;
mod project;
mod start_terminal;
use super::*;
use crate::app::Snapshot;
use crate::binding::{Workspace, WorkspaceKind};
use crate::git_tree::{Agent, AgentState, GitTree};
use crate::projects::join::{JoinRow, JoinState};
use std::collections::HashMap;
use std::path::Path;
pub(crate) fn agent(id: &str, state: AgentState, ts: i64) -> Agent {
Agent {
branch_name: format!("agents/{id}"),
agent_id: id.to_string(),
tip_oid: "a".repeat(40),
tip_short_oid: "aaaaaaaa".into(),
tip_timestamp_unix: ts,
last_action_unix: ts,
messages: 0,
steps: vec![],
preview: None,
stream: crate::git_tree::Stream::default(),
tool_calls: vec![],
state,
state_uncertain: false,
truncated: false,
failure: None,
flagged: None,
pending: vec![],
conflicted_oid: None,
budget_oid: None,
abandoned_oid: None,
notify_oid: None,
held: None,
goal_ball: None,
name: None,
goal_name: None,
call_start_unix: None,
}
}
pub(crate) fn snapshot(ws: &Path, name: &str, agents: Vec<Agent>, join: Vec<JoinRow>) -> Snapshot {
let mut trees = HashMap::new();
trees.insert(
ws.to_path_buf(),
GitTree {
commits: vec![],
agents,
},
);
let projects: Vec<std::path::PathBuf> = Vec::new();
Snapshot {
workspaces: vec![Workspace {
path: ws.to_path_buf(),
kind: WorkspaceKind::Named {
name: name.to_owned(),
},
}],
projects,
trees,
bills: HashMap::new(),
windows: std::collections::BTreeMap::default(),
balls_by_project: HashMap::new(),
closed_by_project: HashMap::new(),
join_rows: join,
ops: vec![],
growth: vec![],
ui_bytes: None,
derived_at_unix: 0,
cadence: crate::app::Cadence::default(),
fleet: std::collections::BTreeMap::new(),
}
}
pub(crate) fn bound_row(project: &Path, id: &str, ws: &Path, claimant: &str) -> JoinRow {
JoinRow {
project: crate::naming::leaf(project),
ball_id: id.to_owned(),
state: JoinState::Bound,
workspace: Some(crate::naming::leaf(ws)),
claimant: Some(claimant.to_owned()),
title: Some(format!("title of {id}")),
}
}