@minhspark/codex-mcp-bridge 1.13.8 → 1.13.9

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/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [SemVer](ht
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.13.9] - 2026-09-07
8
+
9
+ ### Fixed
10
+
11
+ - Restore reply correlation for queued messages from Claude Code 2.1.229 and 2.1.237, where `source_uuid` is unrelated to the peer message ID. Version 1.13.8 incorrectly rejected that valid legacy format. Use the matching peer `origin.msg_id` as the authoritative identifier while retaining duplicate-root, non-peer, command-boundary, and malformed-record guards. Regression coverage reproduces both legacy builds and rejects correlation through the unrelated source UUID.
12
+
7
13
  ## [1.13.8] - 2026-09-07
8
14
 
9
15
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minhspark/codex-mcp-bridge",
3
- "version": "1.13.8",
3
+ "version": "1.13.9",
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",
@@ -20,7 +20,7 @@ import { exitForVersionRequest } from "../src/cli-version.mjs";
20
20
 
21
21
  exitForVersionRequest(import.meta.url);
22
22
 
23
- const VERSION = "1.13.8";
23
+ const VERSION = "1.13.9";
24
24
  const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
25
25
  const entry = path.join(root, "src", "native-relay-companion.mjs");
26
26
  const serverName = process.env.CODEX_NATIVE_RELAY_NAME ?? "codex-native-relay";
@@ -18,7 +18,7 @@ import { ReplyForwarder } from "./reply-forwarder.mjs";
18
18
 
19
19
  exitForVersionRequest(import.meta.url);
20
20
 
21
- const VERSION = "1.13.8";
21
+ const VERSION = "1.13.9";
22
22
  const FORWARD_MIN_INTERVAL_MS = 5000;
23
23
  const FORWARD_MAX_PER_SESSION = 50;
24
24
 
package/src/index.mjs CHANGED
@@ -29,7 +29,7 @@ import { createRuntimeState } from "./runtime-state.mjs";
29
29
 
30
30
  exitForVersionRequest(import.meta.url);
31
31
 
32
- const VERSION = "1.13.8";
32
+ const VERSION = "1.13.9";
33
33
  const log = (msg) => process.stderr.write(`[codex-mcp-bridge] ${msg}\n`);
34
34
 
35
35
  /**
@@ -23,7 +23,7 @@ import { exitForVersionRequest } from "./cli-version.mjs";
23
23
 
24
24
  exitForVersionRequest(import.meta.url);
25
25
 
26
- const VERSION = "1.13.8";
26
+ const VERSION = "1.13.9";
27
27
  const log = (msg) => process.stderr.write(`[native-relay] ${msg}\n`);
28
28
 
29
29
  function errorResponse(code, message) {
@@ -289,8 +289,9 @@ export function readTranscript(sessionId, cwd, limit = 10) {
289
289
  * recipient starts a new turn with a user entry whose uuid is the message id
290
290
  * (origin.msg_id names it as well). A busy recipient absorbs the message into
291
291
  * the running turn instead: the entry is a queued_command attachment under a
292
- * fresh uuid whose source_uuid is the message id, and the reply is that
293
- * turn's closing text. Both were measured on Claude Code 2.1.260-2.1.263.
292
+ * fresh uuid, and the reply is that turn's closing text. The peer origin's
293
+ * msg_id identifies the message; source_uuid is unrelated on 2.1.229-2.1.237
294
+ * and equals the message id on the measured 2.1.260-2.1.263 builds.
294
295
  */
295
296
  function injectedMessageRoot(entry, msgId) {
296
297
  if (typeof entry.uuid !== "string" || !entry.uuid.trim()) return null;
@@ -300,8 +301,7 @@ function injectedMessageRoot(entry, msgId) {
300
301
  if (entry.uuid === msgId || matchesOrigin(entry.origin)) return "idle";
301
302
  }
302
303
  const attachment = entry.type === "attachment" ? entry.attachment : null;
303
- if (attachment?.type === "queued_command" && matchesOrigin(attachment.origin)
304
- && (attachment.source_uuid === undefined || attachment.source_uuid === msgId)) return "absorbed";
304
+ if (attachment?.type === "queued_command" && matchesOrigin(attachment.origin)) return "absorbed";
305
305
  return null;
306
306
  }
307
307