@sellable/mcp 0.1.143 → 0.1.145
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.
- package/README.md +19 -6
- package/agents/post-find-leads-message-scout.md +44 -0
- package/agents/registry.json +2 -2
- package/agents/source-scout-linkedin-engagement.md +4 -3
- package/agents/source-scout-prospeo-contact.md +1 -1
- package/agents/source-scout-sales-nav.md +3 -2
- package/dist/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/tools/leads.js +168 -14
- package/dist/tools/processing.d.ts +1 -0
- package/dist/tools/prompts.js +3 -3
- package/dist/tools/rubrics.js +14 -9
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +55 -34
- package/skills/create-campaign-v2/SKILL.md +59 -9
- package/skills/create-campaign-v2/SOUL.md +20 -12
- package/skills/create-campaign-v2/core/auto-execute.README.md +4 -4
- package/skills/create-campaign-v2/core/auto-execute.yaml +4 -4
- package/skills/create-campaign-v2/core/flow.v2.json +55 -19
- package/skills/create-campaign-v2/references/approval-gate-framing.md +1 -1
- package/skills/create-campaign-v2/references/filter-leads.md +42 -0
- package/skills/create-campaign-v2/references/final-handoff-contract.md +5 -5
- package/skills/create-campaign-v2/references/message-review-safety-gate.md +88 -13
- package/skills/create-campaign-v2/references/sample-validation-loop.md +18 -15
- package/skills/create-campaign-v2/references/step-13-import-leads.md +9 -6
- package/skills/create-campaign-v2/references/step-15-re-cascade.md +2 -3
- package/skills/create-campaign-v2/references/watch-guide-narration.md +39 -24
- package/skills/create-campaign-v2/references/watch-link-handoff.md +1 -1
- package/skills/create-campaign-v2-tail/SKILL.md +26 -13
- package/skills/load-voice/SKILL.md +129 -0
- package/skills/providers/prospeo.md +2 -1
- package/skills/providers/sales-nav.md +4 -2
- package/skills/providers/signal-discovery.md +12 -10
- package/skills/research/config.json +9 -0
|
@@ -62,7 +62,8 @@ search_prospeo({
|
|
|
62
62
|
- Pass `searchId` on subsequent pages to paginate.
|
|
63
63
|
- Use `import_leads` with `provider: \"prospeo\"` and the `searchId` to create a lead list and start import.
|
|
64
64
|
- **IMPORTANT:** If `import_leads` returns `needsModeSelection: true`, use `AskUserQuestion` to ask "add to existing leads or replace?" Do NOT assume.
|
|
65
|
-
-
|
|
65
|
+
- Default source target is 300+ good-fit leads, capped at 2,500 source candidates for now.
|
|
66
|
+
- After the list finishes and the user confirms it looks good, call `confirm_lead_list` with the `jobId` and the review-batch `targetLeadCount` from the active campaign defaults to import only the review batch into the campaign table.
|
|
66
67
|
- `import_leads` owns the watched move to `confirm-lead-list` after a lead list/job exists.
|
|
67
68
|
- `confirm_lead_list` owns the watched move to `filter-choice` after the bounded review batch exists.
|
|
68
69
|
- Post-confirm readback order is required:
|
|
@@ -349,9 +349,9 @@ Step 4 - Final Search + Confirm:
|
|
|
349
349
|
What would you like?"
|
|
350
350
|
|
|
351
351
|
User: "Save it"
|
|
352
|
-
→ import_leads({campaignOfferId: "cmp_xxx", searchId: "search_xxx", targetLeadCount:
|
|
352
|
+
→ import_leads({campaignOfferId: "cmp_xxx", searchId: "search_xxx", targetLeadCount: 300})
|
|
353
353
|
→ (wait for lead list to finish, ask user to confirm)
|
|
354
|
-
→ confirm_lead_list({campaignOfferId: "cmp_xxx", jobId: "<jobId from import_leads>", targetLeadCount:
|
|
354
|
+
→ confirm_lead_list({campaignOfferId: "cmp_xxx", jobId: "<jobId from import_leads>", targetLeadCount: 25})
|
|
355
355
|
→ wait_for_campaign_table_ready({campaignId: "cmp_xxx"})
|
|
356
356
|
→ get_campaign_context({campaignId: "cmp_xxx", refresh: true}) + get_rows_minimal(...)
|
|
357
357
|
</iteration_example>
|
|
@@ -382,6 +382,8 @@ User: "Save it"
|
|
|
382
382
|
<limits>
|
|
383
383
|
- 25 results per page
|
|
384
384
|
- Maximum 100 pages (2,500 leads)
|
|
385
|
+
- Default source target: 300+ good-fit leads, capped at 2,500 source
|
|
386
|
+
candidates for now
|
|
385
387
|
- Maximum 5 search calls per session
|
|
386
388
|
- If user needs more than 2,500: explain limit, suggest splitting by region
|
|
387
389
|
</limits>
|
|
@@ -98,11 +98,12 @@ You must estimate:
|
|
|
98
98
|
- expected good-fit prospects per right-content post after dedupe/cleanup
|
|
99
99
|
- `postsNeededForTarget`
|
|
100
100
|
- number of right-content posts needed to reach the target good-fit lead
|
|
101
|
-
count, defaulting to
|
|
101
|
+
count, defaulting to 150 for Signal Discovery unless the campaign says
|
|
102
|
+
otherwise
|
|
102
103
|
- `requiredEngagersToScrape`
|
|
103
|
-
- `ceil(targetGoodFitLeads / sampledFitRate)`; for example
|
|
104
|
-
prospects per 100 engagers means a
|
|
105
|
-
1,
|
|
104
|
+
- `ceil(targetGoodFitLeads / sampledFitRate)`; for example 15 good-fit
|
|
105
|
+
prospects per 100 engagers means a 150-good-fit source target needs about
|
|
106
|
+
1,000 engagers scraped
|
|
106
107
|
- `projectedRange`
|
|
107
108
|
- the conservative range implied by the observed sample
|
|
108
109
|
|
|
@@ -126,7 +127,7 @@ Use conservative logic:
|
|
|
126
127
|
- stale posts
|
|
127
128
|
- adjacent communities that are not actual buyers
|
|
128
129
|
4. Explain the pass-through briefly and explicitly:
|
|
129
|
-
- preferred: "`sampledCount`: 40, `passCount`: 9, `passRate`: ~22%, `goodFitPer100Engagers`: ~22 before cleanup / ~13-16 after cleanup, `requiredEngagersToScrape`: ~1,
|
|
130
|
+
- preferred: "`sampledCount`: 40, `passCount`: 9, `passRate`: ~22%, `goodFitPer100Engagers`: ~22 before cleanup / ~13-16 after cleanup, `requiredEngagersToScrape`: ~940-1,150 for a 150-good-fit target after cleanup, `avgReachableEngagersPerPost`: 240, `goodFitProspectsPerPost`: ~31-38, `postsNeededForTarget`: ~4-5, `recentStrongPostCount`: 15-25, `freshEnoughPostCount`: 8-12, `projectedRange`: 150-190 from selected posts"
|
|
130
131
|
- fallback: "I could not fetch engagers, so this is inferred from post and author quality only"
|
|
131
132
|
5. If the evidence is too weak, say so and return a low-confidence estimate instead of pretending precision.
|
|
132
133
|
6. Do not manually enumerate dozens of engagers in the final answer. Summarize the sample by `sampledCount`, `passCount`, `passRate`, `projectedRange`, and 3-6 representative examples.
|
|
@@ -378,7 +379,8 @@ For `create-campaign-v2` source approval, do not treat the default
|
|
|
378
379
|
`selectionTarget` of 3 posts as enough by itself. Before the final source
|
|
379
380
|
recommendation, estimate source capacity from real sample math:
|
|
380
381
|
|
|
381
|
-
- source target good-fit leads (default
|
|
382
|
+
- source target good-fit leads (default 150 for Signal Discovery unless the
|
|
383
|
+
campaign says otherwise)
|
|
382
384
|
- eligible right-content posts by lane/content type
|
|
383
385
|
- reachable engagers from those posts
|
|
384
386
|
- sampled ICP-fit rate as `n/N` plus an easy percentage/range
|
|
@@ -447,7 +449,7 @@ selections, headlineICPCriteria })`, then call
|
|
|
447
449
|
targetLeadCount, targetEngagerCount, maxPostsToScrape })` for the approved
|
|
448
450
|
source-capacity plan without asking for another yes/no gate. Then
|
|
449
451
|
`confirm_lead_list` imports only the bounded review batch into the campaign
|
|
450
|
-
table. Do not confuse the source
|
|
452
|
+
table. Do not confuse the source-candidate target with the review-batch size.
|
|
451
453
|
|
|
452
454
|
The promotion/select step is required campaign state. Use post IDs from the
|
|
453
455
|
current campaign-scoped search result, not stale IDs copied from a source review
|
|
@@ -460,8 +462,8 @@ the source-list materialization.
|
|
|
460
462
|
```json
|
|
461
463
|
import_leads({
|
|
462
464
|
"campaignOfferId": "cmp_xxx",
|
|
463
|
-
"targetLeadCount":
|
|
464
|
-
"targetEngagerCount":
|
|
465
|
+
"targetLeadCount": 1000,
|
|
466
|
+
"targetEngagerCount": 1000,
|
|
465
467
|
"maxPostsToScrape": 5
|
|
466
468
|
})
|
|
467
469
|
```
|
|
@@ -474,7 +476,7 @@ After the lead list finishes and the user confirms it looks good, call:
|
|
|
474
476
|
confirm_lead_list({
|
|
475
477
|
"campaignOfferId": "cmp_xxx",
|
|
476
478
|
"jobId": "<jobId from import_leads>",
|
|
477
|
-
"targetLeadCount":
|
|
479
|
+
"targetLeadCount": 25
|
|
478
480
|
})
|
|
479
481
|
```
|
|
480
482
|
|