feat: remove pipeline command and refactor workflow execution to use custom specialists

This commit is contained in:
asepharyana
2026-07-13 14:39:39 +07:00
parent 3b660e09a8
commit 00e29139c5
8 changed files with 277 additions and 178 deletions
+33 -1
View File
@@ -171,9 +171,22 @@ impl Tool for CompanyPipeline {
"enum": ["full", "quick"],
"description": "Pipeline mode: 'full' (5 divisions) for complex tasks, 'quick' (3 divisions: Strategy→Engineering→Quality) for simpler tasks",
"default": "full"
},
"specialists": {
"type": "object",
"description": "Mapping from division name (Strategy, Engineering, Quality, Security, Documentation) to list of custom specialists. Each specialist is defined by a pair of [label, focus_description]. This parameter is mandatory. The CEO/main agent must fully define the specialized roles and focuses for every division in the pipeline to run.",
"additionalProperties": {
"type": "array",
"items": {
"type": "array",
"items": { "type": "string" },
"minItems": 2,
"maxItems": 2
}
}
}
},
"required": ["request"]
"required": ["request", "specialists"]
})
}
@@ -186,6 +199,23 @@ impl Tool for CompanyPipeline {
.and_then(|v| v.as_str())
.unwrap_or("full");
let custom_specialists: std::collections::HashMap<String, Vec<(String, String)>> = args.get("specialists")
.and_then(|v| v.as_object())
.map(|obj| {
obj.iter().map(|(k, v)| {
let specs = v.as_array().map(|arr| {
arr.iter().filter_map(|item| {
let pair = item.as_array()?;
let label = pair.get(0)?.as_str()?.to_string();
let focus = pair.get(1)?.as_str()?.to_string();
Some((label, focus))
}).collect()
}).unwrap_or_default();
(k.clone(), specs)
}).collect()
})
.ok_or_else(|| anyhow!("missing required argument: specialists"))?;
let no_abort: Option<std::sync::Arc<std::sync::atomic::AtomicBool>> = None;
match mode {
"quick" => {
@@ -195,6 +225,7 @@ impl Tool for CompanyPipeline {
&ctx.workspaces,
ctx.turn_events.as_ref(),
&no_abort,
custom_specialists,
)
}
_ => {
@@ -204,6 +235,7 @@ impl Tool for CompanyPipeline {
&ctx.workspaces,
ctx.turn_events.as_ref(),
&no_abort,
custom_specialists,
)
}
}