@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.
Files changed (65) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/bundled-runners/package.json +3 -0
  3. package/bundled-runners/simple-assertions-runner.js +1 -0
  4. package/bundled-runners/versions.json +9 -0
  5. package/bundled-runners/voiden-advanced-auth-runner.js +1 -0
  6. package/bundled-runners/voiden-faker-runner.js +9 -0
  7. package/bundled-runners/voiden-graphql-runner.js +1 -0
  8. package/bundled-runners/voiden-rest-api-runner.js +1 -0
  9. package/bundled-runners/voiden-scripting-runner.js +397 -0
  10. package/bundled-runners/voiden-sockets-grpcs-runner.js +1 -0
  11. package/dist/discovery.d.ts +11 -0
  12. package/dist/discovery.d.ts.map +1 -0
  13. package/dist/discovery.js +54 -0
  14. package/dist/discovery.js.map +1 -0
  15. package/dist/index.js +384 -112
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib.d.ts +19 -0
  18. package/dist/lib.d.ts.map +1 -0
  19. package/dist/lib.js +19 -0
  20. package/dist/lib.js.map +1 -0
  21. package/dist/mcpInstall.d.ts +48 -0
  22. package/dist/mcpInstall.d.ts.map +1 -0
  23. package/dist/mcpInstall.js +194 -0
  24. package/dist/mcpInstall.js.map +1 -0
  25. package/dist/plugins/community.d.ts.map +1 -1
  26. package/dist/plugins/community.js +9 -2
  27. package/dist/plugins/community.js.map +1 -1
  28. package/dist/plugins/loader.d.ts +1 -0
  29. package/dist/plugins/loader.d.ts.map +1 -1
  30. package/dist/plugins/loader.js +32 -18
  31. package/dist/plugins/loader.js.map +1 -1
  32. package/dist/plugins/registry.d.ts +11 -0
  33. package/dist/plugins/registry.d.ts.map +1 -1
  34. package/dist/plugins/registry.js +63 -10
  35. package/dist/plugins/registry.js.map +1 -1
  36. package/dist/plugins/registryCache.d.ts +2 -0
  37. package/dist/plugins/registryCache.d.ts.map +1 -1
  38. package/dist/plugins/registryCache.js.map +1 -1
  39. package/dist/plugins/store.d.ts +28 -1
  40. package/dist/plugins/store.d.ts.map +1 -1
  41. package/dist/plugins/store.js +46 -9
  42. package/dist/plugins/store.js.map +1 -1
  43. package/dist/plugins/updateCheck.d.ts +9 -4
  44. package/dist/plugins/updateCheck.d.ts.map +1 -1
  45. package/dist/plugins/updateCheck.js +29 -15
  46. package/dist/plugins/updateCheck.js.map +1 -1
  47. package/dist/plugins/versionInfo.d.ts +15 -0
  48. package/dist/plugins/versionInfo.d.ts.map +1 -0
  49. package/dist/plugins/versionInfo.js +18 -0
  50. package/dist/plugins/versionInfo.js.map +1 -0
  51. package/dist/resultBlock.d.ts +31 -0
  52. package/dist/resultBlock.d.ts.map +1 -0
  53. package/dist/resultBlock.js +121 -0
  54. package/dist/resultBlock.js.map +1 -0
  55. package/dist/runner.d.ts +11 -0
  56. package/dist/runner.d.ts.map +1 -1
  57. package/dist/runner.js +61 -2
  58. package/dist/runner.js.map +1 -1
  59. package/dist/runtimeVars.js +3 -3
  60. package/dist/runtimeVars.js.map +1 -1
  61. package/dist/skillContent.d.ts +8 -0
  62. package/dist/skillContent.d.ts.map +1 -0
  63. package/dist/skillContent.js +42 -0
  64. package/dist/skillContent.js.map +1 -0
  65. package/package.json +13 -2
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH;;;;;;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,CAiC/I;AAgED,wBAAsB,kBAAkB,CACtC,OAAO,UAAQ,EACf,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC,CAyEnB"}
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"}
@@ -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
- await new Promise((resolve, reject) => {
58
- const file = createWriteStream(destPath);
59
- https.get(asset.browser_download_url, { headers: { 'User-Agent': 'voiden-runner' } }, res => {
60
- res.pipe(file);
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
- // Runner bundles are downloaded on-demand from each plugin's GitHub repo.
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
- if (verbose)
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,qBAAqB;IACrB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QACxC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;YAC1F,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;IAEF,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,SAAS,mBAAmB,CAAC,IAAY;IACvC,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,0EAA0E;IAC1E,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,oDAAoD;QACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,sCAAsC,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,CAAA;YAC9F,MAAM,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACrF,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,wCAAwC,GAAG,CAAC,IAAI,aAAa,CAAC,CAAA;YACxF,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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -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;AAuBH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;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"}
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"}
@@ -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
- // Bundled runners pre-downloaded by cleanup.sh at Voiden build time
23
- function getBundledRunnerPath(pluginId) {
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', `${pluginId}-runner.js`),
26
- join(new URL('.', import.meta.url).pathname, '../../../bundled-runners', `${pluginId}-runner.js`),
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 p of candidates) {
29
- if (existsSync(p))
30
- return p;
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
- return !!getBundledRunnerPath(pluginId) || existsSync(getCoreRunnerPath(pluginId));
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 (existsSync(getCoreRunnerPath(pluginId)))
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":"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"}
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;CACvB;AAmDD;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAsB5D"}
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":"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"}
1
+ {"version":3,"file":"registryCache.js","sourceRoot":"","sources":["../../src/plugins/registryCache.ts"],"names":[],"mappings":"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"}
@@ -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
- export declare function uninstallPlugin(name: string): boolean;
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;CACjB;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,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAarE;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAapE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAYrE;AAED,wBAAgB,iBAAiB,IAAI,eAAe,EAAE,CAGrD;AAED,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAE1D"}
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"}
@@ -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 alreadyInstalled = !!store.installedPlugins[name];
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
- return readStore().installedPlugins[name]?.version;
68
+ const record = readStore().installedPlugins[name];
69
+ return record?.uninstalled ? undefined : record?.version;
58
70
  }
59
- export function uninstallPlugin(name) {
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
- if (!store.installedPlugins[name])
88
+ const existing = store.installedPlugins[name];
89
+ const wasInstalled = existing ? !existing.uninstalled : impliedInstalled;
90
+ if (!existing && !impliedInstalled)
62
91
  return false;
63
- delete store.installedPlugins[name];
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 true;
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":"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"}
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 installed plugin's recorded runner
3
- * version (store.ts) against the latest version published in the shared
4
- * plugin-registry (registryCache.ts). Used by `plugin update` and the
5
- * post-command update notice in index.ts.
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;;;;;GAKG;AAKH,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,CAsBzE"}
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 installed plugin's recorded runner
3
- * version (store.ts) against the latest version published in the shared
4
- * plugin-registry (registryCache.ts). Used by `plugin update` and the
5
- * post-command update notice in index.ts.
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
- for (const plugin of installed) {
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;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAShD,uEAAuE;AACvE,SAAS,OAAO,CAAC,MAAc,EAAE,SAAiB;IAChD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5D,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnB,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAA;IAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAErC,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAA;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpD,MAAM,OAAO,GAAuB,EAAE,CAAA;IACtC,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,SAAQ;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,MAAM,CAAC,IAAI;gBACf,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,gBAAgB,EAAE,MAAM,CAAC,OAAO;gBAChC,aAAa,EAAE,KAAK,CAAC,OAAO;aAC7B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
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"}