VOOZH about

URL: https://www.nuget.org/packages/Mostlylucid.StyloFlow.Dashboard.Core/

⇱ NuGet Gallery | Mostlylucid.StyloFlow.Dashboard.Core 2.6.1


ο»Ώ

πŸ‘ Image
Mostlylucid.StyloFlow.Dashboard.Core 2.6.1

dotnet add package Mostlylucid.StyloFlow.Dashboard.Core --version 2.6.1
 
 
NuGet\Install-Package Mostlylucid.StyloFlow.Dashboard.Core -Version 2.6.1
 
 
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Mostlylucid.StyloFlow.Dashboard.Core" Version="2.6.1" />
 
 
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Mostlylucid.StyloFlow.Dashboard.Core" Version="2.6.1" />
 
Directory.Packages.props
<PackageReference Include="Mostlylucid.StyloFlow.Dashboard.Core" />
 
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Mostlylucid.StyloFlow.Dashboard.Core --version 2.6.1
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Mostlylucid.StyloFlow.Dashboard.Core, 2.6.1"
 
 
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Mostlylucid.StyloFlow.Dashboard.Core@2.6.1
 
 
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Mostlylucid.StyloFlow.Dashboard.Core&version=2.6.1
 
Install as a Cake Addin
#tool nuget:?package=Mostlylucid.StyloFlow.Dashboard.Core&version=2.6.1
 
Install as a Cake Tool
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Mostlylucid.StyloFlow

Declarative orchestration infrastructure with YAML-driven configuration, blackboard pattern, and signal-based coordination. Built on mostlylucid.ephemeral.

Installation

dotnet add package mostlylucid.styloflow

Quick Start

1. Create a YAML Manifest

# manifests/detectors/mydetector.detector.yaml
name: MyDetector
priority: 50
enabled: true
description: Detects specific patterns

taxonomy:
 kind: sensor
 determinism: deterministic
 persistence: ephemeral

triggers:
 requires:
 - signal: request.headers.present
 - signal: request.ip.present
 skip_when:
 - verified.human

emits:
 on_start:
 - detector.mydetector.started
 on_complete:
 - key: detector.mydetector.confidence
 type: double
 confidence_range: [0.0, 1.0]
 on_failure:
 - detector.mydetector.failed

defaults:
 weights:
 base: 1.0
 bot_signal: 1.2
 human_signal: 0.9
 confidence:
 neutral: 0.0
 bot_detected: 0.3
 high_threshold: 0.7
 timing:
 timeout_ms: 100
 features:
 detailed_logging: false
 enable_cache: true
 parameters:
 custom_threshold: 0.5
 patterns:
 - "pattern1"
 - "pattern2"

2. Register Services

// File system manifests
services.AddStyloFlow(
 manifestDirectories: new[] { "manifests" },
 configSectionPath: "Components");

// Or embedded resource manifests
services.AddStyloFlowFromAssemblies(
 sourceAssemblies: new[] { typeof(MyDetector).Assembly },
 manifestPattern: ".yaml",
 configSectionPath: "Components");

3. Create a Configured Component

public class MyDetector : ConfiguredComponentBase
{
 public MyDetector(IConfigProvider configProvider)
 : base(configProvider) { }

 public async Task<double> DetectAsync(RequestContext context)
 {
 // Use configured values - no magic numbers!
 var threshold = GetParam("custom_threshold", 0.5);
 var patterns = GetStringListParam("patterns");

 // Use weight shortcuts
 var weight = WeightBase;

 // Use confidence shortcuts
 if (someCondition)
 return ConfidenceBotDetected * weight;

 return ConfidenceNeutral;
 }
}

Configuration Hierarchy

StyloFlow resolves configuration with a three-tier hierarchy:

  1. appsettings.json (highest priority) - Runtime overrides
  2. YAML manifest - Default values per component
  3. Code defaults - Fallback values
