@silicaclaw/cli 2026.3.20-21 → 2026.3.20-23

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-23
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-22
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-21
6
18
 
7
19
  - release build:
package/VERSION CHANGED
@@ -1 +1 @@
1
- v2026.3.20-21
1
+ v2026.3.20-23
@@ -705,6 +705,12 @@ export declare class LocalNodeService {
705
705
  };
706
706
  getOpenClawBridgeConfig(): OpenClawBridgeConfigView;
707
707
  getSkillsView(): {
708
+ diagnostics: {
709
+ bundled_root: string;
710
+ bundled_root_exists: boolean;
711
+ bundled_root_candidates: string[];
712
+ runtime_restart_hint: string;
713
+ };
708
714
  openclaw: {
709
715
  detected: boolean;
710
716
  running: boolean;
@@ -1901,6 +1901,7 @@ class LocalNodeService {
1901
1901
  (0, path_1.resolve)(this.projectRoot, "openclaw-skills"),
1902
1902
  ];
1903
1903
  const bundledRoot = bundledRootCandidates.find((candidate) => (0, fs_1.existsSync)(candidate)) || bundledRootCandidates[0];
1904
+ const bundledRootExists = (0, fs_1.existsSync)(bundledRoot);
1904
1905
  const openclawHome = (0, path_1.resolve)(process.env.HOME || "", ".openclaw");
1905
1906
  const workspaceInstallRoot = (0, path_1.resolve)(openclawHome, "workspace", "skills");
1906
1907
  const legacyInstallRoot = (0, path_1.resolve)(openclawHome, "skills");
@@ -2000,6 +2001,12 @@ class LocalNodeService {
2000
2001
  };
2001
2002
  });
