Skip to content

Releases: DeerSpotter/ContextPort

ContextPort 2.10.18

Choose a tag to compare

@github-actions github-actions released this 21 Jul 03:15
c2e7a09

ContextPort 2.10.18

ContextPort 2.10.18 combines all product work merged since the published 2.10.3 release. This update focuses on large ChatGPT Work conversations, session recovery, native downloads, image saving, configurable performance controls, and recovery from failed ChatGPT JavaScript assets.

Highlights

Large ChatGPT Work conversations

  • Added a bounded Work session watchdog that offers a session preserving reload when ChatGPT remains noninteractive.
  • Improved startup positioning so long conversations can reach the newest available response while ChatGPT continues loading.
  • Added Progressive Chat Access with 1 through 12 access buckets and configurable recovery passes.
  • Added render buckets for testing visible conversation windows from 5 through 100 messages.
  • Restored responsive streaming performance by removing the indefinite whole document observer that reacted to every text update.
  • Preserved Follow Latest using a cached conversation scroll target and lower frequency checks.
  • Added a conversation scroll guard so ChatGPT Settings, the sidebar, menus, profile panels, drawers, and dialogs remain under manual user control instead of being forced to their bottom.
  • Preserved the manual Scroll to Bottom action for the conversation.

Complete optimization test matrix

ContextPort Settings now includes direct controls for:

  • Compatibility, Balanced, Aggressive, Extreme, and Diagnostic presets
  • recovery timing, access buckets, passes, and foreground or memory warning behavior
  • native WebView scrolling and indicators
  • Follow Latest timing and handoff thresholds
  • scroll target detection
  • conversation rendering and media pressure experiments
  • optional diagnostics
  • Reset All Optimization Settings, which restores the actual factory configuration

The controls remain available inside unsigned builds and can be tested independently instead of relying on one hardcoded memory configuration.

JavaScript asset recovery

  • Detects failed ChatGPT CDN JavaScript modules and module preloads.
  • Presents a Repair action only when a failed asset leaves the ChatGPT page stalled.
  • Retries the failed asset, warms the WebKit cache, and reloads the same conversation once without clearing the login or ContextPort Memory.
  • Adds bounded Developer Sources retries for transient timeouts using 30, 45, and 60 second attempts.
  • HTTP errors, invalid source text, oversized responses, and cancellation still fail immediately rather than looping.

Session restore and startup control

  • Checkpoints the exact authenticated provider and profile URL before iOS suspension.
  • Uses the lightweight checkpoint during WebView reconstruction so the most recent conversation wins over an older browser state snapshot.
  • Adds Settings → Startup → Restore Last Chat.
  • Turning Restore Last Chat off clears saved conversation URLs while preserving provider sign ins, cookies, local storage, saved profiles, and Memory.
  • Guest sessions remain temporary and are not checkpointed.

Downloads and image saving

  • PowerPoint attachments now download through the native WebKit download path instead of opening only in the embedded viewer.
  • Completed PowerPoint downloads open the iOS document export picker.
  • Added the required add only Photos privacy description so Save Image to Photos prompts for permission instead of terminating ContextPort.
  • No custom image downloader or broad page interception was added to the Photos fix.

Interface and privacy

  • Replaced separate Stop and Refresh controls with one compact menu containing Refresh, Stop, and Scroll to Bottom.
  • Keeps Save Context, Paste Context, or Attach Files directly visible in a narrow centered control.
  • Added Hide Logged In User Name for screen recording. The AI selector displays Current User without modifying the stored account name or session.
  • Added Buy the Developer a Coffee at the bottom of Settings.

Repository and release maintenance

  • Added a repository controlled Release Assistant that creates or updates draft releases using the repository GitHub token.
  • Hardened draft detection and records each completed release operation in a repository status file.
  • Updated the README for the current Work scrolling, PowerPoint, Photos, Memory, and Developer Mode behavior.
  • Documented a future server independent community discussion architecture. No community runtime is included in this build.

Important installation note