// appsettings.json - overrides YAML defaults
{
 "Components": {
 "MyDetector": {
 "Weights": {
 "Base": 1.5
 },
 "Parameters": {
 "custom_threshold": 0.7
 }
 }
 }
}

Core Concepts

ComponentManifest

The YAML manifest defines everything about a component:

Section Purpose
name Component identifier
priority Execution order (lower = earlier)
taxonomy Classification (kind, determinism, persistence)
triggers When to run (required signals, skip conditions)
emits Signals emitted on start/complete/failure
listens Signals this component consumes
defaults Weights, confidence, timing, features, parameters
escalation When to forward to expensive analysis
budget Resource constraints (duration, tokens, cost)

ConfiguredComponentBase

Base class providing shortcuts to manifest configuration:

// Weight shortcuts
protected double WeightBase;
protected double WeightBotSignal;
protected double WeightHumanSignal;
protected double WeightVerified;
protected double WeightEarlyExit;

// Confidence shortcuts
protected double ConfidenceNeutral;
protected double ConfidenceBotDetected;
protected double ConfidenceHumanIndicated;
protected double ConfidenceStrongSignal;
protected double ConfidenceHighThreshold;
protected double ConfidenceLowThreshold;

// Timing shortcuts
protected int TimeoutMs;
protected int CacheRefreshSec;

// Feature shortcuts
protected bool DetailedLogging;
protected bool CacheEnabled;
protected bool CanEarlyExit;
protected bool CanEscalate;

// Parameter access
protected T GetParam<T>(string name, T defaultValue);
protected IReadOnlyList<string> GetStringListParam(string name);
protected bool IsFeatureEnabled(string featureName);

IManifestLoader

Load manifests from different sources:

  • FileSystemManifestLoader - Watch directories for YAML files
  • EmbeddedManifestLoader - Load from assembly embedded resources

IConfigProvider

Resolve configuration with hierarchy:

public interface IConfigProvider
{
 ComponentManifest? GetManifest(string componentName);
 ComponentDefaults GetDefaults(string componentName);
 T GetParameter<T>(string componentName, string parameterName, T defaultValue);
 IReadOnlyDictionary<string, ComponentManifest> GetAllManifests();
}

Entity Types

Entity types define the input/output contracts for atoms - what data they consume and produce. This enables type-safe orchestration, validation, and documentation.

Built-in Entity Types

StyloFlow includes built-in entity types for common scenarios:

Category Types Description
http http.request, http.response HTTP request/response with headers, body, metadata
image image.*, image.png, image.jpeg Image files with size/dimension constraints
video video.*, video.mp4 Video files with duration limits
audio audio.* Audio files
document document.pdf Document files
behavioral behavioral.signature, behavioral.session User behavioral data
network network.ip, network.tls Network-level signals
detection detection.contribution, detection.ledger Detection pipeline entities
embedded embedded.vector, embedded.multivector Vector embeddings for similarity search
persistence persistence.record, persistence.cached Storage-aware entities
data data.json, text.plain Generic data formats

Defining Entity Types in YAML

Create domain-specific entity types in *.entity.yaml files:

# manifests/entities/myapp.entity.yaml
entity_types:
 - type: myapp.document
 category: myapp
 description: Application document with metadata
 persistence: database
 storage_hint: documents_table
 signal_patterns:
 - document.id
 - document.content
 - document.metadata.*
 schema:
 format: inline
 inline:
 type: object
 required: [id, content]
 properties:
 id:
 type: string
 content:
 type: string
 metadata:
 type: object

 - type: myapp.embedding
 category: myapp
 description: Document embedding for search
 persistence: embedded
 vector_dimension: 1536
 signal_patterns:
 - embedding.vector
 - embedding.document_id

Entity Persistence Hints

Entity types can specify how they're typically stored:

