@minhspark/codex-mcp-bridge 1.26.0 → 1.26.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-mcp-bridge",
3
- "version": "1.26.0",
3
+ "version": "1.26.1",
4
4
  "description": "Connect ChatGPT to your own Codex Desktop projects and conversations.",
5
5
  "author": {
6
6
  "name": "Bui Dang Minh"
package/CHANGELOG.md CHANGED
@@ -4,6 +4,22 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [SemVer](ht
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.26.1] - 2026-11-01
8
+
9
+ ### Upgrade
10
+
11
+ Update the package and reapply all managed client and background-service settings with the same command:
12
+
13
+ ```sh
14
+ npm install -g @minhspark/codex-mcp-bridge@latest --allow-scripts=@minhspark/codex-mcp-bridge --foreground-scripts
15
+ ```
16
+
17
+ Use `npm.cmd` in Windows PowerShell. Setup does not open apps or chats.
18
+
19
+ ### Fixed
20
+
21
+ - Read-only background-service checks validate the installed runtime environment. A normal terminal no longer reports a healthy service as unconfigured merely because npm added temporary entries to `PATH` during installation. Package, startup ownership and running-runtime identity checks remain in place.
22
+
7
23
  ## [1.26.0] - 2026-11-01
8
24
 
9
25
  ### Upgrade
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minhspark/codex-mcp-bridge",
3
- "version": "1.26.0",
3
+ "version": "1.26.1",
4
4
  "description": "Connect Claude, Codex, and Antigravity through MCP, with native Desktop handoffs and bridge-owned Antigravity CLI sessions.",
5
5
  "keywords": [
6
6
  "mcp",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "codex-mcp-bridge",
4
- "version": "1.26.0",
4
+ "version": "1.26.1",
5
5
  "description": "Connect ChatGPT to your own Codex Desktop projects and conversations.",
6
6
  "author": {
7
7
  "name": "Bui Dang Minh",
@@ -12,6 +12,7 @@ import { isMainModule, stableNodeBin } from "../src/install-paths.mjs";
12
12
  import { readRegularConfigFile } from "../src/project-policy.mjs";
13
13
 
14
14
  const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
15
+ const RUNTIME_ENVIRONMENT_KEYS = ["HOME", "PATH", "CODEX_HOME", "CLAUDE_CONFIG_DIR", "XDG_CONFIG_HOME"];
15
16
  const TASK_SCRIPT = String.raw`$ErrorActionPreference = 'Stop'
16
17
  $relayRequest = [Console]::In.ReadToEnd() | ConvertFrom-Json
17
18
  try {
@@ -178,7 +179,7 @@ function taskXml({ command, args, user, enabled }) {
178
179
 
179
180
  function savedEnvironment(env, config) {
180
181
  const result = { AGENT_RELAY_DIRECTORY: config.paths.root, AGENT_RELAY_SERVICE_OWNER: RELAY_SERVICE_OWNER };
181
- for (const name of ["HOME", "PATH", "CODEX_HOME", "CLAUDE_CONFIG_DIR", "XDG_CONFIG_HOME"]) {
182
+ for (const name of RUNTIME_ENVIRONMENT_KEYS) {
182
183
  if (typeof env[name] === "string" && env[name] && !/[\u0000-\u001f\u007f]/.test(env[name])) result[name] = env[name];
183
184
  }
184
185
  return result;
@@ -359,25 +360,33 @@ export async function installBackgroundRelay({ env = process.env, platform = pro
359
360
  return { status: result?.status ?? result?.exitCode ?? 0, stdout: String(result?.stdout ?? "") };
360
361
  };
361
362
  const runtimeFile = path.join(config.paths.root, "service-runtime.json");
362
- const desiredRuntime = { schemaVersion: 1, owner: RELAY_SERVICE_OWNER, packageRoot: root, nodeExecutable: node, packageVersion,
363
- environment: Object.fromEntries(Object.entries(savedEnvironment(env, config)).filter(([name]) => !name.startsWith("AGENT_RELAY_"))) };
364
- const expectedRuntimeId = relayServiceRuntimeId(desiredRuntime);
365
363
  const readRuntime = () => {
366
364
  const raw = readRegularConfigFile(runtimeFile, { missing: true, maxBytes: 64 * 1024 });
367
365
  if (raw === null) return null;
368
366
  let value;
369
367
  try { value = JSON.parse(raw); } catch { throw installFailure("SERVICE_RUNTIME_INVALID"); }
370
368
  if (value?.schemaVersion !== 1 || value.owner !== RELAY_SERVICE_OWNER) throw installFailure("SERVICE_CONFIGURATION_CONFLICT");
369
+ if (value.environment !== undefined && (!value.environment || typeof value.environment !== "object" || Array.isArray(value.environment)
370
+ || Object.entries(value.environment).some(([name, entry]) => !RUNTIME_ENVIRONMENT_KEYS.includes(name)
371
+ || typeof entry !== "string" || !entry || /[\u0000-\u001f\u007f]/.test(entry)))) throw installFailure("SERVICE_RUNTIME_INVALID");
371
372
  return value;
372
373
  };
373
374
  const previousRuntime = readRuntime();
375
+ const installedEnv = check && previousRuntime ? {
376
+ ...Object.fromEntries(Object.entries(env).filter(([name]) => !RUNTIME_ENVIRONMENT_KEYS.includes(name))),
377
+ ...previousRuntime.environment,
378
+ } : env;
379
+ const desiredRuntime = { schemaVersion: 1, owner: RELAY_SERVICE_OWNER, packageRoot: root, nodeExecutable: node, packageVersion,
380
+ environment: check && previousRuntime ? previousRuntime.environment ?? {}
381
+ : Object.fromEntries(Object.entries(savedEnvironment(env, config)).filter(([name]) => !name.startsWith("AGENT_RELAY_"))) };
382
+ const expectedRuntimeId = relayServiceRuntimeId(desiredRuntime);
374
383
  const runtimeChanged = JSON.stringify(previousRuntime) !== JSON.stringify(desiredRuntime);
375
384
  const prepareRuntime = async () => {
376
385
  if (JSON.stringify(readRuntime()) !== JSON.stringify(previousRuntime)) throw installFailure("SERVICE_CONFIGURATION_CHANGED");
377
386
  if (runtimeChanged) writeRelayJson(runtimeFile, desiredRuntime);
378
387
  if (JSON.stringify(readRuntime()) !== JSON.stringify(desiredRuntime)) throw installFailure("SERVICE_READBACK_FAILED");
379
388
  };
380
- const context = { env, config, root, node, service, label, invoke, mutate: !dryRun && !check, uid, nativeRun: run === execute, prepareRuntime };
389
+ const context = { env: installedEnv, config, root, node, service, label, invoke, mutate: !dryRun && !check, uid, nativeRun: run === execute, prepareRuntime };
381
390
  const installed = await ({ win32: installWindows, darwin: installMac, linux: installLinux })[platform](context);
382
391
  installed.configured = installed.configured && JSON.stringify(readRuntime()) === JSON.stringify(desiredRuntime);
383
392
  const result = { ...base, ...installed, dryRun, deliveryEnabled: installed.enabled, liveVerified: false,
@@ -25,7 +25,7 @@ import { removeRelayFile } from "../src/native-relay-files.mjs";
25
25
 
26
26
  exitForVersionRequest(import.meta.url);
27
27
 
28
- const VERSION = "1.26.0";
28
+ const VERSION = "1.26.1";
29
29
  const root = stableInstallPath(path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."));
30
30
  const entry = path.join(root, "src", "mcp-supervisor.mjs");
31
31
  const entryArgs = ["native-relay-companion.mjs"];
@@ -31,7 +31,7 @@ import { BACKGROUND_WORKER_GUIDANCE, registerBackgroundTools } from "./backgroun
31
31
 
32
32
  exitForVersionRequest(import.meta.url);
33
33
 
34
- const VERSION = "1.26.0";
34
+ const VERSION = "1.26.1";
35
35
  void import("./telemetry.mjs").then(({ startUsageReporting }) => startUsageReporting({ version: VERSION })).catch(() => {});
36
36
  const FORWARD_MIN_INTERVAL_MS = 5000;
37
37
  const FORWARD_MAX_PER_SESSION = 50;
package/src/index.mjs CHANGED
@@ -44,7 +44,7 @@ import { BACKGROUND_WORKER_GUIDANCE, registerBackgroundTools } from "./backgroun
44
44
 
45
45
  exitForVersionRequest(import.meta.url);
46
46
 
47
- const VERSION = "1.26.0";
47
+ const VERSION = "1.26.1";
48
48
  void import("./telemetry.mjs").then(({ startUsageReporting }) => startUsageReporting({ version: VERSION })).catch(() => {});
49
49
  const log = (msg) => process.stderr.write(`[codex-mcp-bridge] ${msg}\n`);
50
50
 
@@ -43,7 +43,7 @@ import { remoteCodexSocketPath, remoteNativeAdapter, remoteRequestResponse } fro
43
43
 
44
44
  exitForVersionRequest(import.meta.url);
45
45
 
46
- const VERSION = "1.26.0";
46
+ const VERSION = "1.26.1";
47
47
  const log = (msg) => process.stderr.write(`[native-relay] ${msg}\n`);
48
48
 
49
49
  function errorResponse(code, message, sent, details) {