What's Changed
- test(e2e): headless AX smoke on all platforms (un-skip macOS) + daemon transport contract E2E by @jackwener in #2081
- ci(e2e): place each e2e gate where its runner can run it deterministically (fix red main) by @jackwener in #2082
- fix(skills): quote sitemap-author description to keep frontmatter valid YAML by @imbarain in #2122
- fix(utils): detect mixed-case HTML login walls by @hiSandog in #2120
- fix(twitter): harden article API response handling by @imbarain in #2123
- fix(twitter): pass user args through JSON.stringify in page.evaluate by @imbarain in #2121
- docs: remove daemon port env from zh readme by @jackwener in #2124
- feat(daemon): fail fast when a write command already holds the site session by @Astro-Han in #2100
- fix(chatgpt): use pure sleeps and cheap generation checks in polling loops by @Astro-Han in #2099
- fix(extension): stop SW wake events from wiping the lease registry, add owned-group ledger by @Astro-Han in #2098
- feat(linkedin): add company command by @jackwener in #2088
- feat(linkedin): add connections command by @jackwener in #2083
- Improve ChatGPT Deep Research progress reporting by @lavapapa in #2061
- fix: batch of 5 issue fixes (#1753 #2087 #2091 #2095 #2108) by @jackwener in #2125
- fix: click hit-testing + facebook feed/search DOM drift (#2076 #2071 #2089 #2090) by @jackwener in #2126
- feat(xiaohongshu): 评论输出 images 字段 + 滚动加载健壮性改进 by @huanghe in #2136
- feat(toutiao): add recommend channel feed, fix hot --limit being ignored by @Benjamin-eecs in #2149
- fix(ths): fetch hot rank from public API by @jackwener in #2152
- fix(zhihu): accept http pagination next urls by @jackwener in #2151
- fix(instagram): fetch user feed by username by @jackwener in #2153
- fix(eastmoney): correct mislabeled convertible ytm/remainingYears columns (#2109) by @LeoLin990405 in #2131
- feat(chatgpt): add GPT-5.6 Pro model target by @Astro-Han in #2129
- feat(google): add images search adapter by @pi-dal in #2111
- feat(kimi/usage): read quota from membership subscription page by @cypggs in #2104
- feat(trip): add Trip.com international adapter by @Benjamin-eecs in #2158
- enrich(ctrip): expand the adapter across Ctrip's travel verticals by @Benjamin-eecs in #2156
- chore(deps): bump js-yaml to 4.3.0 for GHSA-52cp-r559-cp3m by @Benjamin-eecs in #2186
- fix(boss): distinguish environment rejection from auth expiry by @jiyangnan in #2127
- fix(facebook/search): preserve query identity + drop redirect shims (#2090) by @LeoLin990405 in #2194
- fix(1point3acres): detect login via current Discuz X user-panel markup by @jiancui-research in #2145
- fix(twitter/profile): recover counts + bio after X relocates them out of legacy (#2188) by @LeoLin990405 in #2193
- fix(huodongxing): handle temporary busy event pages by @snvtac in #2103
- fix(twitter article): include images from atomic blocks in markdown output by @felores in #2189
- fix(download): keep a row-less table from crashing markdown conversion by @Benjamin-eecs in #2187
- fix: escape pipes in markdown output and fix contributing docs by @fix2015 in #2059
- fix(amazon): honor the input marketplace instead of rewriting to amazon.com by @Benjamin-eecs in #2185
- fix(autoresearch): pass claude prompt via stdin by @sebastionoss in #2184
- fix(xiaohongshu): extract direct comment reply target by @aolast in #2175
- fix(douyin): walk work_list cursor and reject non-sec_uid input by @ele-yufo in #2196
- fix(boss): probe the current geek jobs route by @jackwener in #2198
- fix(tiktok): use the current explore feed endpoint by @jackwener in #2199
- fix(facebook): handle current feed and profile DOM by @jackwener in #2200
- feat(twitter): add bounded collection command by @INKWWW in #2173
- feat(midjourney): add end-to-end browser adapter by @ele-yufo in #2201
- feat(pinterest): add Pinterest adapter suite by @yeeway0609 in #2177
- feat(twitter): full-archive likes/bookmarks sync with JSONL streaming by @naughtyGitCat in #2143
- fix(weread-official): bump skill version to 1.0.4 by @lingjiuu in #2227
- chore(deps): bump js-yaml to 4.3.1 for GHSA-5p4m-2wfm-xmqj by @Benjamin-eecs in #2267
- fix(chatgpt): never save in-progress canvas frames as generated images by @Benjamin-eecs in #2237
- fix(codex): select slash-command picker options from send by @Benjamin-eecs in #2239
- fix(instagram): stop depending on web_profile_info for business accounts by @Benjamin-eecs in #2238
- fix(instagram): like and unlike posts through the post page controls by @Benjamin-eecs in #2243
- fix(gemini): fail typed on image failures and expand ~ in the output path by @Benjamin-eecs in #2246
- fix(instagram): download through the media info endpoint and expand ~ in --path by @Benjamin-eecs in #2248
- fix(twitter): stop reporting another tweet as the posted permalink by @Benjamin-eecs in #2251
- fix(twitter): read the profile link until it settles in whoami by @Benjamin-eecs in #2253
- fix(discord-app): extract guild ids from navigation items by @Ubehind in #2233
- fix(discovery): warn when yaml adapters are skipped instead of dropping them silently by @Benjamin-eecs in #2229
- fix(codex): resolve the ChatGPT executable inside Codex.app by @Benjamin-eecs in #2232
- test(launcher): skip pgrep-backed app detection tests on Windows by @Benjamin-eecs in #2269
- fix(chat): preserve Claude model and wait for Kimi replies by @bulexu in #2266
- docs(plugin): add X Article publisher to examples by @genoooool in #2190
- fix(browser): thread the preferred profile through readiness and status checks by @Benjamin-eecs in #2262
- fix(dianping): correct 4 wrong cityIds in static city map (kunming/fuzhou/xiamen/hefei) by @fanxiaoyu0 in #2280
- fix(douyin): search hashtags through the live endpoint and report empty responses by @Benjamin-eecs in #2254
- fix(douyin): restore stats via creator item list after metrics_trend retired by @ele-yufo in #2307
- fix(ke,douban): update auth anchors for 2026-08 site redesign by @fanxiaoyu0 in #2305
- fix(adapters): handle recent extraction drift by @jackwener in #2293
- fix(boss): restore read-only job search and detail by @baigao417 in #2291
- fix(doctor): use a windowless connectivity probe by @alectimison-maker in #2206
- fix(extension): omit credentials from daemon ping (fixes #2278) by @kagura-agent in #2282
- fix(1688): extract detail images from shadow DOM with lazy-render scrolling by @HARRY-BEAR in #2272
- fix(chatgpt): filter Chinese user-upload previews from generated images by @HARRY-BEAR in #2261
- fix(twitter): fail typed when a write command does not go through by @Benjamin-eecs in #2256
- fix(xiaohongshu): scan text-card media from publish roots by @liuxinyea in #2297
- fix(xiaohongshu): scope note title/desc/author to #noteContainer by @Coco-cielleo in #2317
- fix(chatgpt): use data-turn to detect upload previews vs generated images by @jesuisjohan in #2292
- fix(args): reject invalid integer values by @Whxuan0701 in #2300
- fix(plugin): honor caret ranges below 1.0.0 by @Whxuan0701 in #2299
- fix(completion): fall back on invalid manifests by @Whxuan0701 in #2298
- fix(browser): prefer the main Electron window over routed auxiliary windows by @Benjamin-eecs in #2244
- fix: 兼容 Windows prepare 脚本 by @bingame in #2271
- fix(adapter): copy shared deps on eject by @jackwener in #2321
- chore(core): remove dead internal symbols by @jackwener in #2323
- chore(browser): remove retired tab helpers by @jackwener in #2324
- chore(scripts): remove retired explore helpers by @jackwener in #2325
- chore(browser): remove legacy DOM click helpers by @jackwener in #2327
- chore(tui): remove unused checkbox prompt by @jackwener in #2328
- chore(browser): remove dead internal error exports by @jackwener in #2329
- chore: remove orphan internal test hooks by @jackwener in #2330
- refactor(linkedin-learning): share API fetch helpers by @jackwener in #2331
- refactor(bilibili): share relation helpers by @jackwener in #2332
- feat(twitter): add muted word command by @jackwener in #2333
- fix(twitter): repair block and hide reply flows by @jackwener in #2337
- chore(twitter): share user lookup URL builder by @jackwener in #2338
- chore(twitter): share archive JSONL helpers by @jackwener in #2339
- chore(12306): share limit normalization helper by @jackwener in #2340
- chore(grok): share site identity helpers by @jackwener in #2341
- chore(zhihu): share answer target parser by @jackwener in #2342
- chore(zhihu): share answer normalization helpers by @jackwener in #2343
- chore(linux-do): share formatting helpers by @jackwener in #2344
- chore(slock): share task identity postcondition by @jackwener in #2345
- chore(instagram): share home navigation helper by @jackwener in #2346
- chore(instagram): share current user helper by @jackwener in #2347
- chore(browser): share CDP page capabilities by @jackwener in #2348
- chore(xueqiu): share html stripping helper by @jackwener in #2350
- chore(linkedin): share safety URL decoder by @jackwener in #2351
- chore(linkedin): reuse shared evaluate unwrap by @jackwener in #2353
- chore(linkedin): reuse shared unwrap in salesnav by @jackwener in #2354
- chore(linkedin): reuse shared unwrap in connect flows by @jackwener in #2356
- chore(linkedin): share messaging thread URL helpers by @jackwener in #2357
- chore(linkedin): share people search auth helpers by @jackwener in #2358
- chore(release): bump version to 1.8.7 by @jackwener in #2359
New Contributors
- @imbarain made their first contribution in #2122
- @jiyangnan made their first contribution in #2127
- @jiancui-research made their first contribution in #2145
- @snvtac made their first contribution in #2103
- @felores made their first contribution in #2189
- @fix2015 made their first contribution in #2059
- @sebastionoss made their first contribution in #2184
- @aolast made their first contribution in #2175
- @INKWWW made their first contribution in #2173
- @yeeway0609 made their first contribution in #2177
- @naughtyGitCat made their first contribution in #2143
- @lingjiuu made their first contribution in #2227
- @Ubehind made their first contribution in #2233
- @bulexu made their first contribution in #2266
- @genoooool made their first contribution in #2190
- @fanxiaoyu0 made their first contribution in #2280
- @baigao417 made their first contribution in #2291
- @alectimison-maker made their first contribution in #2206
- @HARRY-BEAR made their first contribution in #2272
- @liuxinyea made their first contribution in #2297
- @Coco-cielleo made their first contribution in #2317
- @jesuisjohan made their first contribution in #2292
- @Whxuan0701 made their first contribution in #2300
- @bingame made their first contribution in #2271
Full Changelog: v1.8.6...v1.8.7