pub mod analyzed;
pub mod analyzer;
pub mod lower;
pub mod raw;
pub mod schema;
pub mod budget;
pub mod content;
#[cfg(test)]
mod tests_200_workflows;
mod action;
mod agent;
mod agent_def;
pub mod artifact;
pub mod completion;
pub mod context;
pub mod decompose;
pub mod guardrails;
pub mod import_loader;
pub mod include;
pub mod include_loader;
mod invoke;
pub mod limits;
pub mod loader;
pub mod logging;
pub mod output;
pub mod pkg_resolver;
pub mod schema_validator;
pub mod skill_def;
pub mod structured;
mod workflow;
pub use action::{ExecParams, FetchParams, InferParams, TaskAction};
pub use agent::{AgentParams, ToolChoice};
pub use agent_def::AgentDef;
pub use invoke::InvokeParams;
pub use context::ContextConfig;
pub use include::IncludeSpec;
pub use output::{OutputFormat, OutputPolicy, SchemaRef};
pub use skill_def::{SkillDef, SkillRef};
pub use pkg_resolver::PkgUri;
pub use workflow::{McpConfigInline, Task, Workflow};
pub use decompose::{DecomposeSpec, DecomposeStrategy};
pub use loader::{discover_definitions, load_definition, DefinitionKind, LoadedDefinition};
pub use import_loader::expand_imports;
pub use include_loader::expand_includes;
pub use structured::StructuredOutputSpec;
pub use completion::{
CompletionConfig, CompletionMode, ConfidenceConfig, InstructionConfig, LowConfidenceAction,
PatternConfig, PatternType, SignalConfig, SignalFields,
};
pub use limits::{LimitAction, LimitStatus, LimitType, LimitsConfig, OnLimitReachedConfig};
pub use lower::{lower, unlower};
use crate::ast::analyzed::AnalyzedWorkflow;
use crate::error::NikaError;
use crate::source::FileId;
pub fn parse_workflow(yaml: &str) -> Result<Workflow, NikaError> {
let raw = raw::parse(yaml, FileId(0)).map_err(|e| NikaError::ParseError {
details: format!("[{}] {}", e.kind.code(), e.message),
})?;
let analyzed = analyzer::analyze(raw).into_result().map_err(|errors| {
let messages: Vec<String> = errors
.iter()
.map(|e| format!("[{}] {}", e.kind.code(), e))
.collect();
NikaError::ValidationError {
reason: messages.join("; "),
}
})?;
lower(analyzed)
}
pub fn parse_analyzed(yaml: &str) -> Result<AnalyzedWorkflow, NikaError> {
let raw = raw::parse(yaml, FileId(0)).map_err(|e| NikaError::ParseError {
details: format!("[{}] {}", e.kind.code(), e.message),
})?;
analyzer::analyze(raw).into_result().map_err(|errors| {
let messages: Vec<String> = errors
.iter()
.map(|e| format!("[{}] {}", e.kind.code(), e))
.collect();
NikaError::ValidationError {
reason: messages.join("; "),
}
})
}