Add subagent prompts and implement company workflow orchestration

- Introduced prompts for various subagent roles: architecture reviewer, code quality reviewer, documentation maintainer, implementation team, testing team, and security reviewer.
- Implemented the auto-subagent orchestration in `auto.rs` to manage inline and background reviews.
- Created a division structure in `division.rs` to define roles and responsibilities for each subagent.
- Developed a company workflow orchestrator in `company.rs` to run the complete division pipeline, consolidating findings and generating executive summaries.
- Added logic to determine whether to run a full or quick pipeline based on request complexity.
This commit is contained in:
asepharyana
2026-07-13 05:23:38 +07:00
parent 2856dd78b8
commit a6eed9e574
21 changed files with 1577 additions and 85 deletions
+68
View File
@@ -138,3 +138,71 @@ impl Tool for NoteFinding {
Ok(format!("finding recorded: {}", text.chars().take(80).collect::<String>()))
}
}
/// Tool that delegates work to the company-style division pipeline.
///
/// The main agent (CEO) calls this tool to pass a user request through the
/// full company organization: Strategy → Engineering → Quality → Security
/// → Documentation. Returns an executive summary.
///
/// Use this for any complex or multi-step task. For simple tasks, handle
/// inline or use the quick variant.
pub struct CompanyPipeline;
impl Tool for CompanyPipeline {
fn name(&self) -> &'static str {
"company_pipeline"
}
fn description(&self) -> &'static str {
"Delegate a task to the full company division pipeline: Strategy (plan+diagrams) → Engineering (implement) → Quality (review+test) → Security (audit) → Documentation (docs). Use this for ALL non-trivial tasks instead of doing them yourself. The pipeline returns an executive summary."
}
fn parameters(&self) -> Value {
json!({
"type": "object",
"properties": {
"request": {
"type": "string",
"description": "The task description to delegate to the company pipeline"
},
"mode": {
"type": "string",
"enum": ["full", "quick"],
"description": "Pipeline mode: 'full' (5 divisions) for complex tasks, 'quick' (3 divisions: Strategy→Engineering→Quality) for simpler tasks",
"default": "full"
}
},
"required": ["request"]
})
}
fn run(&self, _ctx: &ToolCtx, args: &Value) -> Result<String> {
let request = args.get("request")
.and_then(|v| v.as_str())
.ok_or_else(|| anyhow!("missing required argument: request"))?;
let mode = args.get("mode")
.and_then(|v| v.as_str())
.unwrap_or("full");
match mode {
"quick" => {
crate::app::workflow::company::run_company_pipeline_quick(
request,
&_ctx.session_dir,
&_ctx.workspaces,
_ctx.turn_events.as_ref(),
)
}
_ => {
crate::app::workflow::company::run_company_pipeline(
request,
&_ctx.session_dir,
&_ctx.workspaces,
_ctx.turn_events.as_ref(),
)
}
}
}
}