File size: 4,676 Bytes
645618b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
789f590
 
645618b
789f590
645618b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
FROM node:22-bookworm

# Install Bun (required for build scripts) and curl (health check)
RUN curl -fsSL https://bun.sh/install | bash
ENV PATH="/root/.bun/bin:${PATH}"

RUN corepack enable

WORKDIR /app

# Clone official OpenClaw repo
RUN git clone --depth 1 https://github.com/openclaw/openclaw.git .

# Install dependencies
RUN pnpm install --no-frozen-lockfile

# Build project
ENV OPENCLAW_A2UI_SKIP_MISSING=1
RUN pnpm build

# Build Control UI
ENV OPENCLAW_PREFER_PNPM=1
RUN pnpm ui:build

ENV NODE_ENV=production

# ๅผบๅˆถๅŒ—ไบฌๆ—ถ้—ด๏ผˆ่งฃๅ†ณ HF Spaces ้ป˜่ฎค UTC ๅฏผ่‡ด agent ๆฑ‡ๆŠฅๆ—ถ้—ด้”™่ฏฏ๏ผ‰
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

# Install openclaw-china channels plugin
RUN node openclaw.mjs plugins install @openclaw-china/channels || echo "Plugin install attempted"

# Install Chromium and dependencies for agent-browser
RUN apt-get update && \
    apt-get install -y --no-install-recommends chromium \
    libxcb-shm0 libx11-xcb1 libx11-6 libxcb1 libxext6 libxrandr2 \
    libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxi6 libgtk-3-0 \
    libpangocairo-1.0-0 libpango-1.0-0 libatk1.0-0 libcairo-gobject2 \
    libcairo2 libgdk-pixbuf-2.0-0 libxrender1 libasound2 libfreetype6 \
    libfontconfig1 libdbus-1-3 libnss3 libnspr4 libatk-bridge2.0-0 \
    libdrm2 libxkbcommon0 libatspi2.0-0 libcups2 libxshmfence1 libgbm1 && \
    rm -rf /var/lib/apt/lists/*

# Install agent-browser and Playwright
RUN npm install -g agent-browser@latest playwright
ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium
ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright

# Install agent-browser skill from ClawHub
RUN npx -y clawhub@latest install agent-browser --force || echo "agent-browser skill install attempted"

# Install ClawMate Companion plugin into global extensions dir (auto-discovered by OpenClaw)
RUN git clone --depth 1 https://github.com/BytePioneer-AI/clawmate.git /tmp/clawmate \
    && mkdir -p /root/.openclaw/extensions \
    && cp -r /tmp/clawmate/packages/clawmate-companion /root/.openclaw/extensions/clawmate-companion \
    && cd /root/.openclaw/extensions/clawmate-companion \
    && npm install --omit=dev --no-audit --no-fund \
    && rm -rf /tmp/clawmate

# Patch clawmate-companion: add boyfriend shooting mode
COPY patches/clawmate/types.ts /root/.openclaw/extensions/clawmate-companion/src/core/types.ts
COPY patches/clawmate/prepare.ts /root/.openclaw/extensions/clawmate-companion/src/core/prepare.ts
COPY patches/clawmate/plugin.ts /root/.openclaw/extensions/clawmate-companion/src/plugin.ts
COPY patches/clawmate/SKILL.md /root/.openclaw/extensions/clawmate-companion/skills/clawmate-companion/SKILL.md
COPY patches/clawmate/SKILL.zh.md /root/.openclaw/extensions/clawmate-companion/skills/clawmate-companion/SKILL.zh.md

# Copy custom character (Maggie) into ClawMate plugin characters directory
# Reference image is downloaded at runtime from Supabase (privacy protection)
COPY characters/maggie /root/.openclaw/extensions/clawmate-companion/skills/clawmate-companion/assets/characters/maggie

# Make openclaw CLI available globally (agent exec tool needs it for `openclaw status` etc.)
RUN printf '#!/bin/sh\nexec node /app/openclaw.mjs "$@"\n' > /usr/local/bin/openclaw && chmod +x /usr/local/bin/openclaw

# Copy pre-configured cron jobs (persistent scheduled tasks)
RUN mkdir -p /root/.openclaw/cron
COPY cron/jobs.json /root/.openclaw/cron/jobs.json

# Copy workspace files: role script, task dispatch, identity, user, agents, tools, bootstrap, memory, heartbeat
RUN mkdir -p /root/.openclaw/workspace
RUN mkdir -p /root/.openclaw/workspace/memory
COPY SOUL.md /root/.openclaw/workspace/SOUL.md
COPY task-dispatch.md /root/.openclaw/workspace/task-dispatch.md
COPY IDENTITY.md /root/.openclaw/workspace/IDENTITY.md
COPY USER.md /root/.openclaw/workspace/USER.md
COPY AGENTS.md /root/.openclaw/workspace/AGENTS.md
COPY TOOLS.md /root/.openclaw/workspace/TOOLS.md
COPY BOOTSTRAP.md /root/.openclaw/workspace/BOOTSTRAP.md
COPY MEMORY.md /root/.openclaw/workspace/MEMORY.md
COPY HEARTBEAT.md /root/.openclaw/workspace/HEARTBEAT.md
COPY WORKFLOW_AUTO.md /root/.openclaw/workspace/WORKFLOW_AUTO.md

# Copy config
RUN mkdir -p /root/.openclaw
COPY openclaw.json /root/.openclaw/openclaw.json

# Copy and set entrypoint script
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh

# HF Spaces requires port 7860
EXPOSE 7860

HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
  CMD curl -f http://localhost:7860/ || exit 1

# Use entrypoint to inject secrets at runtime
CMD ["/app/entrypoint.sh"]