@youdie006/prodex 0.40.34 → 0.40.35

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.
@@ -6122,8 +6122,23 @@ const NORMALIZED_PROMPT_MATCH_CHARS = 120;
6122
6122
  // The composer can autolink a url before the send, storing "[url](url)" in
6123
6123
  // place of the bare url (measured 2026-10-07, under load).
6124
6124
  const AUTOLINKED_URL_PATTERN = /\[(https?:\/\/[^\]\s]+)\]\(\1\)/g;
6125
+ /**
6126
+ * ChatGPT displays a sent turn's HTML entities decoded (measured 2026-10-19:
6127
+ * "&amp; &lt;b&gt;" was shown as "& <b>"), so both sides are compared decoded.
6128
+ */
6129
+ function decodeHtmlEntities(value) {
6130
+ const named = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'", nbsp: " " };
6131
+ return value.replace(/&(#x[0-9a-f]+|#\d+|[a-z]+);/gi, (entity, body) => {
6132
+ const lower = body.toLowerCase();
6133
+ if (lower.startsWith("#")) {
6134
+ const code = lower.startsWith("#x") ? Number.parseInt(lower.slice(2), 16) : Number.parseInt(lower.slice(1), 10);
6135
+ return code > 0 && code <= 0x10ffff ? String.fromCodePoint(code) : entity;
6136
+ }
6137
+ return named[lower] ?? entity;
6138
+ });
6139
+ }
6125
6140
  function normalizeChatGptPromptText(value) {
6126
- const unescaped = value.replace(AUTOLINKED_URL_PATTERN, "$1").replace(/\\([\\`*_{}[\]()#+\-.!>~|])/g, "$1");
6141
+ const unescaped = decodeHtmlEntities(value).replace(AUTOLINKED_URL_PATTERN, "$1").replace(/\\([\\`*_{}[\]()#+\-.!>~|])/g, "$1");
6127
6142
  const renderedFences = unescaped.replace(/(^|\r?\n)```text[ \t]*\r?\n([\s\S]*?)\r?\n```(?=\r?\n|$)/g, "$1text\n$2");
6128
6143
  return renderedFences.replace(/\s+/g, " ").trim();
6129
6144
  }
@@ -6154,7 +6169,7 @@ export function chatGptRequestMatchesUserTurn(userText, sentPrompt, requestId) {
6154
6169
  return withoutFenceLines(userText).includes(withoutFenceLines(sentPrompt));
6155
6170
  }
6156
6171
  function withoutFenceLines(value) {
6157
- return value
6172
+ return decodeHtmlEntities(value)
6158
6173
  .replace(AUTOLINKED_URL_PATTERN, "$1")
6159
6174
  .replace(/\\([\\`*_{}[\]()#+\-.!>~|])/g, "$1")
6160
6175
  .replace(/^[ \t]*```[\w-]*[ \t]*$/gm, "")
package/docs/releasing.md CHANGED
@@ -16,6 +16,25 @@ Release target: `v0.40.13` on `main`. The GitHub Release records the resolved co
16
16
 
17
17
  The release adds a guarded, opt-in transition and more accurate blocker reporting. It does not claim that headless Pro consultation is verified on either deployment target or that authentication can be retained indefinitely.
18
18
 
19
+ ## 0.40.34 Release Record
20
+
21
+ Release commit `574e5f0` on `main` (cut after PR #28, merge `1d93de4`); tag `v0.40.34`.
22
+
23
+ **Publishing**
24
+ - `publish.yml` run 39201678797 passed all six platforms on the first attempt, then npm publish with SLSA v1 provenance and the GitHub Release (2026-10-19 04:52 UTC).
25
+ - `npm run release:verify` passed on the release commit after a build.
26
+
27
+ **Installed**
28
+ - WSL, M3, Mac mini: `prodex --version` reports 0.40.34. Running services were not restarted: 10 stdio MCP servers on WSL and 2 on M3 keep older code until their clients reconnect. The Mac mini had none running.
29
+ - The maintainer watchdog checkout was pulled to `574e5f0` and rebuilt.
30
+
31
+ **Verified live**
32
+ - Host, installed 0.40.34: `--model "GPT-5.6 Sol" --effort Pro` and then `--model GPT-6 --effort Pro` both answered; the picker ended on GPT-6, 5/5 Pro. Installed 0.40.33 had refused the Sol selection ("another element covers its click point").
33
+ - Before the fix, on ChatGPT build `bfc3a09a` the host matrix passed: `--continue-task`, `--temporary`, `--tool web-search`, `--attach`, `--project`, `recover --request-id`, `--effort High`, `--model Pro`.
34
+
35
+ **Browser container**
36
+ - `container/redesign-patches` `ab1c6e1` ports PR #28. Image `a3746b490dbb`; branch suite 2038 passed, 3 skipped. Swapped under the send lock check; the ChatGPT tab opened on its own. Live: GPT-5.6 Sol then GPT-6 Pro both answered.
37
+
19
38
  ## 0.40.33 Release Record
20
39
 
21
40
  Release commit `0497134` on `main` (cut after PR #27, merge `6083c6a`); tag `v0.40.33`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@youdie006/prodex",
3
- "version": "0.40.34",
3
+ "version": "0.40.35",
4
4
  "description": "Local receipt bus for coordinating Codex execution with ChatGPT Pro/Projects consultation.",
5
5
  "author": "youdie006",
6
6
  "license": "MIT",