After installing the new IPA, fully close and relaunch ContextPort. ChatGPT WebView user scripts are installed when a new WebView process starts, so an already running process can continue using the previous scrolling behavior until the app is relaunched.

Version

  • Version: 2.10.18
  • Build: 98
  • Minimum iOS version: iOS 16
  • Release target: c2e7a09d7d7c7419809fc38403656635baf40835

Validation

  • The source controlled iOS 16 IPA workflow passed for the final PR #49 build 98 head before merge.
  • The Settings and sidebar scroll correction was physically confirmed after fully relaunching the installed IPA.
  • The release target includes 83 commits after the published 2.10.3 tag.
  • Rejected image save experiments from PRs #35 and #36 are not included.

Merged work since 2.10.3

  • PR #33: stalled ChatGPT Work session recovery
  • PR #34: newest message positioning and native PowerPoint downloads
  • PR #37: Save Image to Photos privacy crash correction
  • PR #38: README update for the accepted feature baseline
  • PR #39: compact chat controls and manual Scroll to Bottom
  • PR #40: active response Follow Latest behavior
  • PR #41: last conversation checkpoint before suspension
  • PR #42: developer support link and future community design
  • PR #43: restoration of fast Work scrolling
  • PR #44: Restore Last Chat preference
  • PR #45 and #46: repository controlled draft release support
  • PR #47: progressive access, optimization matrix, screen recording privacy, JavaScript repair, and Developer Sources timeout recovery
  • PR #49: protection against automatic scrolling inside ChatGPT Settings, sidebar, menus, and dialogs

Full comparison:

2.10.3...c2e7a09

Installation

The draft release does not publish automatically. Add the preferred unsigned IPA and any supporting artifacts, review the notes, then publish when ready. Existing signing and sideloading requirements remain unchanged.

ContextPort 2.10.12

Choose a tag to compare

@github-actions github-actions released this 19 Jul 15:02
a0cdea3

ContextPort 2.10.12

ContextPort 2.10.12 restores responsive long Work conversations and gives users direct control over whether the app reopens their last chat at startup.

Highlights

  • Restored fast ChatGPT Work scrolling by removing the indefinite whole-document mutation observer that reacted to every streamed text update.
  • Preserved Follow Latest behavior with a lightweight cached scroll target and lower-frequency checks.
  • Added Settings → Startup → Restore Last Chat.
  • Turning Restore Last Chat off clears saved conversation URLs while preserving account sign-ins, provider cookies, local storage, saved profiles, and Memory.
  • Added the developer support link in Settings.

Startup behavior

Restore Last Chat remains enabled by default. Users who prefer a clean provider home page at launch can turn it off without signing out.

Build

  • Version: 2.10.12
  • Build: 91
  • Minimum iOS version: iOS 16

Validation

Both ContextPort unsigned IPA workflows completed successfully for build 91 before merge.

Installation

Download the attached IPA after it is added to this release. Existing signing and sideloading requirements remain unchanged.

ContextPort 2.10.6

Choose a tag to compare

@DeerSpotter DeerSpotter released this 17 Jul 23:46
12dd785

ContextPort 2.10.6

Build 85

ContextPort 2.10.6 fixes a crash when saving images from ChatGPT to the iOS Photos library.

What changed

  • Save Image to Photos no longer crashes ContextPort.
  • ContextPort now requests the required iOS Photos permission before saving an image.
  • The normal system image-saving workflow remains unchanged.
  • No changes were made to provider sessions, Memory, Work chat scrolling, PowerPoint downloads, or Developer Mode.

After updating

The first time you select Save Image to Photos, iOS may ask for permission to add images to Photos. Choose Allow to complete the save.

This fix was physically validated using the released ContextPort behavior.

ContextPort 2.10.5 (Build 84)

Choose a tag to compare

@DeerSpotter DeerSpotter released this 16 Jul 00:29
a00d94b

ContextPort 2.10.5 (Build 84)

This small patch improves ChatGPT Work sessions and file downloads.