Persistence Description Use Case
ephemeral In-memory only Processing intermediates
json JSON serializable API responses, logs
database Persistent storage Learning records, audit
embedded Vector store Similarity search
file File/blob storage Documents, media
cached Short-term cache Expensive computations

Multi-Vector Embeddings

For ColBERT-style late interaction or multi-aspect embeddings:

- type: myapp.multivector_embedding
 category: myapp
 description: Multi-vector embedding with named components
 persistence: embedded
 signal_patterns:
 - embedding.vectors
 - embedding.fingerprint
 schema:
 format: inline
 inline:
 type: object
 required: [vectors, fingerprint]
 properties:
 vectors:
 type: array
 items:
 type: object
 required: [name, vector]
 properties:
 name:
 type: string
 description: Vector identifier (e.g., "title", "content")
 vector:
 type: array
 items:
 type: number
 description:
 type: string
 weight:
 type: number
 default: 1.0
 fingerprint:
 type: string
 aggregation:
 type: string
 enum: [maxsim, avgpool, concat]
 default: maxsim

Input/Output Contracts in Manifests

Reference entity types in component manifests:

# Input contract - what this component consumes
input:
 accepts:
 - type: http.request
 required: true
 description: HTTP request for analysis
 signal_pattern: request.headers.*
 - type: behavioral.signature
 required: false
 description: Optional behavioral data
 signal_pattern: behavioral.*

 required_signals:
 - request.headers.user-agent
 - request.ip

 optional_signals:
 - request.headers.accept-language

# Output contract - what this component produces
output:
 produces:
 - type: detection.contribution
 description: Analysis contribution
 - type: myapp.embedding
 description: Generated embedding

 signals:
 - key: analysis.confidence
 entity_type: number
 salience: 0.8
 description: Analysis confidence score

EntityTypeRegistry

Register and query entity types programmatically:

var registry = new EntityTypeRegistry();

// Register custom types
registry.Register(new EntityTypeDefinition
{
 Type = "myapp.custom",
 Category = "myapp",
 Description = "Custom entity type",
 Persistence = EntityPersistence.Json,
 SignalPatterns = ["custom.*"]
});

// Query types
var httpTypes = registry.GetByPattern("http.*");
var isValid = registry.Validate("myapp.custom", myObject);

EntityTypeLoader

Load entity types from YAML files or embedded resources:

var loader = new EntityTypeLoader(logger);

// From directory
var types = loader.LoadFromDirectory("manifests/entities", "*.entity.yaml");

// From embedded resources
var types = loader.LoadFromAssembly(typeof(MyApp).Assembly, ".entity.yaml");

foreach (var type in types)
{
 registry.Register(type);
}

YAML Schemas and Validation

StyloFlow provides JSON Schema definitions for validating YAML manifest files. These schemas enable IDE autocompletion, validation, and documentation.

Available Schemas

Schema Location Purpose
component-manifest.schema.json StyloFlow/Schemas/ Base component manifest format
entity-types.schema.json StyloFlow/Schemas/ Entity type definition format
detector-manifest.schema.json BotDetection/schemas/ Detector-specific manifest format
policy.schema.json BotDetection/schemas/ Action policy definition format

Using Schemas with VS Code

Add a .vscode/settings.json to your project:

{
 "yaml.schemas": {
 "./node_modules/styloflow/schemas/component-manifest.schema.json": [
 "**/*.detector.yaml",
 "**/*.sensor.yaml",
 "**/*.contributor.yaml"
 ],
 "./node_modules/styloflow/schemas/entity-types.schema.json": [
 "**/*.entity.yaml"
 ]
 }
}

Or reference directly in the YAML file:

# yaml-language-server: $schema=https://styloflow.dev/schemas/component-manifest.schema.json
name: MyDetector
priority: 50
# ... rest of manifest

Manifest File Naming Conventions

