Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jackwener/opencli
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.5.1
Choose a base ref
...
head repository: jackwener/opencli
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.5.2
Choose a head ref
  • 8 commits
  • 26 files changed
  • 3 contributors

Commits on Mar 27, 2026

  1. fix(extension): minimize automation window + reduce idle timeout to 3…

    …0s (#521)
    
    - Create automation window with `state: 'minimized'` so it never
      appears in the user's taskbar or steals visual attention
    - Reduce idle timeout from 120s to 30s — window closes quickly after
      the last command finishes, instead of lingering for 2 minutes
    - CDP debugger works fine on minimized windows, no functional impact
    
    Fixes the user-visible issue of a blank data:text/html tab appearing
    during command execution.
    jackwener authored Mar 27, 2026
    Configuration menu
    Copy the full SHA
    a1561e5 View commit details
    Browse the repository at this point in the history
  2. fix: relax extension version check, enable all adapter tests (#520)

    * feat: zero onboarding, extension version check, and update notifier
    
    - Fail-fast guard in execution.ts: when daemon is running but extension
      is not connected, immediately surface a setup guide instead of waiting
      for the 30s connect timeout
    
    - Extension version handshake: extension sends `hello` with its version
      on WebSocket connect; daemon stores it and exposes via /status; CLI
      warns on mismatch in both execution path and `opencli doctor`
    
    - `opencli doctor` now shows extension version inline and reports
      version mismatch as an actionable issue
    
    - Non-blocking npm update checker: registers a process exit hook so the
      update notice appears after command output (same pattern as npm/gh/yarn);
      background fetch writes to ~/.opencli/update-check.json for next run
    
    - postinstall: print Browser Bridge setup instructions after shell
      completion install for first-time global install users
    
    Bug fixes caught in review:
    - discover.ts: add AbortController timeout to checkDaemonStatus() fetch,
      move clearTimeout after res.json() to cover body streaming
    - daemon.ts: clear extensionVersion and reject pending requests in
      ws.on('error') handler, not just ws.on('close')
    - update-check.ts: skip update notice when process exits with non-zero
      code; read cache once at module load to avoid double disk I/O;
      guard isNewer() against NaN from pre-release version strings
    
    * fix: relax extension version check to major-only in doctor, remove from hot path
    
    * test: enable all adapter tests via wildcard glob, fix apple-podcasts url field
    
    * fix: clearTimeout in finally block, reset extensionVersion on reconnect, fix e2e regex
    jackwener authored Mar 27, 2026
    Configuration menu
    Copy the full SHA
    0f3021a View commit details
    Browse the repository at this point in the history
  3. fix(weread): resolve shelf auth fallback (#518)

    * fix(weread): resolve shelf auth fallback
    
    * chore(docs): move local issue notes out of pr
    
    * fix(weread): classify session expiry as auth required
    
    ---------
    
    Co-authored-by: jackwener <[email protected]>
    Astro-Han and jackwener authored Mar 27, 2026
    Configuration menu
    Copy the full SHA
    0085d63 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    6e90356 View commit details
    Browse the repository at this point in the history
  5. fix(ci): stabilize public command and plugin e2e checks (#522)

    * test(e2e): accept current apple podcasts fetch errors
    
    * fix(ci): stabilize plugin and public command checks
    
    ---------
    
    Co-authored-by: pi-dal <[email protected]>
    jackwener and pi-dal authored Mar 27, 2026
    Configuration menu
    Copy the full SHA
    f79d5ab View commit details
    Browse the repository at this point in the history
  6. fix(browser): retry settle probe after SPA client-side redirect (#517)

    * fix(browser): retry settle probe after SPA client-side redirect
    
    SPA sites like creator.xiaohongshu.com can trigger a client-side
    redirect after chrome.tabs reports status 'complete', invalidating
    the CDP target. The waitForDomStable probe in page.goto() was
    unprotected, causing -32000 "Inspected target navigated or closed".
    
    Wrap the settle probe in try/catch with a single 200ms-delayed retry,
    consistent with the existing stealth injection error handling pattern.
    The retry gives the SPA redirect time to complete, while the outer
    catch ensures settle failure never crashes goto() since navigation
    itself already succeeded.
    
    Closes #502
    
    * review: narrow settle retry to target redirects
    
    ---------
    
    Co-authored-by: jackwener <[email protected]>
    Astro-Han and jackwener authored Mar 27, 2026
    Configuration menu
    Copy the full SHA
    53b06db View commit details
    Browse the repository at this point in the history
  7. perf: smart pre-navigation, DOM-stable waits, in-memory URL tracking (#…

    …524)
    
    * perf: smart pre-navigation — skip redundant domain nav + remove hardcoded 2s wait
    
    - Add `getCurrentUrl()` to IPage, Page, and CDPPage to check current browser URL
    - Skip pre-navigation entirely if the browser is already on the target domain
    - Remove the hardcoded `page.wait(2)` after pre-navigation — `page.goto()` already
      includes smart DOM-settle detection via `waitForDomStable`, making the fixed
      2-second sleep redundant
    - Saves ~2s per browser command in the common case (consecutive commands on the
      same site), and ~1-2s even on cold navigation
    
    * perf: smart page.wait() — DOM-stable early return for waits >= 1s
    
    For page.wait(N) where N >= 1 second, use DOM MutationObserver-based
    stability detection instead of a fixed sleep. The original wait time
    becomes a hard cap, but the call returns as soon as the DOM stops
    mutating (500ms quiet period).
    
    This benefits ~200 hardcoded sleep calls across ~40 adapters without
    changing any adapter code. A typical page.wait(5) now completes in
    <1s when the page is already stable, instead of always waiting 5s.
    
    Short waits (< 1s) are kept as fixed sleeps — these are typically
    UI animation delays or anti-bot throttling where DOM-ready is irrelevant.
    
    * refactor: getCurrentUrl() uses in-memory tracking instead of round-trip
    
    Replace the sendCommand('exec', 'window.location.href') call with a
    local _lastUrl field set during goto(). This eliminates a daemon HTTP
    round-trip for the domain check, making isAlreadyOnDomain() zero-cost.
    
    On fresh tabs (about:blank), _lastUrl is null so we correctly fall
    through to navigation — no special-casing needed.
    jackwener authored Mar 27, 2026
    Configuration menu
    Copy the full SHA
    3834292 View commit details
    Browse the repository at this point in the history
  8. chore(release): 1.5.2 (#523)

    * chore(release): 1.5.2
    
    * test(e2e): stabilize output format checks
    jackwener authored Mar 27, 2026
    Configuration menu
    Copy the full SHA
    9919f03 View commit details
    Browse the repository at this point in the history
Loading