@sellable/install 0.1.196 → 0.1.198

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.
@@ -620,6 +620,9 @@ const CREATE_CAMPAIGN_ALLOWED_TOOLS = [
620
620
  "mcp__sellable__select_campaign_cells",
621
621
  "mcp__sellable__queue_campaign_cells",
622
622
  "mcp__sellable__wait_for_campaign_processing",
623
+ "mcp__sellable__start_prepare_campaign_messages",
624
+ "mcp__sellable__get_prepare_campaign_messages_status",
625
+ "mcp__sellable__cancel_prepare_campaign_messages",
623
626
  "mcp__sellable__revise_message_template_and_rerun",
624
627
  "mcp__sellable__update_campaign_brief",
625
628
  "mcp__sellable__update_campaign",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.196",
3
+ "version": "0.1.198",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -1,14 +1,24 @@
1
1
  ---
2
2
  name: create-ab-test
3
- description: Create a Sellable campaign A/B test from a clean source lead list.
3
+ description: Create a Sellable campaign A/B test by duplicating a full Campaign A.
4
4
  visibility: public
5
5
  allowed-tools:
6
6
  - mcp__sellable__get_auth_status
7
+ - mcp__sellable__bootstrap_create_campaign
8
+ - mcp__sellable__get_subskill_prompt
9
+ - mcp__sellable__get_subskill_asset
7
10
  - mcp__sellable__get_active_workspace
11
+ - mcp__sellable__fetch_linkedin_profile
12
+ - mcp__sellable__complete_sender_research
13
+ - mcp__sellable__create_campaign
14
+ - mcp__sellable__update_campaign_brief
15
+ - mcp__sellable__update_campaign
16
+ - mcp__sellable__save_rubrics
8
17
  - mcp__sellable__get_campaign
9
18
  - mcp__sellable__get_campaign_context
10
19
  - mcp__sellable__get_campaign_navigation_state
11
20
  - mcp__sellable__get_campaign_messages_preview
21
+ - mcp__sellable__duplicate_campaign
12
22
  - mcp__sellable__prepare_campaign_ab_test
13
23
  - mcp__sellable__load_csv_linkedin_leads
14
24
  - mcp__sellable__wait_for_lead_list_ready
@@ -24,25 +34,65 @@ campaign-message approaches from the same source list.
24
34
 
25
35
  ## Opening Contract
26
36
 
27
- Start by identifying the source campaign, the one variable being tested, and
28
- the clean source lead origin. Then prepare the split and stop for review. The
29
- goal is two review-copy campaigns with clean split source lists, not a launched
30
- campaign.
37
+ Start by identifying the campaign idea and the one variable being tested.
38
+ Campaign A must be a real, fully prepared Sellable campaign before this A/B
39
+ helper runs. If the user only supplied an idea, first run the normal
40
+ `$sellable:create-campaign` flow for Campaign A: research the sender/company,
41
+ create the campaign shell, build and approve the campaign brief, source or
42
+ attach leads when appropriate, save any approved ICP filters, and get the
43
+ message/template state into the campaign brief. Do not call
44
+ `prepare_campaign_ab_test` with only `campaignName`/`campaignBrief`.
45
+
46
+ Once Campaign A exists, the A/B step duplicates Campaign A through Sellable's
47
+ product duplicate path and applies only the B variant delta. This preserves the
48
+ approved brief, ICP filters, message setup, rubrics, and campaign-table
49
+ structure so the test differs only by the chosen variable and, if approved, the
50
+ split lead list.
31
51
 
32
52
  ## Required Flow
33
53
 
34
- 1. Confirm the source campaign ID or resolve it with `get_campaign`.
54
+ 1. Decide the source mode:
55
+ - Existing Campaign A: confirm the source campaign ID or resolve it with
56
+ `get_campaign`.
57
+ - Idea-only request: run the full `$sellable:create-campaign` workflow first,
58
+ then use the created campaign ID as `sourceCampaignId`.
35
59
  2. Confirm the A/B variable in plain language. Keep variant B as the explicit
36
60
  change and leave variant A as the control unless the user names an A change.
37
- 3. Verify the campaign has a clean source lead list. A clean source list is a
38
- lead-list table, not the generated campaign workflow table.
39
- 4. Call `prepare_campaign_ab_test` with `dryRun: true` first.
40
- 5. Review split counts, duplicate/skipped counts, campaign names, and variant
41
- brief deltas with the user.
42
- 6. Only after review, call `prepare_campaign_ab_test` without `dryRun` using the
61
+ 3. Inspect Campaign A with `get_campaign` and `get_campaign_context`. Confirm
62
+ the brief exists and includes the approved messaging/template state when the
63
+ campaign has reached message review.
64
+ 4. If Campaign A has a clean `selectedLeadListId`, ask the user whether to split
65
+ Campaign A's lead list for this A/B test:
66
+ - Split the lead list: pass that clean list as `sourceLeadListId`.
67
+ - Do not split yet: omit `sourceLeadListId`; Campaign B is a duplicate for
68
+ review and no rows are imported.
69
+ Never silently split a list just because Campaign A has one.
70
+ 5. If a source lead list is supplied, verify it is clean. A clean source list is
71
+ a lead-list or signal-lead-list table, not the generated campaign workflow
72
+ table.
73
+ 6. Call `prepare_campaign_ab_test` with `dryRun: true` first.
74
+ 7. Review split counts when applicable, campaign names, and variant brief deltas
75
+ with the user.
76
+ 8. Only after review, call `prepare_campaign_ab_test` without `dryRun` using the
43
77
  same `idempotencyKey` if one was returned or supplied.
44
- 7. Return the A and B campaign IDs, split lead-list IDs, counts, and the
45
- explicit note that both campaigns are `not_started`.
78
+ 9. Return Campaign A, duplicated Campaign B, split lead-list IDs when supplied,
79
+ counts, and the explicit note that both campaigns are `not_started`.
80
+
81
+ ## Tool Inputs
82
+
83
+ Use one of these shapes:
84
+
85
+ - No split: pass `sourceCampaignId`, `variantName`, `variantBriefDelta`, and
86
+ any optional A-variant fields. The helper treats the source campaign as A and
87
+ duplicates it for B.
88
+ - Approved split: pass `sourceCampaignId`, the approved clean
89
+ `sourceLeadListId`, `variantName`, `variantBriefDelta`, and any optional split
90
+ or A-variant fields. The helper creates deterministic A/B split lead lists and
91
+ review-copy campaigns from Campaign A.
92
+
93
+ Do not pass `campaignName`, `campaignBrief`, `offerPositioning`,
94
+ `clientProspectId`, or `senderLinkedinUrl` to `prepare_campaign_ab_test`.
95
+ Those belong to the full create-campaign workflow that creates Campaign A.
46
96
 
47
97
  ## Anti-Patterns
48
98
 
@@ -60,18 +110,19 @@ campaign.
60
110
  If the source campaign has no clean source lead list, or the source list is
61
111
  polluted with workflow/output columns, ask for the original CSV or clean source
62
112
  list. Use `load_csv_linkedin_leads`; it strips Sellable workflow columns if a
63
- contaminated CSV is supplied, then creates a clean lead list. After the clean
64
- source is confirmed, retry `prepare_campaign_ab_test`.
113
+ contaminated CSV is supplied, then creates a clean lead list. If no clean source
114
+ is available, omit `sourceLeadListId` and create only the B duplicate for review.
65
115
 
66
116
  ## Output Contract
67
117
 
68
118
  Report:
69
119
 
70
- - source campaign ID
71
- - source lead-list ID
72
- - split strategy and counts
73
- - duplicate/skipped lead counts
74
- - A review campaign ID and split lead-list ID
75
- - B review campaign ID and split lead-list ID
120
+ - source Campaign A ID
121
+ - source lead-list ID when supplied
122
+ - split strategy and counts when a source lead list was supplied
123
+ - duplicate/skipped lead counts when a source lead list was supplied
124
+ - Campaign A ID, or A review-copy campaign ID when a split was approved
125
+ - duplicated Campaign B ID
126
+ - split lead-list IDs when supplied
76
127
  - variant difference
77
128
  - `launchState: not_started` for both campaigns
@@ -46,6 +46,9 @@ allowed-tools:
46
46
  - mcp__sellable__select_campaign_cells
47
47
  - mcp__sellable__queue_campaign_cells
48
48
  - mcp__sellable__wait_for_campaign_processing
49
+ - mcp__sellable__start_prepare_campaign_messages
50
+ - mcp__sellable__get_prepare_campaign_messages_status
51
+ - mcp__sellable__cancel_prepare_campaign_messages
49
52
  - mcp__sellable__revise_message_template_and_rerun
50
53
  - mcp__sellable__update_campaign_brief
51
54
  - mcp__sellable__update_campaign
@@ -89,6 +92,18 @@ When filters are chosen, save rubrics, get filter approval, then wait for
89
92
  message-template approval before enrichment/filtering or Generate Message cells.
90
93
  After filter approval, Filter Leads should show `Filters saved + waiting for
91
94
  message approval` until the template is approved.
95
+ After message approval, use `start_prepare_campaign_messages` for target-ready
96
+ message preparation such as "prepare 100 messages, checking up to 300 rows".
97
+ Treat `campaignId` as `CampaignOffer.id`, keep the default
98
+ `approvalMode:"mark_ready"` unless the user explicitly asks to flip Approved
99
+ cells, and poll `get_prepare_campaign_messages_status` for checked rows,
100
+ prepared/approved count, target, row budget remaining, and stop reason. Low
101
+ level selector/queue tools are diagnostics and recovery only for this lane. If
102
+ the user asks to stop preparation, the target is wrong, or status shows the
103
+ wrong campaign/table, call `cancel_prepare_campaign_messages`; otherwise do not
104
+ cancel a healthy prepare run.
105
+ Never call `start_campaign` from Prepare Messages; final launch remains a
106
+ separate explicit user greenlight.
92
107
  Use Template is the default message path; AI Generated is only an explicit
93
108
  opt-out.
94
109
 
@@ -955,7 +970,8 @@ updates.
955
970
  observation state,
956
971
  `auto-execute-messaging` after at least one row passes and initial campaign-row
957
972
  messages are being generated or reviewed, `awaiting-user-greenlight` only
958
- after generated campaign-row messages are approved, `settings` for sender
973
+ after generated campaign-row messages are approved and the Prepare Messages
974
+ job has reported compact checked/prepared/stop status, `settings` for sender
959
975
  selection, `sequence` after sender attach, and `send` once the recommended
960
976
  sequence is attached. Do not advance the step backward.
961
977
  7. Keep `selectedLeadListId` as the source list and `workflowTableId` as the