# systemprompt-models
[](https://crates.io/crates/systemprompt-models)
[](https://docs.rs/systemprompt-models)
[](https://github.com/systempromptio/systemprompt-core/blob/main/LICENSE)
[](https://codecov.io/gh/systempromptio/systemprompt-core)
Defines the runtime request and response models, protocol types, bridge manifest types and supporting error types. The services manifest and profile live in `systemprompt-manifest`; the provider wire codecs in `systemprompt-wire`.
The shared layer sits at the bottom of the workspace and depends on no other systemprompt layer. `infra`, `domain`, `app`, and `entry` all consume it. Part of the [systemprompt-core](https://github.com/systempromptio/systemprompt-core) workspace.
## Installation
```toml
[dependencies]
systemprompt-models = "0.65"
```
## Module Map
| `a2a` | A2A protocol: agent card, message, task, transport, security scheme types. |
| `admin` | Admin dashboard DTOs (analytics, traffic, log entries, user metrics). |
| `agui` | AG-UI streaming event protocol (events, payloads, builders). |
| `ai` | LLM request/response shapes, `AiProvider` trait, streaming chunks, tool execution. |
| `api` | Public HTTP envelopes, pagination, error model, cloud API DTOs. |
| `artifacts` | Typed tool-result artifacts (chart, table, image, cli, …) and conversion. |
| `auth` | Authenticated user, base roles, JWT audience, PKCE, grant types. |
| `bridge` | Cowork desktop bridge manifest types. |
| `content`, `content_config` | Published content metadata and on-disk content routing. |
| `errors` | `thiserror`-derived `RepositoryError`, `ServiceError`, and the per-concern parse, secrets, validation, provider, metadata, and row enums. |
| `events` | Analytics, A2A, context, and system event envelopes. |
| `execution` | `RequestContext`, `ExecutionStep`, planned-tool bookkeeping. |
| `extension` | Extension manifest and discovery types. |
| `hooks` | Hook lifecycle events and categories. |
| `macros` | Crate-internal repository helper macros. |
| `mcp` | MCP server/registry config, deployment, auth state, registry trait. |
| `modules` | API path constants, CLI paths, service category resolution. |
| `net` | Network-layer value objects (ports, hosts). |
| `oauth` | OAuth client and server configuration shapes. |
| `origin` | Client attribution of an AI request: client kind, attestation tier, evidence. |
| `plugin` | Plugin component references, hook selection and dependencies carried in the bridge manifest. |
| `providers` | `ApiSurface`, the client-facing API family a provider is advertised under. |
| `repository` | `ServiceLifecycle` trait, `ServiceRecord`, `WhereClause` query builder. |
| `routing` | Request routing classification (`RouteClassifier`, `ApiCategory`). |
| `subprocess` | Environment-marker contract between the supervisor and its detached children. |
| `text`, `time_format` | Small text and timestamp formatting helpers. |
| `users` | Public user and session summaries. |
## Error Model
Three `thiserror` enums layered from database to HTTP:
```text
RepositoryError → ServiceError → ApiError → HTTP Response
```
```rust
use systemprompt_models::{RepositoryError, ServiceError, ApiError};
let repo_err = RepositoryError::not_found("user", "user-123");
let svc_err: ServiceError = repo_err.into();
let api_err: ApiError = svc_err.into();
```
`anyhow::Error` is never used in a public signature in this crate.
## Request Context
```rust
use systemprompt_models::RequestContext;
use systemprompt_identifiers::{AgentName, ContextId, SessionId, TraceId};
let ctx = RequestContext::new(
SessionId::generate(),
TraceId::generate(),
ContextId::generate(),
AgentName::new("planner"),
);
```
## Repository Helpers
```rust
use systemprompt_models::WhereClause;
let (clause, params) = WhereClause::default()
.eq("status", "active")
.not_null("pid")
.build();
```
`ServiceLifecycle` provides the common `get_running_services` / `mark_crashed` / `update_status` surface implemented by repositories that supervise long-running processes.
## Feature Flags
| `web` | off | `axum::IntoResponse` impls for the API envelopes. |
| `sqlx` | off | `sqlx::Type` derives for DB-persisted enums. |
## Dependencies
- `serde`, `serde_json`, `serde_yaml`: serialization
- `thiserror`, `async-trait`: error enums and async traits
- `chrono`, `uuid`, `indexmap`: common types
- `schemars`, `regex`: schema generation and pattern validation
- `http`, `url`, `futures`: HTTP types, SSRF URL validation, and streams
- `tracing`: structured logging
- `rmcp`: MCP protocol types
- `sqlx`: optional, with the `sqlx` feature
- `axum`: optional, with the `web` feature
- `systemprompt-traits`, `systemprompt-identifiers`, `systemprompt-provider-contracts`: shared layer siblings
## License
BSL-1.1 (Business Source License). Source-available for evaluation, testing, and non-production use. Production use requires a commercial license. Each version converts to Apache 2.0 four years after publication. See [LICENSE](https://github.com/systempromptio/systemprompt-core/blob/main/LICENSE).
---