• Opens long Work chats at the newest message.
• Prevents unwanted jumps or reload-like behavior while the chat finishes loading.
• Keeps scrolling fast and responsive.
• Stops horizontal drifting and flicker.
• Downloads PowerPoint files instead of opening them in the embedded viewer.

Physically verified on iPhone.

ContextPort 2.10.4 (Build 83)

Choose a tag to compare

@DeerSpotter DeerSpotter released this 15 Jul 23:43
a007362

ContextPort 2.10.4 (Build 83)

This release improves ChatGPT Work sessions, especially long conversations that previously became difficult or impossible to navigate.

What Changed

• Restored reliable vertical scrolling in long ChatGPT conversations.
• Prevented the entire conversation from dragging like a single image.
• Locked horizontal movement to stop sideways drifting and flickering during diagonal swipes.
• Added recovery handling for ChatGPT Work sessions that remain stuck while loading.
• Preserved the existing ChatGPT login, cookies, and saved ContextPort Memory during recovery.
• Removed the broken ChatGPT message windowing behavior that was interfering with the current ChatGPT layout.

Performance Improvements

ChatGPT conversations now feel noticeably snappier and more responsive, especially in long Work sessions. Scrolling begins faster, touch movement feels more natural, and the conversation no longer stalls while older messages are being managed in the background.

User Impact

Users should now be able to open, read, and scroll through large ChatGPT Work sessions without the page freezing, rubber banding, sliding sideways, or flickering.

ContextPort 2.10.3

Choose a tag to compare

@DeerSpotter DeerSpotter released this 12 Jul 16:30
46f5a6e

ContextPort 2.10.3

Save Context Restored for ChatGPT and Claude

This release restores reliable conversation saving for ChatGPT and Claude and introduces custom naming when creating a new Memory.

What’s New

Custom Memory Names

When selecting Save as New Memory, ContextPort now:

  • Extracts and validates the conversation before creating the Memory.
  • Uses the existing AI chat title as the default Memory name.
  • Lets you replace the title with a custom name.
  • Provides a Use Chat Name button to restore the original detected title.
  • Prevents empty or whitespace-only Memory names from being saved.
  • Creates no Memory when the naming screen is canceled.

Adding a revision to an existing Memory continues to preserve the established Memory name.

ChatGPT Save Context Fixes

  • Restored authenticated conversation retrieval for current ChatGPT sessions.
  • Added support for the current access-token authorization flow.
  • Improved extraction of structured ChatGPT message content.
  • Preserved authenticated session cookies during conversation retrieval.

Claude Save Context Fixes

  • Added support for Claude’s current conversation and response containers.
  • Preserved compatibility with older Claude page layouts.
  • Improved message discovery inside supported shadow-root content.
  • Continued requiring verified user and assistant messages before saving.

Reliability Improvements

  • Provider extraction logic has been separated into smaller, maintainable modules.
  • Conversation validation remains fail-closed to prevent incomplete or incorrectly identified page content from being saved.
  • Existing Gemini, Grok, and DeepSeek Save Context behavior remains supported.

Version

  • Version: 2.10.3
  • Build: 82
  • Minimum iOS version: iOS 16

Installation

Download the unsigned IPA from the GitHub Actions artifacts and sign or install it using your normal iOS deployment method.

ContextPort 2.10.1

Choose a tag to compare

@DeerSpotter DeerSpotter released this 11 Jul 23:38
da1b0dc

ContextPort 2.10.1 — Build 80

Memory save progress is now visible

ContextPort now clearly shows when a large Memory ZIP is still being written.

After selecting Save Everything Discovered to Memory from the Live Interceptor, the Memory tab displays a red progress notice:

Please wait. Something is still being saved to Memory.

The notice remains visible until ZIP packaging finishes, the Memory attachment is installed, and the Memory list reloads.

More reliable Memory status

Previously, the unavailable Select button was the only indication that the new Memory had not finished saving. That behavior was an indirect result of the Memory list not being ready rather than a true save-progress signal.

Build 80 introduces a shared Memory write state so the Live Interceptor and Memory tab agree on exactly when saving begins and when it is complete.

