@sellable/install 0.1.198 → 0.1.200

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.
@@ -31,7 +31,7 @@ function getInstallVersion() {
31
31
  }
32
32
  }
33
33
 
34
- const CODEX_PLUGIN_VERSION = "0.1.41";
34
+ const CODEX_PLUGIN_VERSION = "0.1.42";
35
35
  const CODEX_PLUGIN_COMPAT_VERSIONS = [
36
36
  "0.1.8",
37
37
  "0.1.9",
@@ -65,6 +65,8 @@ const CODEX_PLUGIN_COMPAT_VERSIONS = [
65
65
  "0.1.37",
66
66
  "0.1.38",
67
67
  "0.1.39",
68
+ "0.1.40",
69
+ "0.1.41",
68
70
  ];
69
71
  const INSTALL_PACKAGE_SPEC =
70
72
  process.env.SELLABLE_INSTALL_PACKAGE_SPEC || "@sellable/install@latest";
@@ -620,9 +622,9 @@ const CREATE_CAMPAIGN_ALLOWED_TOOLS = [
620
622
  "mcp__sellable__select_campaign_cells",
621
623
  "mcp__sellable__queue_campaign_cells",
622
624
  "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",
625
+ "mcp__sellable__start_campaign_message_preparation",
626
+ "mcp__sellable__get_campaign_message_preparation_status",
627
+ "mcp__sellable__cancel_campaign_message_preparation",
626
628
  "mcp__sellable__revise_message_template_and_rerun",
627
629
  "mcp__sellable__update_campaign_brief",
628
630
  "mcp__sellable__update_campaign",
@@ -651,6 +653,13 @@ function allowedToolsYaml(tools) {
651
653
  return tools.map((tool) => ` - ${tool}`).join("\n");
652
654
  }
653
655
 
656
+ function yamlString(value) {
657
+ return JSON.stringify(String(value));
658
+ }
659
+
660
+ const FOUNDATION_SKILL_DESCRIPTION =
661
+ "Build or update durable founder/company memory: voice, values, proof, stories, positioning, and writing rules.";
662
+
654
663
  function codexSkillOpenAiYaml(displayName, description) {
655
664
  return `interface:
656
665
  display_name: "${displayName.replaceAll('"', '\\"')}"
@@ -1238,7 +1247,7 @@ Use \`prepare_campaign_ab_test\` to create clean A/B split lead lists and review
1238
1247
  function genericSellableSkillMd({ name, title, description }) {
1239
1248
  return `---
1240
1249
  name: ${name}
1241
- description: ${description}
1250
+ description: ${yamlString(description)}
1242
1251
  allowed-tools:
1243
1252
  - mcp__sellable__get_auth_status
1244
1253
  - mcp__sellable__get_subskill_prompt
@@ -1277,7 +1286,7 @@ If subskill lookup fails, use \`mcp__sellable__search_subskill_prompts({ query:
1277
1286
  function foundationSkillMd() {
1278
1287
  return `---
1279
1288
  name: foundation
1280
- description: Build or update durable founder/company memory: voice, values, proof, stories, positioning, and writing rules.
1289
+ description: ${yamlString(FOUNDATION_SKILL_DESCRIPTION)}
1281
1290
  allowed-tools:
1282
1291
  - mcp__sellable__get_subskill_prompt
1283
1292
  - mcp__sellable__get_subskill_asset
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.198",
3
+ "version": "0.1.200",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -4,26 +4,71 @@ description: Create a Sellable campaign A/B test by duplicating a full Campaign
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
7
9
  - mcp__sellable__bootstrap_create_campaign
8
10
  - mcp__sellable__get_subskill_prompt
9
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
10
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
11
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
12
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
13
43
  - mcp__sellable__create_campaign
14
44
  - mcp__sellable__update_campaign_brief
15
45
  - mcp__sellable__update_campaign
16
46
  - mcp__sellable__save_rubrics
17
47
  - mcp__sellable__get_campaign
18
48
  - mcp__sellable__get_campaign_context
49
+ - mcp__sellable__get_campaign_framework
19
50
  - mcp__sellable__get_campaign_navigation_state
20
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
21
59
  - mcp__sellable__duplicate_campaign
22
60
  - mcp__sellable__prepare_campaign_ab_test
61
+ - mcp__sellable__list_dnc_entries
62
+ - mcp__sellable__load_csv_dnc_entries
23
63
  - mcp__sellable__load_csv_linkedin_leads
64
+ - mcp__sellable__load_csv_domains
24
65
  - mcp__sellable__wait_for_lead_list_ready
66
+ - mcp__sellable__wait_for_campaign_table_ready
67
+ - mcp__sellable__get_rows
25
68
  - mcp__sellable__get_table_rows
26
69
  - mcp__sellable__get_rows_minimal
70
+ - mcp__sellable__attach_sequence
71
+ - mcp__sellable__attach_recommended_sequence
27
72
  ---
28
73
 
29
74
  # Sellable Create A/B Test
@@ -36,11 +81,13 @@ campaign-message approaches from the same source list.
36
81
 
37
82
  Start by identifying the campaign idea and the one variable being tested.
38
83
  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
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
44
91
  `prepare_campaign_ab_test` with only `campaignName`/`campaignBrief`.
45
92
 
46
93
  Once Campaign A exists, the A/B step duplicates Campaign A through Sellable's
@@ -54,8 +101,11 @@ split lead list.
54
101
  1. Decide the source mode:
55
102
  - Existing Campaign A: confirm the source campaign ID or resolve it with
56
103
  `get_campaign`.
57
- - Idea-only request: run the full `$sellable:create-campaign` workflow first,
58
- then use the created campaign ID as `sourceCampaignId`.
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`.
59
109
  2. Confirm the A/B variable in plain language. Keep variant B as the explicit
60
110
  change and leave variant A as the control unless the user names an A change.
61
111
  3. Inspect Campaign A with `get_campaign` and `get_campaign_context`. Confirm
@@ -46,9 +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
+ - mcp__sellable__start_campaign_message_preparation
50
+ - mcp__sellable__get_campaign_message_preparation_status
51
+ - mcp__sellable__cancel_campaign_message_preparation
52
52
  - mcp__sellable__revise_message_template_and_rerun
53
53
  - mcp__sellable__update_campaign_brief
54
54
  - mcp__sellable__update_campaign
@@ -92,18 +92,28 @@ When filters are chosen, save rubrics, get filter approval, then wait for
92
92
  message-template approval before enrichment/filtering or Generate Message cells.
93
93
  After filter approval, Filter Leads should show `Filters saved + waiting for
94
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.
95
+ The default path stays the existing first campaign-table execution slice:
96
+ review the normal `reviewBatchLimit:15`, approve reviewed draft rows, then move
97
+ to Settings/sequence/final greenlight. Only call
98
+ `start_campaign_message_preparation` when the user explicitly asks for more
99
+ prepared messages or a send count. If the user says "prepare/generate X
100
+ messages", set `targetPreparedMessages:X`, let the backend derive
101
+ `maxRowsToCheck:min(2500,max(300,X*5))`, and keep
102
+ `approvalMode:"mark_ready"`. The backend samples up to 100 rows first, then
103
+ adapts later batches up to 250 rows while recalculating yield. Poll
104
+ `get_campaign_message_preparation_status` for preparation-job status: checked
105
+ rows, prepared/approved count, target, row budget remaining, and stop reason. If
106
+ the user says "approve X messages", use `approvalMode:"approve"` but still do
107
+ not launch. If the user says "schedule X sends", use `approvalMode:"approve"`
108
+ to approve exactly the bounded X-message cohort during preparation, then
109
+ continue through sender, sequence, and final launch greenlight; the launch path
110
+ must verify that bounded cohort and must not broad approve-all.
111
+ Treat `campaignId` as `CampaignOffer.id`. Low level selector/queue tools are
112
+ diagnostics and recovery only for this lane. If the user asks to stop
113
+ preparation, the target is wrong, or status shows the wrong campaign/table, call
114
+ `cancel_campaign_message_preparation`; otherwise do not cancel a healthy prepare
115
+ run. Never call `start_campaign` from message preparation; final launch remains
116
+ a separate explicit user greenlight.
107
117
  Use Template is the default message path; AI Generated is only an explicit
108
118
  opt-out.
109
119