mirror of
https://github.com/Mesh-LLM/mesh-llm.git
synced 2026-08-08 22:23:19 -04:00
* 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>
106 lines
2.7 KiB
JavaScript
106 lines
2.7 KiB
JavaScript
'use strict'
|
|
|
|
let nativeBinding = null
|
|
|
|
function configureNativeRuntimeBinding(binding) {
|
|
nativeBinding = binding
|
|
}
|
|
|
|
function currentMeshVersion() {
|
|
return native().currentMeshVersion()
|
|
}
|
|
|
|
function currentSkippyAbiVersion() {
|
|
return native().currentSkippyAbiVersion()
|
|
}
|
|
|
|
async function installNativeRuntime(options = {}) {
|
|
const onProgress = typeof options.onProgress === 'function'
|
|
? (eventJson) => options.onProgress(parse(eventJson))
|
|
: null
|
|
return parse(await native().installNativeRuntimeJson(
|
|
JSON.stringify(normalizeInstallOptions(options)),
|
|
onProgress
|
|
))
|
|
}
|
|
|
|
async function installedNativeRuntimes(options = {}) {
|
|
return parse(await native().installedNativeRuntimesJson(options.cacheDir || null))
|
|
}
|
|
|
|
function removeNativeRuntime(options) {
|
|
if (!options || !options.meshVersion || !options.nativeRuntimeId) {
|
|
throw new Error('removeNativeRuntime requires meshVersion and nativeRuntimeId')
|
|
}
|
|
return native().removeNativeRuntime(
|
|
options.cacheDir || null,
|
|
options.meshVersion,
|
|
options.nativeRuntimeId
|
|
)
|
|
}
|
|
|
|
function pruneNativeRuntimes(options = {}) {
|
|
return parse(native().pruneNativeRuntimesJson(
|
|
options.cacheDir || null,
|
|
options.activeMeshVersion || null,
|
|
options.mode || null
|
|
))
|
|
}
|
|
|
|
async function resolveNativeRuntime(options = {}) {
|
|
const bundleDirs = []
|
|
if (options.artifactDir) bundleDirs.push(options.artifactDir)
|
|
for (const dir of options.searchDirs || []) bundleDirs.push(dir)
|
|
const outcome = await installNativeRuntime({
|
|
...options,
|
|
bundleDirs,
|
|
allowDownload: options.allowDownload === true
|
|
})
|
|
return outcome.runtime
|
|
}
|
|
|
|
async function validateNativeRuntime(artifactDir, options = {}) {
|
|
const outcome = await installNativeRuntime({
|
|
...options,
|
|
bundleDirs: [artifactDir],
|
|
allowDownload: false
|
|
})
|
|
return outcome.runtime
|
|
}
|
|
|
|
function normalizeInstallOptions(options) {
|
|
return {
|
|
meshVersion: options.meshVersion || null,
|
|
skippyAbiVersion: options.skippyAbiVersion || null,
|
|
selection: options.selection || 'recommended',
|
|
manifestPath: options.manifestPath || null,
|
|
manifestUrl: options.manifestUrl || null,
|
|
bundleDirs: options.bundleDirs || [],
|
|
cacheDir: options.cacheDir || null,
|
|
verificationPolicy: options.verificationPolicy || 'require_checksum',
|
|
allowDownload: options.allowDownload !== false
|
|
}
|
|
}
|
|
|
|
function native() {
|
|
if (!nativeBinding) {
|
|
throw new Error('MeshLLM native runtime binding has not been configured')
|
|
}
|
|
return nativeBinding
|
|
}
|
|
|
|
function parse(json) {
|
|
return JSON.parse(json)
|
|
}
|
|
|
|
module.exports = {
|
|
configureNativeRuntimeBinding,
|
|
currentMeshVersion,
|
|
currentSkippyAbiVersion,
|
|
installNativeRuntime,
|
|
installedNativeRuntimes,
|
|
removeNativeRuntime,
|
|
pruneNativeRuntimes,
|
|
resolveNativeRuntime,
|
|
validateNativeRuntime
|
|
}
|