#!/bin/bash set -euo pipefail # HCFS Agent Container Entrypoint echo "๐Ÿš€ Starting HCFS-enabled agent container..." # Environment validation AGENT_ID="${AGENT_ID:-agent-$(hostname)}" TASK_ID="${TASK_ID:-task-$(date +%s)}" HCFS_API_URL="${HCFS_API_URL:-http://host.docker.internal:8000}" HCFS_ENABLED="${HCFS_ENABLED:-true}" echo "๐Ÿ“‹ Container Configuration:" echo " Agent ID: $AGENT_ID" echo " Task ID: $TASK_ID" echo " HCFS API: $HCFS_API_URL" echo " HCFS Enabled: $HCFS_ENABLED" # Function to wait for HCFS API wait_for_hcfs() { local max_attempts=30 local attempt=0 echo "โณ Waiting for HCFS API to be available..." while [ $attempt -lt $max_attempts ]; do if curl -s "$HCFS_API_URL/health" > /dev/null 2>&1; then echo "โœ… HCFS API is available" return 0 fi echo " Attempt $((attempt + 1))/$max_attempts - HCFS API not ready" sleep 2 attempt=$((attempt + 1)) done echo "โŒ HCFS API failed to become available after $max_attempts attempts" return 1 } # Function to initialize HCFS workspace init_hcfs_workspace() { echo "๐Ÿ”ง Initializing HCFS workspace..." # Create workspace context in HCFS local workspace_path="/agents/$AGENT_ID/workspaces/$(date +%s)" local context_data=$(cat < /tmp/hcfs-workspace-path return 0 else echo "โš ๏ธ Failed to create HCFS workspace context, using local storage" return 1 fi } # Function to mount HCFS mount_hcfs() { local workspace_path="$1" echo "๐Ÿ”— Mounting HCFS workspace: $workspace_path" # For now, create a symbolic structure since we don't have full FUSE implementation # In production, this would be: fusermount3 -o allow_other "$workspace_path" /mnt/hcfs mkdir -p /mnt/hcfs mkdir -p /home/agent/work/{src,build,output,logs} # Create workspace metadata cat > /home/agent/work/.hcfs-workspace << EOF HCFS_WORKSPACE_PATH=$workspace_path HCFS_API_URL=$HCFS_API_URL AGENT_ID=$AGENT_ID TASK_ID=$TASK_ID CREATED_AT=$(date -Iseconds) EOF # Set ownership chown -R agent:agent /home/agent/work /mnt/hcfs echo "โœ… HCFS workspace mounted and configured" } # Function to setup development environment setup_dev_environment() { echo "๐Ÿ› ๏ธ Setting up development environment..." # Create standard development directories sudo -u agent mkdir -p /home/agent/{.local/bin,.config,.cache,work/{src,tests,docs,scripts}} # Set up git configuration if provided if [ -n "${GIT_USER_NAME:-}" ] && [ -n "${GIT_USER_EMAIL:-}" ]; then sudo -u agent git config --global user.name "$GIT_USER_NAME" sudo -u agent git config --global user.email "$GIT_USER_EMAIL" echo "โœ… Git configuration set: $GIT_USER_NAME <$GIT_USER_EMAIL>" fi # Set up Python virtual environment if [ "${SETUP_PYTHON_VENV:-true}" = "true" ]; then sudo -u agent python3 -m venv /home/agent/.venv echo "โœ… Python virtual environment created" fi echo "โœ… Development environment ready" } # Function to start background services start_background_services() { echo "๐Ÿ”„ Starting background services..." # Start HCFS workspace sync daemon (if needed) if [ "$HCFS_ENABLED" = "true" ] && [ -f /tmp/hcfs-workspace-path ]; then /opt/hcfs/hcfs-workspace.sh daemon & echo "โœ… HCFS workspace sync daemon started" fi } # Function to cleanup on exit cleanup() { echo "๐Ÿงน Container cleanup initiated..." if [ "$HCFS_ENABLED" = "true" ] && [ -f /tmp/hcfs-workspace-path ]; then echo "๐Ÿ’พ Storing final workspace state to HCFS..." /opt/hcfs/hcfs-workspace.sh finalize fi echo "โœ… Cleanup completed" } # Set up signal handlers for graceful shutdown trap cleanup EXIT INT TERM # Main initialization sequence main() { echo "๐Ÿ Starting HCFS Agent Container initialization..." # Wait for HCFS if enabled if [ "$HCFS_ENABLED" = "true" ]; then if wait_for_hcfs; then if init_hcfs_workspace; then local workspace_path=$(cat /tmp/hcfs-workspace-path) mount_hcfs "$workspace_path" else echo "โš ๏ธ HCFS workspace initialization failed, continuing with local storage" fi else echo "โš ๏ธ HCFS API unavailable, continuing with local storage" fi else echo "โ„น๏ธ HCFS disabled, using local storage only" fi # Set up development environment setup_dev_environment # Start background services start_background_services echo "๐ŸŽ‰ HCFS Agent Container initialization complete!" echo "๐Ÿ“ Workspace: /home/agent/work" echo "๐Ÿ”ง Agent: $AGENT_ID" echo "๐Ÿ“‹ Task: $TASK_ID" # Execute the provided command or start interactive shell if [ $# -eq 0 ]; then echo "๐Ÿ”ง Starting interactive shell..." exec sudo -u agent -i /bin/bash else echo "๐Ÿš€ Executing command: $*" exec sudo -u agent "$@" fi } # Execute main function main "$@"