@youdie006/prodex 0.40.21 → 0.40.22

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.
@@ -5098,7 +5098,23 @@ export function attachmentStateExpression(fileNames) {
5098
5098
  .map((el) => (el.getAttribute("aria-label") || el.getAttribute("title") || el.getAttribute("alt") || ""))
5099
5099
  .join(String.fromCharCode(10));
5100
5100
  const haystack = text + String.fromCharCode(10) + labels;
5101
- const present = names.filter((name) => haystack.includes(name));
5101
+ // Uploading a name that was used before makes ChatGPT show it as
5102
+ // "stem(3).ext", so that spelling counts as the same file.
5103
+ const shownAsRenamed = (name) => {
5104
+ const dot = name.lastIndexOf(".");
5105
+ const stem = dot > 0 ? name.slice(0, dot) : name;
5106
+ const ext = dot > 0 ? name.slice(dot) : "";
5107
+ let from = 0;
5108
+ while ((from = haystack.indexOf(stem + "(", from)) !== -1) {
5109
+ let i = from + stem.length + 1;
5110
+ const digitsStart = i;
5111
+ while (i < haystack.length && haystack[i] >= "0" && haystack[i] <= "9") i += 1;
5112
+ if (i > digitsStart && haystack.startsWith(")" + ext, i)) return true;
5113
+ from += 1;
5114
+ }
5115
+ return false;
5116
+ };
5117
+ const present = names.filter((name) => haystack.includes(name) || shownAsRenamed(name));
5102
5118
  const attachedFiles = [...document.querySelectorAll('input[type="file"]')]
5103
5119
  .reduce((total, el) => total + (el.files ? el.files.length : 0), 0);
5104
5120
  // A visible progressbar means a file is still going up; sending now would
package/docs/releasing.md CHANGED
@@ -16,6 +16,58 @@ 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
+ ## Browser Container Rebuild 2026-10-01
20
+
21
+ The container image was rebuilt again from `feat/headless-browser-compatibility` `b5eac7d` with uncommitted patches. None of them is pushed to that branch; they still have to be reconciled when that branch merges with `main`.
22
+
23
+ **Patches**
24
+ - The streaming selector from 2026-09-30.
25
+ - The new-chat wait raised from 8 s to 15 s.
26
+ - The non-text (image) answer detection from 0.40.21, adapted to the branch's message reader.
27
+ - The renamed-upload attachment fix from this change.
28
+
29
+ **Image and checks**
30
+ - Image `sha256:d2880fda5ab9`.
31
+ - Full suite 1989 passed on the patched tree.
32
+ - Each container swap was gated on the send lock being free (lock file absent, or its holder pid dead). The 2026-09-30 check only looked at process names.
33
+
34
+ **Verified live in the container after the swap**
35
+ - Three fresh-chat sends in a row answered, 35-36 s each; this flow failed about one send in three before the patch.
36
+ - A create-image send returned the non-text note in 49 s, where it had timed out after 6 min 40 s.
37
+ - The same file attached twice in a row answered `plum-7` both times. Before the fix, the second upload, shown by ChatGPT as `attach-probe(3).txt`, waited out the upload budget.
38
+ - An MCP `initialize` through `scripts/container-client.mjs` answered (server reports 0.40.18, the branch's version).
39
+
40
+ **Impact on clients**
41
+ - Clients connected to the container's MCP have to reconnect after each swap.
42
+
43
+ ## Browser Container Rebuild 2026-09-30
44
+
45
+ Not an npm release; the container `prodex-browser-browser-1` builds from `feat/headless-browser-compatibility`, so this section records its state.
46
+
47
+ A live check of the container build of `b5eac7d` (2026-09-30) found: web search and temporary chats answered; fresh-chat sends failed intermittently with `fresh_chat_not_ready`; `--attach` failed on the upload budget; a create-image send timed out after 6 min 40 s; and streaming was never detected (15 of 15 samples reported idle while ChatGPT showed its Stop button), because the branch's `CHATGPT_STREAMING_SELECTOR` does not match the redesigned composer's plain `aria-label="Stop"` button.
48
+
49
+ **Rebuild.** Image `sha256:45951848a88b`, built from `b5eac7d` plus one uncommitted line: `CHATGPT_STREAMING_SELECTOR` gained `form button[aria-label="Stop"]` and `form button[aria-label="중지"]`, the same selectors `main` shipped in 0.40.21. Nothing was pushed to that branch; the change lives only in the image. Verified: the selector is present in `/app/dist/chatgpt-browser.js`; container healthy with the profile volume kept; `pro browser login --wait` found the session READY; a fresh-chat send answered in 20 s while a 1 s sampler read the page as generating on all 9 samples during which the Stop button was visible (task `task_20260930_014256`).
50
+
51
+ **Interrupted consult.** The swap at about 01:37 UTC interrupted a consult that another session had started over MCP at 01:34:31 (`task_20260930_013431`, left `claimed` with no thread), and dropped every client's MCP connection to the container; clients have to reconnect with `/mcp`. The pre-swap check only looked for `pro browser ask` processes and missed MCP consults. Before swapping the container again, check whether the send lock's holder process is alive, not the process names. Whether ChatGPT accepted that prompt was never recorded, so it must not be resent blindly.
52
+
53
+ **Still open on the branch, not fixed in this image.**
54
+
55
+ - Fresh-chat flake: the new-chat page took 5.2, 5.2, 5.6 and 8.5 s to become ready in four timed runs inside the container, while `waitForFreshChatGptPage` allows 8 s. The fix is a longer budget.
56
+ - `--attach` and create-image failures: `main` 0.40.21 has fixes for both.
57
+ - These belong to the branch owner and have to be reconciled when the branch merges with `main`.
58
+
59
+ ## 0.40.21 Release Record
60
+
61
+ Release commit `936b009` on `main` (cut after PR #10, merge `5e74ba2`); tag `v0.40.21`. `publish.yml` run 36538816944 passed all six platforms on the first attempt, then npm publish with SLSA v1 provenance and the GitHub Release (2026-09-29 08:08 UTC).
62
+
63
+ What it fixes: what 0.40.20 left broken after the ChatGPT redesign - sends starting on a fresh chat, composer tools, `--project-new`, image answers that timed out, and response streaming that was never detected. Found by a live feature matrix against the published 0.40.20; each fix re-run live before release. `--project-new` created a probe project in the user's account, which was deleted afterwards through the project's own actions menu after checking the menu belonged to that project; the other nine projects were compared by id and left intact.
64
+
65
+ Installation on 2026-09-29, global npm, each verified with `prodex --version` = 0.40.21:
66
+
67
+ - WSL, M3, Mac mini: installed. On WSL a fresh-chat consult through the installed binary answered (`v21-ok`). Running services were not restarted: 3 stdio MCP servers on WSL and 4 on M3 keep older code until their clients reconnect; the Mac mini had none.
68
+ - M4: not reachable (hostname does not resolve); not updated.
69
+ - The browser container still runs its own build of `feat/headless-browser-compatibility` `b5eac7d` (see 0.40.20); it was not rebuilt for this release.
70
+
19
71
  ## 0.40.20 Release Record
20
72
 
21
73
  Release commit `b8f8004` on `main` (cut after PR #9, merge `b134eae`); tag `v0.40.20`. `publish.yml` run 36522237267: the first attempt failed on macOS 15 Intel, where `tests/cli.test.ts` "uses an explicit --cwd target for doctor checks" exceeded its 30 s timeout on the slowest runner (full suite 9.5 min there; the same code had passed that runner in PR #9's CI, and no earlier failed CI run showed this test). Nothing was published by that attempt. Re-running the failed job passed all six platforms, then npm publish with SLSA v1 provenance and the GitHub Release (2026-09-29 05:18 UTC).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@youdie006/prodex",
3
- "version": "0.40.21",
3
+ "version": "0.40.22",
4
4
  "description": "Local receipt bus for coordinating Codex execution with ChatGPT Pro/Projects consultation.",
5
5
  "author": "youdie006",
6
6
  "license": "MIT",