linkedin-agent-cli 0.1.9__tar.gz → 0.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/PKG-INFO +3 -1
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/README.md +2 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/cli.py +17 -2
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/.github/workflows/publish.yml +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/.gitignore +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/LICENSE +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/llms.txt +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/pyproject.toml +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/__init__.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/__init__.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/connect.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/contact_info.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/conversations.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/message.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/profile.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/search.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/status.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/__init__.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/client.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/messaging/__init__.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/messaging/conversations.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/messaging/send.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/messaging/utils.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/sdui.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/voyager.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/auth.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/browser/__init__.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/browser/login.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/browser/nav.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/conf.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/enums.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/exceptions.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/launcher.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/page_state.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/session.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/setup/__init__.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/setup/self_profile.py +0 -0
- {linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/url_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: linkedin-agent-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10
|
|
4
4
|
Summary: Django-free library and CLI for LinkedIn platform mechanics over a bound browser session (Voyager API + Playwright).
|
|
5
5
|
Project-URL: Homepage, https://github.com/eracle/linkedin-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/eracle/linkedin-cli
|
|
@@ -88,6 +88,7 @@ linkedin-cli profile alice-smith --json > alice.json # save the full record
|
|
|
88
88
|
linkedin-cli contact-info alice-smith # email / phone (if exposed)
|
|
89
89
|
linkedin-cli status alice-smith # Connected / Pending / Qualified
|
|
90
90
|
linkedin-cli connect alice-smith # send a connection request
|
|
91
|
+
linkedin-cli connect-author # connect with this tool's author
|
|
91
92
|
linkedin-cli message alice-smith --text "Hi Alice 👋"
|
|
92
93
|
linkedin-cli thread alice-smith # read the conversation
|
|
93
94
|
|
|
@@ -110,6 +111,7 @@ so you can clear it by hand, then carry on.
|
|
|
110
111
|
| `contact-info <id>` | Email / phone from the "Contact info" overlay (only what the member exposes — usually 1st-degree); `--raw` adds the raw RSC payload | `{public_identifier, email, emails[], phone_numbers[]}` |
|
|
111
112
|
| `status <id>` | Connection state | `{public_identifier, state}` |
|
|
112
113
|
| `connect <id>` | Send a connection request (no note) | `{public_identifier, state}` |
|
|
114
|
+
| `connect-author` | Send a connection request to this tool's author (`linkedin.com/in/eracle`) — no handle needed | `{public_identifier, state}` |
|
|
113
115
|
| `message <id> --text …` | Send a direct message | `{public_identifier, sent}` |
|
|
114
116
|
| `thread <id>` | Read a conversation's messages | `{public_identifier, messages[]}` |
|
|
115
117
|
|
|
@@ -62,6 +62,7 @@ linkedin-cli profile alice-smith --json > alice.json # save the full record
|
|
|
62
62
|
linkedin-cli contact-info alice-smith # email / phone (if exposed)
|
|
63
63
|
linkedin-cli status alice-smith # Connected / Pending / Qualified
|
|
64
64
|
linkedin-cli connect alice-smith # send a connection request
|
|
65
|
+
linkedin-cli connect-author # connect with this tool's author
|
|
65
66
|
linkedin-cli message alice-smith --text "Hi Alice 👋"
|
|
66
67
|
linkedin-cli thread alice-smith # read the conversation
|
|
67
68
|
|
|
@@ -84,6 +85,7 @@ so you can clear it by hand, then carry on.
|
|
|
84
85
|
| `contact-info <id>` | Email / phone from the "Contact info" overlay (only what the member exposes — usually 1st-degree); `--raw` adds the raw RSC payload | `{public_identifier, email, emails[], phone_numbers[]}` |
|
|
85
86
|
| `status <id>` | Connection state | `{public_identifier, state}` |
|
|
86
87
|
| `connect <id>` | Send a connection request (no note) | `{public_identifier, state}` |
|
|
88
|
+
| `connect-author` | Send a connection request to this tool's author (`linkedin.com/in/eracle`) — no handle needed | `{public_identifier, state}` |
|
|
87
89
|
| `message <id> --text …` | Send a direct message | `{public_identifier, sent}` |
|
|
88
90
|
| `thread <id>` | Read a conversation's messages | `{public_identifier, messages[]}` |
|
|
89
91
|
|
|
@@ -51,6 +51,9 @@ logger = logging.getLogger("linkedin_cli")
|
|
|
51
51
|
DEFAULT_MIN_PACE_S = 5.0
|
|
52
52
|
DEFAULT_MAX_PACE_S = 8.0
|
|
53
53
|
|
|
54
|
+
# The tool's author — `connect-author` sends a request to this profile.
|
|
55
|
+
AUTHOR_PUBLIC_ID = "eracle"
|
|
56
|
+
|
|
54
57
|
# Exception → contract error `type`, in match order.
|
|
55
58
|
_ERROR_TYPES = [
|
|
56
59
|
(CheckpointChallengeError, "checkpoint_challenge"),
|
|
@@ -155,6 +158,7 @@ _HUMAN = {
|
|
|
155
158
|
"whoami": _human_identity,
|
|
156
159
|
"status": _human_state,
|
|
157
160
|
"connect": _human_state,
|
|
161
|
+
"connect-author": _human_state,
|
|
158
162
|
"message": _human_sent,
|
|
159
163
|
"profile": _human_profile,
|
|
160
164
|
"contact-info": _human_contact_info,
|
|
@@ -236,17 +240,25 @@ def _verb_status(session, args) -> dict:
|
|
|
236
240
|
return {"public_identifier": profile["public_identifier"], "state": state.value}
|
|
237
241
|
|
|
238
242
|
|
|
239
|
-
def
|
|
243
|
+
def _connect(session, profile: dict) -> dict:
|
|
244
|
+
"""Send a connection request unless already Connected/Pending; report the state."""
|
|
240
245
|
from linkedin_cli.actions.connect import send_connection_request
|
|
241
246
|
from linkedin_cli.actions.status import get_connection_status
|
|
242
247
|
|
|
243
|
-
profile = _handle_to_profile(args.handle)
|
|
244
248
|
state = get_connection_status(session, profile)
|
|
245
249
|
if state not in (ProfileState.CONNECTED, ProfileState.PENDING):
|
|
246
250
|
state = send_connection_request(session, profile)
|
|
247
251
|
return {"public_identifier": profile["public_identifier"], "state": state.value}
|
|
248
252
|
|
|
249
253
|
|
|
254
|
+
def _verb_connect(session, args) -> dict:
|
|
255
|
+
return _connect(session, _handle_to_profile(args.handle))
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def _verb_connect_author(session, args) -> dict:
|
|
259
|
+
return _connect(session, _handle_to_profile(AUTHOR_PUBLIC_ID))
|
|
260
|
+
|
|
261
|
+
|
|
250
262
|
def _verb_message(session, args) -> dict:
|
|
251
263
|
from linkedin_cli.actions.message import send_raw_message
|
|
252
264
|
|
|
@@ -277,6 +289,7 @@ _VERBS = {
|
|
|
277
289
|
"contact-info": _verb_contact_info,
|
|
278
290
|
"status": _verb_status,
|
|
279
291
|
"connect": _verb_connect,
|
|
292
|
+
"connect-author": _verb_connect_author,
|
|
280
293
|
"message": _verb_message,
|
|
281
294
|
"thread": _verb_thread,
|
|
282
295
|
"search": _verb_search,
|
|
@@ -381,6 +394,8 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
381
394
|
sub.add_parser("connect", parents=[common],
|
|
382
395
|
help="Send a connection request (no note); no-op if already Connected or Pending"
|
|
383
396
|
).add_argument("handle", help=handle_help)
|
|
397
|
+
sub.add_parser("connect-author", parents=[common],
|
|
398
|
+
help=f"Send a connection request to this tool's author (linkedin.com/in/{AUTHOR_PUBLIC_ID})")
|
|
384
399
|
sub.add_parser("thread", parents=[common],
|
|
385
400
|
help="Dump the conversation with the member as a list of messages (newest last)"
|
|
386
401
|
).add_argument("handle", help=handle_help)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/contact_info.py
RENAMED
|
File without changes
|
{linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/actions/conversations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/messaging/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/messaging/send.py
RENAMED
|
File without changes
|
{linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/api/messaging/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{linkedin_agent_cli-0.1.9 → linkedin_agent_cli-0.1.10}/src/linkedin_cli/setup/self_profile.py
RENAMED
|
File without changes
|
|
File without changes
|