@sellable/mcp 0.1.127 → 0.1.129

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.
@@ -35,6 +35,7 @@ stage labels. The driver label comes from the watch URL mode (`mode=claude` or
35
35
  Apollo, or existing list.
36
36
  - During search iteration, say what you tried, what you are trying next, what
37
37
  sample you are checking, and why that helps this campaign.
38
+ - At filter choice, do not say filtering the batch before rubrics are saved.
38
39
  - Avoid internal terms: MCP, tool, currentStep, workflow table, scout, debug.
39
40
  - Do not invent time estimates.
40
41
 
@@ -81,7 +82,7 @@ Default source funnel:
81
82
  "stage": "find-leads",
82
83
  "headline": "Choosing the lead source",
83
84
  "visibleState": "The browser is on Pick Provider while Codex explains the source path before opening a provider lane.",
84
- "agentIntent": "Codex will start with Signal Discovery when warm LinkedIn engagement looks plausible, then switch to Sales Nav or Prospeo only if the quick viability math fails.",
85
+ "agentIntent": "Codex will start with people engaging with relevant LinkedIn posts when that looks plausible, then switch to Sales Nav to find ICP people actively posting on LinkedIn, then search by titles, and use Prospeo for a broader account/contact path. Sales Nav with recent activity remains the first LinkedIn fallback.",
85
86
  "nextAction": "Review source",
86
87
  "safety": "No leads import until you approve the source."
87
88
  }
@@ -191,10 +192,10 @@ After review batch import:
191
192
  ```json
192
193
  {
193
194
  "stage": "fit-message",
194
- "headline": "Added to Campaign",
195
- "visibleState": "The first review batch is in the campaign.",
196
- "agentIntent": "Codex is adding fit filters to keep every send qualified while drafting the first message in the background.",
197
- "nextAction": "Review fit rules and message",
195
+ "headline": "Do you want filters?",
196
+ "visibleState": "The first review batch is in the campaign. The list is ready to decide whether extra filtering is worth it.",
197
+ "agentIntent": "Codex is asking whether you want to further filter these leads before message review. The Message Draft Builder may prepare a template in the background, but review waits until the filter path is settled.",
198
+ "nextAction": "Choose filters or skip",
198
199
  "safety": "Nothing enriches, validates, or sends until the message is ready and approved.",
199
200
  "workerStatuses": {
200
201
  "leadFitBuilder": "running",
@@ -204,8 +205,11 @@ After review batch import:
204
205
  ```
205
206
 
206
207
  Use this after the selected review rows are present and before filters are
207
- saved. This is add-filters intent, not active filtering. `enableICPFilters`
208
- only becomes true after active filter criteria are saved.
208
+ saved. This is add-filters intent, not active filtering. Tell the user to
209
+ Choose filters or skip, and do not say filtering the batch before rubrics are
210
+ saved. When the user chooses filters, immediately persist
211
+ `enableICPFilters: true` and move to `create-icp-rubric` so the watched app
212
+ shows Filter Rules while Codex defines the rules in chat.
209
213
 
210
214
  Fit + message:
211
215
 
@@ -228,14 +232,27 @@ Review ready:
228
232
  ```json
229
233
  {
230
234
  "stage": "review-ready",
231
- "headline": "Review fit and message",
232
- "visibleState": "The fit rules and message sample are ready.",
233
- "agentIntent": "Approve them or ask for changes in chat.",
235
+ "headline": "Choose message mode",
236
+ "visibleState": "The Messages step shows Use Template and AI Generated.",
237
+ "agentIntent": "Use Template is recommended. AI Generated is an explicit opt-out that cancels or ignores the background template draft.",
234
238
  "nextAction": "Validation",
235
239
  "safety": "Codex will only continue after you approve."
236
240
  }
237
241
  ```
238
242
 
