feat: implement workflow findings sharing for inter-agent communication in workflows
This commit is contained in:
+13
-1
@@ -38,7 +38,7 @@ pub struct GraduatedCheck {
|
||||
}
|
||||
|
||||
/// Shared execution context passed to every `Tool::run` call: workspace roots, session
|
||||
/// paths, and cached directory state.
|
||||
/// paths, cached directory state, and workflow-level findings sharing.
|
||||
#[derive(Clone)]
|
||||
pub struct ToolCtx {
|
||||
pub workspaces: Vec<PathBuf>,
|
||||
@@ -51,6 +51,12 @@ pub struct ToolCtx {
|
||||
pub graduated_checks: Vec<GraduatedCheck>,
|
||||
pub lsp_manager: Arc<Mutex<crate::app::lsp::LspManager>>,
|
||||
pub turn_events: Option<Arc<Mutex<std::collections::VecDeque<crate::app::state::runtime::TurnEvent>>>>,
|
||||
/// Ephemeral findings shared between sibling subagents in a workflow run.
|
||||
/// Set by the workflow engine before spawning subagents; tools like
|
||||
/// `note_finding` write into this vec so later pipeline stages can
|
||||
/// reference earlier results. `None` means "not inside a workflow" —
|
||||
/// `note_finding` becomes a no-op.
|
||||
pub workflow_findings: Option<Arc<Mutex<Vec<String>>>>,
|
||||
}
|
||||
|
||||
/// Find which graduated checks apply to a given file path/content pair.
|
||||
@@ -88,6 +94,7 @@ pub struct ToolCtxBuilder {
|
||||
pub graduated_checks: Vec<GraduatedCheck>,
|
||||
pub lsp_manager: Arc<Mutex<crate::app::lsp::LspManager>>,
|
||||
pub turn_events: Option<Arc<Mutex<std::collections::VecDeque<crate::app::state::runtime::TurnEvent>>>>,
|
||||
pub workflow_findings: Option<Arc<Mutex<Vec<String>>>>,
|
||||
}
|
||||
|
||||
impl Default for ToolCtxBuilder {
|
||||
@@ -103,6 +110,7 @@ impl Default for ToolCtxBuilder {
|
||||
graduated_checks: Vec::new(),
|
||||
lsp_manager: Arc::new(Mutex::new(crate::app::lsp::LspManager::new())),
|
||||
turn_events: None,
|
||||
workflow_findings: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,6 +125,9 @@ impl ToolCtxBuilder {
|
||||
/// Set the lsp_manager.
|
||||
#[allow(dead_code)]
|
||||
pub fn lsp_manager(mut self, v: Arc<Mutex<crate::app::lsp::LspManager>>) -> Self { self.lsp_manager = v; self }
|
||||
/// Set the workflow-level findings sharing Arc (for subagent-to-subagent
|
||||
/// communication within a workflow run).
|
||||
pub fn workflow_findings(mut self, v: Option<Arc<Mutex<Vec<String>>>>) -> Self { self.workflow_findings = v; self }
|
||||
/// Consume the builder and produce the final `ToolCtx`.
|
||||
pub fn build(self) -> ToolCtx {
|
||||
ToolCtx {
|
||||
@@ -130,6 +141,7 @@ impl ToolCtxBuilder {
|
||||
graduated_checks: self.graduated_checks,
|
||||
lsp_manager: self.lsp_manager,
|
||||
turn_events: self.turn_events,
|
||||
workflow_findings: self.workflow_findings,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user