@voiden/runner 2.1.0 → 2.2.0
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 +26 -0
- package/bundled-runners/package.json +3 -0
- package/bundled-runners/simple-assertions-runner.js +1 -0
- package/bundled-runners/versions.json +9 -0
- package/bundled-runners/voiden-advanced-auth-runner.js +1 -0
- package/bundled-runners/voiden-faker-runner.js +9 -0
- package/bundled-runners/voiden-graphql-runner.js +1 -0
- package/bundled-runners/voiden-rest-api-runner.js +1 -0
- package/bundled-runners/voiden-scripting-runner.js +397 -0
- package/bundled-runners/voiden-sockets-grpcs-runner.js +1 -0
- package/dist/discovery.d.ts +11 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +54 -0
- package/dist/discovery.js.map +1 -0
- package/dist/index.js +384 -112
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +19 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +19 -0
- package/dist/lib.js.map +1 -0
- package/dist/mcpInstall.d.ts +48 -0
- package/dist/mcpInstall.d.ts.map +1 -0
- package/dist/mcpInstall.js +194 -0
- package/dist/mcpInstall.js.map +1 -0
- package/dist/plugins/community.d.ts.map +1 -1
- package/dist/plugins/community.js +9 -2
- package/dist/plugins/community.js.map +1 -1
- package/dist/plugins/loader.d.ts +1 -0
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +32 -18
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/registry.d.ts +11 -0
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +63 -10
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/registryCache.d.ts +2 -0
- package/dist/plugins/registryCache.d.ts.map +1 -1
- package/dist/plugins/registryCache.js.map +1 -1
- package/dist/plugins/store.d.ts +28 -1
- package/dist/plugins/store.d.ts.map +1 -1
- package/dist/plugins/store.js +46 -9
- package/dist/plugins/store.js.map +1 -1
- package/dist/plugins/updateCheck.d.ts +9 -4
- package/dist/plugins/updateCheck.d.ts.map +1 -1
- package/dist/plugins/updateCheck.js +29 -15
- package/dist/plugins/updateCheck.js.map +1 -1
- package/dist/plugins/versionInfo.d.ts +15 -0
- package/dist/plugins/versionInfo.d.ts.map +1 -0
- package/dist/plugins/versionInfo.js +18 -0
- package/dist/plugins/versionInfo.js.map +1 -0
- package/dist/resultBlock.d.ts +31 -0
- package/dist/resultBlock.d.ts.map +1 -0
- package/dist/resultBlock.js +121 -0
- package/dist/resultBlock.js.map +1 -0
- package/dist/runner.d.ts +11 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +61 -2
- package/dist/runner.js.map +1 -1
- package/dist/runtimeVars.js +3 -3
- package/dist/runtimeVars.js.map +1 -1
- package/dist/skillContent.d.ts +8 -0
- package/dist/skillContent.d.ts.map +1 -0
- package/dist/skillContent.js +42 -0
- package/dist/skillContent.js.map +1 -0
- package/package.json +13 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAqCH;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B/I;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIzD;AAuDD,wBAAsB,kBAAkB,CACtC,OAAO,UAAQ,EACf,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC,CAqEnB"}
|
package/dist/plugins/loader.js
CHANGED
|
@@ -22,6 +22,28 @@ import { readStore, setPluginVersion } from './store.js';
|
|
|
22
22
|
import * as https from 'https';
|
|
23
23
|
import { mkdirSync, createWriteStream } from 'fs';
|
|
24
24
|
import { dirname } from 'path';
|
|
25
|
+
// Follows redirects (GitHub release assets 302 to signed blob-storage URLs).
|
|
26
|
+
function downloadToFile(url, destPath, hops = 5) {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
https.get(url, { headers: { 'User-Agent': 'voiden-runner' } }, res => {
|
|
29
|
+
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
30
|
+
if (hops <= 0) {
|
|
31
|
+
reject(new Error('Too many redirects'));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
downloadToFile(res.headers.location, destPath, hops - 1).then(resolve, reject);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
38
|
+
reject(new Error(`HTTP ${res.statusCode}`));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const file = createWriteStream(destPath);
|
|
42
|
+
res.pipe(file);
|
|
43
|
+
file.on('finish', () => { file.close(); resolve(); });
|
|
44
|
+
}).on('error', reject);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
25
47
|
/**
|
|
26
48
|
* Download a core plugin runner bundle from its GitHub repo release, pinned to
|
|
27
49
|
* the version published in the registry — mirrors the Electron app's
|
|
@@ -53,14 +75,11 @@ export async function downloadCoreRunner(pluginId, repo, assetName, version, ver
|
|
|
53
75
|
console.warn(` [plugins] No "${assetName}" asset in release v${version} of ${repo}`);
|
|
54
76
|
return false;
|
|
55
77
|
}
|
|
56
|
-
// Download the asset
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
file.on('finish', () => { file.close(); resolve(); });
|
|
62
|
-
}).on('error', reject);
|
|
63
|
-
});
|
|
78
|
+
// Download the asset, following redirects — GitHub's browser_download_url
|
|
79
|
+
// always 302s to a signed blob-storage URL, which https.get does not follow
|
|
80
|
+
// automatically. Without this, the response piped to disk is the empty
|
|
81
|
+
// redirect body, leaving a 0-byte runner.js.
|
|
82
|
+
await downloadToFile(asset.browser_download_url, destPath);
|
|
64
83
|
setPluginVersion(pluginId, version);
|
|
65
84
|
if (verbose)
|
|
66
85
|
console.log(` [plugins] Downloaded ${assetName}@${version} → ${destPath}`);
|
|
@@ -68,7 +87,7 @@ export async function downloadCoreRunner(pluginId, repo, assetName, version, ver
|
|
|
68
87
|
}
|
|
69
88
|
// ─── Per-plugin enabled check ─────────────────────────────────────────────────
|
|
70
89
|
// Core plugins default to enabled; only skip if explicitly set to false in store.
|
|
71
|
-
function isCorePluginEnabled(name) {
|
|
90
|
+
export function isCorePluginEnabled(name) {
|
|
72
91
|
const store = readStore();
|
|
73
92
|
const record = store.installedPlugins[name];
|
|
74
93
|
return record === undefined ? true : record.enabled;
|
|
@@ -124,7 +143,9 @@ export async function loadEnabledPlugins(verbose = false, skipPlugins = new Set(
|
|
|
124
143
|
const loaded = [];
|
|
125
144
|
// ── Core plugins ──────────────────────────────────────────────────────────
|
|
126
145
|
// Core plugins default to enabled but can be disabled via ~/.voiden/plugins.json.
|
|
127
|
-
//
|
|
146
|
+
// `run` never downloads anything — it only uses what's already bundled in the
|
|
147
|
+
// package (see bundled-runners/) or previously cached via `plugin install` /
|
|
148
|
+
// `plugin update`. A plugin that's neither gets a one-line install hint.
|
|
128
149
|
const corePlugins = await getCorePlugins();
|
|
129
150
|
for (const def of corePlugins) {
|
|
130
151
|
if (skipPlugins.has(def.name)) {
|
|
@@ -137,15 +158,8 @@ export async function loadEnabledPlugins(verbose = false, skipPlugins = new Set(
|
|
|
137
158
|
console.log(` [plugins] Skipping disabled core plugin: ${def.name}`);
|
|
138
159
|
continue;
|
|
139
160
|
}
|
|
140
|
-
// Auto-download runner bundle if not cached locally
|
|
141
161
|
if (!hasCoreRunner(def.name)) {
|
|
142
|
-
|
|
143
|
-
console.log(` [plugins] Downloading runner for ${def.name} from ${def.repo}...`);
|
|
144
|
-
await downloadCoreRunner(def.name, def.repo, def.runnerAsset, def.version, verbose);
|
|
145
|
-
}
|
|
146
|
-
if (!hasCoreRunner(def.name)) {
|
|
147
|
-
if (verbose)
|
|
148
|
-
console.warn(` [plugins] Runner not available for ${def.name} — skipping`);
|
|
162
|
+
console.log(` [plugins] "${def.name}" not installed — run: voiden-runner plugin install ${def.name}`);
|
|
149
163
|
continue;
|
|
150
164
|
}
|
|
151
165
|
const ok = await loadPlugin(getCoreRunnerImportUrl(def.name), def.name, verbose);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACxG,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAc,MAAM,IAAI,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,IAAY,EAAE,SAAiB,EAAE,OAAe,EAAE,OAAgB;IAC3H,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC5C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjD,MAAM,MAAM,GAAG,gCAAgC,IAAI,mBAAmB,OAAO,EAAE,CAAA;IAC/E,MAAM,IAAI,GAAQ,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtD,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,6BAA6B,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;YAC/G,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;YAC9B,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAA;gBAAC,CAAC;YAC/F,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,SAAS,uBAAuB,OAAO,OAAO,IAAI,EAAE,CAAC,CAAA;QAClG,OAAO,KAAK,CAAA;IACd,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACxG,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAc,MAAM,IAAI,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B,6EAA6E;AAC7E,SAAS,cAAc,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAI,GAAG,CAAC;IAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;YACnE,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5F,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAAC,OAAM;gBAAC,CAAC;gBAClE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBAC9E,OAAM;YACR,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;gBAC3C,OAAM;YACR,CAAC;YACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACd,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;QACtD,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,IAAY,EAAE,SAAiB,EAAE,OAAe,EAAE,OAAgB;IAC3H,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC5C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjD,MAAM,MAAM,GAAG,gCAAgC,IAAI,mBAAmB,OAAO,EAAE,CAAA;IAC/E,MAAM,IAAI,GAAQ,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtD,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,6BAA6B,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;YAC/G,IAAI,IAAI,GAAG,EAAE,CAAA;YACb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;YAC9B,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAA;gBAAC,CAAC;YAC/F,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,SAAS,uBAAuB,OAAO,OAAO,IAAI,EAAE,CAAC,CAAA;QAClG,OAAO,KAAK,CAAA;IACd,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,uEAAuE;IACvE,6CAA6C;IAC7C,MAAM,cAAc,CAAC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAA;IAE1D,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACnC,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,SAAS,IAAI,OAAO,MAAM,QAAQ,EAAE,CAAC,CAAA;IACxF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,iFAAiF;AAEjF,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC3C,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;AACrD,CAAC;AAED,uEAAuE;AACvE,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC3C,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAA;AAC/C,CAAC;AAED,iFAAiF;AAEjF,KAAK,UAAU,UAAU,CACvB,UAAkB,EAClB,UAAkB,EAClB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;QACpC,sEAAsE;QACtE,4EAA4E;QAC5E,4EAA4E;QAC5E,yEAAyE;QACzE,qDAAqD;QACrD,IAAI,OAAO,GAAY,GAAG,CAAC,OAAO,IAAI,GAAG,CAAA;QACzC,OACE,OAAO;YACP,OAAO,OAAO,KAAK,QAAQ;YAC1B,OAAe,CAAC,UAAU;YAC3B,SAAS,IAAK,OAAe,EAC7B,CAAC;YACD,OAAO,GAAI,OAAe,CAAC,OAAO,CAAA;QACpC,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,gBAAgB,UAAU,+CAA+C,CAAC,CAAA;YACzF,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,GAAG,GAAG,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC5D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;QAE3B,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAA;QACpE,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,+BAA+B,UAAU,MAAM,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC5F,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAO,GAAG,KAAK,EACf,cAAmC,IAAI,GAAG,EAAE;IAE5C,kEAAkE;IAClE,6EAA6E;IAC7E,mBAAmB,CAAC,KAAK,EAAE,CAAA;IAC3B,YAAY,CAAC,QAAQ,EAAE,CAAA;IACvB,YAAY,EAAE,CAAA;IAEd,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,6EAA6E;IAC7E,kFAAkF;IAClF,8EAA8E;IAC9E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,+CAA+C,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YACnF,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,8CAA8C,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YAClF,SAAQ;QACV,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,uDAAuD,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;YACtG,SAAQ;QACV,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAChF,IAAI,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED,8EAA8E;IAC9E,yEAAyE;IACzE,0EAA0E;IAC1E,uCAAuC;IACvC,IAAI,gBAAmE,CAAA;IACvE,IAAI,CAAC;QACH,gBAAgB,GAAG,MAAM,qBAAqB,EAAE,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB,GAAG,EAAE,CAAA;IACvB,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/D,MAAM,KAAK,GAAG,SAAS,EAAE,CAAA;IACzB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;YAAE,SAAQ;QAE7C,qDAAqD;QACrD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAQ;QAEvC,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,+BAA+B,IAAI,0CAA0C,CAAC,CAAA;YACxG,SAAQ;QACV,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,0DAA0D,IAAI,EAAE,CAAC,CAAA;YAChI,SAAQ;QACV,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7E,IAAI,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -12,7 +12,18 @@
|
|
|
12
12
|
* voiden-runner downloads and caches these files the same way community
|
|
13
13
|
* plugins do: ~/.voiden/extensions/{id}/runner.js
|
|
14
14
|
*/
|
|
15
|
+
/** Version of the copy currently bundled inside the package (not the latest registry version). */
|
|
16
|
+
export declare function getBundledVersion(pluginId: string): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* The version actually present locally — cached download takes priority over
|
|
19
|
+
* the bundled copy. Returns undefined once explicitly uninstalled, even
|
|
20
|
+
* though a bundled file may still physically exist on disk — uninstalled
|
|
21
|
+
* bundled plugins are treated as unavailable, not just "using the bundled
|
|
22
|
+
* version", so `plugin list`/version checks correctly show "not installed".
|
|
23
|
+
*/
|
|
24
|
+
export declare function getCoreRunnerVersion(pluginId: string): string | undefined;
|
|
15
25
|
export declare function getCoreRunnerPath(pluginId: string): string;
|
|
26
|
+
/** False once explicitly uninstalled, even if a bundled or cached file still exists on disk. */
|
|
16
27
|
export declare function hasCoreRunner(pluginId: string): boolean;
|
|
17
28
|
export declare function getCoreRunnerImportUrl(pluginId: string): string;
|
|
18
29
|
export interface PluginDefinition {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAwDH,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAID,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAA;IACf,gFAAgF;IAChF,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAaD,4EAA4E;AAC5E,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAKlE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAGpF;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAEzD"}
|
package/dist/plugins/registry.js
CHANGED
|
@@ -14,34 +14,87 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { join } from 'path';
|
|
16
16
|
import { homedir } from 'os';
|
|
17
|
-
import { existsSync } from 'fs';
|
|
17
|
+
import { existsSync, statSync, readFileSync } from 'fs';
|
|
18
18
|
import { pathToFileURL } from 'url';
|
|
19
19
|
import { getRegistry } from './registryCache.js';
|
|
20
|
+
import { getInstalledVersion, isPluginUninstalled } from './store.js';
|
|
20
21
|
// ─── Runner paths (priority: bundled-at-build-time > user cache > download) ───
|
|
21
22
|
const RUNNER_CACHE_DIR = join(homedir(), '.voiden', 'extensions');
|
|
22
|
-
//
|
|
23
|
-
|
|
23
|
+
// A failed/interrupted download can leave a 0-byte file behind; treat that as
|
|
24
|
+
// "not cached" so we fall back to the bundled copy instead of importing nothing.
|
|
25
|
+
function isValidRunnerFile(path) {
|
|
26
|
+
try {
|
|
27
|
+
return existsSync(path) && statSync(path).size > 0;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Resolves the bundled-runners/ directory shipped inside the @voiden/runner
|
|
34
|
+
// package itself (built by scripts/build-runners.mjs from plugins whose
|
|
35
|
+
// plugin-registry entry has `bundled: true`). Two candidates: monorepo dev
|
|
36
|
+
// layout vs. the npm-installed package layout.
|
|
37
|
+
function getBundledRunnersDir() {
|
|
24
38
|
const candidates = [
|
|
25
|
-
join(new URL('.', import.meta.url).pathname, '../../../../packages/voiden-runner/bundled-runners'
|
|
26
|
-
join(new URL('.', import.meta.url).pathname, '
|
|
39
|
+
join(new URL('.', import.meta.url).pathname, '../../../../packages/voiden-runner/bundled-runners'),
|
|
40
|
+
join(new URL('.', import.meta.url).pathname, '../../bundled-runners'),
|
|
27
41
|
];
|
|
28
|
-
for (const
|
|
29
|
-
if (existsSync(
|
|
30
|
-
return
|
|
42
|
+
for (const dir of candidates) {
|
|
43
|
+
if (existsSync(dir))
|
|
44
|
+
return dir;
|
|
31
45
|
}
|
|
32
46
|
return null;
|
|
33
47
|
}
|
|
48
|
+
function getBundledRunnerPath(pluginId) {
|
|
49
|
+
const dir = getBundledRunnersDir();
|
|
50
|
+
if (!dir)
|
|
51
|
+
return null;
|
|
52
|
+
const p = join(dir, `${pluginId}-runner.js`);
|
|
53
|
+
return isValidRunnerFile(p) ? p : null;
|
|
54
|
+
}
|
|
55
|
+
let bundledVersionsCache;
|
|
56
|
+
function getBundledVersions() {
|
|
57
|
+
if (bundledVersionsCache)
|
|
58
|
+
return bundledVersionsCache;
|
|
59
|
+
const dir = getBundledRunnersDir();
|
|
60
|
+
try {
|
|
61
|
+
bundledVersionsCache = dir ? JSON.parse(readFileSync(join(dir, 'versions.json'), 'utf-8')) : {};
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
bundledVersionsCache = {};
|
|
65
|
+
}
|
|
66
|
+
return bundledVersionsCache;
|
|
67
|
+
}
|
|
68
|
+
/** Version of the copy currently bundled inside the package (not the latest registry version). */
|
|
69
|
+
export function getBundledVersion(pluginId) {
|
|
70
|
+
return getBundledVersions()[pluginId];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The version actually present locally — cached download takes priority over
|
|
74
|
+
* the bundled copy. Returns undefined once explicitly uninstalled, even
|
|
75
|
+
* though a bundled file may still physically exist on disk — uninstalled
|
|
76
|
+
* bundled plugins are treated as unavailable, not just "using the bundled
|
|
77
|
+
* version", so `plugin list`/version checks correctly show "not installed".
|
|
78
|
+
*/
|
|
79
|
+
export function getCoreRunnerVersion(pluginId) {
|
|
80
|
+
if (isPluginUninstalled(pluginId))
|
|
81
|
+
return undefined;
|
|
82
|
+
return getInstalledVersion(pluginId) ?? getBundledVersion(pluginId);
|
|
83
|
+
}
|
|
34
84
|
export function getCoreRunnerPath(pluginId) {
|
|
35
85
|
return join(RUNNER_CACHE_DIR, pluginId, 'runner.js');
|
|
36
86
|
}
|
|
87
|
+
/** False once explicitly uninstalled, even if a bundled or cached file still exists on disk. */
|
|
37
88
|
export function hasCoreRunner(pluginId) {
|
|
38
|
-
|
|
89
|
+
if (isPluginUninstalled(pluginId))
|
|
90
|
+
return false;
|
|
91
|
+
return !!getBundledRunnerPath(pluginId) || isValidRunnerFile(getCoreRunnerPath(pluginId));
|
|
39
92
|
}
|
|
40
93
|
export function getCoreRunnerImportUrl(pluginId) {
|
|
41
94
|
// User cache (~/.voiden/extensions) takes priority over the bundled snapshot —
|
|
42
95
|
// mirrors Electron's OTA-cache-over-bundled resolution (seedBundledPluginsToCache /
|
|
43
96
|
// isOtaCached) — so `plugin update` can actually supersede a bundled runner.
|
|
44
|
-
if (
|
|
97
|
+
if (isValidRunnerFile(getCoreRunnerPath(pluginId)))
|
|
45
98
|
return pathToFileURL(getCoreRunnerPath(pluginId)).href;
|
|
46
99
|
const bundled = getBundledRunnerPath(pluginId);
|
|
47
100
|
if (bundled)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,8 @@ export interface RegistryEntry {
|
|
|
17
17
|
runnerAsset?: string;
|
|
18
18
|
icon?: string;
|
|
19
19
|
voidenVersion?: string;
|
|
20
|
+
/** Set by plugin-registry maintainers when this plugin's runner should ship inside the @voiden/runner npm package (see bundled-runners/). */
|
|
21
|
+
bundled?: boolean;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* Returns the full plugin-registry catalogue (core + community plugins).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registryCache.d.ts","sourceRoot":"","sources":["../../src/plugins/registryCache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"registryCache.d.ts","sourceRoot":"","sources":["../../src/plugins/registryCache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6IAA6I;IAC7I,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAmDD;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAsB5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registryCache.js","sourceRoot":"","sources":["../../src/plugins/registryCache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAE5B,MAAM,YAAY,GAAG,iFAAiF,CAAA;AACtG,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAA;AACpE,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"registryCache.js","sourceRoot":"","sources":["../../src/plugins/registryCache.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins/store.d.ts
CHANGED
|
@@ -7,17 +7,44 @@ export interface InstalledPlugin {
|
|
|
7
7
|
installedAt: string;
|
|
8
8
|
/** Runner bundle version that was downloaded — compared against the registry to detect updates */
|
|
9
9
|
version?: string;
|
|
10
|
+
/**
|
|
11
|
+
* True when explicitly removed via `plugin uninstall` — distinct from just
|
|
12
|
+
* being disabled. Needed because core plugins can have a runner file
|
|
13
|
+
* present (bundled, or a leftover cached download) even after uninstall;
|
|
14
|
+
* without this flag there's no way to tell "explicitly uninstalled" apart
|
|
15
|
+
* from "never touched" (which also reads as enabled by default for core
|
|
16
|
+
* plugins — see loader.ts isCorePluginEnabled).
|
|
17
|
+
*/
|
|
18
|
+
uninstalled?: boolean;
|
|
10
19
|
}
|
|
11
20
|
export interface PluginStore {
|
|
12
21
|
installedPlugins: Record<string, InstalledPlugin>;
|
|
13
22
|
}
|
|
14
23
|
export declare const STORE_DIR: string;
|
|
15
24
|
export declare function readStore(): PluginStore;
|
|
25
|
+
/** True only when explicitly uninstalled — never-touched plugins return false. */
|
|
26
|
+
export declare function isPluginUninstalled(name: string): boolean;
|
|
16
27
|
export declare function installPlugin(name: string, version?: string): boolean;
|
|
17
28
|
/** Records the runner bundle version for an installed plugin (used by `plugin update`). */
|
|
18
29
|
export declare function setPluginVersion(name: string, version: string): void;
|
|
30
|
+
/** Returns undefined once explicitly uninstalled, even if a stale version was recorded. */
|
|
19
31
|
export declare function getInstalledVersion(name: string): string | undefined;
|
|
20
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Marks a plugin as explicitly uninstalled — keeps a record (rather than
|
|
34
|
+
* deleting it) so it reads as disabled/unavailable, not "never touched"
|
|
35
|
+
* (which defaults to enabled for core plugins — see loader.ts isCorePluginEnabled).
|
|
36
|
+
*
|
|
37
|
+
* `impliedInstalled` should be true when the caller already knows `name` is a
|
|
38
|
+
* real, currently-active core plugin (bundled) even though it has no store
|
|
39
|
+
* record yet — bundled plugins are enabled by default without ever going
|
|
40
|
+
* through `plugin install`, so "no record" doesn't mean "not installed" the
|
|
41
|
+
* way it does for community plugins. Without this, uninstalling a
|
|
42
|
+
* never-explicitly-touched bundled plugin would report "not installed" and
|
|
43
|
+
* do nothing, even though the plugin is clearly active.
|
|
44
|
+
*
|
|
45
|
+
* Returns true only if the plugin was actually installed/active before this call.
|
|
46
|
+
*/
|
|
47
|
+
export declare function uninstallPlugin(name: string, impliedInstalled?: boolean): boolean;
|
|
21
48
|
export declare function setPluginEnabled(name: string, enabled: boolean): void;
|
|
22
49
|
export declare function getEnabledPlugins(): InstalledPlugin[];
|
|
23
50
|
export declare function getAllInstalledPlugins(): InstalledPlugin[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/plugins/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/plugins/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAClD;AAED,eAAO,MAAM,SAAS,QAA6B,CAAA;AAOnD,wBAAgB,SAAS,IAAI,WAAW,CAOvC;AAOD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAkBrE;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAcpE;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,UAAQ,GAAG,OAAO,CAc/E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAarE;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CAGrD;AAED,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAE1D"}
|
package/dist/plugins/store.js
CHANGED
|
@@ -23,15 +23,24 @@ function writeStore(store) {
|
|
|
23
23
|
mkdirSync(STORE_DIR, { recursive: true });
|
|
24
24
|
writeFileSync(STORE_PATH, JSON.stringify(store, null, 2) + '\n', 'utf-8');
|
|
25
25
|
}
|
|
26
|
+
/** True only when explicitly uninstalled — never-touched plugins return false. */
|
|
27
|
+
export function isPluginUninstalled(name) {
|
|
28
|
+
return !!readStore().installedPlugins[name]?.uninstalled;
|
|
29
|
+
}
|
|
26
30
|
export function installPlugin(name, version) {
|
|
27
31
|
const store = readStore();
|
|
28
|
-
const
|
|
32
|
+
const existing = store.installedPlugins[name];
|
|
33
|
+
// A record marked `uninstalled` doesn't count as "already installed" — this
|
|
34
|
+
// is what lets re-installing a previously-uninstalled plugin actually take
|
|
35
|
+
// effect instead of being treated as a no-op.
|
|
36
|
+
const alreadyInstalled = !!existing && !existing.uninstalled;
|
|
29
37
|
if (!alreadyInstalled) {
|
|
30
38
|
store.installedPlugins[name] = {
|
|
31
39
|
name,
|
|
32
40
|
enabled: true,
|
|
33
|
-
installedAt: new Date().toISOString(),
|
|
41
|
+
installedAt: existing?.installedAt ?? new Date().toISOString(),
|
|
34
42
|
version,
|
|
43
|
+
uninstalled: false,
|
|
35
44
|
};
|
|
36
45
|
writeStore(store);
|
|
37
46
|
}
|
|
@@ -50,19 +59,45 @@ export function setPluginVersion(name, version) {
|
|
|
50
59
|
}
|
|
51
60
|
else {
|
|
52
61
|
store.installedPlugins[name].version = version;
|
|
62
|
+
store.installedPlugins[name].uninstalled = false;
|
|
53
63
|
}
|
|
54
64
|
writeStore(store);
|
|
55
65
|
}
|
|
66
|
+
/** Returns undefined once explicitly uninstalled, even if a stale version was recorded. */
|
|
56
67
|
export function getInstalledVersion(name) {
|
|
57
|
-
|
|
68
|
+
const record = readStore().installedPlugins[name];
|
|
69
|
+
return record?.uninstalled ? undefined : record?.version;
|
|
58
70
|
}
|
|
59
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Marks a plugin as explicitly uninstalled — keeps a record (rather than
|
|
73
|
+
* deleting it) so it reads as disabled/unavailable, not "never touched"
|
|
74
|
+
* (which defaults to enabled for core plugins — see loader.ts isCorePluginEnabled).
|
|
75
|
+
*
|
|
76
|
+
* `impliedInstalled` should be true when the caller already knows `name` is a
|
|
77
|
+
* real, currently-active core plugin (bundled) even though it has no store
|
|
78
|
+
* record yet — bundled plugins are enabled by default without ever going
|
|
79
|
+
* through `plugin install`, so "no record" doesn't mean "not installed" the
|
|
80
|
+
* way it does for community plugins. Without this, uninstalling a
|
|
81
|
+
* never-explicitly-touched bundled plugin would report "not installed" and
|
|
82
|
+
* do nothing, even though the plugin is clearly active.
|
|
83
|
+
*
|
|
84
|
+
* Returns true only if the plugin was actually installed/active before this call.
|
|
85
|
+
*/
|
|
86
|
+
export function uninstallPlugin(name, impliedInstalled = false) {
|
|
60
87
|
const store = readStore();
|
|
61
|
-
|
|
88
|
+
const existing = store.installedPlugins[name];
|
|
89
|
+
const wasInstalled = existing ? !existing.uninstalled : impliedInstalled;
|
|
90
|
+
if (!existing && !impliedInstalled)
|
|
62
91
|
return false;
|
|
63
|
-
|
|
92
|
+
store.installedPlugins[name] = {
|
|
93
|
+
name,
|
|
94
|
+
enabled: false,
|
|
95
|
+
installedAt: existing?.installedAt ?? new Date().toISOString(),
|
|
96
|
+
version: undefined,
|
|
97
|
+
uninstalled: true,
|
|
98
|
+
};
|
|
64
99
|
writeStore(store);
|
|
65
|
-
return
|
|
100
|
+
return wasInstalled;
|
|
66
101
|
}
|
|
67
102
|
export function setPluginEnabled(name, enabled) {
|
|
68
103
|
const store = readStore();
|
|
@@ -75,14 +110,16 @@ export function setPluginEnabled(name, enabled) {
|
|
|
75
110
|
}
|
|
76
111
|
else {
|
|
77
112
|
store.installedPlugins[name].enabled = enabled;
|
|
113
|
+
if (enabled)
|
|
114
|
+
store.installedPlugins[name].uninstalled = false;
|
|
78
115
|
}
|
|
79
116
|
writeStore(store);
|
|
80
117
|
}
|
|
81
118
|
export function getEnabledPlugins() {
|
|
82
119
|
const store = readStore();
|
|
83
|
-
return Object.values(store.installedPlugins).filter(p => p.enabled);
|
|
120
|
+
return Object.values(store.installedPlugins).filter(p => p.enabled && !p.uninstalled);
|
|
84
121
|
}
|
|
85
122
|
export function getAllInstalledPlugins() {
|
|
86
|
-
return Object.values(readStore().installedPlugins);
|
|
123
|
+
return Object.values(readStore().installedPlugins).filter(p => !p.uninstalled);
|
|
87
124
|
}
|
|
88
125
|
//# sourceMappingURL=store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/plugins/store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/plugins/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plugin update detection — compares each
|
|
3
|
-
* version
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Plugin update detection — compares each plugin's currently-active runner
|
|
3
|
+
* version against the latest version published in the shared plugin-registry
|
|
4
|
+
* (registryCache.ts). Used by `plugin update` and the post-command update
|
|
5
|
+
* notice in index.ts.
|
|
6
|
+
*
|
|
7
|
+
* Core plugins are checked even if never explicitly `plugin install`ed —
|
|
8
|
+
* they're enabled by default and may only exist as the version bundled
|
|
9
|
+
* inside the @voiden/runner package (see registry.ts:getCoreRunnerVersion),
|
|
10
|
+
* so users still get notified when a newer release is available.
|
|
6
11
|
*/
|
|
7
12
|
export interface PluginUpdateInfo {
|
|
8
13
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateCheck.d.ts","sourceRoot":"","sources":["../../src/plugins/updateCheck.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"updateCheck.d.ts","sourceRoot":"","sources":["../../src/plugins/updateCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;CACtB;AAeD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4BzE"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Plugin update detection — compares each
|
|
3
|
-
* version
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Plugin update detection — compares each plugin's currently-active runner
|
|
3
|
+
* version against the latest version published in the shared plugin-registry
|
|
4
|
+
* (registryCache.ts). Used by `plugin update` and the post-command update
|
|
5
|
+
* notice in index.ts.
|
|
6
|
+
*
|
|
7
|
+
* Core plugins are checked even if never explicitly `plugin install`ed —
|
|
8
|
+
* they're enabled by default and may only exist as the version bundled
|
|
9
|
+
* inside the @voiden/runner package (see registry.ts:getCoreRunnerVersion),
|
|
10
|
+
* so users still get notified when a newer release is available.
|
|
6
11
|
*/
|
|
7
12
|
import { getAllInstalledPlugins } from './store.js';
|
|
8
13
|
import { getRegistry } from './registryCache.js';
|
|
14
|
+
import { getCorePlugins, getCoreRunnerVersion } from './registry.js';
|
|
15
|
+
import { isCorePluginEnabled } from './loader.js';
|
|
9
16
|
/** Compares dotted version strings numerically, segment by segment. */
|
|
10
17
|
function isNewer(latest, installed) {
|
|
11
18
|
const a = latest.split('.').map((n) => parseInt(n, 10) || 0);
|
|
@@ -20,25 +27,32 @@ function isNewer(latest, installed) {
|
|
|
20
27
|
return false;
|
|
21
28
|
}
|
|
22
29
|
export async function checkForPluginUpdates() {
|
|
23
|
-
const installed = getAllInstalledPlugins();
|
|
24
|
-
if (installed.length === 0)
|
|
25
|
-
return [];
|
|
26
30
|
const registry = await getRegistry();
|
|
27
31
|
const byId = new Map(registry.map((e) => [e.id, e]));
|
|
28
32
|
const updates = [];
|
|
29
|
-
|
|
33
|
+
// Core plugins: compare whatever version is actually present locally
|
|
34
|
+
// (bundled copy, or a cached download from a previous `plugin install`/
|
|
35
|
+
// `update`) against the registry's latest — regardless of explicit install.
|
|
36
|
+
const corePlugins = await getCorePlugins();
|
|
37
|
+
for (const def of corePlugins) {
|
|
38
|
+
if (!isCorePluginEnabled(def.name))
|
|
39
|
+
continue;
|
|
40
|
+
const current = getCoreRunnerVersion(def.name);
|
|
41
|
+
if (!current)
|
|
42
|
+
continue;
|
|
43
|
+
if (isNewer(def.version, current)) {
|
|
44
|
+
updates.push({ id: def.name, type: 'core', installedVersion: current, latestVersion: def.version });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Community plugins: only ones explicitly installed have a version to compare.
|
|
48
|
+
for (const plugin of getAllInstalledPlugins()) {
|
|
30
49
|
if (!plugin.version)
|
|
31
50
|
continue;
|
|
32
51
|
const entry = byId.get(plugin.name);
|
|
33
|
-
if (!entry)
|
|
52
|
+
if (!entry || entry.type !== 'community')
|
|
34
53
|
continue;
|
|
35
54
|
if (isNewer(entry.version, plugin.version)) {
|
|
36
|
-
updates.push({
|
|
37
|
-
id: plugin.name,
|
|
38
|
-
type: entry.type,
|
|
39
|
-
installedVersion: plugin.version,
|
|
40
|
-
latestVersion: entry.version,
|
|
41
|
-
});
|
|
55
|
+
updates.push({ id: plugin.name, type: 'community', installedVersion: plugin.version, latestVersion: entry.version });
|
|
42
56
|
}
|
|
43
57
|
}
|
|
44
58
|
return updates;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/plugins/updateCheck.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/plugins/updateCheck.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installed-plugin lookup for the run-time block-version check (runner.ts).
|
|
3
|
+
* Thin wrapper over the existing core/community plugin state — no new store,
|
|
4
|
+
* just a single call site for "what's installed, and is it enabled" that
|
|
5
|
+
* works for both core and community plugins (both are recorded in the same
|
|
6
|
+
* ~/.voiden/plugins.json store; `isCorePluginEnabled`'s default-true-when-absent
|
|
7
|
+
* behaviour only matters when no version is present either, so it's safe to
|
|
8
|
+
* reuse for community plugins here).
|
|
9
|
+
*/
|
|
10
|
+
export interface InstalledPluginInfo {
|
|
11
|
+
version?: string;
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function getInstalledPluginInfo(pluginId: string): InstalledPluginInfo | undefined;
|
|
15
|
+
//# sourceMappingURL=versionInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionInfo.d.ts","sourceRoot":"","sources":["../../src/plugins/versionInfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAIxF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installed-plugin lookup for the run-time block-version check (runner.ts).
|
|
3
|
+
* Thin wrapper over the existing core/community plugin state — no new store,
|
|
4
|
+
* just a single call site for "what's installed, and is it enabled" that
|
|
5
|
+
* works for both core and community plugins (both are recorded in the same
|
|
6
|
+
* ~/.voiden/plugins.json store; `isCorePluginEnabled`'s default-true-when-absent
|
|
7
|
+
* behaviour only matters when no version is present either, so it's safe to
|
|
8
|
+
* reuse for community plugins here).
|
|
9
|
+
*/
|
|
10
|
+
import { getCoreRunnerVersion } from './registry.js';
|
|
11
|
+
import { isCorePluginEnabled } from './loader.js';
|
|
12
|
+
export function getInstalledPluginInfo(pluginId) {
|
|
13
|
+
const version = getCoreRunnerVersion(pluginId);
|
|
14
|
+
if (!version)
|
|
15
|
+
return undefined;
|
|
16
|
+
return { version, enabled: isCorePluginEnabled(pluginId) };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=versionInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionInfo.js","sourceRoot":"","sources":["../../src/plugins/versionInfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAOjD,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAA;AAC5D,CAAC"}
|