@sellable/install 0.1.197 → 0.1.199

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.197",
3
+ "version": "0.1.199",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -1,19 +1,74 @@
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__start_cli_login
8
+ - mcp__sellable__wait_for_cli_login
9
+ - mcp__sellable__bootstrap_create_campaign
10
+ - mcp__sellable__get_subskill_prompt
11
+ - mcp__sellable__get_subskill_asset
12
+ - mcp__sellable__search_subskill_prompts
13
+ - mcp__sellable__get_provider_prompt
14
+ - mcp__sellable__get_source_scout_registry
15
+ - mcp__sellable__get_post_find_leads_scout_registry
7
16
  - mcp__sellable__get_active_workspace
17
+ - mcp__sellable__list_workspaces
18
+ - mcp__sellable__set_active_workspace
19
+ - mcp__sellable__list_senders
20
+ - mcp__sellable__get_sender
21
+ - mcp__sellable__fetch_linkedin_profile
22
+ - mcp__sellable__fetch_linkedin_posts
23
+ - mcp__sellable__get_linkedin_profile
24
+ - mcp__sellable__fetch_company
25
+ - mcp__sellable__fetch_company_posts
26
+ - mcp__sellable__complete_sender_research
27
+ - mcp__sellable__lookup_sales_nav_filter
28
+ - mcp__sellable__search_sales_nav
29
+ - mcp__sellable__search_prospeo
30
+ - mcp__sellable__search_prospeo_companies
31
+ - mcp__sellable__confirm_prospeo_company_accounts
32
+ - mcp__sellable__search_harvest_jobs
33
+ - mcp__sellable__confirm_harvest_job_companies
34
+ - mcp__sellable__search_signals
35
+ - mcp__sellable__fetch_post_engagers
36
+ - mcp__sellable__enrich_with_prospeo
37
+ - mcp__sellable__bulk_enrich_with_prospeo
38
+ - mcp__sellable__save_domain_filters
39
+ - mcp__sellable__add_rubric_item
40
+ - mcp__sellable__upsert_rubric
41
+ - mcp__sellable__set_headline_icp_criteria
42
+ - mcp__sellable__check_rubric
43
+ - mcp__sellable__create_campaign
44
+ - mcp__sellable__update_campaign_brief
45
+ - mcp__sellable__update_campaign
46
+ - mcp__sellable__save_rubrics
8
47
  - mcp__sellable__get_campaign
9
48
  - mcp__sellable__get_campaign_context
49
+ - mcp__sellable__get_campaign_framework
10
50
  - mcp__sellable__get_campaign_navigation_state
11
51
  - mcp__sellable__get_campaign_messages_preview
52
+ - mcp__sellable__get_campaign_table_schema
53
+ - mcp__sellable__select_campaign_cells
54
+ - mcp__sellable__queue_campaign_cells
55
+ - mcp__sellable__wait_for_campaign_processing
56
+ - mcp__sellable__revise_message_template_and_rerun
57
+ - mcp__sellable__confirm_lead_list
58
+ - mcp__sellable__import_leads
59
+ - mcp__sellable__duplicate_campaign
12
60
  - mcp__sellable__prepare_campaign_ab_test
61
+ - mcp__sellable__list_dnc_entries
62
+ - mcp__sellable__load_csv_dnc_entries
13
63
  - mcp__sellable__load_csv_linkedin_leads
64
+ - mcp__sellable__load_csv_domains
14
65
  - mcp__sellable__wait_for_lead_list_ready
66
+ - mcp__sellable__wait_for_campaign_table_ready
67
+ - mcp__sellable__get_rows
15
68
  - mcp__sellable__get_table_rows
16
69
  - mcp__sellable__get_rows_minimal
70
+ - mcp__sellable__attach_sequence
71
+ - mcp__sellable__attach_recommended_sequence
17
72
  ---
18
73
 
19
74
  # Sellable Create A/B Test
@@ -24,46 +79,70 @@ campaign-message approaches from the same source list.
24
79
 
25
80
  ## Opening Contract
26
81
 
27
- Start by identifying the campaign idea and the one variable being tested. A
28
- source campaign and clean source lead list are both optional: use an existing
29
- campaign when the user already has one, use a clean source lead list when leads
30
- are already available, or use only the idea by writing a campaign name and base
31
- brief for A. The tool creates A first, duplicates A into B, applies the B delta,
32
- and stops for review. The goal is two review-copy campaigns, not a launched
33
- campaign.
82
+ Start by identifying the campaign idea and the one variable being tested.
83
+ Campaign A must be a real, fully prepared Sellable campaign before this A/B
84
+ helper runs. If the user only supplied an idea, this skill must first execute
85
+ the normal `$sellable:create-campaign` workflow for Campaign A in the same run:
86
+ bootstrap create-campaign, load `create-campaign-v2` and
87
+ `core/flow.v2.json`, research the sender/company, create the campaign shell,
88
+ build and approve the campaign brief, source or attach leads when appropriate,
89
+ save any approved ICP filters, and get the message/template state into the
90
+ campaign brief. Do not call
91
+ `prepare_campaign_ab_test` with only `campaignName`/`campaignBrief`.
92
+
93
+ Once Campaign A exists, the A/B step duplicates Campaign A through Sellable's
94
+ product duplicate path and applies only the B variant delta. This preserves the
95
+ approved brief, ICP filters, message setup, rubrics, and campaign-table
96
+ structure so the test differs only by the chosen variable and, if approved, the
97
+ split lead list.
34
98
 
35
99
  ## Required Flow
