use clap::{Parser, Subcommand};
use uuid::Uuid;
#[derive(Parser)]
#[command(name = "agent-office")]
#[command(about = "A graph-based data structure tool for AI agents")]
#[command(version = "0.1.0")]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
#[command(subcommand)]
Mail(MailCommands),
#[command(subcommand)]
Agent(AgentCommands),
#[command(subcommand)]
Db(DbCommands),
#[command(subcommand)]
Kb(KbCommands),
Web {
#[arg(short = 'H', long, default_value = "127.0.0.1")]
host: String,
#[arg(short, long, default_value = "8080")]
port: u16,
},
}
#[derive(Subcommand)]
pub enum MailCommands {
Recent {
agent_id: String,
},
Send {
#[arg(short, long)]
from: String,
#[arg(short, long)]
to: String,
#[arg(short, long)]
subject: String,
#[arg(short, long)]
body: String,
},
Inbox {
#[arg(short, long)]
agent_id: String,
},
Outbox {
#[arg(short, long)]
agent_id: String,
},
Read {
#[arg(short, long)]
mail_id: Uuid,
},
ShouldLook {
#[arg(short, long)]
agent_id: String,
},
Watch {
#[arg(short, long)]
agent_id: String,
#[arg(short, long, default_value = "60")]
interval: u64,
#[arg(short, long)]
bash: String,
},
Search {
agent_id: String,
query: String,
},
}
#[derive(Subcommand)]
pub enum AgentCommands {
Create {
#[arg(short, long)]
name: String,
},
List,
Get {
#[arg(short, long)]
id: String,
},
Status {
#[arg(short, long)]
id: String,
#[arg(short, long)]
status: String,
},
}
#[derive(Subcommand)]
pub enum DbCommands {
Setup,
}
#[derive(Subcommand)]
pub enum KbCommands {
Init {
#[arg(short, long)]
agent_id: String,
#[arg(short, long)]
name: String,
},
Note {
#[arg(short, long)]
agent_id: String,
#[arg(short, long)]
title: String,
#[arg(short, long)]
content: String,
},
NoteWithId {
#[arg(short, long)]
agent_id: String,
#[arg(short, long)]
luhmann_id: String,
#[arg(short, long)]
title: String,
#[arg(short, long)]
content: String,
},
Branch {
#[arg(short, long)]
agent_id: String,
#[arg(short, long)]
parent_note_id: Uuid,
#[arg(short, long)]
title: String,
#[arg(short, long)]
content: String,
},
List {
#[arg(short, long)]
agent_id: String,
},
Get {
#[arg(short, long)]
note_id: Uuid,
},
GetByLuhmann {
#[arg(short, long)]
agent_id: String,
#[arg(short, long)]
luhmann_id: String,
},
Link {
#[arg(short, long)]
from: Uuid,
#[arg(short, long)]
to: Uuid,
#[arg(short, long)]
context: Option<String>,
},
Backlinks {
#[arg(short, long)]
note_id: Uuid,
},
Related {
#[arg(short, long)]
note_id: Uuid,
#[arg(short, long, default_value = "2")]
depth: usize,
},
Tree {
#[arg(short, long)]
agent_id: String,
#[arg(short, long)]
prefix: String,
},
Search {
#[arg(short, long)]
agent_id: String,
#[arg(short, long)]
query: String,
},
Tag {
#[arg(short, long)]
note_id: Uuid,
#[arg(short, long)]
tag: String,
},
Tags {
#[arg(short, long)]
agent_id: String,
},
Graph {
#[arg(short, long)]
note_id: Uuid,
#[arg(short, long, default_value = "2")]
depth: usize,
},
}