feat: resolve $flow_expr[...] dynamic tags on flow steps

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
hugocasa
2026-09-16 13:38:35 +02:00
co-authored by Claude Opus 5
parent 54553b2add
commit 5e97ec22b4
4 changed files with 175 additions and 14 deletions
+8
View File
@@ -4650,6 +4650,12 @@ pub fn tag_reads_args(tag: &str) -> bool {
RE_ARG_TAG.is_match(tag)
}
/// Whether the tag reads the flow's state (`$flow_expr[results.a.foo]`). Only the flow runtime
/// can resolve it, right before pushing the step; `push` leaves it verbatim.
pub fn tag_reads_flow_expr(tag: &str) -> bool {
RE_FLOW_EXPR_TAG.is_match(tag)
}
pub fn interpolate_args(x: String, args: &PushArgs, workspace_id: &str) -> String {
// Save this value to avoid parsing twice
let workspaced = x.as_str().replace("$workspace", workspace_id).to_string();
@@ -5269,6 +5275,8 @@ pub fn empty_result() -> Box<RawValue> {
lazy_static::lazy_static! {
pub static ref RE_ARG_TAG: Regex = Regex::new(r#"\$args\[((?:\w+\.)*\w+)\]"#).unwrap();
pub static ref RE_FLOW_EXPR_TAG: Regex =
Regex::new(r#"\$flow_expr\[((?:\w+\.)*\w+)\]"#).unwrap();
}
#[cfg(feature = "cloud")]