mod atlas;
mod cli;
mod client_compiler;
pub mod contracts;
mod generate;
mod manifest_harness;
mod skills;
pub use atlas::{render_atlas_schema, AtlasDatabaseUrl, AtlasSchemaSpec};
pub use cli::{
run, run_distributed, AgentHarness, Bus, ClientArgs, ClientManifestArgs, ContractsAcceptArgs,
ContractsArgs, ContractsCheckArgs, ContractsCommands, ContractsOutput, DescribeArgs,
DistributedArgs, DistributedCommands, Framework, GitopsPromote, ManifestFormat, Metrics,
ScaffoldArgs, SchemaArgs, SchemaDialect, SchemaFormat, ServiceArgs, ServiceCommands,
SkillsArgs, SkillsCommands, SkillsInitArgs, Store, Transport,
};
pub use client_compiler::{
compile_client, ClientCompileError, ClientCompileInput, ClientDocument, ClientRouteDiscovery,
ClientRouteRegistration, ClientSourceLocation, ClientSurfaceSelector, GeneratedClientFile,
GeneratedClientProject, GeneratedOperationSummary, GeneratedRoutePlan,
};
pub use contracts::{
check_migration_history, check_migration_inventory, check_predecessor_chain,
classify_release_programs, classify_snapshot_diff, close_local_contract_chain, contracts_accept,
contracts_check, diff_snapshots, snapshot_from_json, ArtifactIdentity, ArtifactPredecessor,
ArtifactProvenance, BaselineAvailability, ClassifiedChange, ClientDeclaration, ClientInventory,
ClientProgramArtifact, ClientProgramAsset, ClientProgramDescriptor, ClientProgramSurface,
ContractAcceptScope, ContractArtifactKind, ContractCatalog, ContractCheckResult,
ContractDiagnostic, ContractDiagnosticCode, ContractEntry, ContractError, ContractScope,
ContractsAcceptReport, ContractsCheckReport, EnvironmentPolicyReference, LifecycleDecision,
MigrationDialect, MigrationEntry, MigrationFile, MigrationHistoryCheck, MigrationInventory,
ObservedPredecessor, ProgramCompatibility, SafeDiagnosticValue,
SemanticSnapshot, SnapshotChange, SnapshotDiff, SnapshotEntry, MAX_CATALOG_BYTES,
MAX_CATALOG_DIRECTORIES, MAX_CATALOG_DIRECTORY_DEPTH, MAX_CATALOG_DIRECTORY_ENTRIES,
MAX_CATALOG_ENTRIES, MAX_CATALOG_FILES, MAX_CATALOG_GLOB_MATCHES, MAX_CATALOG_JSON_DEPTH,
MAX_MIGRATIONS, MAX_MIGRATION_INVENTORY_BYTES, MAX_MIGRATION_SQL_BYTES, MAX_SNAPSHOT_DEPTH,
MAX_SNAPSHOT_PATHS, MAX_SNAPSHOT_VALUE_BYTES, MIGRATION_INVENTORY_PATH,
MIGRATION_INVENTORY_SCHEMA_VERSION, MIGRATION_OWNER, MIGRATION_SCOPE,
};
pub use generate::{generate_service_scaffold, package_name};
pub use skills::{embedded_skills, generate_skills, EmbeddedFile, EmbeddedSkill, SkillsInitSpec};
#[derive(Clone, Debug)]
pub struct ServiceScaffoldSpec {
pub name: String,
pub transport: ServiceTransport,
pub store: StoreTarget,
pub bus: Option<BusTarget>,
pub metrics: Option<MetricsTarget>,
pub models: Vec<String>,
pub read_models: bool,
pub query_api: bool,
pub tracing: bool,
pub commands: Vec<String>,
pub events: Vec<String>,
pub distributed_dependency_path: String,
pub gitops: bool,
pub gitops_promote: Option<GitopsPromoteTarget>,
pub github: Option<GithubRepo>,
pub github_preview: Option<GithubRepo>,
pub github_promote: Option<GithubRepo>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum ServiceTransport {
Http,
Knative,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum StoreTarget {
Postgres,
Sqlite,
InMemory,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum BusTarget {
Rabbitmq,
Kafka,
Psql,
Nats,
}
impl BusTarget {
pub fn kind(self) -> &'static str {
match self {
BusTarget::Rabbitmq => "rabbitmq",
BusTarget::Kafka => "kafka",
BusTarget::Psql => "psql",
BusTarget::Nats => "nats",
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MetricsTarget {
Prometheus,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum GitopsPromoteTarget {
Argo,
Flux,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct GithubRepo {
pub owner: String,
pub repo: String,
}
impl GithubRepo {
pub fn parse(raw: &str) -> Result<Self, ScaffoldError> {
generate::parse_github_repo(raw)
}
pub fn slug(&self) -> String {
format!("{}/{}", self.owner, self.repo)
}
}
#[derive(Clone, Debug, Default)]
pub struct GeneratedProject {
pub files: Vec<GeneratedFile>,
pub warnings: Vec<String>,
pub post_create_actions: Vec<PostCreateAction>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct GeneratedFile {
pub path: String,
pub contents: String,
pub mode: Option<FileMode>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum FileMode {
Executable,
Symlink,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum PostCreateAction {
EnsureGithubRepository {
repo: GithubRepo,
},
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ScaffoldError(pub String);
impl std::fmt::Display for ScaffoldError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.0)
}
}
impl std::error::Error for ScaffoldError {}
impl ScaffoldError {
pub(crate) fn new(message: impl Into<String>) -> Self {
Self(message.into())
}
}