vv-agent 0.7.0

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use std::collections::BTreeMap;
use std::fmt;

use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use ts_rs::TS;

pub type SchemaBundle = BTreeMap<String, String>;

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
pub struct SchemaExportResponse {
    pub json_schema: SchemaBundle,
    pub typescript: SchemaBundle,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AppServerSchemaError {
    message: String,
}

impl AppServerSchemaError {
    fn committed_bundle(message: impl Into<String>) -> Self {
        Self {
            message: message.into(),
        }
    }
}

impl fmt::Display for AppServerSchemaError {
    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
        formatter.write_str(&self.message)
    }
}

impl std::error::Error for AppServerSchemaError {}

pub fn generate_app_server_json_schema_bundle() -> Result<SchemaBundle, AppServerSchemaError> {
    committed_bundle(JSON_SCHEMA_FILES)
}

pub fn generate_app_server_typescript_bundle() -> Result<SchemaBundle, AppServerSchemaError> {
    committed_bundle(TYPESCRIPT_SCHEMA_FILES)
}

fn committed_bundle<const N: usize>(
    files: [(&'static str, &'static str); N],
) -> Result<SchemaBundle, AppServerSchemaError> {
    let bundle = files
        .into_iter()
        .map(|(name, source)| (name.to_string(), source.to_string()))
        .collect::<SchemaBundle>();
    if bundle.len() != N {
        return Err(AppServerSchemaError::committed_bundle(
            "duplicate committed App Server schema name",
        ));
    }
    Ok(bundle)
}

const JSON_SCHEMA_FILES: [(&str, &str); 19] = [
    (
        "AppItem",
        include_str!("../../../schema/app-server/json/AppItem.json"),
    ),
    (
        "AppThread",
        include_str!("../../../schema/app-server/json/AppThread.json"),
    ),
    (
        "AppTurn",
        include_str!("../../../schema/app-server/json/AppTurn.json"),
    ),
    (
        "ApprovalDecision",
        include_str!("../../../schema/app-server/json/ApprovalDecision.json"),
    ),
    (
        "ApprovalRequestParams",
        include_str!("../../../schema/app-server/json/ApprovalRequestParams.json"),
    ),
    (
        "ApprovalResolveParams",
        include_str!("../../../schema/app-server/json/ApprovalResolveParams.json"),
    ),
    (
        "ClientRequest",
        include_str!("../../../schema/app-server/json/ClientRequest.json"),
    ),
    (
        "InitializeParams",
        include_str!("../../../schema/app-server/json/InitializeParams.json"),
    ),
    (
        "InitializeResponse",
        include_str!("../../../schema/app-server/json/InitializeResponse.json"),
    ),
    (
        "JsonRpcMessage",
        include_str!("../../../schema/app-server/json/JsonRpcMessage.json"),
    ),
    (
        "SchemaExportResponse",
        include_str!("../../../schema/app-server/json/SchemaExportResponse.json"),
    ),
    (
        "ServerNotification",
        include_str!("../../../schema/app-server/json/ServerNotification.json"),
    ),
    (
        "ServerRequest",
        include_str!("../../../schema/app-server/json/ServerRequest.json"),
    ),
    (
        "ThreadReadResponse",
        include_str!("../../../schema/app-server/json/ThreadReadResponse.json"),
    ),
    (
        "ThreadResumeResponse",
        include_str!("../../../schema/app-server/json/ThreadResumeResponse.json"),
    ),
    (
        "ThreadStartResponse",
        include_str!("../../../schema/app-server/json/ThreadStartResponse.json"),
    ),
    (
        "TurnResumeParams",
        include_str!("../../../schema/app-server/json/TurnResumeParams.json"),
    ),
    (
        "TurnResumeResponse",
        include_str!("../../../schema/app-server/json/TurnResumeResponse.json"),
    ),
    (
        "TurnStartResponse",
        include_str!("../../../schema/app-server/json/TurnStartResponse.json"),
    ),
];

const TYPESCRIPT_SCHEMA_FILES: [(&str, &str); 18] = [
    (
        "AppItem.ts",
        include_str!("../../../schema/app-server/typescript/AppItem.ts"),
    ),
    (
        "AppThread.ts",
        include_str!("../../../schema/app-server/typescript/AppThread.ts"),
    ),
    (
        "AppTurn.ts",
        include_str!("../../../schema/app-server/typescript/AppTurn.ts"),
    ),
    (
        "ApprovalDecision.ts",
        include_str!("../../../schema/app-server/typescript/ApprovalDecision.ts"),
    ),
    (
        "ApprovalRequestParams.ts",
        include_str!("../../../schema/app-server/typescript/ApprovalRequestParams.ts"),
    ),
    (
        "ApprovalResolveParams.ts",
        include_str!("../../../schema/app-server/typescript/ApprovalResolveParams.ts"),
    ),
    (
        "ClientRequest.ts",
        include_str!("../../../schema/app-server/typescript/ClientRequest.ts"),
    ),
    (
        "InitializeParams.ts",
        include_str!("../../../schema/app-server/typescript/InitializeParams.ts"),
    ),
    (
        "InitializeResponse.ts",
        include_str!("../../../schema/app-server/typescript/InitializeResponse.ts"),
    ),
    (
        "SchemaExportResponse.ts",
        include_str!("../../../schema/app-server/typescript/SchemaExportResponse.ts"),
    ),
    (
        "ServerNotification.ts",
        include_str!("../../../schema/app-server/typescript/ServerNotification.ts"),
    ),
    (
        "ServerRequest.ts",
        include_str!("../../../schema/app-server/typescript/ServerRequest.ts"),
    ),
    (
        "ThreadReadResponse.ts",
        include_str!("../../../schema/app-server/typescript/ThreadReadResponse.ts"),
    ),
    (
        "ThreadResumeResponse.ts",
        include_str!("../../../schema/app-server/typescript/ThreadResumeResponse.ts"),
    ),
    (
        "ThreadStartResponse.ts",
        include_str!("../../../schema/app-server/typescript/ThreadStartResponse.ts"),
    ),
    (
        "TurnResumeParams.ts",
        include_str!("../../../schema/app-server/typescript/TurnResumeParams.ts"),
    ),
    (
        "TurnResumeResponse.ts",
        include_str!("../../../schema/app-server/typescript/TurnResumeResponse.ts"),
    ),
    (
        "TurnStartResponse.ts",
        include_str!("../../../schema/app-server/typescript/TurnStartResponse.ts"),
    ),
];