Skip to content

Releases: throwingogo-hub/chatgpt-delagger

GPT Delagger v1.6.1

Choose a tag to compare

@github-actions github-actions released this 26 Jul 07:35
8eb468f

What's Changed

Full Changelog: v1.6.0...v1.6.1

GPT Delagger v1.6.0

Choose a tag to compare

@throwingogo-hub throwingogo-hub released this 17 Jul 13:02
3cc4305

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

Choose a tag to compare

@throwingogo-hub throwingogo-hub released this 17 Jul 05:32
e21d9ec

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. enforceToolKeep runs 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.
  • blockToolNode had 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

Choose a tag to compare

@throwingogo-hub throwingogo-hub released this 17 Jul 04:13

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 main and 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

  1. Download gpt-delagger-v1.5.0.zip below and extract it to a permanent folder.
  2. 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

Choose a tag to compare

@throwingogo-hub throwingogo-hub released this 15 Jul 17:01

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: