Files
zesdex/src/tool/workflow.rs
T

55 lines
1.7 KiB
Rust
Raw Normal View History

use serde_json::{json, Value};
use anyhow::{Result, anyhow};
use super::Tool;
use super::ToolCtx;
pub struct WorkflowRun;
impl Tool for WorkflowRun {
fn name(&self) -> &'static str {
"workflow_run"
}
fn description(&self) -> &'static str {
"Execute a workflow script by delegating to the workflow engine"
}
fn parameters(&self) -> Value {
json!({
"type": "object",
"properties": {
"script": {
"type": "string",
"description": "Workflow script content or path to a workflow file"
},
"args": {
"type": "object",
"description": "Optional arguments passed to the workflow script"
}
},
"required": ["script"]
})
}
fn run(&self, _ctx: &ToolCtx, args: &Value) -> Result<String> {
let script_str = args.get("script")
.and_then(|v| v.as_str())
.ok_or_else(|| anyhow!("missing required argument: script"))?;
let workflow_script: crate::app::workflow::script::WorkflowScript =
serde_json::from_str(script_str)
.map_err(|e| anyhow!("failed to parse workflow script: {}", e))?;
let workflow_args: std::collections::HashMap<String, String> = args.get("args")
.and_then(|v| v.as_object())
.map(|obj| {
obj.iter().filter_map(|(k, v)| {
v.as_str().map(|s| (k.clone(), s.to_string()))
}).collect()
})
.unwrap_or_default();
crate::app::workflow::engine::run_workflow(&workflow_script, &workflow_args)
}
}