From daf82929a0005e5a3fe4e77930ad0ab2844b478b Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Wed, 14 Oct 2026 17:26:56 -0400 Subject: [PATCH 1/2] Adopt Petri skill expansion boundaries --- Cargo.lock | 30 ++-- docs/public/agents/skills.mdx | 14 +- lib/components/fabro-petri/tests/skills.rs | 181 +++++++++++++++++++++ 3 files changed, 205 insertions(+), 20 deletions(-) create mode 100644 lib/components/fabro-petri/tests/skills.rs diff --git a/Cargo.lock b/Cargo.lock index b4d8889cf..f9d5c576c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5167,7 +5167,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petri-attractor-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "globset", @@ -5198,7 +5198,7 @@ dependencies = [ [[package]] name = "petri-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5218,7 +5218,7 @@ dependencies = [ [[package]] name = "petri-engine" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "petri-ir", "serde", @@ -5230,7 +5230,7 @@ dependencies = [ [[package]] name = "petri-execution" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "petri-driver", @@ -5254,7 +5254,7 @@ dependencies = [ [[package]] name = "petri-executor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "libc", @@ -5269,7 +5269,7 @@ dependencies = [ [[package]] name = "petri-executor-sandbox" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "petri-executor", @@ -5291,7 +5291,7 @@ dependencies = [ [[package]] name = "petri-frontend" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "marked-yaml", "petri-ir", @@ -5305,7 +5305,7 @@ dependencies = [ [[package]] name = "petri-frontend-attractor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "minijinja", "petri-frontend", @@ -5322,7 +5322,7 @@ dependencies = [ [[package]] name = "petri-frontend-fabro" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "petri-frontend", "petri-frontend-attractor", @@ -5338,7 +5338,7 @@ dependencies = [ [[package]] name = "petri-frontend-native" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "petri-frontend", "petri-ir", @@ -5349,7 +5349,7 @@ dependencies = [ [[package]] name = "petri-ir" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "regex", "serde", @@ -5362,7 +5362,7 @@ dependencies = [ [[package]] name = "petri-runtime" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "petri-driver", @@ -5383,7 +5383,7 @@ dependencies = [ [[package]] name = "petri-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "petri-executor", @@ -5399,7 +5399,7 @@ dependencies = [ [[package]] name = "petri-store" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5414,7 +5414,7 @@ dependencies = [ [[package]] name = "petri-testkit" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#857a171bc984d578eeaedac574ff754431dc0002" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#56ec3849ca693974ff778aa5ad4f9f9410d47d29" dependencies = [ "async-trait", "petri-driver", diff --git a/docs/public/agents/skills.mdx b/docs/public/agents/skills.mdx index cbc300b67..f850cc978 100644 --- a/docs/public/agents/skills.mdx +++ b/docs/public/agents/skills.mdx @@ -31,20 +31,24 @@ Skills can be invoked in two ways. ### Slash syntax (user input) -Users can reference a skill with a `/` prefix in their input: +On the native agent backend, start authored input with `/skill-name` to invoke a skill: ``` /commit fix the off-by-one error in pagination ``` -Fabro detects the `/commit` token, finds the matching skill, and expands the input by replacing the skill reference with the full template. The remaining text (`fix the off-by-one error in pagination`) is substituted into the `{{user_input}}` placeholder. +Fabro detects the leading `/commit` command, finds the matching skill, and expands the authored input using its template. The remaining text (`fix the off-by-one error in pagination`) is substituted into the `{{user_input}}` placeholder. A template without that placeholder replaces the authored input. Rules for slash syntax: -- The `/` must be preceded by whitespace or be at the start of the input +- The command must be at the start of authored input, after any leading whitespace - The skill name must be followed by whitespace or end of input -- Only one skill reference per input is allowed +- Later slash tokens are ordinary arguments or text: `/commit mention /review` invokes only `commit`, while `Please run /commit` invokes no skill - File paths like `/usr/bin/bash` are not matched (the character after `/` must be a lowercase letter, and the name cannot contain `/`) +For native workflow agent stages, only the authored node prompt is expanded. Workflow preambles, prior-stage context, `for_each` item data, and output contracts remain outside expansion and are preserved even when the template has no `{{user_input}}` placeholder. For example, prior-stage text mentioning `/tmp` or `/commit` stays literal. + +User-delivered follow-ups also support a leading command. Generated output-repair turns bypass expansion. ACP agents receive the assembled workflow input and own any command interpretation; one-shot prompt nodes do not expand skills. + ### use_skill tool (agent-initiated) When skills are available, Fabro adds a `use_skill` tool to the agent's toolset and lists the available skills in the system prompt: @@ -69,5 +73,5 @@ Returns the skill's template text. 1. **Discovery** -- On session startup, Fabro scans the skill directories and parses all valid `SKILL.md` files 2. **Registration** -- If any skills are found, the `use_skill` tool is registered and the skill list is added to the system prompt -3. **Expansion** -- When user input contains a `/skill-name` reference, Fabro expands it before sending to the LLM +3. **Expansion** -- On the native agent backend, a leading `/skill-name` command in authored input is expanded before sending to the LLM. Leading whitespace is allowed; later slash tokens stay literal. Workflow context and output requirements remain outside expansion, and generated output-repair turns bypass it 4. **Tool use** -- The agent can also call `use_skill` at any time to load a skill's template mid-conversation diff --git a/lib/components/fabro-petri/tests/skills.rs b/lib/components/fabro-petri/tests/skills.rs new file mode 100644 index 000000000..4ba9f5e84 --- /dev/null +++ b/lib/components/fabro-petri/tests/skills.rs @@ -0,0 +1,181 @@ +//! Skills discovered through Fabro's runtime expand only authored native input. + +mod support; + +use std::sync::{Arc, Mutex}; + +use fabro_llm::test_support::{self, ScriptedAdapter}; +use fabro_petri::check::Launch; +use fabro_petri::engine::{self, RunStatus}; +use fabro_petri::runtime::RuntimeSpec; +use lithos_llm::Client; +use lithos_llm::catalog::ProviderId; +use lithos_llm::middleware::{Call, Observer, ObserverMiddleware}; +use lithos_llm::types::{ContentPart, Request}; +use petri_store::MemoryRunStore; +use support::{Silent, no_questions, run_request}; +use tokio::fs; + +const MODEL: &str = "gpt-5.4"; +const TEMPLATE: &str = "COMMIT TEMPLATE SENTINEL"; +const PRIOR: &str = "smoke-tested via a /tmp build; reviewer mentioned /commit"; + +struct Requests(Arc>>); + +impl Observer for Requests { + fn on_start(&self, call: &Call) { + self.0 + .lock() + .expect("request capture lock") + .push(call.request().clone()); + } +} + +async fn run_native(workflow: &str, responses: &[&str]) -> Vec { + let root = tempfile::tempdir().expect("temporary runtime home"); + let home = root.path().join("fabro-home"); + let skill = home.join("skills/commit"); + fs::create_dir_all(&skill).await.expect("skill directory"); + // No placeholder: expansion must replace only the authored input. + fs::write( + skill.join("SKILL.md"), + format!("---\nname: commit\ndescription: Test commit instructions\n---\n{TEMPLATE}\n"), + ) + .await + .expect("skill template"); + let requests = Arc::new(Mutex::new(Vec::new())); + let client = Client::builder() + .catalog(test_support::test_catalog()) + .adapter( + ProviderId::new("openai"), + ScriptedAdapter::new( + responses + .iter() + .map(|text| test_support::text_response("openai", MODEL, text)) + .collect(), + ), + ) + .middleware(ObserverMiddleware::new(Requests(Arc::clone(&requests)))) + .build() + .expect("scripted model client") + .client; + let runtime = RuntimeSpec { + model_client: Some(client), + fabro_home: Some(home), + ..RuntimeSpec::default() + }; + let graphs = support::admit( + &[ + ("workflow.fabro", workflow), + ("workflow.toml", support::SETTINGS), + ], + Launch { + default_model: Some(format!("openai/{MODEL}")), + ..Launch::default() + }, + &runtime, + ); + let outcome = engine::run(run_request( + "skills", + &root.path().join("run"), + graphs, + Arc::new(MemoryRunStore::new()), + runtime, + no_questions(Arc::new(Silent)), + )) + .await + .expect("workflow run settles"); + assert_eq!(outcome.status, RunStatus::Success, "{outcome:?}"); + let requests = requests.lock().expect("request capture lock").clone(); + for request in &requests { + for message in request.messages() { + assert!( + message + .content() + .iter() + .all(|part| !matches!(part, ContentPart::Text { text } if text.is_empty())), + "absent segments must not become invalid empty text blocks: {message:?}" + ); + } + } + requests +} + +fn user_text(request: &Request) -> String { + request + .messages() + .last() + .expect("user input message") + .content() + .iter() + .filter_map(|part| match part { + ContentPart::Text { text } => Some(text.as_str()), + _ => None, + }) + .collect::>() + .join("") +} + +#[tokio::test] +async fn authored_skill_commands_preserve_workflow_context_and_output_requirements() { + for (authored, expands) in [ + (" /commit authored arguments /tmp /commit", true), + ("Address the feedback about /commit and /tmp", false), + ] { + let workflow = format!( + r#"digraph Skills {{ + graph [backend="api", goal="Preserve workflow context", default_max_retries=0] + start [shape=Mdiamond] + prior [prompt="Report the previous result"] + task [prompt="{authored}", fidelity="summary:high", output_schema="routing", output_retries=0] + exit [shape=Msquare] + start -> prior -> task -> exit + }}"# + ); + let requests = run_native(&workflow, &[PRIOR, r#"{"outcome":"succeeded"}"#]).await; + assert_eq!(requests.len(), 2); + let sent = user_text(&requests[1]); + assert!(sent.contains("Preserve workflow context"), "{sent}"); + assert!(sent.contains(PRIOR), "{sent}"); + assert!(sent.contains("Fabro final-output contract"), "{sent}"); + assert_eq!(sent.contains(TEMPLATE), expands, "{sent}"); + if expands { + assert!(!sent.contains(authored), "{sent}"); + assert!(sent.find(PRIOR) < sent.find(TEMPLATE), "{sent}"); + assert!( + sent.find(TEMPLATE) < sent.find("Fabro final-output contract"), + "{sent}" + ); + } else { + assert!(sent.contains(authored), "{sent}"); + } + } +} + +#[tokio::test] +async fn absent_native_prompt_segments_do_not_emit_empty_model_text_blocks() { + for (fidelity, authored) in [ + ("full", "Say done"), + ("compact", "Say done"), + ("compact", ""), + ] { + let workflow = format!( + r#"digraph Segments {{ + graph [backend="api", goal="Keep the nonempty preamble", default_max_retries=0] + start [shape=Mdiamond] + task [prompt="{authored}", fidelity="{fidelity}"] + exit [shape=Msquare] + start -> task -> exit + }}"# + ); + let requests = run_native(&workflow, &["done"]).await; + assert_eq!(requests.len(), 1); + let sent = user_text(&requests[0]); + if fidelity == "full" { + assert_eq!(sent, authored); + } else { + assert!(sent.contains("Keep the nonempty preamble"), "{sent}"); + assert!(sent.contains(authored), "{sent}"); + } + } +} From ae3180c320c88020e41d5d3597cde6033f709017 Mon Sep 17 00:00:00 2001 From: "fabro-releases[bot]" Date: Thu, 15 Oct 2026 09:36:29 +0000 Subject: [PATCH 2/2] Bump version to 0.387.0-nightly.0 --- Cargo.lock | 90 +++++++++++++++++++++++++++--------------------------- Cargo.toml | 2 +- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b4d8889cf..7d698f373 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1990,7 +1990,7 @@ dependencies = [ [[package]] name = "fabro-api" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "chrono", "fabro-automation", @@ -2016,7 +2016,7 @@ dependencies = [ [[package]] name = "fabro-auth" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2041,7 +2041,7 @@ dependencies = [ [[package]] name = "fabro-automation" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "chrono", @@ -2062,11 +2062,11 @@ dependencies = [ [[package]] name = "fabro-build-support" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" [[package]] name = "fabro-checkpoint" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "fabro-config", "fabro-types", @@ -2074,7 +2074,7 @@ dependencies = [ [[package]] name = "fabro-cli" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "assert_cmd", @@ -2170,7 +2170,7 @@ dependencies = [ [[package]] name = "fabro-client" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "bytes", @@ -2199,7 +2199,7 @@ dependencies = [ [[package]] name = "fabro-config" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "chrono", @@ -2228,7 +2228,7 @@ dependencies = [ [[package]] name = "fabro-db" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "chrono", @@ -2241,7 +2241,7 @@ dependencies = [ [[package]] name = "fabro-dev" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "assert_cmd", @@ -2260,7 +2260,7 @@ dependencies = [ [[package]] name = "fabro-dot" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "fabro-template", "fabro-types", @@ -2272,7 +2272,7 @@ dependencies = [ [[package]] name = "fabro-dump" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "bytes", @@ -2286,7 +2286,7 @@ dependencies = [ [[package]] name = "fabro-environment" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "chrono", @@ -2308,7 +2308,7 @@ dependencies = [ [[package]] name = "fabro-github" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2333,7 +2333,7 @@ dependencies = [ [[package]] name = "fabro-graphviz" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "fabro-dot", @@ -2343,7 +2343,7 @@ dependencies = [ [[package]] name = "fabro-http" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "fabro-static", "http 1.4.0", @@ -2353,7 +2353,7 @@ dependencies = [ [[package]] name = "fabro-install" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "fabro-config", @@ -2370,7 +2370,7 @@ dependencies = [ [[package]] name = "fabro-interview" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "async-trait", "fabro-types", @@ -2382,7 +2382,7 @@ dependencies = [ [[package]] name = "fabro-llm" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "async-trait", "bytes", @@ -2407,7 +2407,7 @@ dependencies = [ [[package]] name = "fabro-macros" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "clap", "fabro-options-metadata", @@ -2418,7 +2418,7 @@ dependencies = [ [[package]] name = "fabro-manifest" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2447,7 +2447,7 @@ dependencies = [ [[package]] name = "fabro-mcp-server" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "fabro-client", @@ -2467,7 +2467,7 @@ dependencies = [ [[package]] name = "fabro-mcp-store" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "chrono", "fabro-db", @@ -2485,7 +2485,7 @@ dependencies = [ [[package]] name = "fabro-oauth" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "axum", @@ -2507,7 +2507,7 @@ dependencies = [ [[package]] name = "fabro-options-metadata" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "serde", "serde_json", @@ -2515,7 +2515,7 @@ dependencies = [ [[package]] name = "fabro-petri" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2570,7 +2570,7 @@ dependencies = [ [[package]] name = "fabro-proc" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "libc", "tempfile", @@ -2582,7 +2582,7 @@ dependencies = [ [[package]] name = "fabro-redact" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "aho-corasick", "pebble-coding-agent", @@ -2599,7 +2599,7 @@ dependencies = [ [[package]] name = "fabro-server" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2694,7 +2694,7 @@ dependencies = [ [[package]] name = "fabro-slack" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "fabro-http", "fabro-interview", @@ -2715,18 +2715,18 @@ dependencies = [ [[package]] name = "fabro-spa" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "rust-embed", ] [[package]] name = "fabro-static" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" [[package]] name = "fabro-store" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "bytes", "chrono", @@ -2754,7 +2754,7 @@ dependencies = [ [[package]] name = "fabro-telemetry" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "base64", @@ -2780,7 +2780,7 @@ dependencies = [ [[package]] name = "fabro-template" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "fabro-types", @@ -2794,7 +2794,7 @@ dependencies = [ [[package]] name = "fabro-test" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "assert_cmd", @@ -2819,7 +2819,7 @@ dependencies = [ [[package]] name = "fabro-tool" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2843,7 +2843,7 @@ dependencies = [ [[package]] name = "fabro-tracker" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2857,7 +2857,7 @@ dependencies = [ [[package]] name = "fabro-types" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "chrono", "clap", @@ -2884,7 +2884,7 @@ dependencies = [ [[package]] name = "fabro-util" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "console 0.15.11", @@ -2907,7 +2907,7 @@ dependencies = [ [[package]] name = "fabro-variable" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "chrono", @@ -2924,7 +2924,7 @@ dependencies = [ [[package]] name = "fabro-vault" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "chrono", @@ -2943,7 +2943,7 @@ dependencies = [ [[package]] name = "fabro-workflow" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "anyhow", "async-trait", @@ -2988,7 +2988,7 @@ dependencies = [ [[package]] name = "fabro-workflow-version" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "fabro-config", "fabro-dot", @@ -7913,7 +7913,7 @@ dependencies = [ [[package]] name = "twin-github" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" dependencies = [ "axum", "base64", diff --git a/Cargo.toml b/Cargo.toml index b9b7f1bb7..15fbf3259 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ resolver = "2" [workspace.package] edition = "2021" -version = "0.386.0-nightly.0" +version = "0.387.0-nightly.0" license = "MIT" [workspace.dependencies]