systemprompt-extension 0.55.0

Compile-time extension framework for systemprompt.io AI governance infrastructure. Built on the inventory crate — registers schemas, API routes, jobs, and providers in the MCP governance pipeline.
Documentation
//! Compile-time extension framework for systemprompt.io.
//!
//! Built on the [`inventory`] crate, this crate lets extension authors
//! declare schemas, API routes, scheduled jobs, and provider
//! implementations using the [`Extension`] trait and the
//! [`register_extension!`] macro. The runtime collects every registration
//! at startup, validates dependencies, and merges the resulting wiring
//! into the host application.
//!
//! # Authoring an extension
//!
//! ```ignore
//! use systemprompt_extension::prelude::*;
//!
//! #[derive(Default)]
//! struct MyExtension;
//!
//! impl Extension for MyExtension {
//!     fn metadata(&self) -> ExtensionMetadata {
//!         ExtensionMetadata { id: "my-ext", name: "My Extension", version: "0.1.0" }
//!     }
//! }
//!
//! register_extension!(MyExtension);
//! ```
//!
//! # Module map
//!
//! - [`metadata`], [`router`], [`migration`] — value types describing the
//!   extension surface.
//! - The `Extension` trait and the [`register_extension!`] macro form the core
//!   extensibility contract.
//! - [`build`] — build-script helper that generates `Extension::migrations()`
//!   from `schema/migrations/*.sql` files, paired with the
//!   [`extension_migrations!`] macro.
//! - [`purge`] — the user-keyed tables a deleted user's rows leave with them,
//!   declared per crate with [`user_purge_tables!`], and the shared rows swept
//!   once nothing references them, declared with [`orphan_sweeps!`].
//! - [`registry`] — runtime store of registered extensions, built from
//!   `inventory` submissions at startup.
//! - [`capabilities`] — `Has*` capability traits the host context implements to
//!   expose its subsystems to extensions.
//! - [`error`] — typed error enums ([`LoaderError`], [`ExtensionConfigError`])
//!   raised by the registry.
//!
//! # Feature flags
//!
//! This crate has no Cargo features; everything compiles into every build.
//!
//! Copyright (c) systemprompt.io — Business Source License 1.1.
//! See <https://systemprompt.io> for licensing details.

mod asset;
#[expect(
    clippy::panic,
    clippy::print_stdout,
    reason = "build-script support code: a panic is the correct way to abort a build, and \
              println! is how a build script emits cargo directives"
)]
pub mod build;
pub mod capabilities;
pub mod context;
pub mod error;
pub mod frame_options;
pub mod gateway_guard;
pub mod metadata;
pub mod migration;
pub mod purge;
pub mod registry;
pub mod router;
pub mod runtime_config;
pub mod seed;
mod traits;

pub use asset::{AssetDefinition, AssetDefinitionBuilder, AssetPaths, AssetType};
pub use context::{DynExtensionContext, ExtensionContext};
pub use error::{ExtensionConfigError, LoaderError};
pub use frame_options::{FrameOptions, FrameOptionsOverride, stamp_frame_options};
pub use gateway_guard::{
    GatewayDenyKind, GatewayDenyReason, GatewayGuardRequest, GatewayRequestGuard,
    GatewayRequestGuardRegistration, gateway_guards, run_gateway_guards,
};
pub use metadata::{ExtensionMetadata, ExtensionRole, SchemaDefinition};
pub use migration::Migration;
pub use purge::{UserPurgeTable, registered_user_purge_tables};
pub use registry::{ExtensionRegistration, ExtensionRegistry, RESERVED_PATHS};
pub use router::{ExtensionRouter, ExtensionRouterConfig, SiteAuthConfig};
pub use seed::Seed;
pub use traits::Extension;

pub use capabilities::{HasAnalytics, HasFingerprint, HasRouteClassifier, HasUserService};

pub mod prelude {
    pub use crate::asset::{AssetDefinition, AssetDefinitionBuilder, AssetPaths, AssetType};
    pub use crate::context::{DynExtensionContext, ExtensionContext};
    pub use crate::error::{ExtensionConfigError, LoaderError};
    pub use crate::gateway_guard::{
        GatewayDenyKind, GatewayDenyReason, GatewayGuardRequest, GatewayRequestGuard,
        run_gateway_guards,
    };
    pub use crate::registry::ExtensionRegistry;
    pub use crate::seed::Seed;
    pub use crate::{
        Extension, ExtensionMetadata, ExtensionRole, ExtensionRouter, FrameOptions, Migration,
        SchemaDefinition, SiteAuthConfig, extension_migrations, register_extension,
        register_gateway_guard, stamp_frame_options, user_purge_tables,
    };

    pub use systemprompt_provider_contracts::{
        ComponentContext, ComponentRenderer, ContentDataContext, ContentDataProvider,
        FrontmatterContext, FrontmatterProcessor, PageContext, PageDataProvider,
        PagePrepareContext, PagePrerenderer, PageRenderSpec, PlaceholderMapping, RenderedComponent,
        RssFeedContext, RssFeedItem, RssFeedMetadata, RssFeedProvider, RssFeedSpec, SitemapContext,
        SitemapProvider, SitemapSourceSpec, SitemapUrlEntry, TemplateDataExtender,
        TemplateDefinition, TemplateProvider, TemplateSource,
    };
}