Skip to main content
Glama
starfield.rs36.9 kB
use dal::{ BuiltinsResult, DalContext, PropKind, SchemaId, action::prototype::ActionKind, func::{ argument::FuncArgumentKind, intrinsics::IntrinsicFunc, }, pkg::{ ImportOptions, import_pkg_from_pkg, }, prop::PropPath, }; use si_pkg::{ ActionFuncSpec, AttrFuncInputSpec, AttrFuncInputSpecKind, FuncArgumentSpec, FuncSpec, FuncSpecBackendKind, FuncSpecBackendResponseType, FuncSpecData, PkgSpec, PropSpec, SchemaSpec, SchemaSpecData, SchemaVariantSpec, SchemaVariantSpecData, SiPkg, SocketSpec, SocketSpecArity, SocketSpecData, SocketSpecKind, }; use crate::test_exclusive_schemas::{ PKG_CREATED_BY, PKG_VERSION, }; pub(crate) async fn migrate_test_exclusive_schema_starfield( ctx: &DalContext, schema_id: SchemaId, ) -> BuiltinsResult<()> { let mut starfield_builder = PkgSpec::builder(); let schema_name = "starfield"; starfield_builder .name(schema_name) .version(PKG_VERSION) .created_by(PKG_CREATED_BY); let identity_func_spec = IntrinsicFunc::Identity.to_spec()?; let starfield_create_action_code = "async function create() { return { payload: { \"poop\": true }, status: \"ok\" }; }"; let fn_name = "test:createActionStarfield"; let starfield_create_action_func = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(starfield_create_action_code) .handler("create") .backend_kind(FuncSpecBackendKind::JsAction) .response_type(FuncSpecBackendResponseType::Action) .build()?, ) .build()?; let starfield_refresh_action_code = "async function refresh(component: Input): Promise<Output> { return { payload: { \"poop\": true }, status: \"ok\" }; }"; let fn_name = "test:refreshActionStarfield"; let starfield_refresh_action_func = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .handler("refresh") .code_plaintext(starfield_refresh_action_code) .backend_kind(FuncSpecBackendKind::JsAction) .response_type(FuncSpecBackendResponseType::Action) .build()?, ) .build()?; let fallout_entries_to_galaxies_transform_code = "async function falloutEntriesToGalaxies(input: Input): Promise<Output> { let galaxies = []; let entries = input.entries; // Force the entries arg to be an Array (and return an empty array if the arg is absent/undefined/null). if (entries === undefined) return galaxies; if (entries === null) return galaxies; if (entries.length == 0) return galaxies; if (!Array.isArray(entries)) entries = [entries]; entries.filter(i => i ?? false).forEach(function (entry) { let name = entry.si.name; let rads = entry.domain.rads; let galaxy = { sun: name + \"-sun\", planets: rads }; galaxies.push(galaxy); }); return galaxies; }"; let fn_name = "test:falloutEntriesToGalaxies"; let fallout_entries_to_galaxies_transform_func = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(fallout_entries_to_galaxies_transform_code) .handler("falloutEntriesToGalaxies") .backend_kind(FuncSpecBackendKind::JsAttribute) .response_type(FuncSpecBackendResponseType::Array) .build()?, ) .argument( FuncArgumentSpec::builder() .name("entries") .kind(FuncArgumentKind::Array) .element_kind(Some(FuncArgumentKind::Object.into())) .build()?, ) .build()?; let starfield_scaffold_func = "function createAsset() {\ return new AssetBuilder().build(); }"; let fn_name = "test:scaffoldStarfieldAsset"; let starfield_authoring_schema_func = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(starfield_scaffold_func) .handler("createAsset") .backend_kind(FuncSpecBackendKind::JsSchemaVariantDefinition) .response_type(FuncSpecBackendResponseType::SchemaVariantDefinition) .build()?, ) .build()?; let starfield_kripke_func_code = "async function hesperus_is_phosphorus(input) { if (input.hesperus === \"hesperus\") { return \"phosphorus\"; } else return \"not hesperus\"; }"; let starfield_kripke_func_name = "hesperus_is_phosphorus"; let starfield_kripke_func = FuncSpec::builder() .name(starfield_kripke_func_name) .unique_id(starfield_kripke_func_name) .data( FuncSpecData::builder() .name(starfield_kripke_func_name) .code_plaintext(starfield_kripke_func_code) .handler(starfield_kripke_func_name) .backend_kind(FuncSpecBackendKind::JsAttribute) .response_type(FuncSpecBackendResponseType::String) .build()?, ) .argument( FuncArgumentSpec::builder() .name("hesperus") .kind(FuncArgumentKind::String) .build()?, ) .build()?; let starfield_schema = SchemaSpec::builder() .name(schema_name) .data( SchemaSpecData::builder() .name(schema_name) .category("test exclusive") .category_name(schema_name) .build()?, ) .variant( SchemaVariantSpec::builder() .version("v0") .unique_id("starfield_sv") .data( SchemaVariantSpecData::builder() .version("v0") .color("#ffffff") .func_unique_id(&starfield_authoring_schema_func.unique_id) .build()?, ) .domain_prop( PropSpec::builder() .name("name") .kind(PropKind::String) .func_unique_id(&identity_func_spec.unique_id) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::Prop) .name("identity") .prop_path(PropPath::new(["root", "si", "name"])) .build()?, ) .build()?, ) .domain_prop( PropSpec::builder() .name("hidden_prop") .kind(PropKind::String) .hidden(true) .build()?, ) .domain_prop( PropSpec::builder() .name("freestar") .kind(PropKind::String) .build()?, ) .domain_prop( PropSpec::builder() .name("attributes") .kind(PropKind::String) .func_unique_id(&identity_func_spec.unique_id) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::InputSocket) .name("identity") .socket_name("bethesda") .build()?, ) .build()?, ) .domain_prop( PropSpec::builder() .name("possible_world_a") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_1") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_2") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_3") .kind(PropKind::Object) .entry( PropSpec::builder() .kind(PropKind::String) .name("rigid_designator") .build()?, ) .build()?, ) .build()?, ) .build()?, ) .build()?, ) .domain_prop( PropSpec::builder() .name("possible_world_b") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_1") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_2") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_3") .kind(PropKind::Object) .entry( PropSpec::builder() .kind(PropKind::String) .name("naming_and_necessity") .func_unique_id( &starfield_kripke_func.unique_id, ) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::Prop) .name("hesperus") .prop_path(PropPath::new([ "root", "domain", "possible_world_a", "wormhole_1", "wormhole_2", "wormhole_3", "rigid_designator", ])) .build()?, ) .build()?, ) .build()?, ) .build()?, ) .build()?, ) .build()?, ) .domain_prop( PropSpec::builder() .name("universe") .kind(PropKind::Object) .entry( PropSpec::builder() .name("galaxies") .kind(PropKind::Array) .func_unique_id( &fallout_entries_to_galaxies_transform_func.unique_id, ) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::InputSocket) .name("entries") .socket_name("fallout") .build()?, ) .type_prop( PropSpec::builder() .name("galaxy") .kind(PropKind::Object) .entry( PropSpec::builder() .name("sun") .kind(PropKind::String) .build()?, ) .entry( PropSpec::builder() .name("planets") .kind(PropKind::Integer) .build()?, ) .build()?, ) .build()?, ) .build()?, ) .socket( SocketSpec::builder() .name("bethesda") .data( SocketSpecData::builder() .name("bethesda") .connection_annotations(serde_json::to_string(&vec!["bethesda"])?) .kind(SocketSpecKind::Input) .build()?, ) .build()?, ) .socket( SocketSpec::builder() .name("fallout") .data( SocketSpecData::builder() .name("fallout") .connection_annotations(serde_json::to_string(&vec!["fallout"])?) .kind(SocketSpecKind::Input) .build()?, ) .build()?, ) .action_func( ActionFuncSpec::builder() .kind(ActionKind::Create) .func_unique_id(&starfield_create_action_func.unique_id) .build()?, ) .action_func( ActionFuncSpec::builder() .kind(ActionKind::Refresh) .func_unique_id(&starfield_refresh_action_func.unique_id) .build()?, ) .build()?, ) .build()?; let starfield_spec = starfield_builder .func(identity_func_spec) .func(starfield_refresh_action_func) .func(starfield_create_action_func) .func(fallout_entries_to_galaxies_transform_func) .func(starfield_authoring_schema_func) .func(starfield_kripke_func) .schema(starfield_schema) .build()?; let pkg = SiPkg::load_from_spec(starfield_spec)?; import_pkg_from_pkg( ctx, &pkg, Some(ImportOptions { schema_id: Some(schema_id.into()), ..Default::default() }), ) .await?; Ok(()) } pub(crate) async fn migrate_test_exclusive_schema_morningstar( ctx: &DalContext, schema_id: SchemaId, ) -> BuiltinsResult<()> { let mut morningstar_builder = PkgSpec::builder(); let schema_name = "morningstar"; morningstar_builder .name(schema_name) .version(PKG_VERSION) .created_by(PKG_CREATED_BY); let identity_func_spec = IntrinsicFunc::Identity.to_spec()?; let star_func_code = "async function star(input: Input): Promise<Output> { if (!input?.stars) { return 'a starless sky'; } const stars = Array.isArray(input.stars) ? input.stars : [input.stars]; return stars[0] ?? 'not a star in the sky'; }"; let star_func_name = "star"; let star_func = FuncSpec::builder() .name(star_func_name) .unique_id(star_func_name) .data( FuncSpecData::builder() .name(star_func_name) .code_plaintext(star_func_code) .handler(star_func_name) .backend_kind(FuncSpecBackendKind::JsAttribute) .response_type(FuncSpecBackendResponseType::String) .build()?, ) .argument( FuncArgumentSpec::builder() .name("stars") .kind(FuncArgumentKind::Array) .build()?, ) .build()?; let morningstar_scaffold_func = "function createAsset() {\ return new AssetBuilder().build(); }"; let fn_name = "test:scaffoldMorningstarAsset"; let morningstar_authoring_schema_func = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(morningstar_scaffold_func) .handler("createAsset") .backend_kind(FuncSpecBackendKind::JsSchemaVariantDefinition) .response_type(FuncSpecBackendResponseType::SchemaVariantDefinition) .build()?, ) .build()?; let morningstar_schema = SchemaSpec::builder() .name(schema_name) .data( SchemaSpecData::builder() .name(schema_name) .category("test exclusive") .category_name(schema_name) .build()?, ) .variant( SchemaVariantSpec::builder() .version("v0") .unique_id("morningstar_sv") .data( SchemaVariantSpecData::builder() .version("v0") .color("#ffffff") .func_unique_id(&morningstar_authoring_schema_func.unique_id) .build()?, ) .domain_prop( PropSpec::builder() .name("stars") .kind(PropKind::String) .func_unique_id(&star_func.unique_id) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::InputSocket) .name("stars") .socket_name("naming_and_necessity") .build()?, ) .build()?, ) .socket( SocketSpec::builder() .name("naming_and_necessity") .data( SocketSpecData::builder() .arity(SocketSpecArity::Many) .name("naming_and_necessity") .connection_annotations(serde_json::to_string(&vec![ "naming_and_necessity", ])?) .kind(SocketSpecKind::Input) .build()?, ) .build()?, ) .build()?, ) .build()?; let morningstar_spec = morningstar_builder .func(identity_func_spec) .func(star_func) .func(morningstar_authoring_schema_func) .schema(morningstar_schema) .build()?; let pkg = SiPkg::load_from_spec(morningstar_spec)?; import_pkg_from_pkg( ctx, &pkg, Some(ImportOptions { schema_id: Some(schema_id.into()), ..Default::default() }), ) .await?; Ok(()) } pub(crate) async fn migrate_test_exclusive_schema_etoiles( ctx: &DalContext, schema_id: SchemaId, ) -> BuiltinsResult<()> { let mut etoiles_builder = PkgSpec::builder(); let schema_name = "etoiles"; etoiles_builder .name(schema_name) .version(PKG_VERSION) .created_by(PKG_CREATED_BY); let identity_func_spec = IntrinsicFunc::Identity.to_spec()?; let etoiles_scaffold_func = "function createAsset() {\ return new AssetBuilder().build(); }"; let fn_name = "test:scaffoldetoilesAsset"; let etoiles_authoring_schema_func = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(etoiles_scaffold_func) .handler("createAsset") .backend_kind(FuncSpecBackendKind::JsSchemaVariantDefinition) .response_type(FuncSpecBackendResponseType::SchemaVariantDefinition) .build()?, ) .build()?; let etoiles_kripke_func_code = "async function la_belle_etoile(input) { let rigid_designator = 'not hesperus'; if (input?.possible_world_a?.wormhole_1?.wormhole_2?.wormhole_3?.rigid_designator === \"hesperus\") { rigid_designator = \"phosphorus\"; } return { wormhole_1: { wormhole_2: { wormhole_3: { rigid_designator, } } } } }"; let etoiles_kripke_func_name = "la_belle_etoile"; let etoiles_kripke_func = FuncSpec::builder() .name(etoiles_kripke_func_name) .unique_id(etoiles_kripke_func_name) .data( FuncSpecData::builder() .name(etoiles_kripke_func_name) .code_plaintext(etoiles_kripke_func_code) .handler(etoiles_kripke_func_name) .backend_kind(FuncSpecBackendKind::JsAttribute) .response_type(FuncSpecBackendResponseType::Object) .build()?, ) .argument( FuncArgumentSpec::builder() .name("possible_world_a") .kind(FuncArgumentKind::Object) .build()?, ) .build()?; let etoiles_schema = SchemaSpec::builder() .name(schema_name) .data( SchemaSpecData::builder() .name(schema_name) .category("test exclusive") .category_name(schema_name) .build()?, ) .variant( SchemaVariantSpec::builder() .version("v0") .unique_id("etoiles_sv") .data( SchemaVariantSpecData::builder() .version("v0") .color("#ffffff") .func_unique_id(&etoiles_authoring_schema_func.unique_id) .build()?, ) .domain_prop( PropSpec::builder() .name("name") .kind(PropKind::String) .func_unique_id(&identity_func_spec.unique_id) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::Prop) .name("identity") .prop_path(PropPath::new(["root", "si", "name"])) .build()?, ) .build()?, ) .domain_prop( PropSpec::builder() .name("private_language") .kind(PropKind::String) .func_unique_id(&identity_func_spec.unique_id) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::InputSocket) .name("identity") .socket_name("private_language") .build()?, ) .build()?, ) .domain_prop( PropSpec::builder() .name("hidden_prop") .kind(PropKind::String) .hidden(true) .build()?, ) .domain_prop( PropSpec::builder() .name("possible_world_a") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_1") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_2") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_3") .kind(PropKind::Object) .entry( PropSpec::builder() .kind(PropKind::String) .name("rigid_designator") .build()?, ) .build()?, ) .build()?, ) .build()?, ) .build()?, ) .domain_prop( PropSpec::builder() .name("possible_world_b") .kind(PropKind::Object) .func_unique_id(&etoiles_kripke_func.unique_id) .input( AttrFuncInputSpec::builder() .kind(AttrFuncInputSpecKind::Prop) .name("possible_world_a") .prop_path(PropPath::new(["root", "domain", "possible_world_a"])) .build()?, ) .entry( PropSpec::builder() .name("wormhole_1") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_2") .kind(PropKind::Object) .entry( PropSpec::builder() .name("wormhole_3") .kind(PropKind::Object) .entry( PropSpec::builder() .kind(PropKind::String) .name("rigid_designator") .build()?, ) .build()?, ) .build()?, ) .build()?, ) .build()?, ) .socket( SocketSpec::builder() .name("naming_and_necessity") .data( SocketSpecData::builder() .name("naming_and_necessity") .connection_annotations(serde_json::to_string(&vec![ "naming_and_necessity", ])?) .kind(SocketSpecKind::Output) .func_unique_id(&identity_func_spec.unique_id) .build()?, ) .input( AttrFuncInputSpec::builder() .name("identity") .kind(AttrFuncInputSpecKind::Prop) .prop_path(PropPath::new([ "root", "domain", "possible_world_b", "wormhole_1", "wormhole_2", "wormhole_3", "rigid_designator", ])) .build()?, ) .build()?, ) .socket( SocketSpec::builder() .name("private_language") .data( SocketSpecData::builder() .name("private_language") .connection_annotations(serde_json::to_string(&vec![ "private_language", ])?) .kind(SocketSpecKind::Input) .arity(SocketSpecArity::One) .build()?, ) .build()?, ) .build()?, ) .build()?; let etoiles_spec = etoiles_builder .func(identity_func_spec) .func(etoiles_authoring_schema_func) .func(etoiles_kripke_func) .schema(etoiles_schema) .build()?; let pkg = SiPkg::load_from_spec(etoiles_spec)?; import_pkg_from_pkg( ctx, &pkg, Some(ImportOptions { schema_id: Some(schema_id.into()), ..Default::default() }), ) .await?; Ok(()) } pub(crate) async fn migrate_test_exclusive_schema_private_language( ctx: &DalContext, schema_id: SchemaId, ) -> BuiltinsResult<()> { let mut private_lang_builder = PkgSpec::builder(); let schema_name = "private_language"; private_lang_builder .name(schema_name) .version(PKG_VERSION) .created_by(PKG_CREATED_BY); let identity_func_spec = IntrinsicFunc::Identity.to_spec()?; let private_lang_scaff = "function createAsset() {\ return new AssetBuilder().build(); }"; let fn_name = "test:scaffoldPrivateLang"; let private_lang_auth_schema = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(private_lang_scaff) .handler("createAsset") .backend_kind(FuncSpecBackendKind::JsSchemaVariantDefinition) .response_type(FuncSpecBackendResponseType::SchemaVariantDefinition) .build()?, ) .build()?; let private_lang_payload_to_val = "async function translate(arg: Input): Promise<Output> {\ return arg.payload ?? {}; }"; let fn_name = "test:resourcePayloadToValue"; let private_lang_payload_to_val_fn = FuncSpec::builder() .name(fn_name) .unique_id(fn_name) .data( FuncSpecData::builder() .name(fn_name) .code_plaintext(private_lang_payload_to_val) .handler("translate") .backend_kind(FuncSpecBackendKind::JsAttribute) .response_type(FuncSpecBackendResponseType::Json) .build()?, ) .argument( FuncArgumentSpec::builder() .name("payload") .kind(FuncArgumentKind::Object) .build()?, ) .build()?; let private_lang_schema = SchemaSpec::builder() .name(schema_name) .data( SchemaSpecData::builder() .name(schema_name) .category("test exclusive") .category_name(schema_name) .build()?, ) .variant( SchemaVariantSpec::builder() .version("v0") .unique_id("priv_lang_sv") .data( SchemaVariantSpecData::builder() .version("v0") .color("#ffffff") .func_unique_id(&private_lang_auth_schema.unique_id) .build()?, ) .socket( SocketSpec::builder() .name("private_language") .data( SocketSpecData::builder() .name("private_language") .connection_annotations(serde_json::to_string(&vec![ "private_language", ])?) .kind(SocketSpecKind::Output) .func_unique_id(&identity_func_spec.unique_id) .build()?, ) .input( AttrFuncInputSpec::builder() .name("identity") .kind(AttrFuncInputSpecKind::Prop) .prop_path(PropPath::new(["root", "si", "name"])) .build()?, ) .build()?, ) .build()?, ) .build()?; let private_lang_spec = private_lang_builder .func(identity_func_spec) .func(private_lang_auth_schema) .func(private_lang_payload_to_val_fn) .schema(private_lang_schema) .build()?; let pkg = SiPkg::load_from_spec(private_lang_spec)?; import_pkg_from_pkg( ctx, &pkg, Some(ImportOptions { schema_id: Some(schema_id.into()), ..Default::default() }), ) .await?; Ok(()) }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server