flow

package module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2026 License: Apache-2.0 Imports: 31 Imported by: 0

README ΒΆ

Nexss Flow (nexssp/flow)

Go Version License CI

nexssp/flow is a universal, zero-infrastructure, Go-native Action Orchestration Engine & Arrow DSL.

It enables developers and AI agents to weave isolated, typed Go actions (github.com/nexssp/kernel/action) into high-throughput DAGs, scatter-gather parallel groups, resilient fallback chains, and dynamic data-shaping pipelines with zero Go glue code.


⚑ Key Invariants

  • Universal Action Engine: Orchestrates standard Go functions, microservices, DB queries, and AI Agents indiscriminately.
  • Inline Data Projections ({ ... }): Reshapes data between nodes on the fly using expr-lang/expr. Supports both Go and JQ-style .field syntax. No manual DTO adapters needed.
  • Compact Arrow DSL: Express complex execution topographies using concise inline text strings (->, |, &, ||, ?, loop ... until).
  • Zero-Allocation Hot Paths: Memory-pooled state management and pre-compiled expression bytecode execution.
  • Durable Branch Journaling: SQLite/SQL-backed branch recording for deterministic execution replay.
  • Cost & Budget Governance: Exact microdollar ledger tracking with hard-stop budget boundaries via nexssp/cost.

πŸ—οΈ Architecture

                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚      Input Payload           β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                                 β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚   github.get_issue           β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                                 β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚ Inline Projection ({ ... })  β”‚
                  β”‚ Reshapes output for AI Agent β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                                 β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚   ai.triage                  β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                                 β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚ Inline Projection ({ ... })  β”‚
                  β”‚ Reshapes output for Slack    β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                                 β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚   slack.send                 β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“¦ Installation

go get github.com/nexssp/flow@latest

πŸš€ Quickstart: Data-Shaping Pipeline

package main

import (
	"context"
	"fmt"

	"github.com/nexssp/flow"
	"github.com/nexssp/kernel/action"
)

func main() {
	ctx := context.Background()

	// 1. Define isolated Actions
	getIssue := action.New("github.get_issue", func(_ context.Context, id int) (map[string]any, error) {
		return map[string]any{
			"issue": map[string]any{"id": id, "title": "Nil pointer in scheduler", "body": "Line 42 panics"},
		}, nil
	}).Build()

	triage := action.New("ai.triage", func(_ context.Context, req map[string]any) (map[string]any, error) {
		return map[string]any{"summary": "Critical panic in scheduler", "urgency": "HIGH"}, nil
	}).Build()

	sendSlack := action.New("slack.send", func(_ context.Context, req map[string]any) (string, error) {
		return fmt.Sprintf("Posted to %s: %s", req["channel"], req["text"]), nil
	}).Build()

	// 2. Register Actions
	registry := flow.NewRegistry(getIssue, triage, sendSlack)

	// 3. Express Workflow in Arrow DSL with Inline Shaping
	dsl := `
		github.get_issue
		-> { prompt: "Summarize: " + issue.title + " - " + issue.body }
		-> ai.triage
		-> { channel: "#alerts", text: "🚨 [" + urgency + "] " + summary }
		-> slack.send
	`

	// 4. Compile & Execute
	builder, err := flow.CompilePipeline(dsl, registry)
	if err != nil {
		panic(err)
	}

	result, err := builder.Build().Do(ctx, 999)
	if err != nil {
		panic(err)
	}

	fmt.Println(result)
	// Output: Posted to #alerts: 🚨 [HIGH] Critical panic in scheduler
}

πŸ“– Arrow DSL Syntax Reference

Operator Syntax Description
Sequential Pipe A -> B or A | B Passes output of A as input to B.
Inline Projection { x: .y, z: "val" } Reshapes incoming data on the fly (supports both Go and JQ-style .).
Parallel Scatter-Gather (A & B & C) Executes A, B, and C concurrently; aggregates output into a map.
Fallback Chain A || B Tries A. If A returns an error, executes B (FirstSuccess).
Conditional Branch gate ? target Evaluates boolean input from gate. If truthy, runs target.
Autonomous Loop loop( A ) until( cond ) Repeats A passing output to input until cond evaluates to true.

πŸ’° Financial Cost Governance (nexssp/cost)

Attach hard-cap budget constraints to any pipeline or node using flow.GuardCost:

ledger := cost.NewLedger(1_000_000, cost.USD) // $1.00 USD budget

actionWithCost := action.New("ai.completion", handler).
	AnyHook(flow.GuardCost(ledger, 50_000)). // 50,000 micros = $0.05
	Build()