Pattern Purpose Example
{name}.detector.yaml Detection components useragent.detector.yaml
{name}.sensor.yaml Low-level signal extraction http2.sensor.yaml
{name}.contributor.yaml Higher-level analysis heuristic.contributor.yaml
{name}.gatekeeper.yaml Flow control (early exit) fastpath.gatekeeper.yaml
{name}.pipeline.yaml Pipeline definitions detection.pipeline.yaml
{name}.entity.yaml Entity type definitions botdetection.entity.yaml
{name}.policies.yaml Policy definitions block.policies.yaml

Schema Structure Overview

Component Manifest Schema
# Core identification
name: string # Required: Component identifier
priority: integer # Execution order (lower = earlier)
enabled: boolean # Whether component is active
description: string # Human-readable description

# Classification
scope:
 sink: string # Signal namespace (e.g., 'botdetection')
 coordinator: string # Coordinator name
 atom: string # Atom identifier

taxonomy:
 kind: enum # sensor | analyzer | proposer | gatekeeper | aggregator | emitter
 determinism: enum # deterministic | probabilistic
 persistence: enum # ephemeral | direct_read | direct_write | cached

# Input/Output contracts
input:
 accepts: [] # Entity types consumed
 required_signals: [] # Signals that must be present
 optional_signals: [] # Signals that may enhance processing

output:
 produces: [] # Entity types produced
 signals: [] # Signals emitted (key, entity_type, salience, description)

# Execution control
triggers:
 requires: [] # Conditions to run
 skip_when: [] # Conditions to skip
 when: [] # Additional expressions

emits:
 on_start: [] # Signals on start
 on_complete: [] # Signals on completion
 on_failure: [] # Signals on failure
 conditional: [] # Conditional signals

listens:
 required: [] # Required upstream signals
 optional: [] # Optional upstream signals

# Resource management
lane:
 name: enum # fast | normal | slow | llm | io
 max_concurrency: int # Maximum parallel executions
 priority: int # Priority within lane

budget:
 max_duration: string # TimeSpan format (00:00:30)
 max_tokens: int # For LLM components
 max_cost: number # Cost limit in dollars

# Configuration
config:
 bindings: [] # Configuration key bindings

defaults:
 weights: {} # Weight values
 confidence: {} # Confidence thresholds
 timing: {} # Timing parameters
 features: {} # Feature flags
 parameters: {} # Custom parameters

tags: [] # Categorization tags
Entity Types Schema
namespace: string # Prefix for all types (e.g., 'botdetection')
version: string # Schema version
description: string # Collection description

entity_types:
 type_name:
 base_type: enum # string | number | boolean | object | array | embedded_vector | multivector
 description: string
 persistence: enum # ephemeral | json | database | embedded | file | cached
 nullable: boolean
 default_value: any

 # For validation
 validation:
 min: number
 max: number
 min_length: int
 max_length: int
 pattern: string # Regex
 enum: [] # Allowed values
 format: string # email | uri | ipv4 | etc.

 # For objects
 properties: {}

 # For embeddings
 embedding:
 dimensions: int
 model: string
 distance_metric: enum # cosine | euclidean | dot_product
 normalize: boolean

 # For multi-vector
 vectors:
 - name: string
 dimensions: int
 description: string
 weight: number
 model: string
 source_field: string

 signal_pattern: string # For composing from signals
 storage_hint: string # sqlite | redis | qdrant | etc.
 tags: []

ManifestEntityValidator

Validate entity type references across manifests:

var validator = new ManifestEntityValidator(registry, loader, logger);

// Validate a single manifest
var result = validator.Validate(manifest);
if (!result.IsValid)
{
 foreach (var error in result.Errors)
 {
 Console.WriteLine($"Error: {error}");
 }
}

// Validate all manifests
var results = validator.ValidateAll(manifestLoader);
foreach (var r in results.Where(r => !r.IsValid))
{
 Console.WriteLine($"{r.ManifestName}: {r.Errors.Count} errors");
}