2002
2003
  return {
2004
+ diagnostics: {
2005
+ bundled_root: bundledRoot,
2006
+ bundled_root_exists: bundledRootExists,
2007
+ bundled_root_candidates: bundledRootCandidates,
2008
+ runtime_restart_hint: "silicaclaw gateway restart",
2009
+ },
2003
2010
  openclaw: {
2004
2011
  detected: bridge.openclaw_installation.detected,
2005
2012
  running: bridge.openclaw_runtime.running,
@@ -714,6 +714,7 @@ export function createSocialController({
714
714
  lastSkillsPayload = payload;
715
715
  const bundled = Array.isArray(payload.bundled_skills) ? payload.bundled_skills : [];
716
716
  const installed = Array.isArray(payload.installed_skills) ? payload.installed_skills : [];
717
+ const diagnostics = payload.diagnostics || {};
717
718
  const openclaw = payload.openclaw || {};
718
719
  const summary = payload.summary || {};
719
720
  const installAction = payload.install_action || {};
@@ -747,7 +748,15 @@ export function createSocialController({
747
748
  installed: String(summary.installed_count || 0),
748
749
  });
749
750
 
750
- if (!openclawDetected) {
751
+ if ((summary.bundled_count || 0) === 0 && diagnostics.bundled_root_exists === false) {
752
+ setSkillActionCopy({
753
+ title: t("hints.skillsActionRuntimeSyncTitle"),
754
+ body: t("hints.skillsActionRuntimeSyncBody", {
755
+ command: String(diagnostics.runtime_restart_hint || "silicaclaw gateway restart"),
756
+ }),
757
+ state: t("labels.skillsStateAttention"),
758
+ });
759
+ } else if (!openclawDetected) {
751
760
  setSkillActionCopy({
752
761
  title: t("hints.skillsActionMissingTitle"),
753
762
  body: t("hints.skillsActionMissingBody"),
@@ -879,9 +888,13 @@ export function createSocialController({
879
888
  ? t("actions.silicaClawSkillsInstalled")
880
889
  : t("actions.installSilicaClawSkills");
881
890
  installBtn.disabled = !openclawDetected || !openclawRunning || (allFeaturedInstalled && bundledUpdateCount === 0);
882
- document.getElementById("skillsFeedback").textContent = allFeaturedInstalled && bundledUpdateCount === 0
883
- ? t("feedback.openclawSkillInstalled")
884
- : installAction.recommended_command || t("common.ready");
891
+ document.getElementById("skillsFeedback").textContent = (summary.bundled_count || 0) === 0 && diagnostics.bundled_root_exists === false
892
+ ? t("feedback.skillsRuntimeSyncNeeded", {
893
+ command: String(diagnostics.runtime_restart_hint || "silicaclaw gateway restart"),
894
+ })
895
+ : allFeaturedInstalled && bundledUpdateCount === 0
896
+ ? t("feedback.openclawSkillInstalled")
897
+ : installAction.recommended_command || t("common.ready");
885
898
  }
886
899
 
887
900
  return {
@@ -316,6 +316,8 @@ export const TRANSLATIONS = {
316
316
  skillsActionMissingBody: 'Bundled skills are here, but OpenClaw is not available yet.',
317
317
  skillsActionStoppedTitle: 'Start OpenClaw first.',
318
318
  skillsActionStoppedBody: 'OpenClaw is installed but not running yet.',
319
+ skillsActionRuntimeSyncTitle: 'Bundled skills are missing from the local runtime.',
320
+ skillsActionRuntimeSyncBody: 'This usually means the managed runtime has not synced the latest skill bundle yet. Run {command}, then refresh this page.',
319
321
  skillsActionUpdateTitle: '{count} skill update ready.',
320
322
  skillsActionUpdateBody: 'Update bundled skills to stay aligned.',
321
323
  skillsActionPartialTitle: 'Finish the remaining key skill.',
@@ -569,6 +571,7 @@ export const TRANSLATIONS = {
569
571
  appUpdateLatest: 'Already on the latest version.',
570
572
  appUpdateCheckFailed: 'Could not check for updates.',
571
573
  appUpdateFailed: 'Could not start the update.',
574
+ skillsRuntimeSyncNeeded: 'Bundled skills are missing from the current runtime. Run {command}.',
572
575
  copyPreviewFailed: 'Copy preview failed',
573
576
  logsRefreshed: 'Logs refreshed',
574
577
  crossPreviewEnabled: 'Cross-network preview enabled',
@@ -938,6 +941,8 @@ export const TRANSLATIONS = {
938
941
  skillsActionMissingBody: '项目技能已经在,但本机还没有可用的 OpenClaw。',
939
942
  skillsActionStoppedTitle: '先启动 OpenClaw。',
940
943
  skillsActionStoppedBody: 'OpenClaw 已安装,但当前未运行。',
944
+ skillsActionRuntimeSyncTitle: '当前本地运行时还没有同步项目技能。',
945
+ skillsActionRuntimeSyncBody: '这通常表示 managed runtime 还没同步到最新技能包。先执行 {command},再刷新这个页面。',
941
946
  skillsActionUpdateTitle: '有 {count} 个技能可更新。',
942
947
  skillsActionUpdateBody: '更新项目技能,保持一致。',
943
948
  skillsActionPartialTitle: '补齐剩下的关键技能。',
@@ -1191,6 +1196,7 @@ export const TRANSLATIONS = {
1191
1196
  appUpdateLatest: '当前已经是最新版本。',
1192
1197
  appUpdateCheckFailed: '暂时无法检查更新。',
1193
1198
  appUpdateFailed: '无法开始更新。',
1199
+ skillsRuntimeSyncNeeded: '当前运行时缺少项目技能。请执行 {command}。',
1194
1200
  copyPreviewFailed: '复制预览失败',
1195
1201
  logsRefreshed: '日志已刷新',
1196
1202
  crossPreviewEnabled: '跨网络预览已启用',
@@ -2271,6 +2271,7 @@ export class LocalNodeService {
2271
2271
  resolve(this.projectRoot, "openclaw-skills"),
2272
2272
  ];
2273
2273
  const bundledRoot = bundledRootCandidates.find((candidate) => existsSync(candidate)) || bundledRootCandidates[0];
2274
+ const bundledRootExists = existsSync(bundledRoot);
2274
2275
  const openclawHome = resolve(process.env.HOME || "", ".openclaw");
2275
2276
  const workspaceInstallRoot = resolve(openclawHome, "workspace", "skills");
2276
2277
  const legacyInstallRoot = resolve(openclawHome, "skills");
@@ -2377,6 +2378,12 @@ export class LocalNodeService {
2377
2378
  });
2378
2379
 
2379
2380
  return {
2381
+ diagnostics: {
2382
+ bundled_root: bundledRoot,
2383
+ bundled_root_exists: bundledRootExists,
2384
+ bundled_root_candidates: bundledRootCandidates,
2385
+ runtime_restart_hint: "silicaclaw gateway restart",
2386
+ },
2380
2387
  openclaw: {
2381
2388
  detected: bridge.openclaw_installation.detected,
2382
2389
  running: bridge.openclaw_runtime.running,
@@ -1 +1 @@
1
- 2026.3.20-beta.21
1
+ 2026.3.20-beta.23
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silicaclaw-broadcast",
3
- "version": "2026.3.20-beta.21",
3
+ "version": "2026.3.20-beta.23",
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-21",
3
+ "version": "2026.3.20-23",
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",