mesh-llm/scripts/package-sdk-console-assets.sh
Michael Neale 97c0cad991
feat: native rust SDK for rust consumers. (#736)
* a run at SDK, tested with a client

* Use in-process shutdown for embedded SDK

* Satisfy clippy for embedded shutdown plumbing

* Document embedded Rust SDK usage

* Add public Rust SDK crate

* Tighten embedded SDK lifecycle

* Address embedded SDK review feedback

* Document native runtime packaging direction

* Document runtime CLI namespace

* Document runtime CLI UX expectations

* Document runtime diagnostics under doctor

* Add Windows PowerShell installer

* Document recommended runtime install flow

* Add native runtime resolver foundation

* Wire native runtime release installs

* Document native runtime crate

* Load versioned native runtimes dynamically

* Fix embedded SDK output manager reset

* Expose SDK mesh admission controls

* Split SDK runtime mapping assertions

* Tighten SDK docs and config module

* Clarify native runtime SDK TODOs

* Stabilize native log note test

* Expose native runtime install SDK

* Re-export native runtime APIs from SDK crate

* Add embedded SDK knobs for Sprout relay mesh (#782)

Two opt-in seams the Sprout v1 mesh integration needs:

- disable_iroh_relays(bool): when true, embedded runtime selects an explicitly disabled relay policy, which uses RelayMode::Disabled, skips public relay URL fallback, skips raw STUN, and avoids the 5s endpoint.online() wait that cannot succeed without a home relay. Default false preserves existing behavior.

- EmbeddedNodeHandle::join_token(token): forwards an invite token over the runtime control channel to node.join_with_retry so an already-running embedded node can dial a new EndpointAddr without restart. Handled in both auto and passive/client runtime loops.

Purely additive; existing defaults and startup join_tokens behavior remain unchanged.

Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Perci <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>

* Fix relay policy test visibility

* Make SDK publishable and align language bindings (#771)

* Split SDK native runtime publish surface

* Split CLI and TUI support crates

* Move CLI parser surface into mesh-llm-cli

* Extract shared mesh event surface

* Move standalone command handlers out of host runtime

* Move benchmark and plugin commands out of host runtime

* Finish plugin command extraction

* Extract auth identity ownership

* Move remaining standalone commands out of host runtime

* Move model store into model-hf

* Move CLI commands out of host runtime

* Decouple host runtime from CLI and TUI crates

* Expose embedded node SDK facade

* Keep client identity dependencies pure

* Simplify Rust SDK feature surface

* Keep SDK client feature runtime-free

* Expose SDK client API base override

* Use direct mesh SDK client transport

* Remove API base URL client builder shim

* Align language SDKs with Rust SDK facade

* Document SDK client and serving modes

* Fix SDK smoke runtime setup

* Package SDK console assets

* Fix dynamic runtime CI setup

* Restructure SDK docs by language

* Fix SDK smoke package loading

* Fix native runtime bundle resolution

* Add structured native runtime backend metadata

* Harden Kotlin native runtime smoke resolution

* Fix mesh-llm-sdk clippy imports

* Retry smoke model downloads

---------

Co-authored-by: James Dumay <jameswdumay@gmail.com>
Co-authored-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Perci <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
2026-06-03 12:39:19 +10:00

125 lines
2.8 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
usage() {
cat >&2 <<'EOF'
Usage: scripts/package-sdk-console-assets.sh [options]
Build and copy the MeshLLM web console distribution into SDK package resource
locations.
Options:
--sdk node|swift|kotlin|all SDK package to update. Defaults to all.
--dist DIR Existing console dist directory. Defaults to crates/mesh-llm-ui/dist.
--skip-build Do not run scripts/build-ui.sh before copying.
-h, --help Show this help.
EOF
}
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
SDK="all"
DIST_DIR="$REPO_ROOT/crates/mesh-llm-ui/dist"
SKIP_BUILD=0
while [[ "$#" -gt 0 ]]; do
case "$1" in
--sdk)
SDK="${2:?missing SDK name}"
shift 2
;;
--dist)
DIST_DIR="${2:?missing dist directory}"
shift 2
;;
--skip-build)
SKIP_BUILD=1
shift
;;
-h|--help)
usage
exit 0
;;
*)
usage
exit 1
;;
esac
done
case "$SDK" in
node|swift|kotlin|all) ;;
*)
echo "unsupported SDK: $SDK" >&2
usage
exit 1
;;
esac
if [[ "$SKIP_BUILD" == "0" ]]; then
MESH_LLM_BUILD_PROFILE="${MESH_LLM_BUILD_PROFILE:-release}" \
"$SCRIPT_DIR/build-ui.sh" "$REPO_ROOT/crates/mesh-llm-ui"
fi
if [[ ! -f "$DIST_DIR/index.html" ]]; then
echo "console dist is missing index.html: $DIST_DIR" >&2
exit 1
fi
write_manifest() {
local dest="$1"
python3 - "$dest" <<'PY'
import pathlib
import sys
root = pathlib.Path(sys.argv[1])
entries = []
for path in root.rglob("*"):
if path.is_file():
rel = path.relative_to(root).as_posix()
if rel == "manifest.txt" or rel.startswith("."):
continue
entries.append(rel)
(root / "manifest.txt").write_text("\n".join(sorted(entries)) + "\n", encoding="utf-8")
PY
}
copy_console_assets() {
local dest="$1"
rm -rf "$dest"
mkdir -p "$dest"
cp -R "$DIST_DIR"/. "$dest"/
rm -f "$dest/.mesh-llm-ui-build-env"
: > "$dest/.gitkeep"
write_manifest "$dest"
"$SCRIPT_DIR/verify-sdk-console-assets.sh" "$dest"
}
package_node() {
copy_console_assets "$REPO_ROOT/sdk/node/console"
}
package_swift() {
copy_console_assets "$REPO_ROOT/sdk/swift/Sources/MeshLLM/Resources/Console"
}
package_kotlin() {
copy_console_assets "$REPO_ROOT/sdk/kotlin/src/main/resources/mesh-llm/console"
}
case "$SDK" in
node)
package_node
;;
swift)
package_swift
;;
kotlin)
package_kotlin
;;
all)
package_node
package_swift
package_kotlin
;;
esac