Signal-Based Orchestration

Trigger Conditions

triggers:
 requires:
 - signal: request.headers.present
 condition: ">"
 value: 0
 - signal: ip.analyzed
 skip_when:
 - verified.bot
 - verified.human
 when:
 - confidence < 0.5

Emitted Signals

emits:
 on_start:
 - detector.mydetector.started
 on_complete:
 - key: detector.mydetector.result
 type: enum
 description: Detection result
 conditional:
 - key: detector.mydetector.bot_detected
 type: bool
 when: confidence > 0.7
 on_failure:
 - detector.mydetector.failed

Escalation

escalation:
 targets:
 llm_analysis:
 when:
 - signal: confidence
 condition: ">"
 value: 0.4
 - signal: confidence
 condition: "<"
 value: 0.7
 skip_when:
 - signal: budget.exhausted
 description: Forward ambiguous cases to LLM

Taxonomy Classification

taxonomy:
 kind: sensor # sensor, aggregator, escalator, enricher
 determinism: deterministic # deterministic, probabilistic, learning
 persistence: ephemeral # ephemeral, cached, persisted

Execution Lanes

lane:
 name: fast # fast, standard, expensive
 max_concurrency: 4
 priority: 50

Budget Constraints

budget:
 max_duration: "00:00:30"
 max_tokens: 1000
 max_cost: 0.01

Architecture

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ appsettings β”‚
 β”‚ overrides β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
 β”‚
 β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ YAML │───▢│ ConfigProvider │◀───│ Code β”‚
β”‚ Manifests β”‚ β”‚ (resolves) β”‚ β”‚ Defaults β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
 β”‚
 β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Configured β”‚
 β”‚ ComponentBase β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
 β”‚
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ β”‚ β”‚
 β–Ό β–Ό β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚Detector 1β”‚ β”‚Detector 2β”‚ β”‚Detector Nβ”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Licensing Module

StyloFlow includes a comprehensive licensing system for commercial deployments with tiered features, work unit metering, and mesh coordination.

Quick Start

// Full licensing with System Coordinator
services.AddStyloFlow(options =>
{
 options.LicenseToken = myLicenseJson;
 options.HeartbeatInterval = TimeSpan.FromSeconds(30);
});

// Free tier (development/testing)
services.AddStyloFlowFree();

// Mesh mode for distributed deployments
services.AddStyloFlowMesh(new[] { "node1:5200", "node2:5200" });

License Tiers

Tier Slots Work Units/min Features
free 5 100 Basic functionality
starter 50 500 Document/Image processing
professional 100 1000 Full retrieval + analytics
enterprise Unlimited Unlimited Mesh + priority support

Licensed Components

Create license-aware components that automatically validate tier requirements:

public class DocumentProcessor : LicensedComponentBase
{
 public DocumentProcessor(
 ILicenseManager licenseManager,
 IWorkUnitMeter workUnitMeter,
 SignalSink signalSink)
 : base(licenseManager, workUnitMeter, signalSink, new LicenseRequirements
 {
 MinimumTier = "starter",
 WorkUnits = 2.0,
 WorkUnitsPerKb = 0.5,
 RequiredFeatures = new[] { "documents.*" },
 AllowFreeTierDegradation = true
 })
 { }

 public override string ComponentId => "styloflow.documents.processor";

 public async Task<Result> ProcessAsync(byte[] document)
 {
 // Check if we can perform the operation
 if (!CanPerformOperation(document.Length))
 return Result.Throttled();

 // Do the work...
 var result = await DoProcessingAsync(document);

 // Record work units
 RecordWorkUnits(document.Length);

 // Emit completion signal
 EmitSignal("processed", document.Length.ToString());

 return result;
 }
}

Work Unit Metering

Track and throttle resource consumption with sliding window metering:

var meter = provider.GetRequiredService<IWorkUnitMeter>();

// Record work
meter.Record(10.0, "documents");

