@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.
Files changed (34) hide show
  1. package/README.md +19 -6
  2. package/agents/post-find-leads-message-scout.md +44 -0
  3. package/agents/registry.json +2 -2
  4. package/agents/source-scout-linkedin-engagement.md +4 -3
  5. package/agents/source-scout-prospeo-contact.md +1 -1
  6. package/agents/source-scout-sales-nav.md +3 -2
  7. package/dist/index-dev.js +0 -0
  8. package/dist/index.js +0 -0
  9. package/dist/tools/leads.js +168 -14
  10. package/dist/tools/processing.d.ts +1 -0
  11. package/dist/tools/prompts.js +3 -3
  12. package/dist/tools/rubrics.js +14 -9
  13. package/package.json +1 -1
  14. package/skills/create-campaign/SKILL.md +55 -34
  15. package/skills/create-campaign-v2/SKILL.md +59 -9
  16. package/skills/create-campaign-v2/SOUL.md +20 -12
  17. package/skills/create-campaign-v2/core/auto-execute.README.md +4 -4
  18. package/skills/create-campaign-v2/core/auto-execute.yaml +4 -4
  19. package/skills/create-campaign-v2/core/flow.v2.json +55 -19
  20. package/skills/create-campaign-v2/references/approval-gate-framing.md +1 -1
  21. package/skills/create-campaign-v2/references/filter-leads.md +42 -0
  22. package/skills/create-campaign-v2/references/final-handoff-contract.md +5 -5
  23. package/skills/create-campaign-v2/references/message-review-safety-gate.md +88 -13
  24. package/skills/create-campaign-v2/references/sample-validation-loop.md +18 -15
  25. package/skills/create-campaign-v2/references/step-13-import-leads.md +9 -6
  26. package/skills/create-campaign-v2/references/step-15-re-cascade.md +2 -3
  27. package/skills/create-campaign-v2/references/watch-guide-narration.md +39 -24
  28. package/skills/create-campaign-v2/references/watch-link-handoff.md +1 -1
  29. package/skills/create-campaign-v2-tail/SKILL.md +26 -13
  30. package/skills/load-voice/SKILL.md +129 -0
  31. package/skills/providers/prospeo.md +2 -1
  32. package/skills/providers/sales-nav.md +4 -2
  33. package/skills/providers/signal-discovery.md +12 -10
  34. 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
- - After the list finishes and the user confirms it looks good, call `confirm_lead_list` with the `jobId` and `targetLeadCount` from `import_leads` to import into the campaign table.
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: 100})
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: 100})
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 300 unless the campaign says otherwise
101
+ count, defaulting to 150 for Signal Discovery unless the campaign says
102
+ otherwise
102
103
  - `requiredEngagersToScrape`
103
- - `ceil(targetGoodFitLeads / sampledFitRate)`; for example 20 good-fit
104
- prospects per 100 engagers means a 300-good-fit source target needs about
105
- 1,500 engagers scraped
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,875-2,300 for a 300-good-fit target after cleanup, `avgReachableEngagersPerPost`: 240, `goodFitProspectsPerPost`: ~31-38, `postsNeededForTarget`: ~8-10, `recentStrongPostCount`: 15-25, `freshEnoughPostCount`: 8-12, `projectedRange`: 300-380 from selected posts"
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 300 unless the campaign says otherwise)
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 scrape target with the 15-row review batch.
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": 300,
464
- "targetEngagerCount": 1500,
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": 15
479
+ "targetLeadCount": 25
478
480
  })
479
481
  ```
480
482
 
@@ -0,0 +1,9 @@
1
+ {
2
+ "parallelMode": "wide",
3
+ "agentCount": 6,
4
+ "maxToolCallsPerAgent": 2,
5
+ "senderMaxAgents": 2,
6
+ "senderMaxToolCallsPerAgent": 3,
7
+ "progressMode": true,
8
+ "debugMode": true
9
+ }