36
100
 
37
101
  1. Decide the source mode:
38
- - Existing campaign mode: confirm the source campaign ID or resolve it with
102
+ - Existing Campaign A: confirm the source campaign ID or resolve it with
39
103
  `get_campaign`.
40
- - Idea-first mode: write a proper campaign name and base campaign brief from
41
- the user's idea. If the user also has leads, confirm the clean source
42
- lead-list ID or use `load_csv_linkedin_leads` first.
104
+ - Idea-only request: run the full create-campaign workflow inline first,
105
+ through `bootstrap_create_campaign`, `get_subskill_prompt({
106
+ subskillName: "create-campaign-v2" })`, and `get_subskill_asset({
107
+ subskillName: "create-campaign-v2", assetPath: "core/flow.v2.json" })`.
108
+ Use the created campaign ID as `sourceCampaignId`.
43
109
  2. Confirm the A/B variable in plain language. Keep variant B as the explicit
44
110
  change and leave variant A as the control unless the user names an A change.
45
- 3. If a source lead list is supplied, verify it is clean. A clean source list is
111
+ 3. Inspect Campaign A with `get_campaign` and `get_campaign_context`. Confirm
112
+ the brief exists and includes the approved messaging/template state when the
113
+ campaign has reached message review.
114
+ 4. If Campaign A has a clean `selectedLeadListId`, ask the user whether to split
115
+ Campaign A's lead list for this A/B test:
116
+ - Split the lead list: pass that clean list as `sourceLeadListId`.
117
+ - Do not split yet: omit `sourceLeadListId`; Campaign B is a duplicate for
118
+ review and no rows are imported.
119
+ Never silently split a list just because Campaign A has one.
120
+ 5. If a source lead list is supplied, verify it is clean. A clean source list is
46
121
  a lead-list or signal-lead-list table, not the generated campaign workflow
47
122
  table.
48
- 4. Call `prepare_campaign_ab_test` with `dryRun: true` first.
49
- 5. Review split counts, duplicate/skipped counts, campaign names, and variant
50
- brief deltas with the user.
51
- 6. Only after review, call `prepare_campaign_ab_test` without `dryRun` using the
123
+ 6. Call `prepare_campaign_ab_test` with `dryRun: true` first.
124
+ 7. Review split counts when applicable, campaign names, and variant brief deltas
125
+ with the user.
126
+ 8. Only after review, call `prepare_campaign_ab_test` without `dryRun` using the
52
127
  same `idempotencyKey` if one was returned or supplied.
53
- 7. Return the A and B campaign IDs, split lead-list IDs, counts, and the
54
- explicit note that both campaigns are `not_started`.
128
+ 9. Return Campaign A, duplicated Campaign B, split lead-list IDs when supplied,
129
+ counts, and the explicit note that both campaigns are `not_started`.
55
130
 
56
131
  ## Tool Inputs
57
132
 
58
133
  Use one of these shapes:
59
134
 
60
- - Existing campaign mode: pass `sourceCampaignId`, `variantName`,
61
- `variantBriefDelta`, and any optional split or A-variant fields.
62
- - Idea-first mode: omit `sourceCampaignId`, pass `campaignName`,
63
- `campaignBrief`, `variantName`, and `variantBriefDelta`. If a clean lead list
64
- is available, also pass `sourceLeadListId`; otherwise leave it out. The tool
65
- creates the A campaign, then duplicates A to create B and applies the B brief
66
- delta.
135
+ - No split: pass `sourceCampaignId`, `variantName`, `variantBriefDelta`, and
136
+ any optional A-variant fields. The helper treats the source campaign as A and
137
+ duplicates it for B.
138
+ - Approved split: pass `sourceCampaignId`, the approved clean
139
+ `sourceLeadListId`, `variantName`, `variantBriefDelta`, and any optional split
140
+ or A-variant fields. The helper creates deterministic A/B split lead lists and
141
+ review-copy campaigns from Campaign A.
142
+
143
+ Do not pass `campaignName`, `campaignBrief`, `offerPositioning`,
144
+ `clientProspectId`, or `senderLinkedinUrl` to `prepare_campaign_ab_test`.
145
+ Those belong to the full create-campaign workflow that creates Campaign A.
67
146
 
68
147
  ## Anti-Patterns
69
148
 
@@ -82,18 +161,18 @@ If the source campaign has no clean source lead list, or the source list is
82
161
  polluted with workflow/output columns, ask for the original CSV or clean source
83
162
  list. Use `load_csv_linkedin_leads`; it strips Sellable workflow columns if a
84
163
  contaminated CSV is supplied, then creates a clean lead list. If no clean source
85
- is available, continue in idea-first mode without `sourceLeadListId`.
164
+ is available, omit `sourceLeadListId` and create only the B duplicate for review.
86
165
 
87
166
  ## Output Contract
88
167
 
89
168
  Report:
90
169
 
91
- - source campaign ID, or note that the A campaign was created as the source
92
- campaign when no source campaign was provided
170
+ - source Campaign A ID
93
171
  - source lead-list ID when supplied
94
172
  - split strategy and counts when a source lead list was supplied
95
173
  - duplicate/skipped lead counts when a source lead list was supplied
96
- - A review campaign ID and split lead-list ID when supplied
97
- - B review campaign ID and split lead-list ID when supplied
174
+ - Campaign A ID, or A review-copy campaign ID when a split was approved
175
+ - duplicated Campaign B ID
176
+ - split lead-list IDs when supplied
98
177
  - variant difference
99
178
  - `launchState: not_started` for both campaigns