slickit 0.2.0

Semantic, LLM-Interpretable Component Kit — typed component system
Documentation
  • Coverage
  • 69.23%
    9 out of 13 items documented1 out of 1 items with examples
  • Size
  • Source code size: 53.64 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 2.58 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 30s Average build duration of successful builds.
  • all releases: 28s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • mox-labs/slick
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • mox-nexus

slickit

Semantic, LLM-Interpretable Component Kit. Foundation types for composable components.

What

Three types that let components be discovered, composed, and instantiated across languages:

  • Manifest — structural surface (type_url, source, requires, provides, relations)
  • TypedStruct — typed data envelope (type_url + opaque JSON value)
  • TypedRegistry — type_url → factory → instance

MSG framework: Manifest = Mechanics. Skills = Semantics. Governance = external.

Install

# Rust
cargo add slickit --features manifest

# Python
pip install slickit

# TypeScript (npm publish pending)
bun add slickit

Usage

Rust

use slick::{Manifest, TypedStruct, TypedRegistryBuilder};
use std::collections::HashMap;

// Describe a component
let manifest = Manifest {
    type_url: "cix.commands.v1.Recon".into(),
    source: "git+https://github.com/mox-labs/tools/recon".into(),
    requires: vec!["cix.v1.Target".into()],
    provides: vec!["cix.v1.ReconReport".into()],
    relations: HashMap::from([
        ("skills".into(), vec!["git+https://github.com/mox-labs/skills/recon".into()]),
    ]),
};

// Register and instantiate
let registry = TypedRegistryBuilder::<String, String>::new()
    .register("example.v1", |value| {
        serde_json::from_value::<String>(value.clone())
            .map_err(|e| e.to_string())
    })
    .build();

let instance = registry.create("example.v1", &serde_json::json!("hello")).unwrap();

Python

from slickit import Manifest, TypedStruct

manifest = Manifest(
    type_url="cix.commands.v1.Recon",
    source="git+https://github.com/mox-labs/tools/recon",
    requires=["cix.v1.Target"],
    provides=["cix.v1.ReconReport"],
    relations={"skills": ["git+https://github.com/mox-labs/skills/recon"]},
)

json_str = manifest.to_json()
manifest2 = Manifest.from_json(json_str)

TypeScript

import { Manifest } from "slickit";

const manifest = Manifest.fromObject({
    type_url: "cix.commands.v1.Recon",
    source: "git+https://github.com/mox-labs/tools/recon",
    requires: ["cix.v1.Target"],
    provides: ["cix.v1.ReconReport"],
    relations: { skills: ["git+https://github.com/mox-labs/skills/recon"] },
});

console.log(manifest.typeUrl); // "cix.commands.v1.Recon"

Manifest

Five fields. Pure structure.

type_url: cix.commands.v1.Recon
source: git+https://github.com/mox-labs/tools/recon
requires: [cix.v1.Target]
provides: [cix.v1.ReconReport]
relations:
  skills: [git+https://github.com/mox-labs/skills/recon]
  tested_with: [cix.flows.v1.ReconPipeline]
  • type_url — globally unique identity (namespace convention for kind)
  • source — where it lives (git URL, local path)
  • requires — input port declarations
  • provides — output port declarations
  • relations — extensible typed edges (skills, tested_with, replaces, etc.)

Dependencies

serde + serde_json. Nothing else.

License

Apache-2.0 — see LICENSE.