Improvements

  • Added a red Memory save-progress warning.
  • Added a progress indicator during active Memory writes.
  • The warning remains visible when switching between tabs.
  • Select remains unavailable until the Memory list is ready.
  • Memory import and export are protected during active writes.
  • The warning clears only after the ZIP is installed and Memory reloads.
  • Overlapping Memory writes are tracked safely.
  • Existing Static Sources and Live Interceptor behavior remains unchanged.

Build information

  • Version: 2.10.1
  • Build: 80
  • Source commit: cc6083b1d00c88f8f44f6fac0c97573f97ee231b
  • IPA artifact ID: 8253820624
  • IPA SHA-256 digest: 7d38c1fe6c8c5786b8cc1e9c969da219c86cf843e1f958a2e53c7d343e5da534

Both canonical GitHub Actions workflows passed, including project generation, the complete Xcode archive, IPA packaging, and artifact uploads.

ContextPort 2.9.4 — DeepSeek Support and Staged Source Recovery

Choose a tag to compare

@DeerSpotter DeerSpotter released this 11 Jul 13:06
78c11fd

ContextPort 2.9.4 — DeepSeek Support and Staged Source Recovery

ContextPort 2.9.4 expands provider support, improves long-conversation reliability, and substantially rebuilds the Developer Sources workflow for safer, more complete source recovery.

This release includes DeepSeek Save Context support, improved ChatGPT conversation recovery, combined inline JavaScript capture, and a staged SourceMap workflow designed to avoid the crashes and memory spikes seen in earlier builds.

Highlights

DeepSeek Save Context

DeepSeek conversations can now be saved directly into ContextPort Memory.

The extractor uses source-backed DeepSeek role evidence instead of guessing message roles by position. User and assistant turns remain in their original order, and ambiguous rows are not assigned a fabricated role.

DeepSeek formatting now preserves:

  • Headings and paragraphs
  • Ordered and unordered lists
  • Blockquotes
  • Code blocks and inline code
  • Tables
  • Links
  • Bold and emphasized text
  • Explicit line breaks

This prevents DeepSeek responses from collapsing into a single wall of text.

Safer Developer Sources workflow

Developer Sources is now a fully manual, staged workflow. Opening the Dev area does not automatically start a source scan.

The static source inspector is divided into the following steps:

  1. Capture loaded browser sources
  2. Reconcile late runtime and bundler sources
  3. Follow one bounded nested dependency depth
  4. Discover, validate, and decode SourceMaps through three separate child stages

This separation reduces peak memory use and makes it easier to identify exactly where a provider-specific failure occurs.

Staged SourceMap recovery

SourceMap processing is now split into:

  • Step 4A — Discover SourceMaps
  • Step 4B — Validate SourceMaps
  • Step 4C — Decode Original Sources

Steps 1 through 3 no longer download .map files prematurely.

SourceMap discovery supports:

  • Browser-observed .map resources
  • SourceMap and X-SourceMap response headers
  • sourceMappingURL directives
  • Inline Base64 or percent-encoded JSON maps
  • Legacy asset.js.map fallback locations
  • Authenticated provider cookies
  • Referer and User-Agent forwarding
  • Signed URL query strings

Each candidate is validated independently. Failed candidates remain visible with their URL and failure reason instead of disappearing from the final capture.

When a valid map contains sourcesContent, ContextPort extracts the embedded original source files into individual searchable entries.

Combined inline JavaScript

Inline scripts are now displayed and exported as one Combined Inline JavaScript source per provider session.

ContextPort may still read large scripts internally in bounded pieces for stability, but those implementation chunks are no longer exposed to the user.

Original <script> element boundaries remain visible as comments inside the reconstructed combined source.

Improved ChatGPT conversation recovery

This release strengthens ChatGPT Save Context behavior for long and branched conversations.

Improvements include:

  • Complete active-branch recovery
  • Pagination support
  • Legacy mapping and current_node compatibility
  • Exclusion of inactive alternate branches
  • Reduced quadratic scanning behavior in long chats
  • More stable capture while ChatGPT is actively generating a response

Memory export reliability

