@lyriel/openclaw-plugin 0.4.5 → 0.4.6
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/dist/auto-update.js +28 -69
- package/dist/auto-update.js.map +1 -1
- package/package.json +1 -1
package/dist/auto-update.js
CHANGED
|
@@ -1,27 +1,23 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Update-availability check for the Lyriel OpenClaw plugin.
|
|
2
2
|
//
|
|
3
|
-
// On gateway_start we
|
|
4
|
-
// @lyriel/openclaw-plugin. If
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// up the new code.
|
|
3
|
+
// On gateway_start we hit the npm registry for the latest published version
|
|
4
|
+
// of @lyriel/openclaw-plugin. If a newer version exists, we log a one-line
|
|
5
|
+
// notice telling the user how to install it. We do NOT subprocess — OpenClaw
|
|
6
|
+
// blocks plugins that spawn external processes (rightly so), and a plugin
|
|
7
|
+
// that installs code is a real attack surface even when "we" wrote it.
|
|
9
8
|
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// fragile. Apply-on-restart is the safe default for non-technical users.
|
|
9
|
+
// The install command itself runs in the user's terminal under their own
|
|
10
|
+
// shell, where they can audit it. This is the same pattern Hermes uses.
|
|
13
11
|
//
|
|
14
|
-
// Escape
|
|
15
|
-
// LYRIEL_NO_AUTOUPDATE=1 — skip the check entirely
|
|
12
|
+
// Escape hatch:
|
|
13
|
+
// LYRIEL_NO_AUTOUPDATE=1 — skip the check entirely
|
|
16
14
|
// LYRIEL_UPDATE_CHANNEL — registry dist-tag to track (default "latest")
|
|
17
|
-
import { spawn } from "node:child_process";
|
|
18
15
|
import { readFile } from "node:fs/promises";
|
|
19
16
|
import { dirname, join } from "node:path";
|
|
20
17
|
import { fileURLToPath } from "node:url";
|
|
21
18
|
const PACKAGE_NAME = "@lyriel/openclaw-plugin";
|
|
22
19
|
const REGISTRY_BASE = "https://registry.npmjs.org";
|
|
23
20
|
const REGISTRY_TIMEOUT_MS = 4000;
|
|
24
|
-
const INSTALL_TIMEOUT_MS = 90_000;
|
|
25
21
|
function parseSemver(raw) {
|
|
26
22
|
const m = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(raw.trim());
|
|
27
23
|
if (!m)
|
|
@@ -66,10 +62,7 @@ async function fetchJsonWithTimeout(url, timeoutMs) {
|
|
|
66
62
|
clearTimeout(timer);
|
|
67
63
|
}
|
|
68
64
|
}
|
|
69
|
-
|
|
70
|
-
// PACKAGE_NAME. That directory is where `npm install <pkg>@<v>` must run to
|
|
71
|
-
// replace the on-disk plugin. We never write outside it.
|
|
72
|
-
async function findPluginPackageRoot() {
|
|
65
|
+
async function findPluginVersion() {
|
|
73
66
|
let dir = dirname(fileURLToPath(import.meta.url));
|
|
74
67
|
for (let i = 0; i < 8; i++) {
|
|
75
68
|
try {
|
|
@@ -79,7 +72,7 @@ async function findPluginPackageRoot() {
|
|
|
79
72
|
if (typeof pkg.name === "string" &&
|
|
80
73
|
pkg.name === PACKAGE_NAME &&
|
|
81
74
|
typeof pkg.version === "string") {
|
|
82
|
-
return
|
|
75
|
+
return pkg.version;
|
|
83
76
|
}
|
|
84
77
|
}
|
|
85
78
|
catch {
|
|
@@ -97,46 +90,18 @@ async function fetchLatestVersion(distTag) {
|
|
|
97
90
|
const body = (await fetchJsonWithTimeout(url, REGISTRY_TIMEOUT_MS));
|
|
98
91
|
return typeof body.version === "string" ? body.version : null;
|
|
99
92
|
}
|
|
100
|
-
function runNpmInstall(cwd, spec) {
|
|
101
|
-
return new Promise((resolve) => {
|
|
102
|
-
const npm = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
103
|
-
const child = spawn(npm, ["install", spec, "--no-audit", "--no-fund", "--silent"], {
|
|
104
|
-
cwd,
|
|
105
|
-
stdio: ["ignore", "ignore", "pipe"],
|
|
106
|
-
env: { ...process.env, ADBLOCK: "1", DISABLE_OPENCOLLECTIVE: "1" },
|
|
107
|
-
});
|
|
108
|
-
let stderr = "";
|
|
109
|
-
child.stderr?.on("data", (chunk) => {
|
|
110
|
-
stderr += String(chunk);
|
|
111
|
-
});
|
|
112
|
-
const timer = setTimeout(() => {
|
|
113
|
-
child.kill("SIGTERM");
|
|
114
|
-
}, INSTALL_TIMEOUT_MS);
|
|
115
|
-
child.on("error", (err) => {
|
|
116
|
-
clearTimeout(timer);
|
|
117
|
-
resolve({ ok: false, stderr: stderr || String(err) });
|
|
118
|
-
});
|
|
119
|
-
child.on("exit", (code) => {
|
|
120
|
-
clearTimeout(timer);
|
|
121
|
-
resolve({ ok: code === 0, stderr });
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
93
|
export async function runAutoUpdate(logger) {
|
|
126
94
|
if (process.env.LYRIEL_NO_AUTOUPDATE === "1") {
|
|
127
95
|
return { status: "skipped", reason: "LYRIEL_NO_AUTOUPDATE=1" };
|
|
128
96
|
}
|
|
129
97
|
const distTag = (process.env.LYRIEL_UPDATE_CHANNEL ?? "latest").trim() || "latest";
|
|
130
|
-
const
|
|
131
|
-
if (!
|
|
132
|
-
return {
|
|
133
|
-
status: "skipped",
|
|
134
|
-
reason: "could not locate plugin package.json on disk",
|
|
135
|
-
};
|
|
98
|
+
const currentVersion = await findPluginVersion();
|
|
99
|
+
if (!currentVersion) {
|
|
100
|
+
return { status: "skipped", reason: "could not locate plugin package.json on disk" };
|
|
136
101
|
}
|
|
137
|
-
const current = parseSemver(
|
|
102
|
+
const current = parseSemver(currentVersion);
|
|
138
103
|
if (!current) {
|
|
139
|
-
return { status: "skipped", reason: `unparseable current version ${
|
|
104
|
+
return { status: "skipped", reason: `unparseable current version ${currentVersion}` };
|
|
140
105
|
}
|
|
141
106
|
let latestRaw;
|
|
142
107
|
try {
|
|
@@ -153,23 +118,17 @@ export async function runAutoUpdate(logger) {
|
|
|
153
118
|
return { status: "skipped", reason: `unparseable latest version ${latestRaw}` };
|
|
154
119
|
}
|
|
155
120
|
if (compareSemver(latest, current) <= 0) {
|
|
156
|
-
return { status: "current", version:
|
|
157
|
-
}
|
|
158
|
-
// Guard against a silent major bump landing on a non-technical user.
|
|
159
|
-
if (latest.major !== current.major) {
|
|
160
|
-
logger.warn(`Lyriel plugin: a new major version is available (${pkg.version} → ${latestRaw}). ` +
|
|
161
|
-
`Auto-update will not cross majors; run \`npm install ${PACKAGE_NAME}@${latestRaw}\` ` +
|
|
162
|
-
`from ${pkg.root} after reviewing the changelog.`);
|
|
163
|
-
return { status: "skipped", reason: "major version bump requires manual review" };
|
|
164
|
-
}
|
|
165
|
-
logger.info(`Lyriel plugin: updating ${pkg.version} → ${latestRaw} (channel: ${distTag})...`);
|
|
166
|
-
const result = await runNpmInstall(pkg.root, `${PACKAGE_NAME}@${latestRaw}`);
|
|
167
|
-
if (!result.ok) {
|
|
168
|
-
const tail = result.stderr.trim().split("\n").slice(-3).join(" | ");
|
|
169
|
-
(logger.error ?? logger.warn)(`Lyriel plugin: auto-update failed (${tail || "npm exited non-zero"}). Continuing on ${pkg.version}.`);
|
|
170
|
-
return { status: "failed", reason: tail || "npm exited non-zero" };
|
|
121
|
+
return { status: "current", version: currentVersion };
|
|
171
122
|
}
|
|
172
|
-
|
|
173
|
-
|
|
123
|
+
// Newer version available — log a one-liner with the upgrade command.
|
|
124
|
+
// We deliberately do NOT shell out: OpenClaw's security scanner blocks
|
|
125
|
+
// plugins that spawn external processes, and auto-installing code is
|
|
126
|
+
// a real attack surface even when the package is "ours."
|
|
127
|
+
const isMajor = latest.major !== current.major;
|
|
128
|
+
const prefix = isMajor
|
|
129
|
+
? `Lyriel plugin: NEW MAJOR available (${currentVersion} → ${latestRaw}) — review changelog before upgrading.`
|
|
130
|
+
: `Lyriel plugin: update available (${currentVersion} → ${latestRaw}).`;
|
|
131
|
+
logger.info(`${prefix} To upgrade: npm install -g ${PACKAGE_NAME}@${latestRaw} && openclaw plugins install ${PACKAGE_NAME}`);
|
|
132
|
+
return { status: "notified", from: currentVersion, to: latestRaw };
|
|
174
133
|
}
|
|
175
134
|
//# sourceMappingURL=auto-update.js.map
|
package/dist/auto-update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../auto-update.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../auto-update.ts"],"names":[],"mappings":"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"}
|