@sellable/install 0.1.199 → 0.1.201

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.199",
3
+ "version": "0.1.201",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -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
@@ -90,20 +90,35 @@ execution slice configures filters and messages. After that, the user chooses
90
90
  whether to use filters or skip.
91
91
  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
+ Filter work stays in the parent thread and must inspect visible campaign rows
94
+ with `get_rows_minimal` / `get_rows` before drafting and saving rubrics; use at
95
+ most one direct `enrich_with_prospeo` sample when row evidence is too thin.
93
96
  After filter approval, Filter Leads should show `Filters saved + waiting for
94
97
  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.
98
+ The default path stays the existing first campaign-table execution slice:
99
+ review the normal `reviewBatchLimit:15`, approve reviewed draft rows, then move
100
+ to Settings/sequence/final greenlight. Only call
101
+ `start_campaign_message_preparation` when the user explicitly asks for more
102
+ prepared messages or a send count. If the user says "prepare/generate X
103
+ messages", set `targetPreparedMessages:X`, omit `maxRowsToCheck`, and keep
104
+ `approvalMode:"mark_ready"`. The backend calibrates on at least 100 rows,
105
+ estimates the row budget from observed rubric/pass yield, caps
106
+ `maxRowsToCheck` at 2500, then adapts later batches up to 250 rows while
107
+ recalculating yield. Poll
108
+ `get_campaign_message_preparation_status` for preparation-job status: checked
109
+ rows, passed/prepared/approved count, target, estimated row budget remaining,
110
+ and stop reason. If the user says "approve X messages", use
111
+ `approvalMode:"approve"` but still do not launch. If the user says "schedule X
112
+ sends", use `approvalMode:"approve"` to approve exactly the bounded X-message
113
+ cohort during preparation, then continue through sender, sequence, and final
114
+ launch greenlight; the launch path must verify that bounded cohort and must not
115
+ broad approve-all.
116
+ Treat `campaignId` as `CampaignOffer.id`. Low level selector/queue tools are
117
+ diagnostics and recovery only for this lane. If the user asks to stop
118
+ preparation, the target is wrong, or status shows the wrong campaign/table, call
119
+ `cancel_campaign_message_preparation`; otherwise do not cancel a healthy prepare
120
+ run. Never call `start_campaign` from message preparation; final launch remains
121
+ a separate explicit user greenlight.
107
122
  Use Template is the default message path; AI Generated is only an explicit
108
123
  opt-out.
109
124
 
@@ -470,14 +485,14 @@ automation just because a watch link exists. If `create_campaign` returns
470
485
  `watchHandoff.markdown`, print that exact value once, directly before the brief
471
486
  approval question. It will use the URL mode to say Codex or Claude Code:
472
487
 
473
- ````markdown
488
+ ```markdown
474
489
  > **WATCH CODEX BUILD THE CAMPAIGN LIVE**
475
490
  >
476
491
  > [Open live campaign builder]({watchUrl})
477
492
  >
478
493
  > Keep this chat open. I'll ask approval questions here before making decisions
479
494
  > that need your judgment.
480
- ````
495
+ ```
481
496
 
482
497
  The rendered callout is intentional: rendered chat clients highlight the
483
498
  headline, link, and note without treating it as a code block, and plain terminals
@@ -959,7 +974,7 @@ updates.
959
974
  is ready.
960
975
  Do not ask the user to approve the brief before shell creation unless they
961
976
  explicitly requested a no-write draft; the shell itself is the review surface.
962
- 6. The main thread owns watch navigation. Call
977
+ 7. The main thread owns watch navigation. Call
963
978
  `mcp__sellable__update_campaign({ campaignId, currentStep })` before major
964
979
  visible work so the user can watch progress in the app: `create-offer` for
965
980
  the brief, `pick-provider` or the selected provider step while sourcing,
@@ -974,9 +989,9 @@ updates.
974
989
  job has reported compact checked/prepared/stop status, `settings` for sender
975
990
  selection, `sequence` after sender attach, and `send` once the recommended
976
991
  sequence is attached. Do not advance the step backward.
977
- 7. Keep `selectedLeadListId` as the source list and `workflowTableId` as the
992
+ 8. Keep `selectedLeadListId` as the source list and `workflowTableId` as the
978
993
  campaign table. Do not use disk files as the post-mint source of truth.
979
- 8. Do not ask the user to run another command.
994
+ 9. Do not ask the user to run another command.
980
995
 
981
996
  ## Fallback
982
997