The Developer Sources Memory ZIP now preserves the final source-capture stage.

Running Step 4C no longer erases Step 4A or Step 4B evidence when no SourceMaps validate. Successful maps, decoded originals, and failed candidates can coexist in the same final archive.

Capture safeguards

The source recovery engine uses bounded limits to reduce crashes while retaining useful evidence:

  • Up to 128 parent assets
  • Up to 128 SourceMap candidates
  • Up to 24 MB per SourceMap response
  • Up to 1,024 embedded original source entries
  • Up to 8 MB per original source
  • One map validated and decoded at a time
  • Temporary disk staging between validation and decoding
  • Shared retained-text memory budget

Resources that exceed a limit remain represented as metadata instead of silently disappearing.

Supported providers

The static source and context workflows support:

  • ChatGPT
  • Claude
  • Gemini
  • Grok
  • DeepSeek

Provider behavior can differ, particularly when a service does not publish SourceMaps or returns HTTP 404 for map files.

Validation

The source-controlled iOS build completed:

  • XcodeGen project generation
  • Unsigned Xcode archive
  • IPA packaging
  • IPA artifact upload
  • Generated Xcode project artifact upload

Build information:

  • Version: 2.9.4
  • Build: 77
  • Bundle identifier: com.deerspotter.ChatGPTWebView
  • Minimum iOS version: iOS 16
  • IPA SHA-256: 55dbbdf579ccdfcba48e717c0b125331b5f2a74891aba220204b41dac3171462

Testing requested

Before treating this build as fully accepted, testers should verify:

  • DeepSeek message roles and Markdown formatting
  • ChatGPT long-conversation responsiveness
  • Complete ChatGPT active-branch Save Context
  • One combined inline JavaScript source per provider
  • No premature SourceMap downloads during Steps 1 through 3
  • SourceMap candidate evidence after Step 4A
  • Validation successes and failures after Step 4B
  • Embedded original sources after Step 4C when available
  • Final Memory ZIP reflects the same completed stage visible in the app

Not included yet

Live request interception is not part of this release.

The planned Live Interceptor will be developed separately from the existing static source inspector so that continuous network recording cannot destabilize static source recovery.

Installation note

This build is distributed as an unsigned iOS IPA and requires the same sideloading or signing process used for previous ContextPort test builds.

Thank you to everyone testing provider-specific capture behavior and sharing physical-device Memory exports. Those captures directly informed the stability and source-recovery changes in this release.

ContextPort 2.8.0 - Share Context & Reliable Attachments

Choose a tag to compare

@DeerSpotter DeerSpotter released this 08 Jul 00:48
3612369

ContextPort 2.8.0

Share Context

Memory sharing has been redesigned around what ContextPort actually does.

The old Start New Chat workflow is now Share Context.

Choose where to share selected Memory:

  • ChatGPT
  • Claude
  • Gemini
  • Grok
  • Current Conversation

Selecting an AI provider continues to prepare the Memory context for a new conversation.

Selecting Current Conversation keeps the conversation already open and prepares the selected Memory for the existing Paste Context and Attach Files workflow.

No more leaving the conversation you are already working in just to add Memory.

Cleaner Memory Sharing UI

ContextPort now uses consistent terminology throughout Memory:

Share Context

Share With

Current Conversation

The remaining Start New Chat wording has been removed from the Memory workflow.

Large Developer Source Attachments

ContextPort can now hand off much larger Memory attachments, including Developer Mode source archives.

The previous upload bridge could reject combined attachments above an internal aggregate size boundary.

Attachments are now streamed into the WebView in smaller chunks and reconstructed as complete browser File objects.

This reduces retained memory pressure and allows large ContextPort Developer Sources ZIP archives to reach supported AI providers.

Reliable Attach Files State

Fixed an issue where files successfully attached to an AI conversation but the ContextPort button remained stuck on Attach Files.

ContextPort was waiting for the provider UI to display every full filename before considering the upload successful.

This produced a false failure even when the files had already reached the conversation.

ContextPort now validates the browser file handoff using the exact:

  • Filename
  • Byte size
  • MIME type

