Skip to content

Latest commit

 

History

History
341 lines (204 loc) · 26.8 KB

File metadata and controls

341 lines (204 loc) · 26.8 KB

Changelog

All notable changes to csctf (Chat Shared Conversation to File) are documented here.

Versions follow Semantic Versioning. Each tagged version has a corresponding GitHub Release unless noted otherwise. Commit links point to the canonical repository at Dicklesworthstone/chat_shared_conversation_to_file.


Unreleased (after v0.4.5)

Changes on main since the v0.4.5 tag, not yet part of any release.

CI / Infrastructure

  • Add ACFS checksum dispatch and notification workflow (92244ec, c515391)
  • Skip ACFS dispatch when ACFS_TOKEN is missing (e451907)

Licensing

Maintenance

  • Update Node.js dependencies to latest stable versions (0998dd6)
  • Add GitHub social preview image (1aa3b5c)
  • Update AGENTS.md with project context (ff994cd, 8fd16ef)

v0.4.5 -- 2026-01-03 (Release)

GPT-5.2 compatibility and CLI hardening.

Provider Compatibility

  • GPT-5.2 role detection: OpenAI changed the share page DOM to use visible "You said:" / "ChatGPT said:" text headers instead of data-message-author-role attributes. Added text-based role detection with anchored regex patterns, alternating-role fallback, and header artifact stripping so conversations render correctly again (c5a1819)

CLI Robustness

  • Argument validation for --outfile / --output-dir: previously csctf --outfile --quiet <url> would silently create a file named --quiet.md; now throws a clear error when the required path is missing or looks like a flag. Also removed undocumented --format from usage text (3153181)
  • Quiet-mode consistency: Chrome tab restoration messages now respect --quiet (fd50d85)

v0.4.4 -- 2025-12-19 (Release)

Complete Claude provider support and output normalization across extraction modes.

Claude Provider

  • Handle Claude's unique "Title | Claude" suffix in stripProviderPrefix(), and add Claude to headingPrefix so both CDP and Playwright modes show "Claude Conversation:" instead of defaulting to "ChatGPT" (6d6fe57)

Output Normalization

  • CDP mode now produces the same Markdown format as Playwright mode: proper heading, blockquote metadata with ISO date, and consistent whitespace. Previously CDP output had raw page titles and locale-formatted dates (6d6fe57)

Bug Fixes

  • Pass cdpEndpoint and quiet arguments through to scrape() -- they were parsed from CLI flags but silently dropped (6d6fe57)
  • Add grok.x.ai to sharePattern so Grok's alternate domain passes URL validation (6d6fe57)
  • Route all progress output to stderr so only file paths reach stdout, per AGENTS.md specification (811f250)

v0.4.3 -- 2025-12-19 (Release)

Fixes for CDP extraction fidelity and resource management.

Extraction Quality

  • Message ordering: CDP extraction previously collected all user messages first, then all assistant messages, producing garbled conversation order. Now uses combined CSS selectors and determines roles from element attributes, preserving DOM order (4693e9b)

Resource Cleanup

  • Fix BrowserContext variable scoping so it is accessible in the catch block during CDP fallback (4693e9b)
  • Close BrowserContext in the finally block when using Playwright persistent-context mode; previously leaked (4693e9b)

v0.4.2 -- 2025-12-19 (Release)

CDP Generalization

  • Make CDP extraction provider-aware for all providers, not just Claude. Selectors and role-detection logic now adapt to the detected provider when using the CDP path (121e487)

v0.4.1 -- 2025-12-19 (Release)

Resilience

  • Automatic CDP fallback: when Playwright is blocked (Cloudflare challenge, bot detection), the tool now automatically retries via Chrome DevTools Protocol instead of failing outright (2991865)

v0.4.0 -- 2025-12-19 (Release)

Major feature release: Claude.ai support.

Claude.ai Provider

  • Full Claude.ai share-link support via Chrome DevTools Protocol (CDP). Claude.ai uses Cloudflare protection that blocks standard headless automation; csctf now copies your Chrome session cookies to a temporary profile, launches Chrome with remote debugging, and connects via CDP to extract the conversation (0bc3661)
  • Chrome session restoration: if Chrome is already running, offers to save open tabs, restart Chrome with debugging, and restore tabs afterward (0bc3661)

Documentation

  • Add AGENTS.md and update README for Claude.ai support (3063b74)

v0.3.0 -- 2025-12-07 (Release)

Anti-bot stealth overhaul for ChatGPT scraping.

Stealth Engine (enabled by default)

  • Browser fingerprint spoofing: realistic navigator properties, plugins array, WebGL vendor/renderer strings (da0f824)
  • Canvas fingerprint randomization to defeat tracking (da0f824)
  • Chrome 131 user-agent with proper sec-ch-ua headers (da0f824)
  • window.chrome runtime shim with loadTimes() and csi() (da0f824)

Challenge Detection

  • Smarter Cloudflare challenge detection: no longer false-positives on conversations that merely mention "cloudflare"; only triggers on actual challenge pages (short body text, specific titles) (da0f824)
  • Progressive wait times (3 s, 5 s, 8 s, 10 s, 12 s) instead of fixed timeouts (da0f824)

New CLI Flags

  • --use-chrome-profile -- leverage real Chrome session cookies to bypass authentication challenges (da0f824)
  • --stealth -- explicitly enable enhanced stealth (now on by default) (da0f824)
  • --headful -- run with a visible browser window (da0f824)

Automatic Headful Fallback

  • When headless mode is blocked, the tool automatically retries with a visible browser window (da0f824)

Code Quality

  • Fix ESLint Function type error in WebGL proxy handler (55686ea)
  • Fix TypeScript errors in stealth script (fa0b069)

v0.2.9 -- 2025-12-06 (Release)

Standalone Binary Fix

  • Playwright bundling for bun build --compile: fixed "Cannot find module playwright-core/package.json" error in pre-built binaries. Playwright's require.resolve() bakes absolute paths from the build machine; a postinstall patch now inlines the required values (coreDir, Playwright version, language binding version, packageJSON) so binaries are self-contained (bd2e090)

CI

  • Add verification step to ensure Playwright patch is applied before building; add test step to verify built binaries run without errors (bd2e090)

v0.2.8 -- 2025-12-06 (Release)

Build

  • Ensure bun compile builds succeed; bump version (5aeadc1)

Documentation

  • Add cache-busting timestamp to install command in README (4a1f8d6)

v0.2.7 -- 2025-12-06 (Release)

Build

  • Update Bun to 1.3.3 for release bundling (93f599e)

v0.2.6 -- 2025-12-06 (Release)

Build / Distribution

  • Bundle all dependencies into compiled binaries so they are fully self-contained (0a95aeb)

v0.2.5 -- 2025-12-06 (Release)

Installer

  • Fix macOS ARM64 (aarch64 / arm64) install mapping -- the installer was downloading the wrong binary for Apple Silicon (463a800)

v0.2.4 -- 2025-12-06 (Release)

Code-Block Rendering

  • Refactor TurndownService rules for <pre> and <code> elements to properly distinguish inline code from fenced code blocks, fixing syntax highlighting edge cases in HTML output (03011ca)

GitHub Pages Publishing

  • Add simplified --publish-to-gh-pages flag for one-command publishing; update argument parsing and usage text (3dee412)

v0.2.3 -- 2025-12-06 (Release)

HTML Output Quality

  • Escape <script> and <style> tags in rendered HTML so code examples display correctly instead of executing (ce28173)
  • Create .nojekyll files in the publish directory to prevent GitHub Pages Jekyll processing (27d79c6)
  • Replace Google Fonts (Inter, JetBrains Mono) with system font stacks to eliminate external requests and improve load performance (dda8603)
  • Remove scroll-to-top button and its inline JavaScript to keep HTML output strictly zero-JS (029e91b)

Styling

  • Introduce CSS variables for theming; add code-block headers with colored dots; improve card layout and hero section in the index renderer (e717f80)

Auth / Publishing

  • Switch GitHub Pages publishing from token-based auth to gh auth, and update the installer hint accordingly (ea9c58b)

Provider Scope

  • Temporarily remove Claude support (re-added in v0.4.0); restrict providers to ChatGPT, Gemini, and Grok (8c394d1)

v0.2.2 -- 2025-12-06 (Release)

CI / Release Packaging

  • Fix duplicate-upload issue in release asset list (489f7c4)

