@minhspark/codex-mcp-bridge 1.21.1 → 1.21.3

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.21.1",
3
+ "version": "1.21.3",
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,32 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [SemVer](ht
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.21.3] - 2026-10-10
8
+
9
+ ### Changed
10
+
11
+ - Replace the large README download chart with compact monthly npm downloads and dependent repository badges. The badges link to npmcharts and GitHub dependents.
12
+ - Stop publishing the unused download chart to the analytics branch; the dashboard and archived daily download history remain available.
13
+
14
+ ### Upgrade notes
15
+
16
+ - MCP behavior is unchanged. The next repository analytics refresh removes the old chart asset from the analytics branch.
17
+
18
+ ## [1.21.2] - 2026-10-10
19
+
20
+ ### Added
21
+
22
+ - Show an npm download trend in the repository README, with links to the interactive npmcharts view and GitHub dependents.
23
+ - Publish a source-dated trend SVG from the existing hourly analytics history. Distinguish unavailable data from a reported zero and label stale sources at generation time.
24
+
25
+ ### Fixed
26
+
27
+ - Preserve a telemetry lock replaced by another writer on Windows even when rapid file creation gives both locks the same reported file identity and birth time.
28
+
29
+ ### Upgrade notes
30
+
31
+ - MCP behavior is unchanged. The repository analytics workflow publishes the new SVG after this release reaches `main`.
32
+
7
33
  ## [1.21.1] - 2026-10-07
8
34
 
9
35
  ### Fixed
package/README.md CHANGED
@@ -8,6 +8,8 @@ Local Desktop handoff guides: [daily workflow and directory verification](docs/d
8
8
 
9
9
  [![npm](https://img.shields.io/npm/v/@minhspark/codex-mcp-bridge?logo=npm&color=CB3837)](https://www.npmjs.com/package/@minhspark/codex-mcp-bridge)
10
10
  [![npm downloads](https://img.shields.io/npm/dt/@minhspark/codex-mcp-bridge?logo=npm&label=npm%20downloads&color=CB3837)](https://www.npmjs.com/package/@minhspark/codex-mcp-bridge)
11
+ [![npm downloads / month](https://img.shields.io/npm/dm/@minhspark/codex-mcp-bridge?logo=npm&label=npm%20downloads%20%2F%20month&color=CB3837)](https://www.npmcharts.com/compare/%40minhspark%2Fcodex-mcp-bridge?minimal=true)
12
+ [![Used by repositories (Libraries.io)](https://img.shields.io/librariesio/dependent-repos/npm/@minhspark/codex-mcp-bridge?label=Used%20by&logo=github&color=0969da)](https://github.com/buidangminh23/codex-mcp-bridge/network/dependents)
11
13
  [![skills.sh installs](https://skills.sh/b/buidangminh23/codex-mcp-bridge?label=skills.sh)](https://skills.sh/buidangminh23/codex-mcp-bridge/codex-bridge)
12
14
  [![GitHub views / source window](https://raw.githubusercontent.com/buidangminh23/codex-mcp-bridge/analytics/stats-github-views.svg)](https://buidangminh23.github.io/codex-mcp-bridge/)
13
15
  [![license](https://img.shields.io/npm/l/@minhspark/codex-mcp-bridge)](LICENSE)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minhspark/codex-mcp-bridge",
3
- "version": "1.21.1",
3
+ "version": "1.21.3",
4
4
  "description": "Two-way MCP bridge between Claude and Codex: prompts into a live Codex thread, messages into a running Claude Code session.",
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.21.1",
4
+ "version": "1.21.3",
5
5
  "description": "Connect ChatGPT to your own Codex Desktop projects and conversations.",
6
6
  "author": {
7
7
  "name": "Bui Dang Minh",
@@ -23,7 +23,7 @@ import { enableCodexFullAccess, fullAccessEnabled } from "../src/codex-full-acce
23
23
 
24
24
  exitForVersionRequest(import.meta.url);
25
25
 
26
- const VERSION = "1.21.1";
26
+ const VERSION = "1.21.3";
27
27
  const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
28
28
  const entry = path.join(root, "src", "mcp-supervisor.mjs");
29
29
  const entryArgs = ["native-relay-companion.mjs"];
@@ -29,7 +29,7 @@ import { registerProjectOnboardingTools } from "./project-onboarding-tools.mjs";
29
29
 
30
30
  exitForVersionRequest(import.meta.url);
31
31
 
32
- const VERSION = "1.21.1";
32
+ const VERSION = "1.21.3";
33
33
  void import("./telemetry.mjs").then(({ startUsageReporting }) => startUsageReporting({ version: VERSION })).catch(() => {});
34
34
  const FORWARD_MIN_INTERVAL_MS = 5000;
35
35
  const FORWARD_MAX_PER_SESSION = 50;
package/src/index.mjs CHANGED
@@ -39,7 +39,7 @@ import { PROJECT_SETUP_TOOLS, registerProjectOnboardingTools } from "./project-o
39
39
 
40
40
  exitForVersionRequest(import.meta.url);
41
41
 
42
- const VERSION = "1.21.1";
42
+ const VERSION = "1.21.3";
43
43
  void import("./telemetry.mjs").then(({ startUsageReporting }) => startUsageReporting({ version: VERSION })).catch(() => {});
44
44
  const log = (msg) => process.stderr.write(`[codex-mcp-bridge] ${msg}\n`);
45
45
 
@@ -36,7 +36,7 @@ import { NativeCreationReceipts, creationIdValid } from "./native-creation-recei
36
36
 
37
37
  exitForVersionRequest(import.meta.url);
38
38
 
39
- const VERSION = "1.21.1";
39
+ const VERSION = "1.21.3";
40
40
  const log = (msg) => process.stderr.write(`[native-relay] ${msg}\n`);
41
41
 
42
42
  function errorResponse(code, message, sent) {
package/src/telemetry.mjs CHANGED
@@ -51,11 +51,12 @@ async function locked(directory, action) {
51
51
  throw new Error('Telemetry settings are busy. Locks never expire automatically; inspect active telemetry processes before repairing a leftover lock.');
52
52
  }
53
53
  let owned;
54
- try { owned = await lock.stat(); return await action(); }
54
+ const token = randomUUID();
55
+ try { await lock.writeFile(token); owned = await lock.stat({ bigint: true }); return await action(); }
55
56
  finally {
56
57
  try {
57
- const current = await lstat(filename).catch(error => { if (error.code !== 'ENOENT') throw error; return null; });
58
- if (owned && current?.isFile() && !current.isSymbolicLink() && current.nlink === 1 && owned.dev === current.dev && owned.ino === current.ino && owned.birthtimeMs === current.birthtimeMs) await unlink(filename);
58
+ const current = await lstat(filename, { bigint: true }).catch(error => { if (error.code !== 'ENOENT') throw error; return null; });
59
+ if (owned && current?.isFile() && !current.isSymbolicLink() && current.nlink === 1n && owned.dev === current.dev && owned.ino === current.ino && owned.birthtimeNs === current.birthtimeNs && owned.ctimeNs === current.ctimeNs && owned.size === current.size) await unlink(filename);
59
60
  } finally { await lock.close(); }
60
61
  }
61
62
  }