Releases: throwingogo-hub/chatgpt-delagger
Release list
GPT Delagger v1.6.1
What's Changed
- Prepare GPT Delagger for discovery and distribution by @throwingogo-hub in #3
Full Changelog: v1.6.0...v1.6.1
GPT Delagger v1.6.0
Fixes the intermittent "clicks do nothing" bug on chatgpt.com. If you have ever had a ChatGPT page look completely normal but ignore every click, this is why.
Fixed
Every version up to 1.5.1 physically detached old turns and tool embeds from the DOM, holding them in memory behind comment placeholders. ChatGPT is React, and React keeps references to the exact nodes it rendered. Take one out from under it and React's next removeChild or insertBefore against that node throws NotFoundError inside its commit phase — which React cannot recover from, so it tears the tree down. The page keeps its painted pixels and loses every event handler.
It was intermittent because it only fired when React reached back into a trimmed region: regenerating, editing an older message, switching branches, or streaming near a hidden embed.
Nothing is detached any more. Old turns and tool embeds stay mounted and are hidden with display:none — the browser skips them for layout and paint just as effectively, and React does not care.
| up to 1.5.1 | 1.6.0 | |
|---|---|---|
React removeChild on an old turn |
NotFoundError |
no error |
React insertBefore before an old turn |
NotFoundError |
no error |
| elements taken out of rendering | ~80% | ~83% |
| nodes detached from the DOM | 111 | 0 |
Faster, too
Keeping turns mounted removed a speed-up detaching had given by accident — old turns used to leave the document, so later scans were smaller. Turn discovery now reads its own tag back instead of re-deriving every turn each pass, and an already-hidden turn is never re-scanned. Net result on the 141-turn fixture, DOM queries during load:
| 1.4.0 | 1.5.0 | 1.5.1 | 1.6.0 |
|---|---|---|---|
| 1688 | 2486 | 1818 | 1028 |
Observer time while streaming stays at or below 1.4.0.
Changed
- Trimming and blocking hide rather than detach, so the placeholder machinery is gone: no comment markers, no off-DOM maps, no pruning, no restore-into-position. Turning a setting off drops an attribute. That is ~70 fewer lines and a class of ordering bugs removed.
- Keep newest embed reworked to track elements instead of placeholders. No behaviour change.
stats()counts hidden turns and embeds rather than detached ones.
Honest limits
Hidden turns still occupy memory, and React still reconciles them — that cost belongs to the page, with or without this extension, and the README no longer claims otherwise. Measurements come from the offline fixture: the element counts are exact, but they describe what the browser stops rendering, not an FPS or latency guarantee.
Install
Download gpt-delagger-v1.6.0.zip, unzip, then chrome://extensions → Developer mode → Load unpacked → pick the folder. Verify with gpt-delagger-v1.6.0.zip.sha256. Reload open ChatGPT tabs afterwards.
Full changelog: v1.5.1...v1.6.0
GPT Delagger v1.5.1
A performance fix. 1.5.0 was slower than 1.4.0 on chatgpt.com — the opposite of this extension's job. This puts it back.
Fixed
- The regression introduced in 1.5.0. The Keep newest embed feature is off by default, but it charged for itself anyway.
enforceToolKeepruns inside the MutationObserver callback, so on every mutation batch — including every streamed token — it ran a document-wide[data-gptdelag-keep]query across the live thread to answer a question whose answer, with the feature off, is always "nothing". Flagged embeds are now tracked in a set, so the off state costs nothing. blockToolNodehad the same shape: it searched each candidate's entire subtree for a keep flag that, with the feature off, exists nowhere.- Turn discovery no longer asks every ancestor to search its subtree for a composer that is never inside a turn. It walks up from the composer instead —
contains()costs the node's depth, not the thread's size. The exact check before detaching a turn is unchanged, so the input box is still guarded.
Measured
On the 140-turn fixture, per 100 streamed tokens, at default settings:
| 1.4.0 | 1.5.0 | 1.5.1 | |
|---|---|---|---|
| DOM queries while streaming | 507 | 639 | 508 |
| document-wide keep queries | 0 | 102 (one per batch) | 0 |
| DOM queries while loading | 1688 | 2486 | 1818 |
Query counts are exact. Observer-callback time on the same fixture put 1.5.0 at roughly 1.3–2.3x of 1.4.0 while streaming, with 1.5.1 at or below 1.4.0 in every run — that ratio is a fixture measurement, not a promise about any particular chat.
Behaviour
Unchanged. A differential harness ran 1.5.0 and 1.5.1 through ten scenarios — defaults, keep-newest on, the flag moving to a newer streamed embed, keep-newest off again, blocker off, extension disabled, keep-count 0, trimming off, and a single-message thread — and every one produces byte-identical DOM, with the composer intact throughout. Nothing to relearn; no settings change.
Install
Download gpt-delagger-v1.5.1.zip, unzip it, then chrome://extensions → enable Developer mode → Load unpacked → select the unzipped folder. Verify with gpt-delagger-v1.5.1.zip.sha256.
Full changelog: v1.5.0...v1.5.1
GPT Delagger v1.5.0
Make long ChatGPT conversations feel light again — now with a way to keep only the tool call that matters.
Added
- Keep newest embed: an optional mode for the blocker that keeps only the most recent tool/MCP embed mounted. Older embeds are detached behind reversible placeholders, and when a newer embed streams in, the swap happens in the same before-paint pass — no flicker.
Fixed
- Turn discovery now stops before
mainand before any composer element, so a one-message conversation can no longer tag or detach the page shell and input box as a "turn". - Show N more reveals exactly the batch size its label advertises.
- Toggling the extension off and on re-evaluates previously scanned turns instead of leaving old embeds visible.
- Removed synced setting keys fall back to defaults instead of
undefined. - Clearing the "keep last" box in the popup restores the previous value instead of silently hiding the whole chat.
- The offline fixture's live-connector and Chinese-chip regression turns were unreachable and never exercised their blocker paths; they now render, and the fixture gained a composer form.
Improved
- The popup header shows the installed extension version.
Install
- Download
gpt-delagger-v1.5.0.zipbelow and extract it to a permanent folder. - Open
chrome://extensions, enable Developer mode, choose Load unpacked, and select the folder.
SHA-256 of the zip is attached. Full details in CHANGELOG.md.
GPT Delagger v1.4.0
Make long ChatGPT threads feel light again
GPT Delagger v1.4.0 reduces browser-side rendering work in large conversations while keeping every optimization reversible.
Highlights
- Lightweight off-screen rendering with content-visibility
- Configurable 0–100 turn trimming with Show more and Show all restoration
- Conservative blocking for MCP apps, connector cards, tool-run UI, and image-loading frames
- Zap mode for reversible custom hide rules
- Storage-only Chrome permission, zero telemetry, zero network requests, and zero dependencies
Install
Download gpt-delagger-v1.4.0.zip, extract it, then load the extracted folder from chrome://extensions with Developer mode enabled.
Verification
ode test/logic-smoke.mjs passes on Node 24
- Release ZIP contains only runtime extension files
- SHA-256: