@webority/ensemble 0.5.24 → 0.5.25

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 (2) hide show
  1. package/lib/core.js +38 -1
  2. package/package.json +6 -6
package/lib/core.js CHANGED
@@ -579,6 +579,10 @@ function wireHooks() {
579
579
  if (enginePresent('omp')) {
580
580
  if (upsertOmpMcp(runtimeCmd)) report.push('omp:mcp');
581
581
  }
582
+ // Retiring an engine means removing what we installed for it, not just ceasing to write it —
583
+ // otherwise every machine wired before the retirement keeps pointing a dead engine at the runtime.
584
+ if (removeGeminiWiring()) report.push('gemini:removed');
585
+
582
586
  if (enginePresent('antigravity')) {
583
587
  // Prefer Claude-shaped global json if Antigravity is a Claude-family fork; also write local mcp.json.
584
588
  if (upsertJsonMcp(path.join(HOME, '.antigravity', 'mcp.json'), 'ensemble', runtimeCmd, ['mcp', '--engine', 'antigravity'])) {
@@ -872,6 +876,39 @@ function writeGrokRules() {
872
876
  return wrote > 0;
873
877
  }
874
878
 
879
+ /// Gemini CLI is retired (discontinued product). Strip the MCP server we previously wrote into its
880
+ /// settings, leaving every other server and key untouched. Note this file belongs to Gemini CLI, not
881
+ /// to Antigravity — Antigravity merely shares the ~/.gemini ROOT and keeps its own MCP config under
882
+ /// ~/.antigravity/mcp.json, so removing our entry here cannot unwire Antigravity.
883
+ /// Returns true only when something was actually removed, so a clean machine reports nothing.
884
+ function removeGeminiWiring(file = path.join(HOME, '.gemini', 'settings.json')) {
885
+ if (!fs.existsSync(file)) return false;
886
+
887
+ let j;
888
+ try { j = JSON.parse(fs.readFileSync(file, 'utf8')); }
889
+ catch (e) { return skipMalformedJson(file, 'Gemini settings (~/.gemini/settings.json)', e); }
890
+ if (!j || typeof j !== 'object' || !j.mcpServers || typeof j.mcpServers !== 'object') return false;
891
+
892
+ let removed = false;
893
+ for (const name of ['ensemble', 'ensemble-bus']) {
894
+ const entry = j.mcpServers[name];
895
+ // Only ever remove OUR entry — a same-named server pointing elsewhere belongs to the user.
896
+ if (entry && isEnsembleHook(entry.command)) {
897
+ delete j.mcpServers[name];
898
+ removed = true;
899
+ }
900
+ }
901
+ if (!removed) return false;
902
+
903
+ try {
904
+ fs.writeFileSync(file, JSON.stringify(j, null, 2) + '\n');
905
+ return true;
906
+ } catch (e) {
907
+ warn('could not remove the retired Gemini MCP entry from ' + file + ': ' + (e.message || e));
908
+ return false;
909
+ }
910
+ }
911
+
875
912
  // OpenCode has no JSON hooks file at all — its lifecycle surface is a JS plugin (`Hooks` from
876
913
  // @opencode-ai/plugin), so the bus is wired by writing one. Verified against the installed package's
877
914
  // own types (node_modules/@opencode-ai/{plugin,sdk}): `chat.message` fires per user turn and carries
@@ -1231,5 +1268,5 @@ module.exports = {
1231
1268
  sleep, openBrowser, startDevice, pollDevice, finishSetup, assertSupported,
1232
1269
  runtimePaths, runtimeBin, runtimeInstalled, requireRuntime, ensureRuntime,
1233
1270
  isUsableBinary, removeLegacyBusArtifacts, MIN_BINARY_BYTES,
1234
- writeEngineHooks, writeGrokRules, writeAntigravityHooks, writeOpenCodePlugin, upsertTomlMcp, installedVersionCurrent, readInstalledVersion, PKG_VERSION,
1271
+ writeEngineHooks, writeGrokRules, writeAntigravityHooks, writeOpenCodePlugin, removeGeminiWiring, upsertTomlMcp, installedVersionCurrent, readInstalledVersion, PKG_VERSION,
1235
1272
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webority/ensemble",
3
- "version": "0.5.24",
3
+ "version": "0.5.25",
4
4
  "description": "Connect this machine to Ensemble — runs the local agent runner and wires the ensemble session bus so your coding sessions talk (per-org, isolated).",
5
5
  "bin": {
6
6
  "ensemble": "bin/ensemble.js"
@@ -12,11 +12,11 @@
12
12
  "node": ">=18"
13
13
  },
14
14
  "optionalDependencies": {
15
- "@webority/ensemble-darwin-arm64": "0.5.24",
16
- "@webority/ensemble-darwin-x64": "0.5.24",
17
- "@webority/ensemble-linux-arm64": "0.5.24",
18
- "@webority/ensemble-linux-x64": "0.5.24",
19
- "@webority/ensemble-win-x64": "0.5.24"
15
+ "@webority/ensemble-darwin-arm64": "0.5.25",
16
+ "@webority/ensemble-darwin-x64": "0.5.25",
17
+ "@webority/ensemble-linux-arm64": "0.5.25",
18
+ "@webority/ensemble-linux-x64": "0.5.25",
19
+ "@webority/ensemble-win-x64": "0.5.25"
20
20
  },
21
21
  "files": [
22
22
  "bin",