Maestro Readme

Dacris Maestro Framework

Executable Configuration: A Flexible Framework for Automation
---
Copyright (C) 2024 Dacris Software Inc. www.dacris.com

1. Primary Design Goals
The primary feature we are trying to implement is to create a .NET framework that can run automated workflows as configuration.
The configuration will be persisted as JSON.
The configuration consists of two parts: an executable Logic App, and a state.
The executable Logic App consists of nested blocks (sequences) of discrete interactions.
Each interaction corresponds to a single well-defined action occurring within a particular system, e.g. Write a File.
Interactions are defined in .NET assemblies as classes inheriting the base type Interaction (abstract).
However, some interactions can be defined as other types of executable code, provided that they are wrapped in a .NET class.
The ultimate goal is to assemble the interactions into one Logic App that is entirely composed of configurable JSON for its business logic.

2. Benefits
The key benefits of this approach to software development are:
- Visibility - Nothing is hidden, everything can be audited, including the business logic.
- Flexibility - The business logic can be changed in many ways without recompiling code.
- Ease of Use - Logic Apps can be constructed by anyone without knowing programming.
- Automation - Any UI or AI chat bot can generate Logic Apps just by knowing interaction metadata. Even interactions can be auto-generated by AI.
- Security - If each interaction is inherently secure, the whole app is secure, provided that security auditing can be done on the JSON. Furthermore, execution is sandboxed to the given interactions and cannot execute arbitrary code.
- Efficiency - Each part can be developed in isolation and in parallel, making the entire process of development much faster.
- Reusability - Each interaction is reusable, meaning you write once and you reuse multiple times.
- Abstraction - Being implementation-agnostic, Logic Apps can be deployed onto any compatible framework that can run them, on any system, on any platform.
- Simplicity - No need to employ an entire IT department, because Logic Apps are designed to be understandable by non-developers.

3. Integration
By creating custom interaction libraries, developers can infinitely extend this framework.
Dacris Software provides core interactions. Third parties are encouraged to build their own interaction libraries.
Each interaction is basically a wrapper around a particular operation in a particular system.
The Logic App is defined by creating a root Block. Inside a block there are multiple Statements.
Each Statement is a call to execute an Interaction or another Block. The interaction can retrieve input, produce output, and perform an action.
Thus, an interaction is a micro-program. A Logic App is therefore a tree structure of Statements.
A serializable global state is provided, where each interaction can read/write data as JSON.

4. Execution
A Logic App can be executed in any C# program or class library, using a simple snippet of a couple of lines of code.
It can also be executed at the command line using the LogicAppRunner.

5. Provided in the Core Package
- Dacris Maestro framework (.dll binaries, for Windows or for Linux)
- LogicAppRunner source code
- SampleLogicApp source code
- Dacris Maestro Assembler IDE Trial Version
- Readme
- Interaction Reference

6. Building
Required: .NET 8.0 SDK
At the command line, run "dotnet build LogicAppRunner.sln".
The build output will be in (Application)/bin/.

To create your own C# projects using Dacris.Maestro.dll, you should add the DLL as a reference,
plus all required Nuget packages (see LogicAppRunner.csproj).