#!/bin/bash # Deploy Handoff Pro to Tom's workspace on GW-2 # Usage: ./deploy.sh [--dry-run] set -e CONTAINER="openclaw-repo-openclaw-gateway-2-1" TARGET="/home/node/.openclaw/workspace/agents/tom/skills/handoff-pro" SOURCE="$(cd "$(dirname "$0")" && pwd)" DRY_RUN="" if [ "$1" = "--dry-run" ]; then DRY_RUN="echo [DRY-RUN]"; fi echo "=== Handoff Pro Deployment ===" echo "Source: $SOURCE" echo "Target: $CONTAINER:$TARGET" echo "" # Create target directory $DRY_RUN docker exec $CONTAINER mkdir -p $TARGET/{scripts,lib,templates,data,tests} # Copy core files for f in SKILL.md server.py; do $DRY_RUN docker cp "$SOURCE/$f" "$CONTAINER:$TARGET/$f" done # Copy lib for f in "$SOURCE"/lib/*.py; do $DRY_RUN docker cp "$f" "$CONTAINER:$TARGET/lib/$(basename $f)" done # Copy scripts for f in "$SOURCE"/scripts/*.py; do $DRY_RUN docker cp "$f" "$CONTAINER:$TARGET/scripts/$(basename $f)" done # Copy templates for f in "$SOURCE"/templates/*; do [ -f "$f" ] && $DRY_RUN docker cp "$f" "$CONTAINER:$TARGET/templates/$(basename $f)" done # Fix permissions (no world-writable) $DRY_RUN docker exec $CONTAINER find $TARGET -type f -exec chmod 644 {} \; $DRY_RUN docker exec $CONTAINER find $TARGET -type d -exec chmod 755 {} \; $DRY_RUN docker exec $CONTAINER chown -R node:node $TARGET # Initialize database $DRY_RUN docker exec -u node $CONTAINER python3 $TARGET/scripts/init_db.py # Add to mcporter config $DRY_RUN docker exec -u node $CONTAINER sh -c " CONFIG=/home/node/.openclaw/workspace/config/mcporter.json python3 -c \" import json with open('\$CONFIG') as f: cfg = json.load(f) cfg['mcpServers']['handoff-pro'] = {'url': 'http://127.0.0.1:3101/sse'} with open('\$CONFIG','w') as f: json.dump(cfg, f, indent=4) print('mcporter.json updated') \" " echo "" echo "=== Deployment complete ===" echo "Next steps:" echo " 1. Start the MCP server: docker exec -u node -d $CONTAINER python3 $TARGET/server.py" echo " 2. Verify: docker exec $CONTAINER curl -s http://127.0.0.1:3101/health" echo " 3. Test: mcporter call handoff-pro.list_catalogs"