-`vendor/openclaw-runtime` is reserved for the pinned runtime payload
-`vendor/openclaw-runtime` is reserved for the pinned runtime payload
-`installer-smoke.ps1` performs a real silent NSIS install into `.tmp`, launches the installed app in smoke mode, and validates packaged paths plus diagnostics output
-`installer-smoke.ps1` performs a real silent NSIS install into `.tmp`, launches the installed app in smoke mode, and validates packaged paths plus diagnostics output
-`electron-smoke.ps1` launches the desktop app directly under Electron with isolated `userData` and `logs` paths, then validates execution-policy smoke output
-`electron-smoke.ps1` launches the desktop app directly under Electron with isolated `userData` and `logs` paths, then validates execution-policy smoke output
-`materialize-runtime-payload.ps1` generates a local bundled runtime payload under `vendor/openclaw-runtime/`from the machine's installed `node.exe`, `openclaw`, local OpenClaw config, and a locked Python dependency set
-`materialize-runtime-payload.ps1` generates a local bundled runtime payload under `vendor/openclaw-runtime/`by copying the local `node.exe`, the installed OpenClaw package, a local OpenClaw config snapshot, and a self-contained Python runtime with the locked dependency set installed into it
-`bundled-runtime-smoke.ps1` materializes the local runtime payload, forces bundled-runtime mode, and validates that Electron can launch and use the managed runtime end to end
-`bundled-runtime-smoke.ps1` materializes the local runtime payload, forces bundled-runtime mode, and validates that Electron can launch and use the managed runtime end to end
-`installer-smoke.ps1` also validates the packaged Python runtime by importing the preinstalled table/document/web dependencies from `resources/vendor/openclaw-runtime/python`
-`installer-smoke.ps1` validates the packaged Python runtime by importing the preinstalled table/document/web dependencies from `resources/vendor/openclaw-runtime/python/python.exe`
Immutable packaged payload under `vendor/openclaw-runtime/` includes:
- `node/node.exe`
- `openclaw/index.js`
- `openclaw/package/openclaw.mjs`
- `config/openclaw.json`
- `python/python.exe`
- `python/python-manifest.json`
- `python/runtime-requirements.lock.txt`
Mutable runtime data lives outside the installer payload and should be created under Electron `userData/runtime/`.
[PSCustomObject]@{
The payload is considered ready only when the Node entry, OpenClaw package, Python executable, Python manifest, and locked Python imports all validate successfully on the target machine.
this.appendLog("warn",`Bundled runtime directory exists at ${this.vendorRuntimeDir}, but ${issue}.`);
:"";
this.appendLog("warn",`Bundled runtime directory exists at ${this.vendorRuntimeDir}, but required payload files are missing or incomplete.${pythonReason}`);
}else{
}else{
this.appendLog("warn",`Bundled runtime payload is missing at ${this.vendorRuntimeDir}.`);
constissue=this.payloadIssue
?trimTrailingPunctuation(this.payloadIssue)
:`Bundled runtime payload is missing at ${this.vendorRuntimeDir}`;
this.appendLog("warn",`${issue}.`);
}
}
this.refreshStatus();
this.refreshStatus();
...
@@ -382,16 +624,45 @@ export class RuntimeManager extends EventEmitter {
...
@@ -382,16 +624,45 @@ export class RuntimeManager extends EventEmitter {
}
}
asyncstart():Promise<RuntimeStatus>{
asyncstart():Promise<RuntimeStatus>{
if(this.startPromise){
this.appendLog("info","Bundled runtime startup is already in progress.");
Immutable packaged payload under `vendor/openclaw-runtime/` now includes:
Immutable packaged payload under endor/openclaw-runtime/ includes:
-`node/node.exe`
-
-`openclaw/index.js`
ode/node.exe
-`config/openclaw.json`
- openclaw/index.js
-`python/Scripts/python.exe`
- openclaw/package/openclaw.mjs
-`python/python-manifest.json`
- config/openclaw.json
-`python/runtime-requirements.lock.txt`
- python/python.exe
- python/python-manifest.json
- python/runtime-requirements.lock.txt
Mutable runtime data lives outside the installer payload and should be created under Electron `userData/runtime/`:
Mutable runtime data lives outside the installer payload and should be created under Electron userData/runtime/.
-`runtime/logs/`
The payload is considered ready only when the Node entry, OpenClaw package, Python executable, Python manifest, and locked Python imports all validate successfully on the target machine.
-`runtime/state/`
\ No newline at end of file
-`runtime/workspace/`
- future writable caches and lock files
Current payload is generated locally for packaging and smoke validation by `build/scripts/materialize-runtime-payload.ps1`.
The Python layer is part of the bundled-runtime contract. A payload is not considered ready unless:
- the Node/OpenClaw files exist
- the Python executable and manifest exist
- the locked Python dependencies can all be imported successfully