openclaw npm pins engines.node >= 22.14.0, but the workspace AMI
ships Node 18.19.1. adapter.py:setup() runs `npm install -g
openclaw` against system Node and fails with EBADENGINE, raising
RuntimeError before the runtime binds port 8000 — workspace boots
to status=failed within ~2 min.
The CP cloud-init script invokes /opt/adapter/install.sh as the
runtime user before starting molecule-runtime, exactly for this
class of "host system deps a Python adapter can't fix from inside
its own venv" cases. hermes ships one for the gateway daemon;
openclaw has needed one ever since Node 22 became mandatory.
Idempotent — early-exits if Node >= 22 is already present, so the
hook becomes a no-op once the AMI gets bumped to ship Node 22
directly (which is the durable fix; this PR is the bridge).