narratix-format
v1.0.1
Published
Narratix story format: schema, validation, and CRUD helpers for evidence-backed narratives.
Readme
narratix (v1.0.0)
Narratix is a format-only package for evidence-backed “stories” (narratives/cards). It provides:
- TypeScript types
- JSON Schema objects
- Runtime validation (no external deps)
- Immutable CRUD helpers
- Ops helpers (normalize / merge / dedupe / cap)
This package is intentionally engine-agnostic. A separate infra runner (e.g.,
@woroces/x-narrate) can depend onnarratixto standardize story output while choosing any execution logic (rules, code, LLM, etc.).
Install
npm install narratixCore type
NarratixStory is the canonical object.
Key fields:
storyId(versioned producer id, e.g.story.network.asset.v1)subject(entity identity/display)title,summary,bulletsfacts[](deduped byid)signals[](deduped bycode)recommendations[](deduped bycode)meta(generic provenance & extras)
Validation
import { validateStory, assertStory } from "narratix";
const res = validateStory(story, { requireSchemaVersion: true });
if (!res.ok) console.log(res.errors);
assertStory(story); // throws if invalidCRUD (immutable)
import { createStory, upsertFact, upsertSignal } from "narratix";
let s = createStory("story.network.asset.v1", { title: "Asset story" });
s = upsertFact(s, { id: "asset.identity.ip", kind: "identity", text: "Asset IP: 10.0.0.1" });
s = upsertSignal(s, { code: "AGENT_DISCONNECTED", level: "warning", text: "Agent is disconnected." });Ops: merge + dedupe + cap
import { mergeStories, dedupeStory, capStory } from "narratix";
const merged = mergeStories(a, b);
const normalized = dedupeStory(merged);
const capped = capStory(normalized, { maxFacts: 12, maxSignals: 10 });Schema
import { NarratixStorySchema, NarratixStorySchemaId } from "narratix/schema";Examples
See examples/:
asset-story.tsvuln-story.tsbuild-story-crud.ts
License
MIT
