@silicaclaw/cli 2026.3.20-20 → 2026.3.20-22

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 CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## v1.0 beta - 2026-03-20
4
4
 
5
+ ### 2026.3.20-22
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.20-21
12
+
13
+ - release build:
14
+ - prepared another fresh latest-channel package build without publishing
15
+ - regenerated the npm tarball through the verified release packing workflow
16
+
5
17
  ### 2026.3.20-20
6
18
 
7
19
  - release build:
package/VERSION CHANGED
@@ -1 +1 @@
1
- v2026.3.20-20
1
+ v2026.3.20-22
@@ -154,6 +154,12 @@ function userShimPath() {
154
154
  return (0, path_1.resolve)((0, os_1.homedir)(), ".silicaclaw", "bin", "silicaclaw");
155
155
  }
156
156
  function resolveWorkspaceRoot(cwd = process.cwd()) {
157
+ const envAppRoot = String(process.env.SILICACLAW_APP_DIR || "").trim();
158
+ if (envAppRoot &&
159
+ (0, fs_1.existsSync)((0, path_1.resolve)(envAppRoot, "apps", "local-console", "package.json")) &&
160
+ (0, fs_1.existsSync)((0, path_1.resolve)(envAppRoot, "package.json"))) {
161
+ return (0, path_1.resolve)(envAppRoot);
162
+ }
157
163
  if ((0, fs_1.existsSync)((0, path_1.resolve)(cwd, "apps", "local-console", "package.json"))) {
158
164
  return cwd;
159
165
  }
@@ -1890,7 +1896,11 @@ class LocalNodeService {
1890
1896
  };
1891
1897
  }
1892
1898
  getSkillsView() {
1893
- const bundledRoot = (0, path_1.resolve)(this.workspaceRoot, "openclaw-skills");
1899
+ const bundledRootCandidates = [
1900
+ (0, path_1.resolve)(this.workspaceRoot, "openclaw-skills"),
1901
+ (0, path_1.resolve)(this.projectRoot, "openclaw-skills"),
1902
+ ];
1903
+ const bundledRoot = bundledRootCandidates.find((candidate) => (0, fs_1.existsSync)(candidate)) || bundledRootCandidates[0];
1894
1904
  const openclawHome = (0, path_1.resolve)(process.env.HOME || "", ".openclaw");
1895
1905
  const workspaceInstallRoot = (0, path_1.resolve)(openclawHome, "workspace", "skills");
1896
1906
  const legacyInstallRoot = (0, path_1.resolve)(openclawHome, "skills");
@@ -338,6 +338,7 @@ const APP_UPDATE_SESSION_KEY = 'silicaclaw_pending_updated_version';
338
338
  } = shell;
339
339
  let appUpdatePollTimer = null;
340
340
  let appUpdateCheckInFlight = false;
341
+ let appUpdatePendingTargetVersion = '';
341
342
  let relayQueueCheckInFlight = false;
342
343
  let lastRelayQueueCheckAt = 0;
343
344
 
@@ -422,9 +423,33 @@ const APP_UPDATE_SESSION_KEY = 'silicaclaw_pending_updated_version';
422
423
  const currentVersion = String(status.current_version || '').trim();
423
424
  const latestVersion = String(status.latest_version || '').trim();
424
425
  const platformHint = platformUpdateHint(String(status.platform || ''));
426
+ const pendingTarget = String(appUpdatePendingTargetVersion || '').trim();
425
427
  if (currentVersion) {
426
428
  document.getElementById('brandVersion').textContent = currentVersion.startsWith('v') ? currentVersion : `v${currentVersion}`;
427
429
  }