v0.2.1 -- 2025-12-06 (Release)

Code Quality

  • Fix ESLint issues introduced during rapid v0.2.0 development (69353a5)

v0.2.0 -- 2025-12-06 (Tag only -- no GitHub Release)

First tagged version. This tag captures the full initial development sprint (30 commits in a single day) that took the project from zero to a feature-complete multi-provider CLI.

Core Scraping Engine

  • Headless Playwright Chromium with stealth configuration (spoofed navigator properties, realistic headers) (2818a9b)
  • Double-navigate strategy (domcontentloaded then networkidle) to tame late-loading assets (2818a9b)
  • Provider auto-detection from URL hostname; provider-specific CSS selector chains with fallback (9389865)
  • Shadow DOM traversal for Gemini web components (dba0ecb)
  • Bot-blocking fast-fail detection and retry with backoff (30ea5ca, f1ebba7)
  • OS-aware Chromium executable resolution (5a52794)

Multi-Provider Support

  • ChatGPT (chatgpt.com/share) -- initial and primary target (2818a9b)
  • Claude (claude.ai/share) -- initial support (later removed in v0.2.3, re-added properly in v0.4.0) (9389865)
  • Gemini (gemini.google.com/share) (f1185a7, 4c8a0a2)
  • Grok (grok.com/share) (7b79207)

Markdown Generation

  • Turndown with custom fenced-code rule; language detected from class="language-*" (2818a9b)
  • Citation pill and data-start/data-end attribute stripping (2818a9b)
  • Newline normalization (Unicode LS/PS removal, excessive blank-line collapse) (c4e8acd)
  • Artifact and badge-like token filtering for cleaner output (c74c8c9, 3ae3864)

Deterministic Filenames

  • Slugify function: lowercase, non-alphanumerics to _, trim, max 120 chars, Windows reserved-name suffixing (b6a01c0)
  • Collision-proof unique paths with _2, _3, ... suffixes (b6a01c0)
  • Provider-prefix stripping from titles (4ef9b7b)

HTML Output

  • Static HTML twin with Markdown-it + highlight.js rendering, inline CSS for light/dark/print, zero JavaScript (7f62819)
  • Table of contents with de-duplicated heading slugs; metadata pills (1b04cec)
  • Language badges on code blocks (7f62819)

GitHub Pages Publishing

  • One-command publish: clone (or create via gh), copy files, regenerate manifest.json and index.html, commit + push (1b04cec)
  • --remember / --forget-gh-pages for persistent repo/branch/dir config under ~/.config/csctf/config.json (1b04cec)
  • --dry-run to build index without pushing (96146e9)
  • --yes / --no-confirm to skip the PROCEED confirmation gate (bad1e05)
  • Auto-install gh via --gh-install (brew/apt/dnf/yum/winget/choco) (21f87f9)

CLI

  • --timeout-ms, --outfile, --output-dir, --quiet, --check-updates, --version (bad1e05, 9d0930c)
  • --no-html / --md-only / --html-only output format switches (bad1e05)
  • --debug, --wait-for-selector (9d0930c)
  • Clipboard copy and file-open after export (dff1fab)
  • Colorized, step-based console output via chalk (2818a9b)
  • Secure readSecret function for GitHub token input with masking (f1ebba7)

Safety

  • Atomic writes via temp + rename pattern (ae0c579)
  • MessageRole type for type-safe role handling (4ef9b7b)

Installer

  • curl | bash installer with OS/arch detection, optional --verify checksum, DEST / VERSION overrides (e057e41, b6a01c0)
  • Detailed PATH update instructions per platform (9389865)

Build / CI

  • Cross-platform binary targets: macOS ARM64/x64, Linux x64/ARM64, Windows x64 (65649c8)
  • ESLint + TypeScript (tsc --noEmit) linting (65649c8)
  • CI: lint, typecheck, unit tests, matrix builds, binary verification, artifact upload (c4e8acd)
  • E2E tests with per-provider default URLs and configurable timeout (e057e41, 332a858)
  • Playwright browser caching in CI (8b7adf6)
  • Tagged pushes (v*) create GitHub Release with binaries and sha256.txt (7f2a974)

Project Rename

  • Renamed CLI binary from csctm to csctf; updated all scripts, docs, and config paths (66f71fc)