#!/bin/sh set -e : "${CLIENT_IDENTIFIER:?CLIENT_IDENTIFIER is required}" : "${NOTIFY_BOT_TOKEN:?NOTIFY_BOT_TOKEN is required}" : "${ADMIN_USER_ID:?ADMIN_USER_ID is required}" STATE_DIR=/app/.openclaw-state PLUGIN_DIR="$STATE_DIR/plugins/Yonexus.Server" TEST_PLUGIN_DIR="$STATE_DIR/plugins/yonexus-server-test" SERVER_WS_URL="${PUBLIC_WS_URL:-ws://yonexus-server:8787}" # Install plugin dist + manifest into isolated state directory node /app/scripts/install.mjs --install --openclaw-profile-path "$STATE_DIR" # Symlink node_modules so bare-module imports (e.g. ws) resolve from plugin dir ln -sf /app/node_modules "$PLUGIN_DIR/node_modules" # Install test plugin (plain .mjs, no compilation needed) mkdir -p "$TEST_PLUGIN_DIR" cp /app/server-test-plugin/index.mjs "$TEST_PLUGIN_DIR/" cp /app/server-test-plugin/openclaw.plugin.json "$TEST_PLUGIN_DIR/" # Write openclaw config — plugin id is "yonexus-server" per openclaw.plugin.json mkdir -p "$STATE_DIR" cat > "$STATE_DIR/openclaw.json" << EOF { "meta": { "lastTouchedVersion": "2026.4.9" }, "gateway": { "bind": "loopback" }, "agents": { "defaults": { "workspace": "$STATE_DIR/workspace" } }, "plugins": { "allow": ["yonexus-server", "yonexus-server-test"], "load": { "paths": ["$PLUGIN_DIR", "$TEST_PLUGIN_DIR"] }, "installs": { "yonexus-server": { "source": "path", "sourcePath": "$PLUGIN_DIR", "installPath": "$PLUGIN_DIR", "version": "0.1.0", "installedAt": "2026-04-10T00:00:00.000Z" }, "yonexus-server-test": { "source": "path", "sourcePath": "$TEST_PLUGIN_DIR", "installPath": "$TEST_PLUGIN_DIR", "version": "0.1.0", "installedAt": "2026-04-10T00:00:00.000Z" } }, "entries": { "yonexus-server": { "enabled": true, "config": { "followerIdentifiers": ["$CLIENT_IDENTIFIER"], "notifyBotToken": "$NOTIFY_BOT_TOKEN", "adminUserId": "$ADMIN_USER_ID", "listenHost": "0.0.0.0", "listenPort": 8787, "publicWsUrl": "$SERVER_WS_URL" } }, "yonexus-server-test": { "enabled": true, "config": {} } } } } EOF export OPENCLAW_STATE_DIR="$STATE_DIR" exec openclaw gateway run --allow-unconfigured