430
+ if (pendingTarget && currentVersion && currentVersion === pendingTarget) {
431
+ appUpdatePendingTargetVersion = '';
432
+ setAppUpdateUi({
433
+ hint: t('labels.versionUpdated', { version: currentVersion.startsWith('v') ? currentVersion : `v${currentVersion}` }),
434
+ buttonVisible: false,
435
+ buttonDisabled: false,
436
+ buttonText: t('actions.updateNow'),
437
+ checkVisible: true,
438
+ checkDisabled: false,
439
+ });
440
+ return status;
441
+ }
442
+ if (pendingTarget) {
443
+ setAppUpdateUi({
444
+ hint: t('labels.versionUpdatingTo', { version: pendingTarget.startsWith('v') ? pendingTarget : `v${pendingTarget}` }),
445
+ buttonVisible: true,
446
+ buttonDisabled: true,
447
+ buttonText: t('labels.versionUpdating'),
448
+ checkVisible: true,
449
+ checkDisabled: true,
450
+ });
451
+ return status;
452
+ }
428
453
  if (status.update_available && status.latest_version) {
429
454
  setAppUpdateUi({
430
455
  hint: `${t('labels.versionUpdateReady', { version: `v${status.latest_version}` })} · ${platformHint}`,
@@ -479,6 +504,7 @@ const APP_UPDATE_SESSION_KEY = 'silicaclaw_pending_updated_version';
479
504
  if (appUpdatePollTimer) {
480
505
  window.clearInterval(appUpdatePollTimer);
481
506
  }
507
+ appUpdatePendingTargetVersion = String(targetVersion || '').trim();
482
508
  let attempts = 0;
483
509
  appUpdatePollTimer = window.setInterval(async () => {
484
510
  attempts += 1;
@@ -486,6 +512,7 @@ const APP_UPDATE_SESSION_KEY = 'silicaclaw_pending_updated_version';
486
512
  if (status && !status.update_available && String(status.current_version || '') === String(targetVersion || '')) {
487
513
  window.clearInterval(appUpdatePollTimer);
488
514
  appUpdatePollTimer = null;
515
+ appUpdatePendingTargetVersion = '';
489
516
  if (targetVersion) {
490
517
  window.sessionStorage.setItem(APP_UPDATE_SESSION_KEY, String(targetVersion));
491
518
  }
@@ -495,11 +522,12 @@ const APP_UPDATE_SESSION_KEY = 'silicaclaw_pending_updated_version';
495
522
  if (attempts >= 24) {
496
523
  window.clearInterval(appUpdatePollTimer);
497
524
  appUpdatePollTimer = null;
525
+ appUpdatePendingTargetVersion = '';
498
526
  setAppUpdateUi({
499
- hint: t('labels.versionCurrent'),
500
- buttonVisible: false,
527
+ hint: t('labels.versionUpdateStillPending'),
528
+ buttonVisible: true,
501
529
  buttonDisabled: false,
502
- buttonText: t('actions.updateNow'),
530
+ buttonText: t('actions.updateRetry'),
503
531
  checkVisible: true,
504
532
  checkDisabled: false,
505
533
  });
@@ -521,6 +549,7 @@ const APP_UPDATE_SESSION_KEY = 'silicaclaw_pending_updated_version';
521
549
  const result = await api('/api/app/update', { method: 'POST' });
522
550
  const data = result.data || {};
523
551
  if (!data.started) {
552
+ appUpdatePendingTargetVersion = '';
524
553
  setAppUpdateUi({
525
554
  hint: t('labels.versionCurrent'),
526
555
  buttonVisible: false,
@@ -535,11 +564,12 @@ const APP_UPDATE_SESSION_KEY = 'silicaclaw_pending_updated_version';
535
564
  toast(t('feedback.appUpdateStarted'));
536
565
  startAppUpdatePolling(String(data.target_version || ''));
537
566
  } catch (error) {
567
+ appUpdatePendingTargetVersion = '';
538
568
  setAppUpdateUi({
539
569
  hint: t('labels.versionCheckFailed'),
540
570
  buttonVisible: true,
541
571
  buttonDisabled: false,
542
- buttonText: t('actions.updateNow'),
572
+ buttonText: t('actions.updateRetry'),
543
573
  checkVisible: true,
544
574
  checkDisabled: false,
545
575
  });
@@ -62,6 +62,7 @@ export const TRANSLATIONS = {
62
62
  broadcastNow: 'Announce Agent Now',
63
63
  checkUpdate: 'Check',
64
64
  updateNow: 'Update',
65
+ updateRetry: 'Try Again',
65
66
  updateNowVersion: 'Update {version}',
66
67
  editProfile: 'Edit Profile',
67
68
  openNetwork: 'Network',
@@ -152,6 +153,9 @@ export const TRANSLATIONS = {
152
153
  versionCurrent: 'Up to date',
153
154
  versionUpdateReady: 'Update {version} ready',
154
155
  versionUpdating: 'Updating...',
156
+ versionUpdatingTo: 'Updating to {version}. Refreshing local service...',
157
+ versionUpdated: 'Updated to {version}',
158
+ versionUpdateStillPending: 'Update is still in progress. You can try again in a moment.',
155
159
  versionCheckFailed: 'Could not check updates',
156
160
  versionPlatformMac: 'macOS service will restart automatically',
157
161
  versionPlatformLinux: 'Linux service will restart automatically',
@@ -680,6 +684,7 @@ export const TRANSLATIONS = {
680
684
  broadcastNow: '立即公告代理',
681
685
  checkUpdate: '检查',
682
686
  updateNow: '立即更新',
687
+ updateRetry: '重试更新',
683
688
  updateNowVersion: '更新到 {version}',
684
689
  editProfile: '编辑资料',
685
690
  openNetwork: '打开网络页',
@@ -757,6 +762,9 @@ export const TRANSLATIONS = {
757
762
  versionCurrent: '已是最新版本',
758
763
  versionUpdateReady: '可更新到 {version}',
759
764
  versionUpdating: '正在更新...',
765
+ versionUpdatingTo: '正在更新到 {version},本地服务正在刷新...',
766
+ versionUpdated: '已更新到 {version}',
767
+ versionUpdateStillPending: '更新还在进行中,稍后可以再试一次。',
760
768
  versionCheckFailed: '暂时无法检查更新',
761
769
  versionPlatformMac: 'macOS 服务会自动重启',
762
770
  versionPlatformLinux: 'Linux 服务会自动重启',
@@ -232,6 +232,14 @@ function userShimPath(): string {
232
232
  }
233
233
 
234
234
  function resolveWorkspaceRoot(cwd = process.cwd()): string {
235
+ const envAppRoot = String(process.env.SILICACLAW_APP_DIR || "").trim();
236
+ if (
237
+ envAppRoot &&
238
+ existsSync(resolve(envAppRoot, "apps", "local-console", "package.json")) &&
239
+ existsSync(resolve(envAppRoot, "package.json"))
240
+ ) {
241
+ return resolve(envAppRoot);
242
+ }
235
243
  if (existsSync(resolve(cwd, "apps", "local-console", "package.json"))) {
236
244
  return cwd;
237
245
  }
@@ -2258,7 +2266,11 @@ export class LocalNodeService {
2258
2266
  }
2259
2267
 
2260
2268
  getSkillsView() {
2261
- const bundledRoot = resolve(this.workspaceRoot, "openclaw-skills");
2269
+ const bundledRootCandidates = [
2270
+ resolve(this.workspaceRoot, "openclaw-skills"),
2271
+ resolve(this.projectRoot, "openclaw-skills"),
2272
+ ];
2273
+ const bundledRoot = bundledRootCandidates.find((candidate) => existsSync(candidate)) || bundledRootCandidates[0];
2262
2274
  const openclawHome = resolve(process.env.HOME || "", ".openclaw");
2263
2275
  const workspaceInstallRoot = resolve(openclawHome, "workspace", "skills");
2264
2276
  const legacyInstallRoot = resolve(openclawHome, "skills");
@@ -1 +1 @@
1
- 2026.3.20-beta.20
1
+ 2026.3.20-beta.22
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silicaclaw-broadcast",
3
- "version": "2026.3.20-beta.20",
3
+ "version": "2026.3.20-beta.22",
4
4
  "display_name": "SilicaClaw Broadcast",
5
5
  "description": "Official OpenClaw skill for a bounded local SilicaClaw broadcast workflow: read public broadcasts, publish public broadcasts, and optionally forward owner-relevant summaries through OpenClaw's native channel.",
6
6
  "entrypoints": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silicaclaw/cli",
3
- "version": "2026.3.20-20",
3
+ "version": "2026.3.20-22",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -390,6 +390,7 @@ function syncCurrentPackageToAppDir(appDir) {
390
390
  "packages/core",
391
391
  "packages/network",
392
392
  "packages/storage",
393
+ "openclaw-skills",
393
394
  "scripts",
394
395
  "README.md",
395
396
  "INSTALL.md",
@@ -285,6 +285,7 @@ function syncManagedRuntime() {
285
285
  ensureManagedRuntimeDir();
286
286
  const entries = [
287
287
  "config",
288
+ "openclaw-skills",
288
289
  "scripts",
289
290
  "apps/local-console/dist",
290
291
  "apps/local-console/package.json",