@silicaclaw/cli 2026.3.19-8 → 2026.3.19-9
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 +6 -0
- package/README.md +7 -0
- package/VERSION +1 -1
- package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
- package/openclaw-skills/silicaclaw-broadcast/manifest.json +1 -1
- package/package.json +3 -1
- package/scripts/release-pack.mjs +89 -0
- package/scripts/silicaclaw-gateway.mjs +31 -26
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## v1.0 beta - 2026-03-19
|
|
4
4
|
|
|
5
|
+
### 2026.3.19-9
|
|
6
|
+
|
|
7
|
+
- release packaging workflow:
|
|
8
|
+
- added a dedicated release pack script for version sync checks, workspace build, skill validation, and npm packing
|
|
9
|
+
- confirmed the date-based release flow can be repeated with a single command before publish
|
|
10
|
+
|
|
5
11
|
### 2026.3.19-8
|
|
6
12
|
|
|
7
13
|
- npm publish smoke test:
|
package/README.md
CHANGED
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v2026.3.19-
|
|
1
|
+
v2026.3.19-9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
2026.3.19-
|
|
1
|
+
2026.3.19-9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "silicaclaw-broadcast",
|
|
3
|
-
"version": "2026.3.19-
|
|
3
|
+
"version": "2026.3.19-9",
|
|
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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silicaclaw/cli",
|
|
3
|
-
"version": "2026.3.19-
|
|
3
|
+
"version": "2026.3.19-9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -53,6 +53,8 @@
|
|
|
53
53
|
"scripts": {
|
|
54
54
|
"prepack": "npm run build",
|
|
55
55
|
"build": "npm run -ws build",
|
|
56
|
+
"release:check": "node scripts/release-pack.mjs --dry-run",
|
|
57
|
+
"release:pack": "node scripts/release-pack.mjs",
|
|
56
58
|
"dev": "npm run --workspace @silicaclaw/local-console dev",
|
|
57
59
|
"onboard": "node scripts/silicaclaw-cli.mjs onboard",
|
|
58
60
|
"quickstart": "bash scripts/quickstart.sh",
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
|
|
7
|
+
const ROOT_DIR = resolve(new URL("..", import.meta.url).pathname);
|
|
8
|
+
const args = process.argv.slice(2);
|
|
9
|
+
const dryRun = args.includes("--dry-run");
|
|
10
|
+
|
|
11
|
+
function readJson(filePath) {
|
|
12
|
+
return JSON.parse(readFileSync(filePath, "utf8"));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function readText(filePath) {
|
|
16
|
+
return readFileSync(filePath, "utf8").trim();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function normalizeVersion(value) {
|
|
20
|
+
const text = String(value || "").trim();
|
|
21
|
+
return text.startsWith("v") ? text.slice(1) : text;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function assert(condition, message) {
|
|
25
|
+
if (!condition) {
|
|
26
|
+
console.error(message);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function run(cmd, cmdArgs, extraEnv = {}) {
|
|
32
|
+
const result = spawnSync(cmd, cmdArgs, {
|
|
33
|
+
cwd: ROOT_DIR,
|
|
34
|
+
stdio: "inherit",
|
|
35
|
+
env: {
|
|
36
|
+
...process.env,
|
|
37
|
+
npm_config_cache: resolve(ROOT_DIR, ".npm-cache"),
|
|
38
|
+
...extraEnv,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
if (result.error) {
|
|
42
|
+
console.error(result.error.message);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
if ((result.status ?? 1) !== 0) {
|
|
46
|
+
process.exit(result.status ?? 1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function verifyVersionSync() {
|
|
51
|
+
const pkg = readJson(resolve(ROOT_DIR, "package.json"));
|
|
52
|
+
const lock = readJson(resolve(ROOT_DIR, "package-lock.json"));
|
|
53
|
+
const rootVersionFile = readText(resolve(ROOT_DIR, "VERSION"));
|
|
54
|
+
const skillVersionFile = readText(resolve(ROOT_DIR, "openclaw-skills", "silicaclaw-broadcast", "VERSION"));
|
|
55
|
+
const skillManifest = readJson(resolve(ROOT_DIR, "openclaw-skills", "silicaclaw-broadcast", "manifest.json"));
|
|
56
|
+
|
|
57
|
+
const expected = normalizeVersion(pkg.version);
|
|
58
|
+
const checks = [
|
|
59
|
+
["package.json", normalizeVersion(pkg.version)],
|
|
60
|
+
["package-lock.json", normalizeVersion(lock.version)],
|
|
61
|
+
['package-lock.json packages[""]', normalizeVersion(lock.packages?.[""]?.version)],
|
|
62
|
+
["VERSION", normalizeVersion(rootVersionFile)],
|
|
63
|
+
["skill VERSION", normalizeVersion(skillVersionFile)],
|
|
64
|
+
["skill manifest", normalizeVersion(skillManifest.version)],
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
for (const [label, actual] of checks) {
|
|
68
|
+
assert(Boolean(actual), `Missing version in ${label}`);
|
|
69
|
+
assert(actual === expected, `Version mismatch: ${label}=${actual}, expected ${expected}`);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
console.log(`Version sync OK: ${expected}`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function main() {
|
|
76
|
+
assert(existsSync(resolve(ROOT_DIR, "package.json")), "package.json not found");
|
|
77
|
+
verifyVersionSync();
|
|
78
|
+
|
|
79
|
+
console.log("Building workspaces...");
|
|
80
|
+
run("npm", ["run", "build"]);
|
|
81
|
+
|
|
82
|
+
console.log("Validating bundled OpenClaw skill...");
|
|
83
|
+
run("node", [resolve(ROOT_DIR, "scripts", "validate-openclaw-skill.mjs")]);
|
|
84
|
+
|
|
85
|
+
console.log(dryRun ? "Running npm pack dry-run..." : "Packing npm tarball...");
|
|
86
|
+
run("npm", ["pack", ...(dryRun ? ["--dry-run"] : [])]);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
main();
|
|
@@ -669,32 +669,6 @@ async function startAll() {
|
|
|
669
669
|
const room = parseFlag("room", process.env.WEBRTC_ROOM || "silicaclaw-global-preview");
|
|
670
670
|
const shouldDisableSignaling = hasFlag("no-signaling");
|
|
671
671
|
|
|
672
|
-
const currentLocalPid = readPid(CONSOLE_PID_FILE);
|
|
673
|
-
const currentSigPid = readPid(SIGNALING_PID_FILE);
|
|
674
|
-
const currentListener = listeningProcessOnPort(4310);
|
|
675
|
-
if (currentListener && isOwnedListener(currentListener, "local-console") && !isRunning(currentLocalPid)) {
|
|
676
|
-
writeFileSync(CONSOLE_PID_FILE, String(currentListener.pid));
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
let localPid = readPid(CONSOLE_PID_FILE);
|
|
680
|
-
if (!isRunning(localPid)) {
|
|
681
|
-
removeFileIfExists(CONSOLE_PID_FILE);
|
|
682
|
-
const env = {
|
|
683
|
-
NETWORK_ADAPTER: adapter,
|
|
684
|
-
NETWORK_MODE: mode,
|
|
685
|
-
WEBRTC_SIGNALING_URL: signalingUrl,
|
|
686
|
-
WEBRTC_ROOM: room,
|
|
687
|
-
};
|
|
688
|
-
localPid = spawnBackground(
|
|
689
|
-
process.execPath,
|
|
690
|
-
["dist/apps/local-console/src/server.js"],
|
|
691
|
-
env,
|
|
692
|
-
CONSOLE_LOG_FILE,
|
|
693
|
-
CONSOLE_PID_FILE,
|
|
694
|
-
LOCAL_CONSOLE_DIR,
|
|
695
|
-
);
|
|
696
|
-
}
|
|
697
|
-
|
|
698
672
|
const { host, port } = parseUrlHostPort(signalingUrl);
|
|
699
673
|
const shouldAutoStartSignaling =
|
|
700
674
|
mode === "global-preview" &&
|
|
@@ -750,6 +724,37 @@ async function startAll() {
|
|
|
750
724
|
return { localPid: null, signalingPid: null };
|
|
751
725
|
}
|
|
752
726
|
|
|
727
|
+
const currentLocalPid = readPid(CONSOLE_PID_FILE);
|
|
728
|
+
const currentSigPid = readPid(SIGNALING_PID_FILE);
|
|
729
|
+
const currentListener = listeningProcessOnPort(4310);
|
|
730
|
+
if (currentListener && isOwnedListener(currentListener, "local-console") && !isRunning(currentLocalPid)) {
|
|
731
|
+
writeFileSync(CONSOLE_PID_FILE, String(currentListener.pid));
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
let localPid = readPid(CONSOLE_PID_FILE);
|
|
735
|
+
if (!isRunning(localPid)) {
|
|
736
|
+
removeFileIfExists(CONSOLE_PID_FILE);
|
|
737
|
+
await drainOwnedListener(4310, "local-console", 8000);
|
|
738
|
+
const remainingLocalListener = listeningProcessOnPort(4310);
|
|
739
|
+
if (remainingLocalListener) {
|
|
740
|
+
throw new Error(`port 4310 is occupied by pid=${remainingLocalListener.pid}`);
|
|
741
|
+
}
|
|
742
|
+
const env = {
|
|
743
|
+
NETWORK_ADAPTER: adapter,
|
|
744
|
+
NETWORK_MODE: mode,
|
|
745
|
+
WEBRTC_SIGNALING_URL: signalingUrl,
|
|
746
|
+
WEBRTC_ROOM: room,
|
|
747
|
+
};
|
|
748
|
+
localPid = spawnBackground(
|
|
749
|
+
process.execPath,
|
|
750
|
+
["dist/apps/local-console/src/server.js"],
|
|
751
|
+
env,
|
|
752
|
+
CONSOLE_LOG_FILE,
|
|
753
|
+
CONSOLE_PID_FILE,
|
|
754
|
+
LOCAL_CONSOLE_DIR,
|
|
755
|
+
);
|
|
756
|
+
}
|
|
757
|
+
|
|
753
758
|
let signalingPid = currentSigPid;
|
|
754
759
|
if (shouldAutoStartSignaling) {
|
|
755
760
|
if (!isRunning(currentSigPid)) {
|