@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.
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +26 -0
- package/README.md +2 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- 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/src/telemetry.mjs +4 -3
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
|
[](https://www.npmjs.com/package/@minhspark/codex-mcp-bridge)
|
|
10
10
|
[](https://www.npmjs.com/package/@minhspark/codex-mcp-bridge)
|
|
11
|
+
[](https://www.npmcharts.com/compare/%40minhspark%2Fcodex-mcp-bridge?minimal=true)
|
|
12
|
+
[](https://github.com/buidangminh23/codex-mcp-bridge/network/dependents)
|
|
11
13
|
[](https://skills.sh/buidangminh23/codex-mcp-bridge/codex-bridge)
|
|
12
14
|
[](https://buidangminh23.github.io/codex-mcp-bridge/)
|
|
13
15
|
[](LICENSE)
|
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.21.
|
|
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.
|
|
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"];
|
package/src/claude-bridge.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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 ===
|
|
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
|
}
|