243
+ Messages waiting for template:
244
+
245
+ ```json
246
+ {
247
+ "stage": "review-ready",
248
+ "headline": "Waiting for the template",
249
+ "visibleState": "Use Template is selected, but the Message Draft Builder is still finishing.",
250
+ "agentIntent": "Codex is waiting for the Message Draft Builder and will not ask for approval until the template can be reviewed.",
251
+ "nextAction": "Review template",
252
+ "safety": "Late template output must not overwrite campaign state if AI Generated was selected."
253
+ }
254
+ ```
255
+
239
256
  Blocked/recovering:
240
257
 
241
258
  ```json
@@ -51,9 +51,13 @@ Create and save a comprehensive lead scoring rubric that:
51
51
 
52
52
  ## Rubric Validation + Results
53
53
 
54
- - `mcp__sellable__check_rubric` - Queue enrichment + scoring sample (default 7)
54
+ - `mcp__sellable__get_rows_minimal` - Read bounded review-batch cell IDs
55
+ - `mcp__sellable__queue_cells` - Queue only bounded `enrichCellId` values
55
56
  - `mcp__sellable__wait_for_rubric_results` - Poll pass-rate results
56
57
 
58
+ `check_rubric` is legacy/recovery only. Do not use it in normal
59
+ create-campaign-v2 runs.
60
+
57
61
  </tools>
58
62
 
59
63
  <rubric_structure>
@@ -117,7 +121,7 @@ Required fields:
117
121
 
118
122
  - If **Keep & apply**:
119
123
  - Call `update_campaign({ campaignId, enableICPFilters: true, currentStep: "apply-icp-rubric" })`
120
- - Then proceed to Phase 5 (enrich + score a sample).
124
+ - Then proceed to Phase 5 (queue bounded enrichment cells + wait for score results).
121
125
 
122
126
  **If no campaignOfferId:**
123
127
  Ask: "Which campaign should I create the rubric for? You can share the campaign ID or describe the target audience."
@@ -203,7 +207,9 @@ update_campaign({
203
207
 
204
208
  This triggers the campaign sync and moves the user to the filter-leads step where they can see the campaign table with scoring columns.
205
209
 
206
- Then ask the user if we should kick off enrichment for a sample:
210
+ For normal create-campaign-v2 runs, the caller should immediately queue only the
211
+ bounded review-batch enrichment cells and wait for scores. For standalone
212
+ rubric editing, ask the user if we should kick off enrichment for a sample:
207
213
 
208
214
  "ICP filtering enabled — you should see the leads table with scoring columns now. Want me to run enrichment on the first 5 leads to check pass rates?"
209
215
 
@@ -212,9 +218,14 @@ Then ask the user if we should kick off enrichment for a sample:
212
218
 
213
219
  ## Phase 5: Enrich + Score a Sample
214
220
 
215
- 1. Call `check_rubric` with `maxProspects: 5` finds the first 5 rows' enrich column cells and kicks off enrichment + ICP scoring via the batch queue API.
216
- 2. Call `wait_for_rubric_results` with `targetCount: 5` — polls until ICP scores land.
217
- 3. Summarize pass rate (`passed/completed`, percent) and recommend:
221
+ 1. Call `get_rows_minimal({ tableId, limit: 5 })` or use the caller-provided
222
+ bounded review-batch rows.
223
+ 2. Call `queue_cells({ tableId, cellIds })` with only pending/error
224
+ `enrichCellId` values. Do not pass `icpCellId` values or full-table cells;
225
+ the workflow cascade handles downstream ICP scoring after enrichment.
226
+ 3. Call `wait_for_rubric_results` with `targetCount: 5` and `minPassedCount: 1`
227
+ — polls until ICP scores land.
228
+ 4. Summarize pass rate (`passed/completed`, percent) and recommend:
218
229
  - Tighten filters if pass rate is too high (>80% — too loose).
219
230
  - Loosen filters if pass rate is too low (<20% — too strict).
220
231
  - Continue when results look healthy (30-70% is typical).