mlclaw 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/mlclaw/SKILL.md +16 -14
- package/Dockerfile +1 -1
- package/README.md +14 -12
- package/assets/assistant-avatar.svg +5 -0
- package/dist/mlclaw-space-runtime.js +25 -7
- package/dist/mlclaw.mjs +1 -0
- package/package.json +1 -1
|
@@ -64,7 +64,7 @@ Space names from that.
|
|
|
64
64
|
With Node.js:
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
npx mlclaw bootstrap --name mlclaw
|
|
67
|
+
npx mlclaw@latest bootstrap --name mlclaw
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
Without Node.js on macOS/Linux:
|
|
@@ -92,13 +92,13 @@ node dist/mlclaw.mjs --help
|
|
|
92
92
|
Interactive:
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
|
-
npx mlclaw bootstrap --name mlclaw
|
|
95
|
+
npx mlclaw@latest bootstrap --name mlclaw
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
Automation:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
npx mlclaw bootstrap \
|
|
101
|
+
npx mlclaw@latest bootstrap \
|
|
102
102
|
--name mlclaw \
|
|
103
103
|
--model huggingface/google/gemma-4-26B-A4B-it:deepinfra \
|
|
104
104
|
--yes
|
|
@@ -118,7 +118,7 @@ Create a public Space only when the user explicitly asks for a public demo or
|
|
|
118
118
|
template-style deployment:
|
|
119
119
|
|
|
120
120
|
```bash
|
|
121
|
-
npx mlclaw bootstrap --name mlclaw --public-space
|
|
121
|
+
npx mlclaw@latest bootstrap --name mlclaw --public-space
|
|
122
122
|
```
|
|
123
123
|
|
|
124
124
|
## Optional Telegram
|
|
@@ -126,7 +126,7 @@ npx mlclaw bootstrap --name mlclaw --public-space
|
|
|
126
126
|
Telegram is optional and should not be required for the default setup.
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
|
-
npx mlclaw bootstrap \
|
|
129
|
+
npx mlclaw@latest bootstrap \
|
|
130
130
|
--telegram-token-file ~/secrets/mlclaw_bot.env \
|
|
131
131
|
--telegram-user-id 1234567890 \
|
|
132
132
|
--hardware cpu-upgrade \
|
|
@@ -143,13 +143,13 @@ restriction because messaging traffic originates from the user's machine.
|
|
|
143
143
|
Use local gateway mode when the user wants the gateway on their machine:
|
|
144
144
|
|
|
145
145
|
```bash
|
|
146
|
-
npx mlclaw bootstrap --gateway local --name mlclaw
|
|
146
|
+
npx mlclaw@latest bootstrap --gateway local --name mlclaw
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
If the user has multiple Docker engines, pin the intended context:
|
|
150
150
|
|
|
151
151
|
```bash
|
|
152
|
-
npx mlclaw bootstrap \
|
|
152
|
+
npx mlclaw@latest bootstrap \
|
|
153
153
|
--gateway local \
|
|
154
154
|
--name mlclaw \
|
|
155
155
|
--docker-context desktop-linux
|
|
@@ -167,7 +167,7 @@ models, use the `huggingface/` prefix.
|
|
|
167
167
|
Default/recommended:
|
|
168
168
|
|
|
169
169
|
```bash
|
|
170
|
-
npx mlclaw bootstrap \
|
|
170
|
+
npx mlclaw@latest bootstrap \
|
|
171
171
|
--name mlclaw \
|
|
172
172
|
--model huggingface/google/gemma-4-26B-A4B-it:deepinfra
|
|
173
173
|
```
|
|
@@ -175,6 +175,7 @@ npx mlclaw bootstrap \
|
|
|
175
175
|
Known useful router-compatible choices:
|
|
176
176
|
|
|
177
177
|
- `huggingface/google/gemma-4-26B-A4B-it:deepinfra`: default quality target.
|
|
178
|
+
- `huggingface/Qwen/Qwen3.6-35B-A3B:deepinfra`: strong Qwen 3.6 option with tool and structured-output support.
|
|
178
179
|
- `huggingface/Qwen/Qwen3.6-27B:deepinfra`: live Qwen 3.6 option with tool and structured-output support.
|
|
179
180
|
- `huggingface/zai-org/GLM-5.2:deepinfra`: long-context GLM option with tool and structured-output support.
|
|
180
181
|
- `huggingface/moonshotai/Kimi-K2.7-Code:deepinfra`: coding-focused Kimi option with tool and structured-output support.
|
|
@@ -183,7 +184,6 @@ Known useful router-compatible choices:
|
|
|
183
184
|
- `huggingface/deepseek-ai/DeepSeek-V4-Flash:deepinfra`: low-cost long-context DeepSeek V4 option.
|
|
184
185
|
- `huggingface/deepseek-ai/DeepSeek-V4-Pro:deepinfra`: higher-quality long-context DeepSeek V4 option.
|
|
185
186
|
- `huggingface/MiniMaxAI/MiniMax-M3:together`: long-context MiniMax option with tool and structured-output support.
|
|
186
|
-
- `huggingface/Qwen/Qwen3-8B:nscale`: cheaper small-model option.
|
|
187
187
|
|
|
188
188
|
Do not assume every Hub model is a Router chat model. If exact current model
|
|
189
189
|
availability matters, check the Hugging Face Router catalog or run a direct
|
|
@@ -236,10 +236,11 @@ to the browser.
|
|
|
236
236
|
## Branding
|
|
237
237
|
|
|
238
238
|
ML Claw white-labels the browser gateway at the proxy layer. App Spaces default
|
|
239
|
-
the browser title, PWA manifest,
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
239
|
+
the browser title, PWA manifest, login heading, and ML Claw control link to the
|
|
240
|
+
agent name. The ML Claw logo is reserved for the control UI brand mark. The
|
|
241
|
+
gateway shortcut, login logo, and default browser icons use the Hugging Face
|
|
242
|
+
logo. The OpenClaw assistant fallback avatar defaults to a neutral assistant
|
|
243
|
+
icon.
|
|
243
244
|
|
|
244
245
|
Use Space variables for explicit branding:
|
|
245
246
|
|
|
@@ -251,7 +252,8 @@ MLCLAW_BRAND_LOGO="mlclaw.svg"
|
|
|
251
252
|
MLCLAW_BRAND_FAVICON="hf-logo.svg"
|
|
252
253
|
MLCLAW_BRAND_FAVICON_32="hf-logo.svg"
|
|
253
254
|
MLCLAW_BRAND_FAVICON_ICO="hf-logo.svg"
|
|
254
|
-
MLCLAW_BRAND_APPLE_TOUCH_ICON="
|
|
255
|
+
MLCLAW_BRAND_APPLE_TOUCH_ICON="assistant-avatar.svg"
|
|
256
|
+
MLCLAW_BRAND_ASSISTANT_AVATAR="assistant-avatar.svg"
|
|
255
257
|
```
|
|
256
258
|
|
|
257
259
|
Brand asset paths are relative to the Space `assets/` directory. ML Claw serves
|
package/Dockerfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ARG OPENCLAW_VERSION=2026.7.1-beta.2
|
|
2
2
|
ARG OPENCLAW_BASE_IMAGE=ghcr.io/openclaw/openclaw:${OPENCLAW_VERSION}
|
|
3
|
-
ARG MLCLAW_RUNTIME_IMAGE=ghcr.io/osolmaz/mlclaw:0.2.
|
|
3
|
+
ARG MLCLAW_RUNTIME_IMAGE=ghcr.io/osolmaz/mlclaw:0.2.3-openclaw-2026.7.1-beta.2
|
|
4
4
|
|
|
5
5
|
# Stage 1: build the state-sync bundle so the runtime image needs no dev deps.
|
|
6
6
|
FROM node:24-bookworm-slim AS sync-build
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ OpenClaw on loopback using OpenClaw trusted-proxy auth.
|
|
|
17
17
|
With Node.js:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
npx mlclaw bootstrap
|
|
20
|
+
npx mlclaw@latest bootstrap
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
Without Node.js, the launcher fetches a pinned Node runtime into your user
|
|
@@ -40,7 +40,7 @@ token into someone else's app; the bootstrapper runs locally.
|
|
|
40
40
|
## Default Flow
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
npx mlclaw bootstrap --name mlclaw
|
|
43
|
+
npx mlclaw@latest bootstrap --name mlclaw
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
This creates:
|
|
@@ -59,13 +59,13 @@ for settings, status, credentials, and sign out.
|
|
|
59
59
|
Create a public Space only when you explicitly want a public demo or template:
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
npx mlclaw bootstrap --name mlclaw --public-space
|
|
62
|
+
npx mlclaw@latest bootstrap --name mlclaw --public-space
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
Choose a Hugging Face Router model with `--model`:
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
|
-
npx mlclaw bootstrap \
|
|
68
|
+
npx mlclaw@latest bootstrap \
|
|
69
69
|
--name mlclaw \
|
|
70
70
|
--model huggingface/google/gemma-4-26B-A4B-it:deepinfra
|
|
71
71
|
```
|
|
@@ -73,6 +73,7 @@ npx mlclaw bootstrap \
|
|
|
73
73
|
Recommended router-compatible options:
|
|
74
74
|
|
|
75
75
|
- `huggingface/google/gemma-4-26B-A4B-it:deepinfra`: default quality target.
|
|
76
|
+
- `huggingface/Qwen/Qwen3.6-35B-A3B:deepinfra`: strong Qwen 3.6 option with tool and structured-output support.
|
|
76
77
|
- `huggingface/Qwen/Qwen3.6-27B:deepinfra`: live Qwen 3.6 option with tool and structured-output support.
|
|
77
78
|
- `huggingface/zai-org/GLM-5.2:deepinfra`: long-context GLM option with tool and structured-output support.
|
|
78
79
|
- `huggingface/moonshotai/Kimi-K2.7-Code:deepinfra`: coding-focused Kimi option with tool and structured-output support.
|
|
@@ -81,7 +82,6 @@ Recommended router-compatible options:
|
|
|
81
82
|
- `huggingface/deepseek-ai/DeepSeek-V4-Flash:deepinfra`: low-cost long-context DeepSeek V4 option.
|
|
82
83
|
- `huggingface/deepseek-ai/DeepSeek-V4-Pro:deepinfra`: higher-quality long-context DeepSeek V4 option.
|
|
83
84
|
- `huggingface/MiniMaxAI/MiniMax-M3:together`: long-context MiniMax option with tool and structured-output support.
|
|
84
|
-
- `huggingface/Qwen/Qwen3-8B:nscale`: cheaper small-model option.
|
|
85
85
|
|
|
86
86
|
## Optional Telegram
|
|
87
87
|
|
|
@@ -90,7 +90,7 @@ Telegram `getMe`, removes a trailing `_bot` from the username, and can derive
|
|
|
90
90
|
the Space and bucket names from the bot username.
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
npx mlclaw bootstrap \
|
|
93
|
+
npx mlclaw@latest bootstrap \
|
|
94
94
|
--telegram-token-file ~/secrets/mlclaw_bot.env \
|
|
95
95
|
--telegram-user-id 1234567890 \
|
|
96
96
|
--hardware cpu-upgrade \
|
|
@@ -107,7 +107,7 @@ only for automation.
|
|
|
107
107
|
You can run the gateway locally instead of inside a Space:
|
|
108
108
|
|
|
109
109
|
```bash
|
|
110
|
-
npx mlclaw bootstrap --gateway local --name mlclaw
|
|
110
|
+
npx mlclaw@latest bootstrap --gateway local --name mlclaw
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
Local mode uses Docker on your machine and the same private Storage Bucket.
|
|
@@ -182,10 +182,11 @@ mutate only the current Space, inferred from `SPACE_ID`.
|
|
|
182
182
|
## Branding
|
|
183
183
|
|
|
184
184
|
ML Claw white-labels the browser-facing gateway by default. App Spaces use the
|
|
185
|
-
agent name as the browser title, PWA name, login heading,
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
185
|
+
agent name as the browser title, PWA name, login heading, and ML Claw control
|
|
186
|
+
link label. The ML Claw logo is reserved for the control UI brand mark. The
|
|
187
|
+
gateway shortcut, login logo, and default browser icons use the Hugging Face
|
|
188
|
+
logo. The OpenClaw assistant fallback avatar defaults to a neutral assistant
|
|
189
|
+
icon.
|
|
189
190
|
|
|
190
191
|
Override branding with Space variables:
|
|
191
192
|
|
|
@@ -197,7 +198,8 @@ MLCLAW_BRAND_LOGO=mlclaw.svg
|
|
|
197
198
|
MLCLAW_BRAND_FAVICON=hf-logo.svg
|
|
198
199
|
MLCLAW_BRAND_FAVICON_32=hf-logo.svg
|
|
199
200
|
MLCLAW_BRAND_FAVICON_ICO=hf-logo.svg
|
|
200
|
-
MLCLAW_BRAND_APPLE_TOUCH_ICON=
|
|
201
|
+
MLCLAW_BRAND_APPLE_TOUCH_ICON=assistant-avatar.svg
|
|
202
|
+
MLCLAW_BRAND_ASSISTANT_AVATAR=assistant-avatar.svg
|
|
201
203
|
```
|
|
202
204
|
|
|
203
205
|
Brand asset paths are relative to the Space `assets/` directory. ML Claw serves
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" role="img" aria-label="Assistant">
|
|
2
|
+
<rect width="256" height="256" rx="64" fill="#111827"/>
|
|
3
|
+
<path fill="#f9fafb" d="M128 52 146 107h58l-47 34 18 55-47-34-47 34 18-55-47-34h58z"/>
|
|
4
|
+
<circle cx="128" cy="128" r="92" fill="none" stroke="#f9fafb" stroke-width="10" opacity=".22"/>
|
|
5
|
+
</svg>
|
|
@@ -17,6 +17,7 @@ var DEFAULT_BRAND_NAME = "ML Claw";
|
|
|
17
17
|
var DEFAULT_THEME_COLOR = "#111827";
|
|
18
18
|
var DEFAULT_LOGO_ASSET = "mlclaw.svg";
|
|
19
19
|
var DEFAULT_HUGGING_FACE_ASSET = "hf-logo.svg";
|
|
20
|
+
var DEFAULT_ASSISTANT_AVATAR_ASSET = "assistant-avatar.svg";
|
|
20
21
|
function resolveBranding(env, agentName) {
|
|
21
22
|
const defaultName = defaultBrandName(agentName);
|
|
22
23
|
const name = cleanText(env.MLCLAW_BRAND_NAME) ?? defaultName;
|
|
@@ -38,8 +39,8 @@ function resolveBranding(env, agentName) {
|
|
|
38
39
|
DEFAULT_HUGGING_FACE_ASSET
|
|
39
40
|
),
|
|
40
41
|
appleTouchIconAsset: normalizeAssetRef(
|
|
41
|
-
env.MLCLAW_BRAND_APPLE_TOUCH_ICON ?? env.
|
|
42
|
-
|
|
42
|
+
env.MLCLAW_BRAND_APPLE_TOUCH_ICON ?? env.MLCLAW_BRAND_ASSISTANT_AVATAR,
|
|
43
|
+
DEFAULT_ASSISTANT_AVATAR_ASSET
|
|
43
44
|
)
|
|
44
45
|
};
|
|
45
46
|
}
|
|
@@ -139,6 +140,22 @@ var PRESET_MODEL_CHOICES = [
|
|
|
139
140
|
outputModalities: ["text"],
|
|
140
141
|
preset: true
|
|
141
142
|
}),
|
|
143
|
+
freezeChoice({
|
|
144
|
+
modelId: "Qwen/Qwen3.6-35B-A3B",
|
|
145
|
+
provider: "deepinfra",
|
|
146
|
+
label: "Qwen 3.6 35B A3B",
|
|
147
|
+
note: "Strong Qwen 3.6 preset on DeepInfra",
|
|
148
|
+
contextLength: 262144,
|
|
149
|
+
pricing: { input: 0.15, output: 0.95 },
|
|
150
|
+
supportsTools: true,
|
|
151
|
+
supportsStructuredOutput: true,
|
|
152
|
+
firstTokenLatencyMs: 401,
|
|
153
|
+
throughput: 43.13170843671405,
|
|
154
|
+
status: "live",
|
|
155
|
+
inputModalities: ["text"],
|
|
156
|
+
outputModalities: ["text"],
|
|
157
|
+
preset: true
|
|
158
|
+
}),
|
|
142
159
|
freezeChoice({
|
|
143
160
|
modelId: "Qwen/Qwen3.6-27B",
|
|
144
161
|
provider: "deepinfra",
|
|
@@ -7072,7 +7089,7 @@ function templatePage(config2) {
|
|
|
7072
7089
|
<p>Run the local bootstrapper to create a Hugging Face hosted OpenClaw agent for ML workflows.</p>
|
|
7073
7090
|
<p class="notice">Do not set this up by only clicking Duplicate. The bootstrapper creates the private Space, private Storage Bucket, OAuth settings, secrets, model configuration, and local manifest.</p>
|
|
7074
7091
|
<h2>With Node.js</h2>
|
|
7075
|
-
<pre><code>npx mlclaw bootstrap --name mlclaw</code></pre>
|
|
7092
|
+
<pre><code>npx mlclaw@latest bootstrap --name mlclaw</code></pre>
|
|
7076
7093
|
<h2>macOS or Linux without Node.js</h2>
|
|
7077
7094
|
<pre><code>bash <(curl -fsSL https://raw.githubusercontent.com/osolmaz/mlclaw/main/mlclaw.sh) --name mlclaw</code></pre>
|
|
7078
7095
|
<h2>Windows PowerShell</h2>
|
|
@@ -7628,6 +7645,7 @@ function createSpaceRuntimeApp(config2, controls) {
|
|
|
7628
7645
|
app.get("/healthz", (c) => health(c, config2, controls));
|
|
7629
7646
|
app.get("/assets/mlclaw.svg", async () => serveFile(path3.join(config2.assetsDir, "mlclaw.svg"), "image/svg+xml; charset=utf-8"));
|
|
7630
7647
|
app.get("/assets/hf-logo.svg", async () => serveFile(path3.join(config2.assetsDir, "hf-logo.svg"), "image/svg+xml; charset=utf-8"));
|
|
7648
|
+
app.get("/assets/assistant-avatar.svg", async () => serveFile(path3.join(config2.assetsDir, "assistant-avatar.svg"), "image/svg+xml; charset=utf-8"));
|
|
7631
7649
|
app.get("/assets/mlclaw-control-branding.js", () => staticScript(CONTROL_BRANDING_SCRIPT));
|
|
7632
7650
|
app.get("/assets/brand/logo", async () => serveBrandAsset(config2, config2.branding.logoAsset));
|
|
7633
7651
|
app.get("/favicon.svg", async () => serveBrandAsset(config2, config2.branding.faviconSvgAsset));
|
|
@@ -7965,11 +7983,11 @@ async function serveFile(file, contentTypeHeader, immutable = false) {
|
|
|
7965
7983
|
}
|
|
7966
7984
|
}
|
|
7967
7985
|
async function serveBrandAsset(config2, asset) {
|
|
7968
|
-
const response = await serveFile(path3.join(config2.assetsDir, asset), contentType(asset)
|
|
7986
|
+
const response = await serveFile(path3.join(config2.assetsDir, asset), contentType(asset));
|
|
7969
7987
|
if (response.status !== 404 || asset === "mlclaw.svg") {
|
|
7970
7988
|
return response;
|
|
7971
7989
|
}
|
|
7972
|
-
return serveFile(path3.join(config2.assetsDir, "mlclaw.svg"), "image/svg+xml; charset=utf-8"
|
|
7990
|
+
return serveFile(path3.join(config2.assetsDir, "mlclaw.svg"), "image/svg+xml; charset=utf-8");
|
|
7973
7991
|
}
|
|
7974
7992
|
function safeRelativePath(value) {
|
|
7975
7993
|
let decoded;
|
|
@@ -8284,7 +8302,7 @@ var SpaceRuntimeServer = class {
|
|
|
8284
8302
|
await proxyHttp(req, res, this.config, { username: session.username });
|
|
8285
8303
|
}
|
|
8286
8304
|
shouldRouteToMlClaw(pathname) {
|
|
8287
|
-
return pathname === "/health" || pathname === "/healthz" || pathname === "/favicon.svg" || pathname === "/favicon-32.png" || pathname === "/favicon.ico" || pathname === "/apple-touch-icon.png" || pathname === "/manifest.webmanifest" || pathname === "/sw.js" || pathname === "/assets/hf-logo.svg" || pathname === "/assets/mlclaw.svg" || pathname === "/assets/mlclaw-control-branding.js" || pathname === "/assets/brand/logo" || pathname === "/login" || pathname === "/logout" || pathname.startsWith("/oauth/") || pathname === "/mlclaw" || pathname.startsWith("/mlclaw/");
|
|
8305
|
+
return pathname === "/health" || pathname === "/healthz" || pathname === "/favicon.svg" || pathname === "/favicon-32.png" || pathname === "/favicon.ico" || pathname === "/apple-touch-icon.png" || pathname === "/manifest.webmanifest" || pathname === "/sw.js" || pathname === "/assets/hf-logo.svg" || pathname === "/assets/mlclaw.svg" || pathname === "/assets/assistant-avatar.svg" || pathname === "/assets/mlclaw-control-branding.js" || pathname === "/assets/brand/logo" || pathname === "/login" || pathname === "/logout" || pathname.startsWith("/oauth/") || pathname === "/mlclaw" || pathname.startsWith("/mlclaw/");
|
|
8288
8306
|
}
|
|
8289
8307
|
async startOpenClaw(extraEnv = {}) {
|
|
8290
8308
|
if (this.openclawStarting || this.openclaw && !this.openclaw.killed) {
|
|
@@ -8411,7 +8429,7 @@ function isApiPath(pathname) {
|
|
|
8411
8429
|
return pathname.startsWith("/mlclaw/api/");
|
|
8412
8430
|
}
|
|
8413
8431
|
function isTemplateRuntimePath(pathname) {
|
|
8414
|
-
return pathname === "/health" || pathname === "/healthz" || pathname === "/favicon.svg" || pathname === "/favicon-32.png" || pathname === "/favicon.ico" || pathname === "/apple-touch-icon.png" || pathname === "/manifest.webmanifest" || pathname === "/assets/hf-logo.svg" || pathname === "/assets/mlclaw.svg" || pathname === "/assets/brand/logo";
|
|
8432
|
+
return pathname === "/health" || pathname === "/healthz" || pathname === "/favicon.svg" || pathname === "/favicon-32.png" || pathname === "/favicon.ico" || pathname === "/apple-touch-icon.png" || pathname === "/manifest.webmanifest" || pathname === "/assets/hf-logo.svg" || pathname === "/assets/mlclaw.svg" || pathname === "/assets/assistant-avatar.svg" || pathname === "/assets/brand/logo";
|
|
8415
8433
|
}
|
|
8416
8434
|
function formatError2(err) {
|
|
8417
8435
|
return err instanceof Error ? err.stack ?? err.message : String(err);
|
package/dist/mlclaw.mjs
CHANGED
|
@@ -14903,6 +14903,7 @@ async function currentTemplateRev(sourceDir) {
|
|
|
14903
14903
|
async function generateSpaceRepo(sourceDir, outDir, options = {}) {
|
|
14904
14904
|
const copies = [
|
|
14905
14905
|
[".gitattributes", ".gitattributes"],
|
|
14906
|
+
["assets/assistant-avatar.svg", "assets/assistant-avatar.svg"],
|
|
14906
14907
|
["assets/hf-logo.svg", "assets/hf-logo.svg"],
|
|
14907
14908
|
["assets/mlclaw.svg", "assets/mlclaw.svg"],
|
|
14908
14909
|
["assets/mlclaw-control-ui", "assets/mlclaw-control-ui"],
|