@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.
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +16 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/install-background-relay.mjs +14 -5
- package/scripts/install-native-relay.mjs +1 -1
- package/src/claude-bridge.mjs +1 -1
- package/src/index.mjs +1 -1
- package/src/native-relay-companion.mjs +1 -1
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
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.
|
|
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
|
|
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.
|
|
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"];
|
package/src/claude-bridge.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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) {
|