@sellable/install 0.1.196 → 0.1.197

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.197",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -24,18 +24,27 @@ campaign-message approaches from the same source list.
24
24
 
25
25
  ## Opening Contract
26
26
 
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
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
30
33
  campaign.
31
34
 
32
35
  ## Required Flow
33
36
 
34
- 1. Confirm the source campaign ID or resolve it with `get_campaign`.
37
+ 1. Decide the source mode:
38
+ - Existing campaign mode: confirm the source campaign ID or resolve it with
39
+ `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.
35
43
  2. Confirm the A/B variable in plain language. Keep variant B as the explicit
36
44
  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.
45
+ 3. If a source lead list is supplied, verify it is clean. A clean source list is
46
+ a lead-list or signal-lead-list table, not the generated campaign workflow
47
+ table.
39
48
  4. Call `prepare_campaign_ab_test` with `dryRun: true` first.
40
49
  5. Review split counts, duplicate/skipped counts, campaign names, and variant
41
50
  brief deltas with the user.
@@ -44,6 +53,18 @@ campaign.
44
53
  7. Return the A and B campaign IDs, split lead-list IDs, counts, and the
45
54
  explicit note that both campaigns are `not_started`.
46
55
 
56
+ ## Tool Inputs
57
+
58
+ Use one of these shapes:
59
+
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.
67
+
47
68
  ## Anti-Patterns
48
69
 
49
70
  - Do not call `export_table_csv` from an enriched/generated campaign workflow
@@ -60,18 +81,19 @@ campaign.
60
81
  If the source campaign has no clean source lead list, or the source list is
61
82
  polluted with workflow/output columns, ask for the original CSV or clean source
62
83
  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`.
84
+ contaminated CSV is supplied, then creates a clean lead list. If no clean source
85
+ is available, continue in idea-first mode without `sourceLeadListId`.
65
86
 
66
87
  ## Output Contract
67
88
 
68
89
  Report:
69
90
 
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
91
+ - source campaign ID, or note that the A campaign was created as the source
92
+ campaign when no source campaign was provided
93
+ - source lead-list ID when supplied
94
+ - split strategy and counts when a source lead list was supplied
95
+ - 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
76
98
  - variant difference
77
99
  - `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