If the budget is exceeded, execution is halted immediately before invoking upstream providers.


πŸ› οΈ Capability Discovery for AI Agents

Expose registered capabilities so AI agents can dynamically inspect actions and synthesize Flow DSLs:

// Extract machine-readable capability specifications
capabilities := flow.ExtractCapabilities(registry)

// Expose /flow/catalog over HTTP/A2A
catalogAction := flow.BuildCatalogAction(registry)

Contributing

Read CONTRIBUTING.md before opening a pull request. Changes must be typed, covered by tests, and include benchmarks for performance-critical paths.

Security

Report suspected vulnerabilities privately according to SECURITY.md.

License

Apache License 2.0. See LICENSE. Copyright Β© 2018–2026 Marcin Polak and Contributors.

Documentation ΒΆ

Overview ΒΆ

flow/cost.go

path: flow/parallel.go

Index ΒΆ

Constants ΒΆ

View Source
const APIVersion = "nexss.ai/v1"

Variables ΒΆ

View Source
var ApprovalTokenKey = xctx.NewKey[string]("nexss.approval.token")

ApprovalTokenKey is the universal context key for approval tokens. Backed by kernel/xctx so flow remains completely independent of any AI packages.

Functions ΒΆ

func AcquireStateFromGraphState ΒΆ

func AcquireStateFromGraphState(s *State) *dag.State

AcquireStateFromGraphState converts a graph.State into a pooled dag.State without manual map copying.

func ApprovalTokenFrom ΒΆ

func ApprovalTokenFrom(ctx context.Context) string

ApprovalTokenFrom extracts an approval token from the context.

func AsCostHook ΒΆ

func AsCostHook(reserver cost.Reserver, estimateMicros int64, _ ...int64) action.AnyHook

AsCostHook provides an alias for GuardCost to attach cost governance hooks to actions.

func BuildCatalogAction ΒΆ

func BuildCatalogAction(reg Registry) action.AnyAction

BuildCatalogAction returns a system action exposing the capability catalog over HTTP/A2A.

func CompilePipeline ΒΆ

func CompilePipeline(expr string, reg Registry) (*action.Builder[any, any], error)

CompilePipeline parses the Arrow DSL into an AST and compiles it into an executable Builder.

func CompileSaga ΒΆ

func CompileSaga(expr string, reg Registry) (*action.Builder[any, any], error)

CompileSaga parses Arrow DSL with embedded transaction rollbacks into a Saga Node.

func EvaluateCondition ΒΆ

func EvaluateCondition(condition string, state *State) (bool, error)

func Execute ΒΆ

func Execute[Req, Res any](ctx context.Context, act *action.BuiltAction[Req, Res], req Req) (Res, error)

Execute is a type-safe generic invoker helper.

func GuardCost ΒΆ added in v0.3.0

func GuardCost(reserver cost.Reserver, estimateMicros int64) action.AnyHook

GuardCost returns an action hook that reserves budget before execution and commits or releases it upon completion based on execution outcome.

func NewExecuteAction ΒΆ

func NewExecuteAction(compiler *Compiler) *action.BuiltAction[GraphExecReq, GraphExecRes]

NewExecuteAction exposes dynamic graph execution over CLI, HTTP REST, MCP, and A2A.

func WithApprovalGate ΒΆ

func WithApprovalGate(g ApprovalGate) func(*Compiler)

func WithApprovalToken ΒΆ

func WithApprovalToken(ctx context.Context, token string) context.Context

WithApprovalToken attaches an approval token to the context.

func WithJournal ΒΆ

func WithJournal(j journal.BranchJournal) func(*Compiler)

func WithReserver ΒΆ added in v0.3.0

func WithReserver(r cost.Reserver) func(*Compiler)

Types ΒΆ

type ApprovalGate ΒΆ

type ApprovalGate interface {
	Check(ctx context.Context, actionName, argsJSON, token string) error
}

type BranchMode ΒΆ

type BranchMode string
const (
	BranchFirstMatch BranchMode = "first_match"
	BranchAllMatches BranchMode = "all_matches"
)

type CapabilitySpec ΒΆ

type CapabilitySpec struct {
	Name         string         `json:"name"`
	Description  string         `json:"description"`
	Route        string         `json:"route,omitempty"`
	Method       string         `json:"method,omitempty"`
	InputSchema  map[string]any `json:"input_schema"`
	OutputSchema map[string]any `json:"output_schema"`
	Tags         []string       `json:"tags,omitempty"`
	IsSystem     bool           `json:"is_system"`
}

