From 5e858f064eb92dd429e984f83052b2525601e430 Mon Sep 17 00:00:00 2001 From: Seto Elkahfi <1797197+setoelkahfi@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:40:50 +0100 Subject: [PATCH 1/2] Add smb run runners and the matching MCP tools smb run runners list shows the Run fleet, and smb run runners tags ... replaces a runner's tags. Both call the admin API, so they need an admin user's login. run_runners_list and run_runner_tags_set expose the same two operations over stdio MCP; the second carries the destructive hint because it replaces the whole list. Co-Authored-By: Claude Sonnet 5.5 (cherry picked from commit 581b14d4bfe7a08830003568dbaec557bc6056fa) --- crates/cli/src/cli/mod.rs | 7 +- crates/cli/src/lib.rs | 1 + crates/cli/src/main.rs | 2 + crates/cli/src/mcp.rs | 54 ++++++++++-- crates/cli/src/run.rs | 171 ++++++++++++++++++++++++++++++++++++++ docs/mcp.md | 16 +++- 6 files changed, 243 insertions(+), 8 deletions(-) create mode 100644 crates/cli/src/run.rs diff --git a/crates/cli/src/cli/mod.rs b/crates/cli/src/cli/mod.rs index 32a4d76a..33644c3b 100644 --- a/crates/cli/src/cli/mod.rs +++ b/crates/cli/src/cli/mod.rs @@ -1,5 +1,5 @@ use { - crate::{account, cloud_auth, mail, project, tenant}, + crate::{account, cloud_auth, mail, project, run, tenant}, clap::{Parser, Subcommand, ValueEnum}, smbcloud_network::environment::Environment, spinners::Spinner, @@ -108,6 +108,11 @@ pub enum Commands { #[clap(subcommand)] command: project::cli::Commands, }, + #[clap(about = "Inspect and tag Run runners (admin only).")] + Run { + #[clap(subcommand)] + command: run::Commands, + }, #[clap(about = "Manage your tenants.")] Tenant { #[clap(subcommand)] diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs index 8ae2637e..7d3b9d97 100644 --- a/crates/cli/src/lib.rs +++ b/crates/cli/src/lib.rs @@ -13,6 +13,7 @@ pub mod interface; pub mod mail; pub mod mcp; pub mod project; +pub mod run; mod session_config; pub mod tenant; mod token; diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs index 6bfe962e..8e2a51f4 100644 --- a/crates/cli/src/main.rs +++ b/crates/cli/src/main.rs @@ -14,6 +14,7 @@ use { }, mail::process::process_mail, project::{crud_create::process_project_init, process::process_project}, + run::process_run, tenant::process::process_tenant, }, smbcloud_network::environment::Environment, @@ -207,6 +208,7 @@ async fn run(cli: Cli) -> Result { Some(Commands::Mail { command }) => process_mail(cli.environment, command).await, Some(Commands::Auth { command }) => process_cloud_auth(cli.environment, command).await, Some(Commands::Project { command }) => process_project(cli.environment, command).await, + Some(Commands::Run { command }) => process_run(cli.environment, command).await, Some(Commands::Tenant { command }) => process_tenant(cli.environment, command).await, Some(Commands::ControlKit { command }) => process_controlkit(command).await, Some(Commands::Migrate {}) => process_migrate(cli.environment).await, diff --git a/crates/cli/src/mcp.rs b/crates/cli/src/mcp.rs index 507e00a0..bf50a17b 100644 --- a/crates/cli/src/mcp.rs +++ b/crates/cli/src/mcp.rs @@ -321,6 +321,16 @@ struct TenantUseArgs { id: String, } +#[derive(Debug, Deserialize, JsonSchema)] +struct RunRunnerTagsSetArgs { + /// The runner ID, from `run_runners_list`. + id: i64, + /// The complete tag list. It replaces the current one: lower-case letters, + /// digits and hyphens, at most 16. Executor tags the runner reports are + /// kept regardless. + tags: Vec, +} + #[derive(Debug, Deserialize, JsonSchema)] struct MailAppListArgs { /// Restrict to mail apps under this project ID. Defaults to the @@ -1116,6 +1126,37 @@ impl SmbMcpServer { json_result(&tenant) } + #[tool( + description = "List Run runners with status, tags, flags and active job count, as a \ + JSON array. Requires an admin user." + )] + async fn run_runners_list(&self) -> Result { + let token = self.access_token()?; + let runners = crate::run::list_runners(self.environment, client(), token) + .await + .map_err(to_error_data)?; + json_result(&runners) + } + + #[tool( + description = "Replace a Run runner's tags with the given list. Tags decide which \ + jobs the runner claims, so any tag not in the list is removed. Read \ + the current tags with `run_runners_list` first. Requires an admin \ + user. Returns the updated runner as JSON.", + annotations(destructive_hint = true) + )] + async fn run_runner_tags_set( + &self, + Parameters(args): Parameters, + ) -> Result { + let token = self.access_token()?; + let runner = + crate::run::set_runner_tags(self.environment, client(), token, args.id, args.tags) + .await + .map_err(to_error_data)?; + json_result(&runner) + } + #[tool( description = "Delete an organization tenant by ID. This is destructive and \ irreversible — it cascades to every project, Auth app, and Mail \ @@ -1925,6 +1966,8 @@ mod tests { "auth_app_new", "auth_app_update", "auth_app_delete", + "run_runners_list", + "run_runner_tags_set", ] { assert!( names.contains(&cloud_only), @@ -2100,15 +2143,16 @@ mod tests { fn delete_and_overwrite_tools_carry_destructive_hint() { let tools = SmbMcpServer::cloud_tool_router().list_all(); let mut checked = 0; - for tool in tools - .iter() - .filter(|tool| tool.name.ends_with("_delete") || tool.name == "project_init") - { + for tool in tools.iter().filter(|tool| { + tool.name.ends_with("_delete") + || tool.name == "project_init" + || tool.name == "run_runner_tags_set" + }) { let annotations = tool.annotations.as_ref().expect("annotations"); assert_eq!(annotations.destructive_hint, Some(true), "{}", tool.name); checked += 1; } - assert_eq!(checked, 6); + assert_eq!(checked, 7); } #[test] diff --git a/crates/cli/src/run.rs b/crates/cli/src/run.rs new file mode 100644 index 00000000..3065c53d --- /dev/null +++ b/crates/cli/src/run.rs @@ -0,0 +1,171 @@ +//! Admin view of the Run fleet. Both commands need an admin user's login; the +//! API refuses anyone else. + +use crate::{ + cli::CommandResult, + client, + token::get_smb_token::get_smb_token, + ui::{succeed_message, succeed_symbol}, +}; +use anyhow::{anyhow, Result}; +use clap::Subcommand; +use console::style; +use reqwest::Client; +use serde::{Deserialize, Serialize}; +use smbcloud_model::error_codes::ErrorResponse; +use smbcloud_network::{environment::Environment, network::request}; +use smbcloud_networking::{constants::SMB_USER_AGENT, smb_base_url_builder, smb_client::SmbClient}; +use spinners::Spinner; + +#[derive(Subcommand)] +pub enum Commands { + #[clap(about = "Manage Run runners (admin only).")] + Runners { + #[clap(subcommand)] + command: RunnerCommands, + }, +} + +#[derive(Subcommand)] +pub enum RunnerCommands { + #[clap(about = "List runners with their status and tags.")] + List {}, + #[clap(about = "Replace a runner's tags. Executor tags the runner reports are kept.")] + Tags { + /// The runner ID. + id: i64, + /// The full tag list. Lower-case letters, digits and hyphens, up to 16. + #[clap(required = true)] + tags: Vec, + }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Runner { + pub id: i64, + pub name: String, + pub status: String, + pub tags: Vec, + pub ci_enabled: bool, + pub publish_enabled: bool, + pub last_heartbeat_at: Option, + pub version: Option, + pub hostname: Option, + pub active_jobs: i64, +} + +#[derive(Serialize)] +struct TagsBody { + tags: Vec, +} + +fn runners_url(env: Environment, client: (&SmbClient, &str), id: Option) -> String { + let mut url_builder = smb_base_url_builder(env, client); + url_builder.add_route("v1/admin/run/runners"); + if let Some(id) = id { + url_builder.add_route(&id.to_string()); + } + url_builder.build() +} + +pub(crate) async fn list_runners( + env: Environment, + client: (&SmbClient, &str), + access_token: String, +) -> Result, ErrorResponse> { + let builder = Client::new() + .get(runners_url(env, client, None)) + .header("Authorization", access_token) + .header("User-agent", SMB_USER_AGENT); + request(builder).await +} + +pub(crate) async fn set_runner_tags( + env: Environment, + client: (&SmbClient, &str), + access_token: String, + id: i64, + tags: Vec, +) -> Result { + let builder = Client::new() + .patch(runners_url(env, client, Some(id))) + .json(&TagsBody { tags }) + .header("Authorization", access_token) + .header("User-agent", SMB_USER_AGENT); + request(builder).await +} + +pub async fn process_run(env: Environment, commands: Commands) -> Result { + match commands { + Commands::Runners { command } => match command { + RunnerCommands::List {} => process_runners_list(env).await, + RunnerCommands::Tags { id, tags } => process_runner_tags(env, id, tags).await, + }, + } +} + +async fn process_runners_list(env: Environment) -> Result { + let access_token = get_smb_token(env)?; + let mut spinner = loading_spinner("Loading runners"); + + let runners = list_runners(env, client(), access_token) + .await + .map_err(|error| anyhow!(error.to_string()))?; + + spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded.")); + println!("\n{}", style("Runners").bold().underlined()); + for runner in &runners { + print_runner(runner); + } + + Ok(done_result(if runners.is_empty() { + "No runners found." + } else { + "Done." + })) +} + +async fn process_runner_tags( + env: Environment, + id: i64, + tags: Vec, +) -> Result { + let access_token = get_smb_token(env)?; + let mut spinner = loading_spinner("Saving tags"); + + let runner = set_runner_tags(env, client(), access_token, id, tags) + .await + .map_err(|error| anyhow!(error.to_string()))?; + + spinner.stop_and_persist(&succeed_symbol(), succeed_message("Saved.")); + print_runner(&runner); + + Ok(done_result("Tags updated.")) +} + +fn print_runner(runner: &Runner) { + println!( + "#{} {} [{}] tags={} active_jobs={} host={}", + runner.id, + style(&runner.name).bold(), + runner.status, + runner.tags.join(","), + runner.active_jobs, + runner.hostname.as_deref().unwrap_or("-"), + ); +} + +fn loading_spinner(message: &str) -> Spinner { + Spinner::new( + spinners::Spinners::SimpleDotsScrolling, + succeed_message(message), + ) +} + +fn done_result(message: &str) -> CommandResult { + CommandResult { + spinner: loading_spinner("Done"), + symbol: succeed_symbol(), + msg: succeed_message(message), + } +} diff --git a/docs/mcp.md b/docs/mcp.md index 2047382d..f2c82524 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -5,8 +5,8 @@ assistant or agent — Claude Desktop, Claude Code, Cursor, or any other MCP-capable client — can send transactional email and manage your smbCloud projects, tenants, Mail apps, and Auth apps directly, without you leaving the chat to run `smb` commands by hand. -Start it with `smb --mcp`; it speaks standard MCP over stdio and exposes 41 -tools covering the account, project, deploy, tenant, Mail, and Auth surfaces. +Start it with `smb --mcp`; it speaks standard MCP over stdio and exposes 43 +tools covering the account, project, deploy, tenant, Run, Mail, and Auth surfaces. Cross-platform mobile and TV app testing is exposed as a separate, focused MCP profile through `xcrs --mcp` or `smb --mcp --scope automation`. Keeping cloud @@ -254,6 +254,18 @@ tenant is bootstrapped on signup and isn't user-managed. | `tenant_update` | `id`, `name` | The renamed tenant. | | `tenant_delete` | `id` | Confirmation. **Destructive and irreversible** — cascades to every project, Mail app, and Auth app the tenant owns. | +### Run runners + +Run executes jobs on registered runners, and a runner's tags decide which jobs +it claims. These tools are for an admin user: the API refuses anyone else. The +same operations are available as `smb run runners list` and +`smb run runners tags ...`. + +| Tool | Arguments | Returns | +| --- | --- | --- | +| `run_runners_list` | _(none)_ | Every runner with status, tags, flags, heartbeat, host, and active job count. | +| `run_runner_tags_set` | `id`, `tags` | The updated runner. **Replaces the whole tag list**, so read the current tags first. Tags are lower-cased and must use letters, digits, and hyphens, up to 16. An executor tag the runner reports is kept. | + ### Mail apps A Mail app owns one domain's mail routing; it belongs to a project. From aac057f9769a3bce5e73c537ed428a8c037b3c3d Mon Sep 17 00:00:00 2001 From: Seto Elkahfi <1797197+setoelkahfi@users.noreply.github.com> Date: Mon, 2 Nov 2026 17:57:51 +0100 Subject: [PATCH 2/2] Release 1.1.1 Co-Authored-By: Claude Sonnet 5.5 --- Cargo.lock | 34 +++++++++---------- Cargo.toml | 24 ++++++------- crates/cli/Cargo.toml | 2 +- crates/smbcloud-auth-sdk-py/Cargo.toml | 2 +- crates/smbcloud-auth-sdk-wasm/Cargo.toml | 2 +- crates/smbcloud-auth-sdk/Cargo.toml | 2 +- crates/smbcloud-auth/Cargo.toml | 2 +- crates/smbcloud-deploy/Cargo.toml | 2 +- crates/smbcloud-email-sdk/Cargo.toml | 2 +- crates/smbcloud-gresiq-sdk/Cargo.toml | 2 +- crates/smbcloud-gresiq/Cargo.toml | 2 +- crates/smbcloud-mail/Cargo.toml | 2 +- crates/smbcloud-model/Cargo.toml | 2 +- crates/smbcloud-network/Cargo.toml | 2 +- crates/smbcloud-networking-project/Cargo.toml | 2 +- crates/smbcloud-networking/Cargo.toml | 2 +- crates/smbcloud-s6n/Cargo.toml | 2 +- crates/smbcloud-utils/Cargo.toml | 2 +- crates/xcrs/Cargo.toml | 2 +- packaging/mcp/server-xcrs.json | 4 +-- packaging/mcp/server.json | 6 ++-- packaging/npm/smbcloud-cli/package-lock.json | 14 ++++---- packaging/npm/smbcloud-cli/package.json | 14 ++++---- packaging/npm/xcrs/package-lock.json | 14 ++++---- packaging/npm/xcrs/package.json | 14 ++++---- .../nuget/smbcloud-cli/SmbCloud.Cli.csproj | 2 +- packaging/nuget/xcrs/Xcrs.csproj | 2 +- sdk/gems/auth/Gemfile.lock | 2 +- sdk/gems/auth/ext/auth/Cargo.toml | 2 +- sdk/gems/auth/lib/auth/version.rb | 2 +- sdk/gems/email/Gemfile.lock | 2 +- sdk/gems/email/ext/email/Cargo.toml | 2 +- sdk/gems/email/lib/email/version.rb | 2 +- sdk/gems/model/Gemfile.lock | 2 +- sdk/gems/model/ext/model/Cargo.toml | 2 +- sdk/gems/model/lib/model/version.rb | 2 +- sdk/npm/smbcloud-auth/package.json | 2 +- 37 files changed, 91 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ee58c6c2..2a8616d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2653,7 +2653,7 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smbcloud-auth" -version = "1.1.0" +version = "1.1.1" dependencies = [ "log", "reqwest", @@ -2668,7 +2668,7 @@ dependencies = [ [[package]] name = "smbcloud-auth-sdk" -version = "1.1.0" +version = "1.1.1" dependencies = [ "base64 0.22.1", "reqwest", @@ -2683,7 +2683,7 @@ dependencies = [ [[package]] name = "smbcloud-auth-sdk-py" -version = "1.1.0" +version = "1.1.1" dependencies = [ "pyo3", "pythonize", @@ -2697,7 +2697,7 @@ dependencies = [ [[package]] name = "smbcloud-auth-sdk-wasm" -version = "1.1.0" +version = "1.1.1" dependencies = [ "serde-wasm-bindgen", "smbcloud-auth-sdk", @@ -2710,7 +2710,7 @@ dependencies = [ [[package]] name = "smbcloud-cli" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "chrono", @@ -2758,7 +2758,7 @@ dependencies = [ [[package]] name = "smbcloud-deploy" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "ignore", @@ -2778,7 +2778,7 @@ dependencies = [ [[package]] name = "smbcloud-email-sdk" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "log", @@ -2793,7 +2793,7 @@ dependencies = [ [[package]] name = "smbcloud-gresiq" -version = "1.1.0" +version = "1.1.1" dependencies = [ "native-tls", "postgres-native-tls", @@ -2807,7 +2807,7 @@ dependencies = [ [[package]] name = "smbcloud-gresiq-sdk" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "log", @@ -2821,7 +2821,7 @@ dependencies = [ [[package]] name = "smbcloud-mail" -version = "1.1.0" +version = "1.1.1" dependencies = [ "reqwest", "serde", @@ -2833,7 +2833,7 @@ dependencies = [ [[package]] name = "smbcloud-model" -version = "1.1.0" +version = "1.1.1" dependencies = [ "chrono", "log", @@ -2849,7 +2849,7 @@ dependencies = [ [[package]] name = "smbcloud-network" -version = "1.1.0" +version = "1.1.1" dependencies = [ "clap 4.6.6", "log", @@ -2863,7 +2863,7 @@ dependencies = [ [[package]] name = "smbcloud-networking" -version = "1.1.0" +version = "1.1.1" dependencies = [ "smbcloud-network", "url-builder", @@ -2871,7 +2871,7 @@ dependencies = [ [[package]] name = "smbcloud-networking-project" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "async-trait", @@ -2889,11 +2889,11 @@ dependencies = [ [[package]] name = "smbcloud-s6n" -version = "1.1.0" +version = "1.1.1" [[package]] name = "smbcloud-utils" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "dirs", @@ -4141,7 +4141,7 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "xcrs" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/Cargo.toml b/Cargo.toml index a2c85f88..8667256d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,17 +31,17 @@ serde = "1" serde_json = "1.0.82" serde_repr = "0.1" sha2 = "0.10" -smbcloud-auth = { version = "1.1.0", path = "crates/smbcloud-auth" } -smbcloud-auth-sdk = { version = "1.1.0", path = "crates/smbcloud-auth-sdk" } -smbcloud-deploy = { version = "1.1.0", path = "crates/smbcloud-deploy" } -smbcloud-email-sdk = { version = "1.1.0", path = "crates/smbcloud-email-sdk" } -smbcloud-gresiq-sdk = { version = "1.1.0", path = "crates/smbcloud-gresiq-sdk" } -smbcloud-mail = { version = "1.1.0", path = "crates/smbcloud-mail" } -smbcloud-model = { version = "1.1.0", path = "crates/smbcloud-model" } -smbcloud-network = { version = "1.1.0", path = "crates/smbcloud-network" } -smbcloud-networking = { version = "1.1.0", path = "crates/smbcloud-networking" } -smbcloud-networking-project = { version = "1.1.0", path = "crates/smbcloud-networking-project" } -smbcloud-utils = { version = "1.1.0", path = "crates/smbcloud-utils" } +smbcloud-auth = { version = "1.1.1", path = "crates/smbcloud-auth" } +smbcloud-auth-sdk = { version = "1.1.1", path = "crates/smbcloud-auth-sdk" } +smbcloud-deploy = { version = "1.1.1", path = "crates/smbcloud-deploy" } +smbcloud-email-sdk = { version = "1.1.1", path = "crates/smbcloud-email-sdk" } +smbcloud-gresiq-sdk = { version = "1.1.1", path = "crates/smbcloud-gresiq-sdk" } +smbcloud-mail = { version = "1.1.1", path = "crates/smbcloud-mail" } +smbcloud-model = { version = "1.1.1", path = "crates/smbcloud-model" } +smbcloud-network = { version = "1.1.1", path = "crates/smbcloud-network" } +smbcloud-networking = { version = "1.1.1", path = "crates/smbcloud-networking" } +smbcloud-networking-project = { version = "1.1.1", path = "crates/smbcloud-networking-project" } +smbcloud-utils = { version = "1.1.1", path = "crates/smbcloud-utils" } spinners = "4.1.0" strum = "0.27" strum_macros = "0.27" @@ -59,4 +59,4 @@ uniffi = "0.31" url-builder = "0.1.1" wiremock = "0.6" wasm-bindgen = "0.2" -xcrs = { version = "1.1.0", path = "crates/xcrs" } +xcrs = { version = "1.1.1", path = "crates/xcrs" } diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index e45fc141..623a4ecb 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-cli" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["Seto Elkahfi "] description = "smbCloud command line interface." diff --git a/crates/smbcloud-auth-sdk-py/Cargo.toml b/crates/smbcloud-auth-sdk-py/Cargo.toml index 9db07978..48d4e1f4 100644 --- a/crates/smbcloud-auth-sdk-py/Cargo.toml +++ b/crates/smbcloud-auth-sdk-py/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-auth-sdk-py" -version = "1.1.0" +version = "1.1.1" edition = "2024" authors = ["Seto Elkahfi "] description = "Python bindings for the smbCloud Auth SDK." diff --git a/crates/smbcloud-auth-sdk-wasm/Cargo.toml b/crates/smbcloud-auth-sdk-wasm/Cargo.toml index 750af3e5..4e95c778 100644 --- a/crates/smbcloud-auth-sdk-wasm/Cargo.toml +++ b/crates/smbcloud-auth-sdk-wasm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-auth-sdk-wasm" -version = "1.1.0" +version = "1.1.1" edition = "2024" authors = ["Seto Elkahfi "] description = "Browser bindings for the smbCloud Auth SDK." diff --git a/crates/smbcloud-auth-sdk/Cargo.toml b/crates/smbcloud-auth-sdk/Cargo.toml index e8679f0d..e1a4a50f 100644 --- a/crates/smbcloud-auth-sdk/Cargo.toml +++ b/crates/smbcloud-auth-sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-auth-sdk" -version = "1.1.0" +version = "1.1.1" edition = "2024" authors = ["Seto Elkahfi "] description = "Client SDK for smbCloud Auth — authenticate your users via smbCloud Auth service." diff --git a/crates/smbcloud-auth/Cargo.toml b/crates/smbcloud-auth/Cargo.toml index bd22dcb3..ec7ea36f 100644 --- a/crates/smbcloud-auth/Cargo.toml +++ b/crates/smbcloud-auth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-auth" -version = "1.1.0" +version = "1.1.1" edition = "2024" authors = ["Seto Elkahfi "] description = "Cross-platform Auth SDK for the smbCloud platform." diff --git a/crates/smbcloud-deploy/Cargo.toml b/crates/smbcloud-deploy/Cargo.toml index 9c59d87d..635a988a 100644 --- a/crates/smbcloud-deploy/Cargo.toml +++ b/crates/smbcloud-deploy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-deploy" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["keypair34 <216233964+keypair34@users.noreply.github.com>, Seto Elkahfi "] description = "smbCloud build and deploy engine: UI-agnostic, reusable by the CLI, CI, and the server-side git receiver." diff --git a/crates/smbcloud-email-sdk/Cargo.toml b/crates/smbcloud-email-sdk/Cargo.toml index 755d2b36..b02f8141 100644 --- a/crates/smbcloud-email-sdk/Cargo.toml +++ b/crates/smbcloud-email-sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-email-sdk" -version = "1.1.0" +version = "1.1.1" edition = "2021" description = "Rust client for the smbCloud transactional email API — send email from a verified domain and read delivery status." license = "Apache-2.0" diff --git a/crates/smbcloud-gresiq-sdk/Cargo.toml b/crates/smbcloud-gresiq-sdk/Cargo.toml index 8e2fe462..e309e307 100644 --- a/crates/smbcloud-gresiq-sdk/Cargo.toml +++ b/crates/smbcloud-gresiq-sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-gresiq-sdk" -version = "1.1.0" +version = "1.1.1" edition = "2021" description = "Rust client for the smbCloud GresIQ REST gateway — API-key auth, app management, and model assignment for Onde Inference." license = "Apache-2.0" diff --git a/crates/smbcloud-gresiq/Cargo.toml b/crates/smbcloud-gresiq/Cargo.toml index 08e53ba1..17218b07 100644 --- a/crates/smbcloud-gresiq/Cargo.toml +++ b/crates/smbcloud-gresiq/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "smbcloud-gresiq" description = "GresIQ is a serverless PostgreSQL client on the smbCloud platform." -version = "1.1.0" +version = "1.1.1" edition = "2024" readme = "README.md" authors = ["Seto Elkahfi "] diff --git a/crates/smbcloud-mail/Cargo.toml b/crates/smbcloud-mail/Cargo.toml index a5c2c46c..18c6559d 100644 --- a/crates/smbcloud-mail/Cargo.toml +++ b/crates/smbcloud-mail/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-mail" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["Seto Elkahfi "] description = "smbCloud mail API client for the CLI." diff --git a/crates/smbcloud-model/Cargo.toml b/crates/smbcloud-model/Cargo.toml index bd12531f..503c3a52 100644 --- a/crates/smbcloud-model/Cargo.toml +++ b/crates/smbcloud-model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-model" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["Seto Elkahfi "] description = "Command line tool for deploying NextJS app on the smbCloud platform." diff --git a/crates/smbcloud-network/Cargo.toml b/crates/smbcloud-network/Cargo.toml index e2d7243b..6d14e9ce 100644 --- a/crates/smbcloud-network/Cargo.toml +++ b/crates/smbcloud-network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-network" -version = "1.1.0" +version = "1.1.1" edition = "2024" readme = "README.md" authors = ["Seto Elkahfi "] diff --git a/crates/smbcloud-networking-project/Cargo.toml b/crates/smbcloud-networking-project/Cargo.toml index 2417771b..47ad9d5f 100644 --- a/crates/smbcloud-networking-project/Cargo.toml +++ b/crates/smbcloud-networking-project/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-networking-project" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["Seto Elkahfi "] description = "Command line tool for deploying NextJS app on the smbCloud platform." diff --git a/crates/smbcloud-networking/Cargo.toml b/crates/smbcloud-networking/Cargo.toml index 8d9454b3..edd79f57 100644 --- a/crates/smbcloud-networking/Cargo.toml +++ b/crates/smbcloud-networking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-networking" -version = "1.1.0" +version = "1.1.1" edition = "2021" readme = "README.md" authors = ["Seto Elkahfi "] diff --git a/crates/smbcloud-s6n/Cargo.toml b/crates/smbcloud-s6n/Cargo.toml index 5cb4eec6..d7134cd0 100644 --- a/crates/smbcloud-s6n/Cargo.toml +++ b/crates/smbcloud-s6n/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "smbcloud-s6n" description = "S6n is an S3-compatible object storage for smbCloud." -version = "1.1.0" +version = "1.1.1" edition = "2024" readme = "README.md" authors = ["Seto Elkahfi "] diff --git a/crates/smbcloud-utils/Cargo.toml b/crates/smbcloud-utils/Cargo.toml index 44104114..14bae31d 100644 --- a/crates/smbcloud-utils/Cargo.toml +++ b/crates/smbcloud-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "smbcloud-utils" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["Seto Elkahfi "] description = "Command line tool for deploying NextJS app on the smbCloud platform." diff --git a/crates/xcrs/Cargo.toml b/crates/xcrs/Cargo.toml index fe421083..e1515158 100644 --- a/crates/xcrs/Cargo.toml +++ b/crates/xcrs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xcrs" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["Seto Elkahfi "] description = "Cross-platform mobile and TV app automation over MCP." diff --git a/packaging/mcp/server-xcrs.json b/packaging/mcp/server-xcrs.json index a9e653cb..068ac4d6 100644 --- a/packaging/mcp/server-xcrs.json +++ b/packaging/mcp/server-xcrs.json @@ -3,7 +3,7 @@ "name": "io.github.smbcloudXYZ/xcrs", "title": "XCRS Mobile & TV Automation", "description": "MCP tools for testing mobile and TV apps on iOS simulators, Android phones, and Apple/Android TV.", - "version": "1.1.0", + "version": "1.1.1", "websiteUrl": "https://github.com/smbcloudXYZ/smbcloud-cli/tree/main/crates/xcrs", "repository": { "url": "https://github.com/smbcloudXYZ/smbcloud-cli", @@ -16,7 +16,7 @@ "registryType": "cargo", "registryBaseUrl": "https://crates.io", "identifier": "xcrs", - "version": "1.1.0", + "version": "1.1.1", "transport": { "type": "stdio" }, diff --git a/packaging/mcp/server.json b/packaging/mcp/server.json index 2a4748d7..ad61fa1c 100644 --- a/packaging/mcp/server.json +++ b/packaging/mcp/server.json @@ -3,7 +3,7 @@ "name": "io.github.smbcloudXYZ/smbcloud-cli", "title": "smbCloud Mail & Auth", "description": "Email infrastructure and authentication for developers: domains, inbox routes, auth apps, deploys.", - "version": "1.1.0", + "version": "1.1.1", "websiteUrl": "https://docs.smbcloud.xyz/developer/cli", "icons": [ { @@ -30,7 +30,7 @@ "registryType": "npm", "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@smbcloud/cli", - "version": "1.1.0", + "version": "1.1.1", "runtimeHint": "npx", "transport": { "type": "stdio" @@ -57,7 +57,7 @@ "registryType": "nuget", "registryBaseUrl": "https://api.nuget.org/v3/index.json", "identifier": "SmbCloud.Cli", - "version": "1.1.0", + "version": "1.1.1", "runtimeHint": "dnx", "transport": { "type": "stdio" diff --git a/packaging/npm/smbcloud-cli/package-lock.json b/packaging/npm/smbcloud-cli/package-lock.json index cd378db1..95b69685 100644 --- a/packaging/npm/smbcloud-cli/package-lock.json +++ b/packaging/npm/smbcloud-cli/package-lock.json @@ -1,12 +1,12 @@ { "name": "@smbcloud/cli", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@smbcloud/cli", - "version": "1.1.0", + "version": "1.1.1", "license": "Apache-2.0", "bin": { "smb": "lib/index.js" @@ -19,11 +19,11 @@ "typescript": "^5.0.0" }, "optionalDependencies": { - "@smbcloud/cli-darwin-arm64": "1.1.0", - "@smbcloud/cli-darwin-x64": "1.1.0", - "@smbcloud/cli-linux-x64": "1.1.0", - "@smbcloud/cli-windows-arm64": "1.1.0", - "@smbcloud/cli-windows-x64": "1.1.0" + "@smbcloud/cli-darwin-arm64": "1.1.1", + "@smbcloud/cli-darwin-x64": "1.1.1", + "@smbcloud/cli-linux-x64": "1.1.1", + "@smbcloud/cli-windows-arm64": "1.1.1", + "@smbcloud/cli-windows-x64": "1.1.1" } }, "node_modules/@eslint-community/eslint-utils": { diff --git a/packaging/npm/smbcloud-cli/package.json b/packaging/npm/smbcloud-cli/package.json index fdbb9f35..a37fdda1 100644 --- a/packaging/npm/smbcloud-cli/package.json +++ b/packaging/npm/smbcloud-cli/package.json @@ -1,6 +1,6 @@ { "name": "@smbcloud/cli", - "version": "1.1.0", + "version": "1.1.1", "keywords": [ "smbcloud", "cli", @@ -58,11 +58,11 @@ "typescript": "^5.0.0" }, "optionalDependencies": { - "@smbcloud/cli-darwin-arm64": "1.1.0", - "@smbcloud/cli-darwin-x64": "1.1.0", - "@smbcloud/cli-linux-arm64": "1.1.0", - "@smbcloud/cli-linux-x64": "1.1.0", - "@smbcloud/cli-windows-arm64": "1.1.0", - "@smbcloud/cli-windows-x64": "1.1.0" + "@smbcloud/cli-darwin-arm64": "1.1.1", + "@smbcloud/cli-darwin-x64": "1.1.1", + "@smbcloud/cli-linux-arm64": "1.1.1", + "@smbcloud/cli-linux-x64": "1.1.1", + "@smbcloud/cli-windows-arm64": "1.1.1", + "@smbcloud/cli-windows-x64": "1.1.1" } } diff --git a/packaging/npm/xcrs/package-lock.json b/packaging/npm/xcrs/package-lock.json index 4b9bb946..32fe09f4 100644 --- a/packaging/npm/xcrs/package-lock.json +++ b/packaging/npm/xcrs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@smbcloud/xcrs", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@smbcloud/xcrs", - "version": "1.1.0", + "version": "1.1.1", "license": "Apache-2.0", "bin": { "xcrs": "lib/index.js" @@ -19,11 +19,11 @@ "typescript": "^5.0.0" }, "optionalDependencies": { - "@smbcloud/xcrs-darwin-arm64": "1.1.0", - "@smbcloud/xcrs-darwin-x64": "1.1.0", - "@smbcloud/xcrs-linux-x64": "1.1.0", - "@smbcloud/xcrs-windows-arm64": "1.1.0", - "@smbcloud/xcrs-windows-x64": "1.1.0" + "@smbcloud/xcrs-darwin-arm64": "1.1.1", + "@smbcloud/xcrs-darwin-x64": "1.1.1", + "@smbcloud/xcrs-linux-x64": "1.1.1", + "@smbcloud/xcrs-windows-arm64": "1.1.1", + "@smbcloud/xcrs-windows-x64": "1.1.1" } }, "node_modules/@eslint-community/eslint-utils": { diff --git a/packaging/npm/xcrs/package.json b/packaging/npm/xcrs/package.json index 08964f01..70a5aea2 100644 --- a/packaging/npm/xcrs/package.json +++ b/packaging/npm/xcrs/package.json @@ -1,6 +1,6 @@ { "name": "@smbcloud/xcrs", - "version": "1.1.0", + "version": "1.1.1", "keywords": [ "xcrs", "mcp", @@ -46,11 +46,11 @@ "typescript": "^5.0.0" }, "optionalDependencies": { - "@smbcloud/xcrs-darwin-arm64": "1.1.0", - "@smbcloud/xcrs-darwin-x64": "1.1.0", - "@smbcloud/xcrs-linux-arm64": "1.1.0", - "@smbcloud/xcrs-linux-x64": "1.1.0", - "@smbcloud/xcrs-windows-arm64": "1.1.0", - "@smbcloud/xcrs-windows-x64": "1.1.0" + "@smbcloud/xcrs-darwin-arm64": "1.1.1", + "@smbcloud/xcrs-darwin-x64": "1.1.1", + "@smbcloud/xcrs-linux-arm64": "1.1.1", + "@smbcloud/xcrs-linux-x64": "1.1.1", + "@smbcloud/xcrs-windows-arm64": "1.1.1", + "@smbcloud/xcrs-windows-x64": "1.1.1" } } diff --git a/packaging/nuget/smbcloud-cli/SmbCloud.Cli.csproj b/packaging/nuget/smbcloud-cli/SmbCloud.Cli.csproj index 431e0116..39a4a5ad 100644 --- a/packaging/nuget/smbcloud-cli/SmbCloud.Cli.csproj +++ b/packaging/nuget/smbcloud-cli/SmbCloud.Cli.csproj @@ -7,7 +7,7 @@ true smb SmbCloud.Cli - 1.1.0 + 1.1.1 $(PackageVersion) Seto Elkahfi smbCloud command line interface. diff --git a/packaging/nuget/xcrs/Xcrs.csproj b/packaging/nuget/xcrs/Xcrs.csproj index bf51252c..02130206 100644 --- a/packaging/nuget/xcrs/Xcrs.csproj +++ b/packaging/nuget/xcrs/Xcrs.csproj @@ -7,7 +7,7 @@ true xcrs SmbCloud.Xcrs - 1.1.0 + 1.1.1 $(PackageVersion) Seto Elkahfi Cross-platform mobile and TV app automation over MCP. diff --git a/sdk/gems/auth/Gemfile.lock b/sdk/gems/auth/Gemfile.lock index 30b74c50..400396b2 100644 --- a/sdk/gems/auth/Gemfile.lock +++ b/sdk/gems/auth/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - smbcloud-auth (1.1.0) + smbcloud-auth (1.1.1) json rb_sys (~> 0.9, >= 0.9.130) diff --git a/sdk/gems/auth/ext/auth/Cargo.toml b/sdk/gems/auth/ext/auth/Cargo.toml index b2d1c160..cd0747fe 100644 --- a/sdk/gems/auth/ext/auth/Cargo.toml +++ b/sdk/gems/auth/ext/auth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "auth" -version = "1.1.0" +version = "1.1.1" edition = "2024" authors = ["Seto Elkahfi "] publish = false diff --git a/sdk/gems/auth/lib/auth/version.rb b/sdk/gems/auth/lib/auth/version.rb index 2b100d30..a8526d0e 100644 --- a/sdk/gems/auth/lib/auth/version.rb +++ b/sdk/gems/auth/lib/auth/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Auth - VERSION = '1.1.0' + VERSION = '1.1.1' end diff --git a/sdk/gems/email/Gemfile.lock b/sdk/gems/email/Gemfile.lock index 4d5ff2a9..2b01bd81 100644 --- a/sdk/gems/email/Gemfile.lock +++ b/sdk/gems/email/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - smbcloud-email (1.1.0) + smbcloud-email (1.1.1) json rb_sys (~> 0.9, >= 0.9.130) diff --git a/sdk/gems/email/ext/email/Cargo.toml b/sdk/gems/email/ext/email/Cargo.toml index b840a25d..4a1f8b2a 100644 --- a/sdk/gems/email/ext/email/Cargo.toml +++ b/sdk/gems/email/ext/email/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "email" -version = "1.1.0" +version = "1.1.1" edition = "2024" authors = ["Seto Elkahfi "] publish = false diff --git a/sdk/gems/email/lib/email/version.rb b/sdk/gems/email/lib/email/version.rb index 5e5f8571..06a65761 100644 --- a/sdk/gems/email/lib/email/version.rb +++ b/sdk/gems/email/lib/email/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Email - VERSION = '1.1.0' + VERSION = '1.1.1' end diff --git a/sdk/gems/model/Gemfile.lock b/sdk/gems/model/Gemfile.lock index 6e720259..7570612a 100644 --- a/sdk/gems/model/Gemfile.lock +++ b/sdk/gems/model/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - smbcloud-model (1.1.0) + smbcloud-model (1.1.1) rb_sys (~> 0.9, >= 0.9.130) GEM diff --git a/sdk/gems/model/ext/model/Cargo.toml b/sdk/gems/model/ext/model/Cargo.toml index 41560868..e6509ac9 100644 --- a/sdk/gems/model/ext/model/Cargo.toml +++ b/sdk/gems/model/ext/model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "model" -version = "1.1.0" +version = "1.1.1" edition = "2021" authors = ["paydii "] publish = false diff --git a/sdk/gems/model/lib/model/version.rb b/sdk/gems/model/lib/model/version.rb index 857190dd..7fd72ed3 100644 --- a/sdk/gems/model/lib/model/version.rb +++ b/sdk/gems/model/lib/model/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Model - VERSION = '1.1.0' + VERSION = '1.1.1' end diff --git a/sdk/npm/smbcloud-auth/package.json b/sdk/npm/smbcloud-auth/package.json index 4872686f..54b4e5c3 100644 --- a/sdk/npm/smbcloud-auth/package.json +++ b/sdk/npm/smbcloud-auth/package.json @@ -1,7 +1,7 @@ { "name": "@smbcloud/sdk-auth", "description": "Browser Auth SDK for smbCloud, built from Rust and WebAssembly.", - "version": "1.1.0", + "version": "1.1.1", "type": "module", "main": "dist/smbcloud_auth_wasm.js", "module": "dist/smbcloud_auth_wasm.js",