mlclaw 0.2.1 → 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 +23 -14
- package/Dockerfile +2 -2
- package/README.md +21 -12
- package/assets/assistant-avatar.svg +5 -0
- package/dist/mlclaw-space-runtime.js +137 -7
- package/dist/mlclaw.mjs +2 -1
- package/package.json +2 -2
|
@@ -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,8 +175,15 @@ 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
|
-
- `huggingface/
|
|
180
|
+
- `huggingface/zai-org/GLM-5.2:deepinfra`: long-context GLM option with tool and structured-output support.
|
|
181
|
+
- `huggingface/moonshotai/Kimi-K2.7-Code:deepinfra`: coding-focused Kimi option with tool and structured-output support.
|
|
182
|
+
- `huggingface/openai/gpt-oss-120b:deepinfra`: larger GPT-OSS option with tool and structured-output support.
|
|
183
|
+
- `huggingface/openai/gpt-oss-20b:deepinfra`: lower-cost GPT-OSS option with tool and structured-output support.
|
|
184
|
+
- `huggingface/deepseek-ai/DeepSeek-V4-Flash:deepinfra`: low-cost long-context DeepSeek V4 option.
|
|
185
|
+
- `huggingface/deepseek-ai/DeepSeek-V4-Pro:deepinfra`: higher-quality long-context DeepSeek V4 option.
|
|
186
|
+
- `huggingface/MiniMaxAI/MiniMax-M3:together`: long-context MiniMax option with tool and structured-output support.
|
|
180
187
|
|
|
181
188
|
Do not assume every Hub model is a Router chat model. If exact current model
|
|
182
189
|
availability matters, check the Hugging Face Router catalog or run a direct
|
|
@@ -229,10 +236,11 @@ to the browser.
|
|
|
229
236
|
## Branding
|
|
230
237
|
|
|
231
238
|
ML Claw white-labels the browser gateway at the proxy layer. App Spaces default
|
|
232
|
-
the browser title, PWA manifest,
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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.
|
|
236
244
|
|
|
237
245
|
Use Space variables for explicit branding:
|
|
238
246
|
|
|
@@ -244,7 +252,8 @@ MLCLAW_BRAND_LOGO="mlclaw.svg"
|
|
|
244
252
|
MLCLAW_BRAND_FAVICON="hf-logo.svg"
|
|
245
253
|
MLCLAW_BRAND_FAVICON_32="hf-logo.svg"
|
|
246
254
|
MLCLAW_BRAND_FAVICON_ICO="hf-logo.svg"
|
|
247
|
-
MLCLAW_BRAND_APPLE_TOUCH_ICON="
|
|
255
|
+
MLCLAW_BRAND_APPLE_TOUCH_ICON="assistant-avatar.svg"
|
|
256
|
+
MLCLAW_BRAND_ASSISTANT_AVATAR="assistant-avatar.svg"
|
|
248
257
|
```
|
|
249
258
|
|
|
250
259
|
Brand asset paths are relative to the Space `assets/` directory. ML Claw serves
|
package/Dockerfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
ARG OPENCLAW_VERSION=2026.
|
|
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,8 +73,15 @@ 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
|
-
- `huggingface/
|
|
78
|
+
- `huggingface/zai-org/GLM-5.2:deepinfra`: long-context GLM option with tool and structured-output support.
|
|
79
|
+
- `huggingface/moonshotai/Kimi-K2.7-Code:deepinfra`: coding-focused Kimi option with tool and structured-output support.
|
|
80
|
+
- `huggingface/openai/gpt-oss-120b:deepinfra`: larger GPT-OSS option with tool and structured-output support.
|
|
81
|
+
- `huggingface/openai/gpt-oss-20b:deepinfra`: lower-cost GPT-OSS option with tool and structured-output support.
|
|
82
|
+
- `huggingface/deepseek-ai/DeepSeek-V4-Flash:deepinfra`: low-cost long-context DeepSeek V4 option.
|
|
83
|
+
- `huggingface/deepseek-ai/DeepSeek-V4-Pro:deepinfra`: higher-quality long-context DeepSeek V4 option.
|
|
84
|
+
- `huggingface/MiniMaxAI/MiniMax-M3:together`: long-context MiniMax option with tool and structured-output support.
|
|
78
85
|
|
|
79
86
|
## Optional Telegram
|
|
80
87
|
|
|
@@ -83,7 +90,7 @@ Telegram `getMe`, removes a trailing `_bot` from the username, and can derive
|
|
|
83
90
|
the Space and bucket names from the bot username.
|
|
84
91
|
|
|
85
92
|
```bash
|
|
86
|
-
npx mlclaw bootstrap \
|
|
93
|
+
npx mlclaw@latest bootstrap \
|
|
87
94
|
--telegram-token-file ~/secrets/mlclaw_bot.env \
|
|
88
95
|
--telegram-user-id 1234567890 \
|
|
89
96
|
--hardware cpu-upgrade \
|
|
@@ -100,7 +107,7 @@ only for automation.
|
|
|
100
107
|
You can run the gateway locally instead of inside a Space:
|
|
101
108
|
|
|
102
109
|
```bash
|
|
103
|
-
npx mlclaw bootstrap --gateway local --name mlclaw
|
|
110
|
+
npx mlclaw@latest bootstrap --gateway local --name mlclaw
|
|
104
111
|
```
|
|
105
112
|
|
|
106
113
|
Local mode uses Docker on your machine and the same private Storage Bucket.
|
|
@@ -175,10 +182,11 @@ mutate only the current Space, inferred from `SPACE_ID`.
|
|
|
175
182
|
## Branding
|
|
176
183
|
|
|
177
184
|
ML Claw white-labels the browser-facing gateway by default. App Spaces use the
|
|
178
|
-
agent name as the browser title, PWA name, login heading,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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.
|
|
182
190
|
|
|
183
191
|
Override branding with Space variables:
|
|
184
192
|
|
|
@@ -190,7 +198,8 @@ MLCLAW_BRAND_LOGO=mlclaw.svg
|
|
|
190
198
|
MLCLAW_BRAND_FAVICON=hf-logo.svg
|
|
191
199
|
MLCLAW_BRAND_FAVICON_32=hf-logo.svg
|
|
192
200
|
MLCLAW_BRAND_FAVICON_ICO=hf-logo.svg
|
|
193
|
-
MLCLAW_BRAND_APPLE_TOUCH_ICON=
|
|
201
|
+
MLCLAW_BRAND_APPLE_TOUCH_ICON=assistant-avatar.svg
|
|
202
|
+
MLCLAW_BRAND_ASSISTANT_AVATAR=assistant-avatar.svg
|
|
194
203
|
```
|
|
195
204
|
|
|
196
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",
|
|
@@ -154,6 +171,118 @@ var PRESET_MODEL_CHOICES = [
|
|
|
154
171
|
inputModalities: ["text", "image"],
|
|
155
172
|
outputModalities: ["text"],
|
|
156
173
|
preset: true
|
|
174
|
+
}),
|
|
175
|
+
freezeChoice({
|
|
176
|
+
modelId: "zai-org/GLM-5.2",
|
|
177
|
+
provider: "deepinfra",
|
|
178
|
+
label: "GLM 5.2",
|
|
179
|
+
note: "Long-context GLM preset on DeepInfra",
|
|
180
|
+
contextLength: 1048576,
|
|
181
|
+
pricing: { input: 0.93, output: 3 },
|
|
182
|
+
supportsTools: true,
|
|
183
|
+
supportsStructuredOutput: true,
|
|
184
|
+
firstTokenLatencyMs: 467.5,
|
|
185
|
+
throughput: 16.52283992136833,
|
|
186
|
+
status: "live",
|
|
187
|
+
inputModalities: ["text"],
|
|
188
|
+
outputModalities: ["text"],
|
|
189
|
+
preset: true
|
|
190
|
+
}),
|
|
191
|
+
freezeChoice({
|
|
192
|
+
modelId: "moonshotai/Kimi-K2.7-Code",
|
|
193
|
+
provider: "deepinfra",
|
|
194
|
+
label: "Kimi K2.7 Code",
|
|
195
|
+
note: "Kimi K2.7 coding preset on DeepInfra",
|
|
196
|
+
contextLength: 262144,
|
|
197
|
+
pricing: { input: 0.74, output: 3.5 },
|
|
198
|
+
supportsTools: true,
|
|
199
|
+
supportsStructuredOutput: true,
|
|
200
|
+
firstTokenLatencyMs: 692,
|
|
201
|
+
throughput: 29.26330731892916,
|
|
202
|
+
status: "live",
|
|
203
|
+
inputModalities: ["text"],
|
|
204
|
+
outputModalities: ["text"],
|
|
205
|
+
preset: true
|
|
206
|
+
}),
|
|
207
|
+
freezeChoice({
|
|
208
|
+
modelId: "openai/gpt-oss-120b",
|
|
209
|
+
provider: "deepinfra",
|
|
210
|
+
label: "GPT-OSS 120B",
|
|
211
|
+
note: "Large GPT-OSS preset on DeepInfra",
|
|
212
|
+
contextLength: 131072,
|
|
213
|
+
pricing: { input: 0.037, output: 0.17 },
|
|
214
|
+
supportsTools: true,
|
|
215
|
+
supportsStructuredOutput: true,
|
|
216
|
+
firstTokenLatencyMs: 362.2,
|
|
217
|
+
throughput: 32.98392643597656,
|
|
218
|
+
status: "live",
|
|
219
|
+
inputModalities: ["text"],
|
|
220
|
+
outputModalities: ["text"],
|
|
221
|
+
preset: true
|
|
222
|
+
}),
|
|
223
|
+
freezeChoice({
|
|
224
|
+
modelId: "openai/gpt-oss-20b",
|
|
225
|
+
provider: "deepinfra",
|
|
226
|
+
label: "GPT-OSS 20B",
|
|
227
|
+
note: "Lower-cost GPT-OSS preset on DeepInfra",
|
|
228
|
+
contextLength: 131072,
|
|
229
|
+
pricing: { input: 0.03, output: 0.14 },
|
|
230
|
+
supportsTools: true,
|
|
231
|
+
supportsStructuredOutput: true,
|
|
232
|
+
firstTokenLatencyMs: 255,
|
|
233
|
+
throughput: 115.64765388606148,
|
|
234
|
+
status: "live",
|
|
235
|
+
inputModalities: ["text"],
|
|
236
|
+
outputModalities: ["text"],
|
|
237
|
+
preset: true
|
|
238
|
+
}),
|
|
239
|
+
freezeChoice({
|
|
240
|
+
modelId: "deepseek-ai/DeepSeek-V4-Flash",
|
|
241
|
+
provider: "deepinfra",
|
|
242
|
+
label: "DeepSeek V4 Flash",
|
|
243
|
+
note: "Lower-cost DeepSeek V4 preset on DeepInfra",
|
|
244
|
+
contextLength: 1048576,
|
|
245
|
+
pricing: { input: 0.09, output: 0.18 },
|
|
246
|
+
supportsTools: true,
|
|
247
|
+
supportsStructuredOutput: true,
|
|
248
|
+
firstTokenLatencyMs: 719.8,
|
|
249
|
+
throughput: 24.5757632831937,
|
|
250
|
+
status: "live",
|
|
251
|
+
inputModalities: ["text"],
|
|
252
|
+
outputModalities: ["text"],
|
|
253
|
+
preset: true
|
|
254
|
+
}),
|
|
255
|
+
freezeChoice({
|
|
256
|
+
modelId: "deepseek-ai/DeepSeek-V4-Pro",
|
|
257
|
+
provider: "deepinfra",
|
|
258
|
+
label: "DeepSeek V4 Pro",
|
|
259
|
+
note: "Higher-quality DeepSeek V4 preset on DeepInfra",
|
|
260
|
+
contextLength: 1048576,
|
|
261
|
+
pricing: { input: 1.3, output: 2.6 },
|
|
262
|
+
supportsTools: true,
|
|
263
|
+
supportsStructuredOutput: true,
|
|
264
|
+
firstTokenLatencyMs: 489.2,
|
|
265
|
+
throughput: 37.30647476533069,
|
|
266
|
+
status: "live",
|
|
267
|
+
inputModalities: ["text"],
|
|
268
|
+
outputModalities: ["text"],
|
|
269
|
+
preset: true
|
|
270
|
+
}),
|
|
271
|
+
freezeChoice({
|
|
272
|
+
modelId: "MiniMaxAI/MiniMax-M3",
|
|
273
|
+
provider: "together",
|
|
274
|
+
label: "MiniMax M3",
|
|
275
|
+
note: "Long-context MiniMax preset on Together",
|
|
276
|
+
contextLength: 524288,
|
|
277
|
+
pricing: { input: 0.3, output: 1.2 },
|
|
278
|
+
supportsTools: true,
|
|
279
|
+
supportsStructuredOutput: true,
|
|
280
|
+
firstTokenLatencyMs: 505.6,
|
|
281
|
+
throughput: 59.79726580207129,
|
|
282
|
+
status: "live",
|
|
283
|
+
inputModalities: ["text"],
|
|
284
|
+
outputModalities: ["text"],
|
|
285
|
+
preset: true
|
|
157
286
|
})
|
|
158
287
|
];
|
|
159
288
|
function parseModelChoicesEnv(value, activeModel) {
|
|
@@ -6960,7 +7089,7 @@ function templatePage(config2) {
|
|
|
6960
7089
|
<p>Run the local bootstrapper to create a Hugging Face hosted OpenClaw agent for ML workflows.</p>
|
|
6961
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>
|
|
6962
7091
|
<h2>With Node.js</h2>
|
|
6963
|
-
<pre><code>npx mlclaw bootstrap --name mlclaw</code></pre>
|
|
7092
|
+
<pre><code>npx mlclaw@latest bootstrap --name mlclaw</code></pre>
|
|
6964
7093
|
<h2>macOS or Linux without Node.js</h2>
|
|
6965
7094
|
<pre><code>bash <(curl -fsSL https://raw.githubusercontent.com/osolmaz/mlclaw/main/mlclaw.sh) --name mlclaw</code></pre>
|
|
6966
7095
|
<h2>Windows PowerShell</h2>
|
|
@@ -7516,6 +7645,7 @@ function createSpaceRuntimeApp(config2, controls) {
|
|
|
7516
7645
|
app.get("/healthz", (c) => health(c, config2, controls));
|
|
7517
7646
|
app.get("/assets/mlclaw.svg", async () => serveFile(path3.join(config2.assetsDir, "mlclaw.svg"), "image/svg+xml; charset=utf-8"));
|
|
7518
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"));
|
|
7519
7649
|
app.get("/assets/mlclaw-control-branding.js", () => staticScript(CONTROL_BRANDING_SCRIPT));
|
|
7520
7650
|
app.get("/assets/brand/logo", async () => serveBrandAsset(config2, config2.branding.logoAsset));
|
|
7521
7651
|
app.get("/favicon.svg", async () => serveBrandAsset(config2, config2.branding.faviconSvgAsset));
|
|
@@ -7853,11 +7983,11 @@ async function serveFile(file, contentTypeHeader, immutable = false) {
|
|
|
7853
7983
|
}
|
|
7854
7984
|
}
|
|
7855
7985
|
async function serveBrandAsset(config2, asset) {
|
|
7856
|
-
const response = await serveFile(path3.join(config2.assetsDir, asset), contentType(asset)
|
|
7986
|
+
const response = await serveFile(path3.join(config2.assetsDir, asset), contentType(asset));
|
|
7857
7987
|
if (response.status !== 404 || asset === "mlclaw.svg") {
|
|
7858
7988
|
return response;
|
|
7859
7989
|
}
|
|
7860
|
-
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");
|
|
7861
7991
|
}
|
|
7862
7992
|
function safeRelativePath(value) {
|
|
7863
7993
|
let decoded;
|
|
@@ -8172,7 +8302,7 @@ var SpaceRuntimeServer = class {
|
|
|
8172
8302
|
await proxyHttp(req, res, this.config, { username: session.username });
|
|
8173
8303
|
}
|
|
8174
8304
|
shouldRouteToMlClaw(pathname) {
|
|
8175
|
-
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/");
|
|
8176
8306
|
}
|
|
8177
8307
|
async startOpenClaw(extraEnv = {}) {
|
|
8178
8308
|
if (this.openclawStarting || this.openclaw && !this.openclaw.killed) {
|
|
@@ -8299,7 +8429,7 @@ function isApiPath(pathname) {
|
|
|
8299
8429
|
return pathname.startsWith("/mlclaw/api/");
|
|
8300
8430
|
}
|
|
8301
8431
|
function isTemplateRuntimePath(pathname) {
|
|
8302
|
-
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";
|
|
8303
8433
|
}
|
|
8304
8434
|
function formatError2(err) {
|
|
8305
8435
|
return err instanceof Error ? err.stack ?? err.message : String(err);
|
package/dist/mlclaw.mjs
CHANGED
|
@@ -14804,7 +14804,7 @@ function sseDataToText(raw) {
|
|
|
14804
14804
|
import fs11 from "node:fs";
|
|
14805
14805
|
import path12 from "node:path";
|
|
14806
14806
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
14807
|
-
var DEFAULT_OPENCLAW_VERSION = "2026.
|
|
14807
|
+
var DEFAULT_OPENCLAW_VERSION = "2026.7.1-beta.2";
|
|
14808
14808
|
var DEFAULT_RUNTIME_IMAGE_REPOSITORY = "ghcr.io/osolmaz/mlclaw";
|
|
14809
14809
|
var PACKAGE_METADATA = readPackageMetadata();
|
|
14810
14810
|
var PACKAGE_VERSION = packageString("version", "unknown");
|
|
@@ -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"],
|
package/package.json
CHANGED