CapabilitySpec represents a machine-readable action contract for AI agents & graph builders.

func ExtractCapabilities ΒΆ

func ExtractCapabilities(reg Registry) []CapabilitySpec

ExtractCapabilities converts a Registry into an AI-friendly CapabilitySpec catalog.

type CompiledEdge ΒΆ

type CompiledEdge struct {
	From      string
	To        string
	When      string
	Otherwise bool
	Priority  int
}

type CompiledGraph ΒΆ

type CompiledGraph struct {
	Definition GraphDefinition
	Layers     [][]string
	NodeByID   map[string]NodeSpec
	Edges      []CompiledEdge
	Outgoing   map[string][]CompiledEdge
	EdgeKeys   []string
}

func Compile ΒΆ

func Compile(def GraphDefinition) (*CompiledGraph, error)

func LoadYAML ΒΆ

func LoadYAML(data []byte) (*CompiledGraph, error)

func LoadYAMLFile ΒΆ

func LoadYAMLFile(path string) (*CompiledGraph, error)

func (*CompiledGraph) SelectOutgoing ΒΆ

func (g *CompiledGraph) SelectOutgoing(
	source string,
	matches func(condition string) (bool, error),
) ([]CompiledEdge, error)

func (*CompiledGraph) SelectOutgoingDurable ΒΆ

func (g *CompiledGraph) SelectOutgoingDurable(
	ctx context.Context,
	j journal.BranchJournal,
	runID, source string,
	state *State,
) ([]CompiledEdge, error)

type Compiler ΒΆ

type Compiler struct {
	// contains filtered or unexported fields
}

func NewCompiler ΒΆ

func NewCompiler(reg Registry, opts ...func(*Compiler)) *Compiler

func (*Compiler) Compile ΒΆ

func (c *Compiler) Compile(ctx context.Context, def GraphDefinition) (*dag.DAG, *CompiledGraph, error)

type DynamicPolicy ΒΆ

type DynamicPolicy struct {
	RetryCount  int
	Timeout     time.Duration
	CacheTTL    time.Duration
	Idempotent  bool
	Breaker     bool
	Debug       bool
	Validate    bool
	Coalesce    bool
	Dedup       bool
	HTTPMethod  string
	HTTPPath    string
	StatusCode  int
	CLICommand  string
	CLIDesc     string
	A2ARole     string
	CustomName  string
	Description string
}

type EdgeSpec ΒΆ

type EdgeSpec struct {
	From      string `json:"from" yaml:"from"`
	To        string `json:"to" yaml:"to"`
	When      string `json:"when,omitempty" yaml:"when,omitempty"`
	Otherwise bool   `json:"otherwise,omitempty" yaml:"otherwise,omitempty"`
	Priority  int    `json:"priority,omitempty" yaml:"priority,omitempty"`
}

type EffectClass ΒΆ

type EffectClass string
const (
	EffectReadOnly   EffectClass = "read_only"
	EffectSideEffect EffectClass = "side_effect"
	EffectHighRisk   EffectClass = "high_risk"
)

type FanInPolicy ΒΆ

type FanInPolicy struct {
	RequireAll   bool
	AllowPartial bool
	FailOnEmpty  bool
}

type GraphDefinition ΒΆ

type GraphDefinition struct {
	APIVersion string      `json:"apiVersion" yaml:"apiVersion"`
	Kind       string      `json:"kind" yaml:"kind"`
	Metadata   Metadata    `json:"metadata" yaml:"metadata"`
	Policy     GraphPolicy `json:"policy,omitempty" yaml:"policy,omitempty"`
	Nodes      []NodeSpec  `json:"nodes" yaml:"nodes"`
	Edges      []EdgeSpec  `json:"edges" yaml:"edges"`
}

func ParseArrowDSL ΒΆ

func ParseArrowDSL(name, dsl string) (GraphDefinition, error)

ParseArrowDSL converts a compact arrow pipeline expression into a standard declarative GraphDefinition using the unified AST parser.

type GraphExecReq ΒΆ

type GraphExecReq struct {
	DSL            string         `json:"dsl,omitempty" cli:"dsl,d" usage:"Compact arrow pipeline expression"`
	YAML           string         `json:"yaml,omitempty" cli:"yaml,y" usage:"Declarative YAML graph manifest"`
	InitialPayload map[string]any `json:"initial_payload,omitempty" usage:"Initial state values passed to root nodes"`
}

GraphExecReq defines the omni-protocol input payload.