// Check capacity
if (meter.CanConsume(50.0))
{
 // Proceed with operation
}

// Get throttle factor (1.0 = full speed, 0.0 = throttled)
var factor = meter.ThrottleFactor;

// Subscribe to threshold events
meter.ThresholdCrossed += (_, evt) =>
{
 Console.WriteLine($"Threshold {evt.ThresholdPercent}% crossed");
};

System Signals

The SystemCoordinator emits these signals for orchestration:

Signal Description
styloflow.system.ready System initialized and ready
styloflow.system.heartbeat Periodic health check
styloflow.system.license.valid License validated successfully
styloflow.system.license.expires_soon License expiring within grace period
styloflow.system.license.tier.{tier} Current license tier
styloflow.system.slots.available Available molecule slots
styloflow.system.workunit.rate Current work unit consumption rate
styloflow.system.workunit.throttling Throttling is active

YAML License Configuration

Configure licensing in component manifests:

license:
 tier: starter
 features:
 - documents.*
 - images.*
 work_units:
 base: 2.0
 per_kb: 0.5
 requires_system: true
 allow_degradation: true

signals:
 defer_on:
 - styloflow.system.ready
 resume_on:
 - styloflow.system.ready
 free_tier:
 - component.degraded
 licensed:
 - component.ready

For detailed licensing documentation, see .

Package Signing & Supply Chain Security

StyloFlow includes sfsign, a package signing tool that provides Ed25519-based cryptographic signatures for supply chain integrity.

Installation

dotnet tool install -g Mostlylucid.StyloFlow.Sign

Quick Start

# Generate a signing key
sfsign key generate --id "myvendor" --name "My Vendor Key" --keyring keyring.json

# Sign a package
sfsign sign --package mypackage.sfpkg --key "myvendor" --keyring keyring.json

# Verify a signed package
sfsign verify --package mypackage.sfpkg

Key Management

# Generate a new Ed25519 key pair
sfsign key generate --id "vendor.example" --name "Example Vendor" --keyring keyring.json

# List keys in a keyring
sfsign key list --keyring keyring.json

# Export public key for distribution (safe to share)
sfsign key export-public --id "vendor.example" --keyring keyring.json --output public.json

Signing Packages

# Sign with author type (package creator)
sfsign sign --package mypackage.sfpkg --key "myvendor" --type author --keyring keyring.json

# Add vendor signature (distribution)
sfsign sign --package mypackage.sfpkg --key "distributor" --type vendor --keyring keyring.json

# Add audit signature (third-party verification)
sfsign sign --package mypackage.sfpkg --key "auditor" --type audit --keyring keyring.json

Verification

# Basic verification (checks hash and signatures)
sfsign verify --package mypackage.sfpkg

# Verify with trust configuration
sfsign verify --package mypackage.sfpkg --trust trust.json

# Require specific signers
sfsign verify --package mypackage.sfpkg --require "myvendor" --require "auditor"

Trust Configuration

# Add a key to trusted roots
sfsign trust add --key "myvendor" --keyring keyring.json --config trust.json

# List trusted keys and cross-signings
sfsign trust list --config trust.json

Cross-Signing for Trust Chains

Cross-signing allows a trusted vendor to vouch for another vendor's key, creating trust chains without centralized authorities.

# Create cross-signing certificate (myvendor vouches for partner)
sfsign cross-sign \
 --issuer "myvendor" \
 --subject "partner.vendor" \
 --keyring keyring.json \
 --output trust.json

# Cross-sign with expiration
sfsign cross-sign \
 --issuer "myvendor" \
 --subject "partner.vendor" \
 --valid-to "2027-01-01" \
 --keyring keyring.json

Signature Types

Type Purpose Use Case
author Package creator Original developer signs their work
vendor Distribution Distributor vouches for package authenticity
audit Third-party Security auditor confirms code review

Manifest Format