Once the browser has accepted the exact staged files, the pending attachment queue is cleared and the button returns to Save Context.

Provider UI detection remains available for paste and drag/drop fallback paths.

Provider UI Drift Detection

ContextPort now monitors the conversation UI structures used by Save Context.

Each provider extractor reports the UI markers it expects and the markers actually found.

ContextPort classifies extraction health as:

Healthy

The expected conversation structure matched. Context saves normally.

Safe Drift

The provider UI changed, but ContextPort still positively identified user and AI turns through a safe fallback.

Context can still save and ContextPort warns once for that UI change.

Unsafe Drift

ContextPort can no longer safely prove both sides of the conversation or detects a blocking challenge/interstitial.

Memory creation is blocked instead of saving questionable context.

The same detected UI change will not repeatedly alert on every Save Context attempt.

Developer Mode can be enabled directly from a drift warning so loaded provider sources can be captured for investigation.

Why This Matters

ContextPort Memory is designed to carry trusted context between AI conversations.

A visible export failure can be fixed.

Incorrect context saved silently into Memory can affect every future conversation that uses it.

ContextPort now validates the conversation boundary, monitors provider UI drift, supports large diagnostic source archives, and verifies attachment handoff before changing application state.

When ContextPort cannot safely prove the context is valid, it does not save it.


Thank you to everyone testing ContextPort on real devices and reporting exact behavior. The Claude exporter fix, provider UI drift monitor, large source attachment work, and attachment state correction all came directly from physical device testing.

Support continued ContextPort development:

https://buymeacoffee.com/spotterdeer

ContextPort 2.7.1 - Safer AI Context Capture

Choose a tag to compare

@DeerSpotter DeerSpotter released this 06 Jul 02:31
3b4d4d6

ContextPort 2.7.1

Safer AI Context Capture

This release hardens Save Context across supported AI providers and fixes a real Claude export failure discovered using ContextPort's own Developer Mode source archive.

ContextPort now prioritizes Memory integrity over blindly completing an export.

What's Changed

Provider aware conversation extraction

Save Context now identifies conversation turns using provider specific UI evidence instead of treating broad page containers as chat messages.

  • ChatGPT uses explicit message author roles.
  • Claude uses its standard chat message structure to positively identify user prompts and Claude responses.
  • Grok uses explicit user and assistant message identifiers.
  • Gemini remains fail closed when ContextPort cannot safely prove message roles.

No more guessed message authors

The old exporter could infer alternating messages as:

You → AI → You → AI

based only on DOM order.

That behavior has been removed.

ContextPort now requires positive evidence that a message belongs to the user or AI.

Protection against corrupted Memory

A real Claude export exposed a case where page navigation content was saved as a user message and Cloudflare challenge JavaScript was saved as a Claude response.

ContextPort now rejects known challenge and interstitial content before it can enter Memory.

Structured export validation

Conversation extraction now returns structured user and assistant turns to the native app.

Before Markdown or PDF generation, ContextPort validates that the conversation contains:

  • At least one positively identified user turn.
  • At least one positively identified AI response.
  • No known challenge or bootstrap content.

When ContextPort cannot safely identify a conversation, it fails instead of saving questionable context.

Claude Save Context Fix

Claude's standard chat renderer is now handled separately from Claude's Cowork and session interfaces.

The final fix was developed from Claude's actual shipped UI source captured directly by ContextPort Developer Mode.

The affected Claude conversation was retested on a physical iOS device and exported cleanly with the correct user and Claude turns.

Why This Matters

Memory is becoming one of ContextPort's core systems.

A failed export is visible.

A successful export containing incorrect context can silently affect every AI conversation that uses that Memory later.

ContextPort now treats the boundary between an AI webpage and saved Memory as a validation boundary.

If ContextPort cannot prove the conversation is safe to save, it does not save it.


Thank you to everyone testing ContextPort and reporting real device behavior. These reports are directly shaping the architecture of the app.

Support continued ContextPort development:

https://buymeacoffee.com/spotterdeer