type GraphExecRes ΒΆ

type GraphExecRes struct {
	GraphName  string         `json:"graph_name"`
	Outputs    map[string]any `json:"outputs"`
	LayersRun  int            `json:"layers_run"`
	DurationMS int64          `json:"duration_ms"`
}

GraphExecRes defines the structured execution audit output.

type GraphPolicy ΒΆ

type GraphPolicy struct {
	MaxParallelNodes    int            `json:"max_parallel_nodes,omitempty" yaml:"max_parallel_nodes,omitempty"`
	MaxContextBytes     int64          `json:"max_context_bytes,omitempty" yaml:"max_context_bytes,omitempty"`
	BudgetMicros        int64          `json:"budget_micros,omitempty" yaml:"budget_micros,omitempty"`
	ApprovalRequiredFor []EffectClass  `json:"approval_required_for,omitempty" yaml:"approval_required_for,omitempty"`
	FanInRecovery       RecoveryPolicy `json:"fan_in_recovery,omitempty" yaml:"fan_in_recovery,omitempty"`
}

type MapRegistry ΒΆ

type MapRegistry struct {
	// contains filtered or unexported fields
}

func NewRegistry ΒΆ

func NewRegistry(actions ...action.AnyAction) *MapRegistry

func (*MapRegistry) Actions ΒΆ

func (r *MapRegistry) Actions() []action.AnyAction

func (*MapRegistry) CompilePipeline ΒΆ

func (r *MapRegistry) CompilePipeline(expr string) (action.Executable, error)

func (*MapRegistry) Get ΒΆ

func (r *MapRegistry) Get(capability string) (action.AnyAction, bool)

func (*MapRegistry) Register ΒΆ

func (r *MapRegistry) Register(capability string, a action.AnyAction)

type Metadata ΒΆ

type Metadata struct {
	Name        string `json:"name" yaml:"name"`
	Version     string `json:"version" yaml:"version"`
	Description string `json:"description,omitempty" yaml:"description,omitempty"`
}

type NodeKind ΒΆ

type NodeKind string
const (
	NodeDeterministic NodeKind = "deterministic"
	NodeLLM           NodeKind = "llm"
	NodeTool          NodeKind = "tool"
	NodeSubgraph      NodeKind = "subgraph"
	NodeHuman         NodeKind = "human"
	NodeApproval      NodeKind = "approval"
)

type NodeResult ΒΆ

type NodeResult[Res any] struct {
	Spawned SpawnedNode `json:"spawned"`
	Value   Res         `json:"value"`
	Err     error       `json:"error,omitempty"`
}

type NodeSpec ΒΆ

type NodeSpec struct {
	ID             string            `json:"id" yaml:"id"`
	Kind           NodeKind          `json:"kind" yaml:"kind"`
	Capability     string            `json:"capability" yaml:"capability"`
	Params         map[string]any    `json:"params,omitempty" yaml:"params,omitempty"`
	InputBindings  map[string]string `json:"inputs,omitempty" yaml:"inputs,omitempty"`
	InputSchema    string            `json:"input_schema,omitempty" yaml:"input_schema,omitempty"`
	OutputSchema   string            `json:"output_schema,omitempty" yaml:"output_schema,omitempty"`
	Prompt         string            `json:"prompt,omitempty" yaml:"prompt,omitempty"`
	Retry          RetryPolicy       `json:"retry,omitempty" yaml:"retry,omitempty"`
	TimeoutMS      int64             `json:"timeout_ms,omitempty" yaml:"timeout_ms,omitempty"`
	MaxAttempts    int               `json:"max_attempts,omitempty" yaml:"max_attempts,omitempty"`
	EstimateMicros int64             `json:"estimate_micros,omitempty" yaml:"estimate_micros,omitempty"`
	Effect         EffectClass       `json:"effect,omitempty" yaml:"effect,omitempty"`
	Approval       bool              `json:"approval_required,omitempty" yaml:"approval_required,omitempty"`
	BranchMode     BranchMode        `json:"branch_mode,omitempty" yaml:"branch_mode,omitempty"`
}

type RecoveryPolicy ΒΆ

type RecoveryPolicy struct {
	Strategy           RecoveryStrategy `json:"strategy,omitempty" yaml:"strategy,omitempty"`
	MaxAttempts        int              `json:"max_attempts,omitempty" yaml:"max_attempts,omitempty"`
	BackoffMS          int64            `json:"backoff_ms,omitempty" yaml:"backoff_ms,omitempty"`
	MaxBackoffMS       int64            `json:"max_backoff_ms,omitempty" yaml:"max_backoff_ms,omitempty"`
	RetryTransientOnly bool             `json:"retry_transient_only,omitempty" yaml:"retry_transient_only,omitempty"`
}

