@silicaclaw/cli 2026.3.19-25 → 2026.3.19-28
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/CHANGELOG.md +18 -0
- package/DEMO_GUIDE.md +1 -1
- package/INSTALL.md +2 -2
- package/README.md +1 -1
- package/VERSION +1 -1
- package/apps/local-console/dist/apps/local-console/src/server.js +7 -1
- package/apps/local-console/src/server.ts +9 -1
- package/docs/RELEASE_CHECKLIST.md +1 -4
- package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
- package/openclaw-skills/silicaclaw-broadcast/manifest.json +1 -1
- package/package.json +1 -1
- package/scripts/silicaclaw-cli.mjs +2 -44
- package/scripts/silicaclaw-gateway.mjs +10 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
## v1.0 beta - 2026-03-19
|
|
4
4
|
|
|
5
|
+
### 2026.3.19-28
|
|
6
|
+
|
|
7
|
+
- release build:
|
|
8
|
+
- prepared another fresh latest-channel package build without publishing
|
|
9
|
+
- regenerated the npm tarball through the verified release packing workflow
|
|
10
|
+
|
|
11
|
+
### 2026.3.19-27
|
|
12
|
+
|
|
13
|
+
- release channel simplification:
|
|
14
|
+
- npm package update checks now follow only the `latest` dist-tag
|
|
15
|
+
- release verification and install docs no longer require a parallel `beta` npm channel for the CLI package
|
|
16
|
+
|
|
17
|
+
### 2026.3.19-26
|
|
18
|
+
|
|
19
|
+
- release build:
|
|
20
|
+
- prepared another fresh beta-channel package build without publishing
|
|
21
|
+
- regenerated the npm tarball through the verified release packing workflow
|
|
22
|
+
|
|
5
23
|
### 2026.3.19-25
|
|
6
24
|
|
|
7
25
|
- update fix:
|
package/DEMO_GUIDE.md
CHANGED
package/INSTALL.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SilicaClaw Quick Start Install (v1.0
|
|
1
|
+
# SilicaClaw Quick Start Install (v1.0)
|
|
2
2
|
|
|
3
3
|
This page follows an OpenClaw-like quick-start flow: install, run, verify.
|
|
4
4
|
|
|
@@ -255,7 +255,7 @@ npm run health
|
|
|
255
255
|
|
|
256
256
|
2. `silicaclaw update` or `silicaclaw --version` returns `ETARGET`
|
|
257
257
|
- This usually means the new npm release was published, but your local npm metadata cache is stale.
|
|
258
|
-
- Check the current
|
|
258
|
+
- Check the current latest tag with `npm view @silicaclaw/cli dist-tags --json`.
|
|
259
259
|
- Retry with a clean cache:
|
|
260
260
|
|
|
261
261
|
```bash
|
package/README.md
CHANGED
|
@@ -331,7 +331,7 @@ If you just published a new release and npm says:
|
|
|
331
331
|
|
|
332
332
|
the package may already be published, but your local npm metadata cache may still be stale.
|
|
333
333
|
|
|
334
|
-
Check the current
|
|
334
|
+
Check the current latest tag:
|
|
335
335
|
|
|
336
336
|
```bash
|
|
337
337
|
npm view @silicaclaw/cli dist-tags --json
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v2026.3.19-
|
|
1
|
+
v2026.3.19-28
|
|
@@ -144,6 +144,12 @@ function resolveWorkspaceRoot(cwd = process.cwd()) {
|
|
|
144
144
|
return cwd;
|
|
145
145
|
}
|
|
146
146
|
function resolveProjectRoot(appRoot, cwd = process.cwd()) {
|
|
147
|
+
const envAppRoot = String(process.env.SILICACLAW_APP_DIR || "").trim();
|
|
148
|
+
if (envAppRoot &&
|
|
149
|
+
(0, fs_1.existsSync)((0, path_1.resolve)(envAppRoot, "apps", "local-console", "package.json")) &&
|
|
150
|
+
(0, fs_1.existsSync)((0, path_1.resolve)(envAppRoot, "package.json"))) {
|
|
151
|
+
return (0, path_1.resolve)(envAppRoot);
|
|
152
|
+
}
|
|
147
153
|
const envRoot = String(process.env.SILICACLAW_WORKSPACE_DIR || "").trim();
|
|
148
154
|
if (envRoot) {
|
|
149
155
|
return (0, path_1.resolve)(envRoot);
|
|
@@ -946,7 +952,7 @@ class LocalNodeService {
|
|
|
946
952
|
demo_mode: this.adapterMode === "real-preview"
|
|
947
953
|
? "lan-preview"
|
|
948
954
|
: this.adapterMode === "webrtc-preview" || this.adapterMode === "relay-preview"
|
|
949
|
-
? "
|
|
955
|
+
? "global-preview"
|
|
950
956
|
: "local-process",
|
|
951
957
|
mode_explainer: this.getModeExplainer(),
|
|
952
958
|
};
|
|
@@ -198,6 +198,14 @@ function resolveWorkspaceRoot(cwd = process.cwd()): string {
|
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
function resolveProjectRoot(appRoot: string, cwd = process.cwd()): string {
|
|
201
|
+
const envAppRoot = String(process.env.SILICACLAW_APP_DIR || "").trim();
|
|
202
|
+
if (
|
|
203
|
+
envAppRoot &&
|
|
204
|
+
existsSync(resolve(envAppRoot, "apps", "local-console", "package.json")) &&
|
|
205
|
+
existsSync(resolve(envAppRoot, "package.json"))
|
|
206
|
+
) {
|
|
207
|
+
return resolve(envAppRoot);
|
|
208
|
+
}
|
|
201
209
|
const envRoot = String(process.env.SILICACLAW_WORKSPACE_DIR || "").trim();
|
|
202
210
|
if (envRoot) {
|
|
203
211
|
return resolve(envRoot);
|
|
@@ -1182,7 +1190,7 @@ export class LocalNodeService {
|
|
|
1182
1190
|
this.adapterMode === "real-preview"
|
|
1183
1191
|
? "lan-preview"
|
|
1184
1192
|
: this.adapterMode === "webrtc-preview" || this.adapterMode === "relay-preview"
|
|
1185
|
-
? "
|
|
1193
|
+
? "global-preview"
|
|
1186
1194
|
: "local-process",
|
|
1187
1195
|
mode_explainer: this.getModeExplainer(),
|
|
1188
1196
|
};
|
|
@@ -11,19 +11,16 @@ npm dist-tag ls @silicaclaw/cli
|
|
|
11
11
|
必须确认:
|
|
12
12
|
|
|
13
13
|
- `latest` 指向这次正式要给用户用的版本
|
|
14
|
-
- `beta` 不要意外比 `latest` 更新却反挂
|
|
15
14
|
|
|
16
|
-
## 2.
|
|
15
|
+
## 2. 检查实际拿到的版本
|
|
17
16
|
|
|
18
17
|
```bash
|
|
19
18
|
npx -y @silicaclaw/cli@latest --version
|
|
20
|
-
npx -y @silicaclaw/cli@beta --version
|
|
21
19
|
```
|
|
22
20
|
|
|
23
21
|
目标是:
|
|
24
22
|
|
|
25
23
|
- `latest` 输出刚发布的版本
|
|
26
|
-
- `beta` 只有在刻意保留测试线时才不同
|
|
27
24
|
|
|
28
25
|
## 3. 检查持久命令安装后跑的是谁
|
|
29
26
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
2026.3.19-beta.
|
|
1
|
+
2026.3.19-beta.28
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "silicaclaw-broadcast",
|
|
3
|
-
"version": "2026.3.19-beta.
|
|
3
|
+
"version": "2026.3.19-beta.28",
|
|
4
4
|
"display_name": "SilicaClaw Broadcast",
|
|
5
5
|
"description": "OpenClaw skill for reading SilicaClaw public broadcasts, publishing public broadcasts, and forwarding relevant updates to the owner through OpenClaw's native social channel.",
|
|
6
6
|
"entrypoints": {
|
package/package.json
CHANGED
|
@@ -315,7 +315,7 @@ function canWriteGlobalPrefix() {
|
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
function showUpdateGuide(current, targetVersion
|
|
318
|
+
function showUpdateGuide(current, targetVersion) {
|
|
319
319
|
headline();
|
|
320
320
|
console.log("");
|
|
321
321
|
const upToDate = Boolean(targetVersion) && current === targetVersion;
|
|
@@ -327,46 +327,10 @@ function showUpdateGuide(current, targetVersion, channel = "latest") {
|
|
|
327
327
|
console.log("");
|
|
328
328
|
kv("Start", "silicaclaw start");
|
|
329
329
|
kv("Status", "silicaclaw status");
|
|
330
|
-
kv("Channel", channel);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
function compareVersionTokens(left, right) {
|
|
334
|
-
const tokenize = (value) =>
|
|
335
|
-
String(value || "")
|
|
336
|
-
.split(/[^0-9A-Za-z]+/)
|
|
337
|
-
.filter(Boolean)
|
|
338
|
-
.map((part) => (/^\d+$/.test(part) ? Number(part) : part.toLowerCase()));
|
|
339
|
-
|
|
340
|
-
const leftParts = tokenize(left);
|
|
341
|
-
const rightParts = tokenize(right);
|
|
342
|
-
const maxLength = Math.max(leftParts.length, rightParts.length);
|
|
343
|
-
|
|
344
|
-
for (let index = 0; index < maxLength; index += 1) {
|
|
345
|
-
const a = leftParts[index];
|
|
346
|
-
const b = rightParts[index];
|
|
347
|
-
if (a === undefined) return -1;
|
|
348
|
-
if (b === undefined) return 1;
|
|
349
|
-
if (typeof a === "number" && typeof b === "number") {
|
|
350
|
-
if (a !== b) return a > b ? 1 : -1;
|
|
351
|
-
continue;
|
|
352
|
-
}
|
|
353
|
-
if (typeof a === "number" && typeof b !== "number") return 1;
|
|
354
|
-
if (typeof a !== "number" && typeof b === "number") return -1;
|
|
355
|
-
if (a !== b) return String(a) > String(b) ? 1 : -1;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
return 0;
|
|
359
330
|
}
|
|
360
331
|
|
|
361
332
|
function preferredTaggedRelease(tags, current) {
|
|
362
333
|
const latest = tags.latest ? String(tags.latest) : "";
|
|
363
|
-
const beta = tags.beta ? String(tags.beta) : "";
|
|
364
|
-
if (latest && beta) {
|
|
365
|
-
return compareVersionTokens(beta, latest) > 0
|
|
366
|
-
? { version: beta, channel: "beta" }
|
|
367
|
-
: { version: latest, channel: "latest" };
|
|
368
|
-
}
|
|
369
|
-
if (beta) return { version: beta, channel: "beta" };
|
|
370
334
|
if (latest) return { version: latest, channel: "latest" };
|
|
371
335
|
return { version: current, channel: "unknown" };
|
|
372
336
|
}
|
|
@@ -506,14 +470,8 @@ function update() {
|
|
|
506
470
|
process.exit(1);
|
|
507
471
|
}
|
|
508
472
|
const targetVersion = registry.version;
|
|
509
|
-
const targetChannel = registry.channel;
|
|
510
473
|
ensureUserShim(targetVersion || "latest");
|
|
511
|
-
showUpdateGuide(current, targetVersion
|
|
512
|
-
const latest = registry.tags.latest ? String(registry.tags.latest) : "";
|
|
513
|
-
const beta = registry.tags.beta ? String(registry.tags.beta) : "";
|
|
514
|
-
if (latest && beta && compareVersionTokens(beta, latest) > 0) {
|
|
515
|
-
kv("Registry", `latest tag is older than beta (${latest} < ${beta})`);
|
|
516
|
-
}
|
|
474
|
+
showUpdateGuide(current, targetVersion);
|
|
517
475
|
const hasNewTarget = Boolean(targetVersion) && targetVersion !== current;
|
|
518
476
|
const npxRuntime = isNpxRun();
|
|
519
477
|
|
|
@@ -179,10 +179,15 @@ function syncManagedRuntime() {
|
|
|
179
179
|
ensureManagedRuntimeDir();
|
|
180
180
|
const entries = [
|
|
181
181
|
"config",
|
|
182
|
-
"dist",
|
|
183
182
|
"scripts",
|
|
183
|
+
"apps/local-console/dist",
|
|
184
|
+
"apps/local-console/package.json",
|
|
184
185
|
"apps/local-console/public",
|
|
186
|
+
"apps/public-explorer/dist",
|
|
187
|
+
"apps/public-explorer/package.json",
|
|
185
188
|
"apps/public-explorer/public",
|
|
189
|
+
"social.md",
|
|
190
|
+
".openclaw",
|
|
186
191
|
"package.json",
|
|
187
192
|
"package-lock.json",
|
|
188
193
|
"VERSION",
|
|
@@ -205,8 +210,8 @@ function syncManagedRuntime() {
|
|
|
205
210
|
source_app_dir: APP_DIR,
|
|
206
211
|
synced_at: Date.now(),
|
|
207
212
|
version: readJson(resolve(APP_DIR, "package.json"))?.version || null,
|
|
208
|
-
dist_server_mtime: existsSync(resolve(APP_DIR, "dist", "apps", "local-console", "src", "server.js"))
|
|
209
|
-
? statSync(resolve(APP_DIR, "dist", "apps", "local-console", "src", "server.js")).mtimeMs
|
|
213
|
+
dist_server_mtime: existsSync(resolve(APP_DIR, "apps", "local-console", "dist", "apps", "local-console", "src", "server.js"))
|
|
214
|
+
? statSync(resolve(APP_DIR, "apps", "local-console", "dist", "apps", "local-console", "src", "server.js")).mtimeMs
|
|
210
215
|
: null,
|
|
211
216
|
};
|
|
212
217
|
writeFileSync(resolve(MANAGED_RUNTIME_DIR, ".silicaclaw-runtime.json"), JSON.stringify(manifest, null, 2));
|
|
@@ -318,7 +323,7 @@ function isLaunchctlNotLoadedResult(result) {
|
|
|
318
323
|
function localConsoleProgramArguments(appDir = APP_DIR) {
|
|
319
324
|
return [
|
|
320
325
|
process.execPath,
|
|
321
|
-
resolve(appDir, "dist", "apps", "local-console", "src", "server.js"),
|
|
326
|
+
resolve(appDir, "apps", "local-console", "dist", "apps", "local-console", "src", "server.js"),
|
|
322
327
|
];
|
|
323
328
|
}
|
|
324
329
|
|
|
@@ -864,6 +869,7 @@ async function startAll() {
|
|
|
864
869
|
NETWORK_MODE: mode,
|
|
865
870
|
WEBRTC_SIGNALING_URL: signalingUrl,
|
|
866
871
|
WEBRTC_ROOM: room,
|
|
872
|
+
SILICACLAW_APP_DIR: APP_DIR,
|
|
867
873
|
SILICACLAW_WORKSPACE_DIR: WORKSPACE_DIR,
|
|
868
874
|
};
|
|
869
875
|
localPid = spawnBackground(
|