@sellable/install 0.1.134 → 0.1.136
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.
|
@@ -120,9 +120,15 @@ blocker.
|
|
|
120
120
|
Do not write `saw you {{engagement_context}} on {{post_context}}`, `saw you
|
|
121
121
|
reacted to`, `saw you engaging with`, or equivalent source-citation copy as a
|
|
122
122
|
default hook. Only refer to engagement when the line is self-aware and
|
|
123
|
-
low-certainty, for example: `
|
|
124
|
-
[topic]
|
|
125
|
-
|
|
123
|
+
low-certainty, for example: `you might not remember the thread, but I found
|
|
124
|
+
you through a [topic] discussion and your [observable role/company context]
|
|
125
|
+
looked close to [problem]`. Otherwise omit the engagement signal and use
|
|
126
|
+
role/company/problem context.
|
|
127
|
+
- Do not describe the sender in third person inside the outbound message.
|
|
128
|
+
Lines like `p.s. Saju's angle is...`, `Christian's angle is...`, or
|
|
129
|
+
`[sender]'s approach is...` are internal notes leaking into copy. If the point
|
|
130
|
+
matters, write it in the sender's voice: `p.s. we usually pair the build with
|
|
131
|
+
enablement`, or omit it.
|
|
126
132
|
- The selected winner is one first outbound send only. No post-accept DM,
|
|
127
133
|
follow-up, cadence branch, sequence copy, or launch copy.
|
|
128
134
|
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -954,48 +954,44 @@ explicit client prospect identity in the invocation, do one lightweight lookup
|
|
|
954
954
|
first:
|
|
955
955
|
|
|
956
956
|
- LinkedIn profile: call \`mcp__sellable__fetch_linkedin_profile\`.
|
|
957
|
-
-
|
|
958
|
-
|
|
957
|
+
- Non-profile URLs or company-page inputs are not enough to start this flow; ask
|
|
958
|
+
again for the person's LinkedIn profile URL.
|
|
959
959
|
- Existing client prospect id: use it directly and do one company/profile lookup
|
|
960
|
-
only if a URL
|
|
960
|
+
only if a LinkedIn profile URL is also available.
|
|
961
961
|
|
|
962
962
|
Then summarize what you found in one or two lines and ask the user to confirm
|
|
963
|
-
the current company/focus before continuing
|
|
964
|
-
|
|
963
|
+
the current company/focus before continuing. Do not mention connected sender
|
|
964
|
+
availability in this confirmation.
|
|
965
965
|
|
|
966
966
|
If the user did not provide the launch identity, ask in normal chat for the
|
|
967
|
-
LinkedIn profile URL
|
|
968
|
-
|
|
967
|
+
LinkedIn profile URL. Do not ask them to choose an input type with the structured
|
|
968
|
+
question tool:
|
|
969
969
|
|
|
970
970
|
\`\`\`text
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
What is your LinkedIn profile URL? If you do not have it handy, send your
|
|
974
|
-
company website instead. I’ll research the person and company from that, then
|
|
975
|
-
ask you to correct anything stale before we pick the target, offer, proof, and
|
|
976
|
-
lead source.
|
|
971
|
+
What is your LinkedIn profile URL?
|
|
977
972
|
\`\`\`
|
|
978
973
|
|
|
979
|
-
After the user pastes a URL
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
974
|
+
After the user pastes a LinkedIn profile URL, call
|
|
975
|
+
\`mcp__sellable__fetch_linkedin_profile\` and infer the current or most recent
|
|
976
|
+
company from the profile. If they paste a non-profile URL or company page
|
|
977
|
+
instead, ask again for the person's LinkedIn profile URL. Retain the profile URL as
|
|
978
|
+
\`senderLinkedinUrl\` for \`create_campaign\`; if a \`clientProspectId\` is available,
|
|
979
|
+
pass that instead.
|
|
985
980
|
|
|
986
|
-
After the user confirms the company/focus,
|
|
987
|
-
|
|
988
|
-
strategy hardens:
|
|
981
|
+
After the user confirms the company/focus, ask the full setup intake before
|
|
982
|
+
inferred strategy hardens:
|
|
989
983
|
|
|
990
984
|
\`\`\`text
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
985
|
+
Who should we target first?
|
|
986
|
+
What offer should this campaign lead with?
|
|
987
|
+
What is the strongest credibility signal we can lead with?
|
|
988
|
+
How should we find prospects: find prospects for me, use a CSV of LinkedIn
|
|
989
|
+
profiles, or use a CSV of company domains?
|
|
994
990
|
\`\`\`
|
|
995
991
|
|
|
996
992
|
The setup questions should use the confirmed company context so they do not feel
|
|
997
|
-
generic. When you present a recommendation, introduce it as based on
|
|
998
|
-
research you just did and keep it editable.
|
|
993
|
+
generic. When you present a researched recommendation, introduce it as based on
|
|
994
|
+
the research you just did and keep it editable.
|
|
999
995
|
|
|
1000
996
|
Before the identity gate, use this customer-facing shape:
|
|
1001
997
|
|
|
@@ -1380,9 +1376,8 @@ any leads are imported or anything can send.
|
|
|
1380
1376
|
Good identity setup:
|
|
1381
1377
|
|
|
1382
1378
|
\`\`\`text
|
|
1383
|
-
I’ll ask for the LinkedIn profile URL first
|
|
1384
|
-
|
|
1385
|
-
anything stale before we pick the target, offer, proof, and lead source.
|
|
1379
|
+
I’ll ask for the LinkedIn profile URL first. Then we’ll confirm who to target,
|
|
1380
|
+
what to offer, what proof to lead with, and how to find prospects.
|
|
1386
1381
|
\`\`\`
|
|
1387
1382
|
|
|
1388
1383
|
Bad:
|
|
@@ -1395,8 +1390,8 @@ Better:
|
|
|
1395
1390
|
|
|
1396
1391
|
\`\`\`text
|
|
1397
1392
|
I found Christian Reyes connected here. Is that you, and is this campaign for
|
|
1398
|
-
Sellable? If not,
|
|
1399
|
-
|
|
1393
|
+
Sellable? If not, send the LinkedIn profile URL for the person this campaign is
|
|
1394
|
+
for.
|
|
1400
1395
|
\`\`\`
|
|
1401
1396
|
|
|
1402
1397
|
Bad:
|
package/package.json
CHANGED
|
@@ -451,48 +451,44 @@ explicit client prospect identity in the invocation, do one lightweight lookup
|
|
|
451
451
|
first:
|
|
452
452
|
|
|
453
453
|
- LinkedIn profile: call `mcp__sellable__fetch_linkedin_profile`.
|
|
454
|
-
-
|
|
455
|
-
|
|
454
|
+
- Non-profile URLs or company-page inputs are not enough to start this flow; ask
|
|
455
|
+
again for the person's LinkedIn profile URL.
|
|
456
456
|
- Existing client prospect id: use it directly and do one company/profile lookup
|
|
457
|
-
only if a URL
|
|
457
|
+
only if a LinkedIn profile URL is also available.
|
|
458
458
|
|
|
459
459
|
Then summarize what you found in one or two lines and ask the user to confirm
|
|
460
|
-
the current company/focus before continuing
|
|
461
|
-
|
|
460
|
+
the current company/focus before continuing. Do not mention connected sender
|
|
461
|
+
availability in this confirmation.
|
|
462
462
|
|
|
463
463
|
If the user did not provide the launch identity, ask in normal chat for the
|
|
464
|
-
LinkedIn profile URL
|
|
465
|
-
|
|
464
|
+
LinkedIn profile URL. Do not ask them to choose an input type with the structured
|
|
465
|
+
question tool:
|
|
466
466
|
|
|
467
467
|
```text
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
What is your LinkedIn profile URL? If you do not have it handy, send your
|
|
471
|
-
company website instead. I’ll research the person and company from that, then
|
|
472
|
-
ask you to correct anything stale before we pick the target, offer, proof, and
|
|
473
|
-
lead source.
|
|
468
|
+
What is your LinkedIn profile URL?
|
|
474
469
|
```
|
|
475
470
|
|
|
476
|
-
After the user pastes a URL
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
471
|
+
After the user pastes a LinkedIn profile URL, call
|
|
472
|
+
`mcp__sellable__fetch_linkedin_profile` and infer the current or most recent
|
|
473
|
+
company from the profile. If they paste a non-profile URL or company page
|
|
474
|
+
instead, ask again for the person's LinkedIn profile URL. Retain the profile URL as
|
|
475
|
+
`senderLinkedinUrl` for `create_campaign`; if a `clientProspectId` is available,
|
|
476
|
+
pass that instead.
|
|
482
477
|
|
|
483
|
-
After the user confirms the company/focus,
|
|
484
|
-
|
|
485
|
-
strategy hardens:
|
|
478
|
+
After the user confirms the company/focus, ask the full setup intake before
|
|
479
|
+
inferred strategy hardens:
|
|
486
480
|
|
|
487
481
|
```text
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
482
|
+
Who should we target first?
|
|
483
|
+
What offer should this campaign lead with?
|
|
484
|
+
What is the strongest credibility signal we can lead with?
|
|
485
|
+
How should we find prospects: find prospects for me, use a CSV of LinkedIn
|
|
486
|
+
profiles, or use a CSV of company domains?
|
|
491
487
|
```
|
|
492
488
|
|
|
493
489
|
The setup questions should use the confirmed company context so they do not feel
|
|
494
|
-
generic. When you present a recommendation, introduce it as based on
|
|
495
|
-
research you just did and keep it editable.
|
|
490
|
+
generic. When you present a researched recommendation, introduce it as based on
|
|
491
|
+
the research you just did and keep it editable.
|
|
496
492
|
|
|
497
493
|
### Sufficient Intake Bypass
|
|
498
494
|
|
|
@@ -520,9 +516,9 @@ If the invocation or any later user message explicitly asks for "yolo mode",
|
|
|
520
516
|
me", "use best estimates", or "just run it", enable YOLO mode for the rest of
|
|
521
517
|
the run. Treat YOLO as `interactionMode: "autonomous"` plus an intake policy:
|
|
522
518
|
|
|
523
|
-
- If the campaign subject is missing, ask only for the LinkedIn profile URL
|
|
524
|
-
|
|
525
|
-
|
|
519
|
+
- If the campaign subject is missing, ask only for the LinkedIn profile URL in
|
|
520
|
+
normal chat; do not continue from a non-profile URL and do not ask buyer, offer,
|
|
521
|
+
proof, source, or filter setup questions before the LinkedIn URL.
|
|
526
522
|
- Treat any freeform directions already provided, or added later by the user, as
|
|
527
523
|
operator directions for the rest of the run. If directions conflict, the newest
|
|
528
524
|
user direction wins.
|
|
@@ -681,9 +677,7 @@ updates.
|
|
|
681
677
|
```text
|
|
682
678
|
You're in — {activeWorkspaceName} workspace, ready to roll.
|
|
683
679
|
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
e.g. https://www.linkedin.com/in/client-handle or https://example.com
|
|
680
|
+
What is your LinkedIn profile URL?
|
|
687
681
|
```
|
|
688
682
|
|
|
689
683
|
- If `isReturningUser === false`, prepend ONE line confirming the new
|
|
@@ -692,17 +686,14 @@ updates.
|
|
|
692
686
|
```text
|
|
693
687
|
You're set up — your {activeWorkspaceName} workspace is ready.
|
|
694
688
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
e.g. https://www.linkedin.com/in/client-handle or https://example.com
|
|
689
|
+
What is your LinkedIn profile URL?
|
|
698
690
|
```
|
|
699
691
|
|
|
700
692
|
No other lines. No "all set", no "signed in", no other acknowledgement.
|
|
701
693
|
|
|
702
|
-
After the user pastes the URL, proceed with the
|
|
703
|
-
setup in the v2 subskill prompt. Resolve
|
|
704
|
-
`fetch_linkedin_profile
|
|
705
|
-
when possible, and mark the client/company research gate with
|
|
694
|
+
After the user pastes the LinkedIn profile URL, proceed with the
|
|
695
|
+
identity-first campaign setup in the v2 subskill prompt. Resolve it with
|
|
696
|
+
`fetch_linkedin_profile` and mark the client/company research gate with
|
|
706
697
|
`complete_sender_research` when that protocol is required.
|
|
707
698
|
|
|
708
699
|
3. If auth is not OK with `error.type === "workspace"` (token valid, no active
|