type RecoveryStrategy ΒΆ

type RecoveryStrategy string
const (
	RecoveryFailFast        RecoveryStrategy = "fail_fast"
	RecoveryRetryFailed     RecoveryStrategy = "retry_failed"
	RecoveryContinuePartial RecoveryStrategy = "continue_partial"
)

type Registry ΒΆ

type Registry interface {
	Get(name string) (action.AnyAction, bool)
	Actions() []action.AnyAction
}

type RetryPolicy ΒΆ

type RetryPolicy struct {
	MaxAttempts int    `json:"max_attempts,omitempty" yaml:"max_attempts,omitempty"`
	Backoff     string `json:"backoff,omitempty" yaml:"backoff,omitempty"`
}

type SpawnedNode ΒΆ

type SpawnedNode struct {
	RunID      string       `json:"run_id"`
	SourceNode string       `json:"source_node"`
	Edge       CompiledEdge `json:"edge"`
	TargetNode string       `json:"target_node"`
	Input      *State       `json:"input"`
	SpawnIndex int          `json:"spawn_index"`
}

func SpawnSelected ΒΆ

func SpawnSelected(runID, source string, selected []CompiledEdge, input *State) ([]SpawnedNode, error)

SpawnSelected creates durable invocation units for each selected edge.

type State ΒΆ

type State struct {
	// contains filtered or unexported fields
}

func FanIn ΒΆ

func FanIn[Res any](
	ctx context.Context,
	input *State,
	results []NodeResult[Res],
	policy FanInPolicy,
	reduce func(context.Context, *State, []NodeResult[Res]) (*State, error),
) (*State, error)

FanIn deterministically orders parallel child outputs by SpawnIndex and calls reduce.

func NewState ΒΆ

func NewState(values map[string]any) *State

func NewStateFromDAG ΒΆ

func NewStateFromDAG(dagState *dag.State) *State

func (*State) Get ΒΆ

func (s *State) Get(path string) (any, bool)

type SystemAssembler ΒΆ added in v0.4.0

type SystemAssembler struct {
	// contains filtered or unexported fields
}

func NewAssembler ΒΆ added in v0.4.0

func NewAssembler(capabilities ...action.AnyAction) *SystemAssembler

func (*SystemAssembler) Actions ΒΆ added in v0.4.0

func (s *SystemAssembler) Actions() []action.AnyAction

func (*SystemAssembler) AssembleFile ΒΆ added in v0.4.0

func (s *SystemAssembler) AssembleFile(path string) ([]action.AnyAction, error)

func (*SystemAssembler) AssembleManifest ΒΆ added in v0.4.0

func (s *SystemAssembler) AssembleManifest(manifestDSL string) ([]action.AnyAction, error)

func (*SystemAssembler) Register ΒΆ added in v0.4.0

func (s *SystemAssembler) Register(name string, act action.AnyAction) *SystemAssembler

type WorkflowFixture ΒΆ added in v0.4.0

type WorkflowFixture struct {
	// contains filtered or unexported fields
}

func NewWorkflowTest ΒΆ added in v0.4.0

func NewWorkflowTest(t testing.TB, reg Registry, dsl string) *WorkflowFixture

func (*WorkflowFixture) Execute ΒΆ added in v0.4.0

func (wf *WorkflowFixture) Execute(input any) *WorkflowResult

func (*WorkflowFixture) WithTimeout ΒΆ added in v0.4.0

func (wf *WorkflowFixture) WithTimeout(d time.Duration) *WorkflowFixture

type WorkflowResult ΒΆ added in v0.4.0

type WorkflowResult struct {
	// contains filtered or unexported fields
}

func (*WorkflowResult) Duration ΒΆ added in v0.4.0

func (r *WorkflowResult) Duration() time.Duration

func (*WorkflowResult) ExpectError ΒΆ added in v0.4.0

func (r *WorkflowResult) ExpectError() *WorkflowResult

func (*WorkflowResult) ExpectSuccess ΒΆ added in v0.4.0

func (r *WorkflowResult) ExpectSuccess() *WorkflowResult

func (*WorkflowResult) Output ΒΆ added in v0.4.0

func (r *WorkflowResult) Output() any

Directories ΒΆ

Path Synopsis
nexssp/flow/compiler/ast.go
nexssp/flow/compiler/ast.go
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL