verify connect flow before returning success & use custom invite deeplink#366
verify connect flow before returning success & use custom invite deeplink#366yashkhare0 wants to merge 828 commits into
Conversation
…raping_add_compact_references feat(scraping): add compact references
…r-all-major-dependencies chore(deps): update all major dependencies (major)
…ependencies chore(deps): update ci dependencies
Updated the prerequisites section to include a link for installing uv.
…-patch-1 docs(README): installation link for uv in README
…ump_version_to_4.9.0 chore: Bump version to 4.9.0
…i_simplify_release_download_link style(ci): Simplify release download link
- Match on field name instead of Pydantic error code for stability
Detail pages (experience, certifications, skills, etc.) paginate with a "Show more" button inside <main>, not scroll-to-bottom. Click it in a loop (bounded by max_scrolls) until the button disappears. Resolves: stickerdaniel#360
- Configure mock_locator.filter in fixture so Show more loop exits cleanly without hitting the exception handler in detail-page tests
…raping_add_max_scrolls_parameter_to_get_person_profile feat(scraping): Add max_scrolls parameter to get_person_profile
…ump_version_to_4.9.1 chore: Bump version to 4.9.1
- Drop Spanish-only aria-label from compose focus selector; generic contenteditable fallback already covers all locales - Patch asyncio.sleep in TestSendMessageComposerInteraction helper so tests no longer burn 1.4s of real wall time per run - Set wait_for mocks before the call in test_returns_locator_when_count_positive and assert_not_called() after, so the early-return invariant is actually verified
…-compose-box-actionability Fix/344 bypass patchright compose box actionability in send_message
chore: Bump version to 4.9.2
…readability - Consolidated button text retrieval for 'incoming_request' state. - Streamlined the unpacking of verified state and profile connection state. - Enhanced formatting for better readability in the extractor logic.
|
Thanks for the PR. The verify-after-action layer is exactly what #365 needs and I'd like to land it. I'm on board with the deeplink approach. Looking at how LinkedIn actually emits Before we merge:
Happy to re-review after the rebase. |
|
Too many files changed for review. ( |
|
Hi @yashkhare0 — since this PR has been quiet for ~9 days I went ahead and rebased it onto current Applied changes from the review:
Verification:
Feel free to |
Summary
This fixes
connect_with_personfalse positives by making the tool verify the final LinkedIn relationship state before returning success.What changed
preload/custom-invitedeeplinkSend without noteaction when no note is providedconnectedwhen the page verifiesPendingacceptedwhen the page verifies a1stconnection/.serenaworkspace artifacts in gitWhy
The previous flow inferred the pre-click state from profile text, clicked the UI, and could return success without proving that LinkedIn had actually transitioned to the expected final state. That made the connect tool flaky and could produce false-positive success responses.
Validation
uv run pytest tests/test_scraping.py -k TestConnectWithPersonuv run ruff check linkedin_mcp_server/scraping/extractor.py tests/test_scraping.pydrowsyreturnedpendingwithout sending a new invitestanimirovicurossent an invite and verified the profile transitioned toPendingCloses #365.
Synthetic prompt
Generated with Codex (GPT-5)