Signatures are stored in .sig.json files alongside packages:

{
 "version": "1.0",
 "packageId": "mypackage",
 "packageHash": "GSP4PaEWyjVhQ+071f+l...",
 "packageSize": 12345,
 "timestamp": "2026-01-08T18:30:00Z",
 "signatures": [
 {
 "signerId": "myvendor",
 "signerName": "My Vendor",
 "publicKey": "wE47MgQxtBez5t0z+Jgzs...",
 "signature": "jkvkKxSYGT9gNLdLIxUp...",
 "signedAt": "2026-01-08T18:30:00Z",
 "signatureType": "author"
 }
 ]
}

Security Model

  • Ed25519: Fast, secure, deterministic signatures with 128-bit security
  • SHA-256: Package integrity verification
  • Multi-signature: Support for multiple independent signatures
  • Cross-signing: Decentralized trust without certificate authorities
  • No key escrow: Private keys never leave your control

Package Structure

Package Description
Mostlylucid.StyloFlow.Core Core orchestration, manifests, configuration
Mostlylucid.StyloFlow.Licensing Licensing, work unit metering, mesh coordination
Mostlylucid.StyloFlow.Sign Package signing CLI tool (sfsign)
Mostlylucid.StyloFlow.Retrieval.Core Base retrieval interfaces and scoring
Mostlylucid.StyloFlow.Retrieval.Documents Document chunking, MMR reranking
Mostlylucid.StyloFlow.Retrieval.Images Perceptual hashing, image similarity
Mostlylucid.StyloFlow.Retrieval.Audio Audio fingerprinting
Mostlylucid.StyloFlow.Retrieval.Video Video fingerprinting
Mostlylucid.StyloFlow.Retrieval.Data PII detection, anomaly scoring
Mostlylucid.StyloFlow.Dashboard.Core Monitoring dashboard components
Mostlylucid.StyloFlow.Complete Metapackage with all components

License

This is free and unencumbered software released into the public domain - see for details.


Documentation is actively being expanded. Check individual project README files for detailed API documentation.

Product Versions Compatible and additional computed target framework versions.
.NET net8.0 net8.0 is compatible.  net8.0-android net8.0-android was computed.  net8.0-browser net8.0-browser was computed.  net8.0-ios net8.0-ios was computed.  net8.0-maccatalyst net8.0-maccatalyst was computed.  net8.0-macos net8.0-macos was computed.  net8.0-tvos net8.0-tvos was computed.  net8.0-windows net8.0-windows was computed.  net9.0 net9.0 is compatible.  net9.0-android net9.0-android was computed.  net9.0-browser net9.0-browser was computed.  net9.0-ios net9.0-ios was computed.  net9.0-maccatalyst net9.0-maccatalyst was computed.  net9.0-macos net9.0-macos was computed.  net9.0-tvos net9.0-tvos was computed.  net9.0-windows net9.0-windows was computed.  net10.0 net10.0 is compatible.  net10.0-android net10.0-android was computed.  net10.0-browser net10.0-browser was computed.  net10.0-ios net10.0-ios was computed.  net10.0-maccatalyst net10.0-maccatalyst was computed.  net10.0-macos net10.0-macos was computed.  net10.0-tvos net10.0-tvos was computed.  net10.0-windows net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Mostlylucid.StyloFlow.Dashboard.Core:

Package Downloads
Mostlylucid.StyloFlow.Complete

StyloFlow Complete - All StyloFlow functionality in a single package. Includes Core, Retrieval (Documents, Images, Audio, Video, Data), Dashboard, and all analysis capabilities.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.6.1 95 5/14/2026
2.6.0 113 4/18/2026
2.5.0 125 4/17/2026
2.4.0 132 1/29/2026
2.3.1 122 1/9/2026
2.3.1-alpha0 116 1/9/2026
2.1.4 125 1/8/2026
2.0.1 146 1/8/2026