@sellable/mcp 0.1.475 → 0.1.477

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.
@@ -86,9 +86,9 @@ only when the caller explicitly needs a custom non-recommended cadence, or when
86
86
  you have just reread the campaign after `confirm_lead_list` and proved the
87
87
  current campaign table has no sequence while an older stale shell table is
88
88
  causing campaign-level `SEQUENCE_EXISTS`. In that stale-shell repair case, use
89
- `attach_sequence` on the current workflowTableId with the same non-paid product
90
- template the backend would select; never choose a paid-InMail template and never
91
- repair a table other than the current workflowTableId.
89
+ `attach_sequence` on the current workflowTableId with the same product template
90
+ the backend would select; do not substitute the manual Paid InMail Campaign and
91
+ never repair a table other than the current workflowTableId.
92
92
 
93
93
  Hard gates — if you find yourself about to violate any of these, stop
94
94
  first:
@@ -533,10 +533,12 @@ Shape:
533
533
  route and describe the Sequence view.
534
534
  8. Call `attach_recommended_sequence({ campaignId, currentStep: "send" })`
535
535
  (bind the tier-recommended sequence to the campaign). Explain the sequence
536
- choice plainly: Sales Nav/Recruiter senders get the Sales Nav Open Profile
537
- strategy, Basic/Premium/mixed senders get the Premium invite-to-DM strategy,
538
- and Paid InMail Campaign is available only as an explicit paid-InMail
539
- opt-in because it can spend InMail credits. If the tool response
536
+ choice plainly: Sales Nav/Recruiter senders get the unified Sales Nav
537
+ cascade (Open Profile -> Open InMail, otherwise fresh paid credits >= 5 ->
538
+ paid InMail, otherwise connection request -> accepted wait -> DM), while
539
+ Basic/Premium/mixed senders get the Premium invite-to-DM strategy. The manual
540
+ Paid InMail Campaign remains an explicit custom template, not the normal
541
+ recommended path. If the tool response
540
542
  does not persist `currentStep: "send"`, call
541
543
  `update_campaign({ campaignId, currentStep: "send" })`.
542
544
  Then reread `get_campaign({ campaignId })` and `list_tables()` and verify the
@@ -544,9 +546,10 @@ Shape:
544
546
  `attach_recommended_sequence` returned `SEQUENCE_EXISTS` but the current table
545
547
  still has `hasSequence:false`, do not continue to launch handoff from that
546
548
  stale shell proof. Repair only the current workflowTableId with
547
- `attach_sequence` using the same non-paid product template the recommended
548
- selector would have chosen, or stop and report the stale-shell sequence
549
- blocker if replacement was not explicitly approved.
549
+ `attach_sequence` using the same product template the recommended selector
550
+ would have chosen, or stop and report the stale-shell sequence blocker if
551
+ replacement was not explicitly approved. Do not substitute the manual Paid
552
+ InMail Campaign for this repair.
550
553
  9. Surface the `handoff.orientation` string from `auto-execute.yaml` without
551
554
  repeating the watch URL.
552
555
  10. Ask the final launch greenlight with the structured question function:
@@ -1515,7 +1515,11 @@ Message, and verify current-revision sample messages before final completion.
1515
1515
  - DM lanes: add a `Delivery format:` line — either `multiline (each paragraph sends as its own DM message)` or `single message`. When multiline, the template's blank-line paragraphs ARE the message boundaries — write each one as a standalone typed message.
1516
1516
  - **InMail lanes can never be multiline**: an InMail is one message and the recipient must reply before anything else can be sent. InMail-bound templates must read as one cohesive message — declare `Delivery format: single message (InMail — no follow-up until reply)` and never structure the copy to depend on multi-message pacing.
1517
1517
 
1518
- - The sequence is auto-selected by sender tier; do not hand-author sequence templates here. Never select a paid-InMail template.
1518
+ - The sequence is auto-selected by sender tier; do not hand-author sequence
1519
+ templates here. Sales Nav/Recruiter senders may receive the unified Sales
1520
+ Nav cascade through `attach_recommended_sequence`; attaching it does not
1521
+ spend paid InMail credits by itself. Do not substitute the manual Paid
1522
+ InMail Campaign template.
1519
1523
  3. **Customer-Visible Completion Contract**: a named evergreen lane that appears
1520
1524
  as a campaign card or campaign-backed table is not done when the shell exists.
1521
1525
  It is done only when the customer can open the campaign and land on final
@@ -1592,7 +1596,7 @@ Message, and verify current-revision sample messages before final completion.
1592
1596
  completion, approve exactly one quality-valid generated row. If one or more
1593
1597
  rows are already approved, do not add more approvals during evergreen
1594
1598
  completion. Never broad approve all rows.
1595
- - The recommended non-paid sequence is attached to the current campaign
1599
+ - The recommended tier-aware sequence is attached to the current campaign
1596
1600
  table, and the watched campaign is on Send. Use
1597
1601
  `attach_recommended_sequence({ campaignId, currentStep:"send" })` when a
1598
1602
  safe attach is needed. After `confirm_lead_list` or any source-list copy,
@@ -1602,10 +1606,11 @@ Message, and verify current-revision sample messages before final completion.
1602
1606
  before reporting completion. If a stale shell table has sequence columns but
1603
1607
  the current campaign table does not, `SEQUENCE_EXISTS` is not enough:
1604
1608
  record the stale shell table id, then repair the current workflowTableId
1605
- with `attach_sequence` using the same non-paid product template
1606
- `attach_recommended_sequence` would have selected. Never use a paid-InMail
1607
- template and never attach/replace sequence outside the current table unless
1608
- the current lane packet explicitly allowed sequence repair.
1609
+ with `attach_sequence` using the same product template
1610
+ `attach_recommended_sequence` would have selected. Do not substitute the
1611
+ manual Paid InMail Campaign, and never attach/replace sequence outside the
1612
+ current table unless the current lane packet explicitly allowed sequence
1613
+ repair.
1609
1614
  - If the current campaign table is still `DRAFT` after sequence/readiness
1610
1615
  proof, call `pause_campaign({ campaignId })` and reread. `pause_campaign`
1611
1616
  is the product-native review-state transition; it is not a launch and does
@@ -89,10 +89,16 @@ When the host can call typed MCP tools, start with:
89
89
  refill_sends({ yolo?: boolean, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })
90
90
  ```
91
91
 
92
- That command helper only normalizes arguments and returns the execution
93
- contract. It does not mutate. Continue with the workflow below for route
94
- selection, state rereads, approval gating, source import, preparation, and
95
- bounded approval.
92
+ That command helper normalizes arguments and returns the execution contract. In
93
+ non-yolo mode it does not mutate. In `--yolo`, it may execute exactly one safe
94
+ bounded primitive from the fresh `target.globalActionQueue[0]`, then reread and
95
+ return the new target plan; currently safe primitives are paid-credit refresh,
96
+ existing-row message preparation, same-source row copy, and read-only wait
97
+ rereads. It does not approve messages without the bounded approval gate, lower
98
+ paid-InMail thresholds, switch source families, create campaigns, launch, send,
99
+ or write scheduler rows. Continue with the workflow below for route selection,
100
+ state rereads, approval gating, source import, preparation, and bounded
101
+ approval.
96
102
 
97
103
  First call `get_auth_status({})`. If auth or active workspace is not OK, follow
98
104
  the returned login/workspace guidance before route resolution. Do not run refill
@@ -131,18 +137,21 @@ eligible senders, selected sender-local days, gross target, actual sent
131
137
  coverage, scheduler-owned scheduled coverage across active enrolled campaigns,
132
138
  projected coverage (`sent + scheduled`), inferred per-sender send lane/action
133
139
  selections, ready buffer, remaining projected gap, paid-InMail credit/threshold
134
- feasibility, `targetShapeRevision`, and `stateRevision`. Refill target lanes
135
- are only connection invites (`send_invite`) or paid InMails
136
- (`send_inmail_closed`), chosen per sender from the most recent current
137
- dashboard-active campaign-backed send evidence. DMs (`send_dm`) and
138
- open-profile InMails (`send_inmail_open`) may exist in sequences, but they are
139
- not refill horizon target capacity and must not be counted as refill sent,
140
- scheduled, or ready coverage. When `actionTypes` are omitted, trust the target
141
- plan's inferred connection-or-paid-InMail lane rather than asking which of those
142
- two lanes to fill. If a stale target plan selects `send_dm` or
143
- `send_inmail_open`, stop and re-plan with the current planner before mutation.
144
- Short form: trust the target plan's inferred lane only when it is a
145
- connection-invite or paid-InMail refill lane.
140
+ feasibility, `targetShapeRevision`, and `stateRevision`. Refill target lanes are
141
+ connection invites (`send_invite`), standalone paid InMails
142
+ (`send_inmail_closed`), or unified Sales Nav cascades represented publicly as
143
+ `send_inmail_closed` with `campaignClassification:"sales_nav_cascade"`. For a
144
+ Sales Nav cascade, refill the selected campaign first; its sequence can route
145
+ prospects to Open InMail, paid InMail while fresh credits are >= 5, or
146
+ same-campaign connection fallback without asking for separate open/paid/
147
+ connection campaigns. DMs (`send_dm`) are follow-up actions, not refill horizon
148
+ target capacity, and must not be counted as refill sent, scheduled, or ready
149
+ coverage. When `actionTypes` are omitted, trust the target plan's inferred lane
150
+ rather than asking which campaign class to fill. If a stale target plan selects
151
+ `send_dm` or `send_inmail_open` as the lane, stop and re-plan with the current
152
+ planner before mutation.
153
+ Short form: trust the target plan's inferred lane when it is a connection invite,
154
+ paid-InMail refill lane, or unified Sales Nav cascade.
146
155
 
147
156
  Structured planner packet:
148
157
 
@@ -161,14 +170,23 @@ Structured planner packet:
161
170
  - `manualAlternates` are not yolo actions. Threshold lowering and campaign
162
171
  creation are manual continuations only.
163
172
 
173
+ Refill action ladder: approve generated rows only when an explicit bounded
174
+ approval gate exists, process all existing same-campaign unenriched/unprepared
175
+ rows in bounded batches before any source work, then copy bounded net-new rows
176
+ from the selected source (`selectedLeadListId`, provider, and source
177
+ fingerprint preserved), then use provider-aligned source-more. A new source or
178
+ provider switch changes the reply-rate baseline and is a manual alternate, not a
179
+ `--yolo` side effect.
180
+
164
181
  Run-local paid-credit guard: in `--yolo`, the `refill_sends` MCP command
165
182
  automatically maintains a `refreshedPaidInmailSenderIds` set for the current
166
183
  command call. If its first target plan has stale/missing paid-InMail credit
167
184
  facts, it refreshes each selected sender at most once, reruns
168
185
  `get_refill_target_plan`, and returns the post-refresh `targetPlan` before
169
- choosing the next prep/approval/start action. If fresh facts are still below
186
+ choosing the next prep/source-copy/read-only wait action. If fresh facts are still below
170
187
  threshold, below-threshold paid-InMail facts fall back to an existing connection
171
- lane or a manual continuation.
188
+ lane, the same Sales Nav cascade campaign's connection branch, or a manual
189
+ continuation.
172
190
 
173
191
  Compact refill lessons: sender-level target plan is final truth; trust
174
192
  `schedulerGate.sendable` and scheduler gate blockers, not raw
@@ -201,8 +219,8 @@ post-refresh `targetPlan`. Trust `refill_sends.autoPaidInmailRefresh`: it should
201
219
  show the exact sender ids refreshed once, sender-credit-cache write receipts,
202
220
  and a returned post-refresh `targetPlan`. Continue from that post-refresh packet.
203
221
  If paid InMail is below threshold after the fresh credit read, report the exact
204
- campaign/table/column threshold action or connection fallback; `--yolo` does not
205
- lower paid-InMail thresholds or create campaigns.
222
+ campaign/table/column threshold action or same-campaign connection fallback;
223
+ `--yolo` does not lower paid-InMail thresholds or create campaigns.
206
224
 
207
225
  If the plain route's managed waterfall targets are stale, for example skipped
208
226
  targets show archived/completed shared slots or the returned targets do not cover
@@ -254,7 +272,7 @@ they change `stateRevision`, not `targetShapeRevision`, and do not require a
254
272
  second approval.
255
273
 
256
274
  In `--yolo`, continue as far as the rendered packet safely allows. After each
257
- apply/prep/start result, reread state, settle processing when needed, and move to
275
+ apply/prep/source-copy/read-only wait result, reread state, settle processing when needed, and move to
258
276
  the next selected sender or start-eligible same-packet campaign instead of
259
277
  stopping after the first partial result. If no in-packet safe action remains,
260
278
  return concrete continuation options with campaign names, exact ids, which option
@@ -268,7 +286,7 @@ selected sender: selected send days, gross capacity, actual sent cells, future
268
286
  scheduler-owned scheduled cells with non-null `scheduledFor`, projected count,
269
287
  ready-to-schedule buffer, remaining projected gap, paid-InMail feasibility,
270
288
  `targetShapeRevision`, `stateRevision`, and the next MCP primitive that can
271
- reduce the gap. After every apply/prep/start result, wait for processing, reread
289
+ reduce the gap. After every apply/prep/source-copy/read-only wait result, wait for processing, reread
272
290
  the target plan/refill state, recompute the ledger, then keep applying safe
273
291
  bounded actions until projected coverage fills the target window or a concrete
274
292
  non-scheduler blocker is proven.
@@ -75,20 +75,23 @@ in-progress wait state, not a reason to mark the goal complete or blocked.
75
75
  campaigns, projected coverage (`sent + scheduled`), ready buffer, remaining
76
76
  projected gap, paid-InMail credit/threshold feasibility, bounded action
77
77
  candidates, `targetShapeRevision`, and `stateRevision`.
78
- Refill target lanes are binary per sender: connection invites
79
- (`send_invite`) or paid InMails (`send_inmail_closed`). DMs
80
- (`send_dm`) and open-profile InMails (`send_inmail_open`) can remain in the
81
- sequence, but they are follow-up actions, not refill horizon capacity. Do not
82
- count their sent, scheduled, or ready cells when deciding whether a sender
83
- needs refill. When `actionTypes` are omitted, trust the target plan's
84
- inferred connection-or-paid-InMail lane; do not ask the operator which of
85
- those two lanes to fill after the plan has inferred that from active
86
- campaign future scheduled, recent scheduled, and ready evidence. If a stale
87
- planner/tool response selects `send_dm` or `send_inmail_open`, treat that as
88
- unsupported stale refill state and re-plan with a current planner before any
89
- mutation.
90
- Short form: trust the target plan's inferred lane only when it is a
91
- connection-invite or paid-InMail refill lane.
78
+ Refill target lanes are connection invites (`send_invite`), standalone paid
79
+ InMails (`send_inmail_closed`), or unified Sales Nav cascades represented
80
+ publicly as `send_inmail_closed` with
81
+ `campaignClassification:"sales_nav_cascade"`. For a Sales Nav cascade, fill
82
+ the selected campaign first; its sequence can route prospects to Open InMail,
83
+ paid InMail while fresh credits are >= 5, or same-campaign connection
84
+ fallback without asking for separate open/paid/connection campaigns. DMs
85
+ (`send_dm`) are follow-up actions, not refill horizon capacity. Do not count
86
+ their sent, scheduled, or ready cells when deciding whether a sender needs
87
+ refill. When `actionTypes` are omitted, trust the target plan's inferred lane;
88
+ do not ask the operator which campaign class to fill after the plan has
89
+ inferred that from active campaign future scheduled, recent scheduled, and
90
+ ready evidence. If a stale planner/tool response selects `send_dm` or
91
+ `send_inmail_open`, treat that as unsupported stale refill state and re-plan
92
+ with a current planner before any mutation.
93
+ Short form: trust the target plan's inferred lane when it is a connection
94
+ invite, paid-InMail refill lane, or unified Sales Nav cascade.
92
95
  Structured planner packet:
93
96
  - `target.eligibleSenderLedger` is the public sender eligibility ledger.
94
97
  - `target.senderRefillPlans[]` is the canonical sender-level packet; read and
@@ -105,14 +108,22 @@ in-progress wait state, not a reason to mark the goal complete or blocked.
105
108
  - `nextActions[0]` is the current sender's smallest safe primitive.
106
109
  - `manualAlternates` are not yolo actions. Threshold lowering and campaign
107
110
  creation are manual continuations only.
111
+ Refill action ladder: approve generated rows only when an explicit bounded
112
+ approval gate exists, process all existing same-campaign
113
+ unenriched/unprepared rows in bounded batches before any source work, then
114
+ copy bounded net-new rows from the selected source (`selectedLeadListId`,
115
+ provider, and source fingerprint preserved), then use provider-aligned
116
+ source-more. A new source or provider switch changes the reply-rate baseline
117
+ and is a manual alternate, not a `--yolo` side effect.
108
118
  Run-local paid-credit guard: in `--yolo`, the `refill_sends` MCP command
109
119
  automatically maintains a `refreshedPaidInmailSenderIds` set for the current
110
120
  command call. If its first target plan has stale/missing paid-InMail credit
111
121
  facts, it refreshes each selected sender at most once, reruns
112
122
  `get_refill_target_plan`, and returns the post-refresh `targetPlan` before
113
- choosing the next prep/approval/start action. If fresh facts are still below
123
+ choosing the next prep/source-copy/read-only wait action. If fresh facts are still below
114
124
  threshold, below-threshold paid-InMail facts fall back to an existing
115
- connection lane or a manual continuation.
125
+ connection lane, the same Sales Nav cascade campaign's connection branch, or
126
+ a manual continuation.
116
127
  Compact refill lessons: sender-level target plan is final truth; trust
117
128
  `schedulerGate.sendable` and scheduler gate blockers, not raw
118
129
  `unipileAccountStatus` labels alone; use compact prep status checks for
@@ -147,7 +158,7 @@ in-progress wait state, not a reason to mark the goal complete or blocked.
147
158
  should show the exact sender ids refreshed once, sender-credit-cache write
148
159
  receipts, and a returned post-refresh `targetPlan`. Continue from that
149
160
  post-refresh packet. If paid InMail is below threshold after the fresh credit read, report
150
- the exact campaign/table/column threshold action or
161
+ the exact campaign/table/column threshold action or same-campaign
151
162
  connection fallback; `--yolo` does not lower paid-InMail thresholds or create campaigns.
152
163
  2. Call `resolve_campaign_fill_route`. Use `intent:"plain"` for generic
153
164
  fill/load language, `intent:"active"` only when the user explicitly narrowed
@@ -282,10 +293,13 @@ dashboard-active campaign-backed sequence evidence:
282
293
 
283
294
  1. Prefer the sender's most recent future scheduled refill action, then the most
284
295
  recent recent scheduled refill action, then ready refill rows.
285
- 2. Refill actions are only `send_invite` and `send_inmail_closed`.
286
- 3. If the most recent active campaign evidence is DM or open InMail, ignore it
287
- for refill lane selection and use the nearest connection-invite or paid-InMail
288
- evidence instead.
296
+ 2. Refill actions are `send_invite` or `send_inmail_closed`; unified Sales Nav
297
+ cascades also appear as `send_inmail_closed` with
298
+ `campaignClassification:"sales_nav_cascade"`.
299
+ 3. If the most recent active campaign evidence is DM, ignore it for refill lane
300
+ selection. If open InMail evidence belongs to a unified Sales Nav cascade,
301
+ keep the cascade campaign as the selected `send_inmail_closed` target; do not
302
+ create side open/paid/connection campaigns.
289
303
  4. If no connection/paid-InMail evidence exists, fall back to the selected
290
304
  active campaign sequence, still choosing only one of `send_invite` or
291
305
  `send_inmail_closed` for that sender.
@@ -418,8 +432,15 @@ search_signals({ campaignOfferId, currentStep:"signal-discovery", confirmed:true
418
432
  ```
419
433
 
420
434
  Use `select_promising_posts` before importing. For a fresh source refill, prefer
421
- `selectionMode:"replace"` and `scrapePlanMode:"capacity-target"` with the
422
- approved `targetEngagerCount` and `maxPostsToScrape`. If the approved post set cannot cover the target, do not knowingly run an under-capacity scrape; ask for approval to expand the selected post set or switch source.
435
+ `selectionMode:"replace"` and `scrapePlanMode:"all-selected"`, then call
436
+ `import_leads` without `targetEngagerCount` or `maxPostsToScrape` so the scrape
437
+ uses the selected posts' max available engagers within backend provider caps.
438
+ Do not invent, lower, or pass a people-to-check target for refill imports unless
439
+ Christian explicitly supplied that target or post cap in the current request or
440
+ approval packet. If Christian did supply an explicit `targetEngagerCount` or
441
+ `maxPostsToScrape`, use `scrapePlanMode:"capacity-target"` and respect the
442
+ under-capacity refusal: ask for approval to expand the selected post set or
443
+ switch source instead of scraping a target-mismatched set.
423
444
 
424
445
  If `import_leads` returns `reusedExistingSourceList` but the user explicitly
425
446
  approved a different selected-post scrape, retry `import_leads` with the existing `sourceLeadListId` from that response or from refill state. For Signal
@@ -538,7 +559,7 @@ same refill request, do not ask the `Accept` / `Decline` question. Instead:
538
559
  caps/dates, approval mode, blockers, and side-effect class still match the
539
560
  packet;
540
561
  4. execute only the exact packet;
541
- 5. after each terminal credit-refresh/apply/prep/start result, rerun
562
+ 5. after each terminal credit-refresh/apply/prep/source-copy/read-only wait result, rerun
542
563
  `get_refill_target_plan`, reread state, settle processing when needed,
543
564
  recompute the target-window saturation ledger, and continue with the next smallest
544
565
  safe action inside the same bounded packet until every selected sender is
@@ -77,7 +77,7 @@ This is the canonical MCP workflow for creating sequencer tables. Prefer this ov
77
77
  - `INVITE` only
78
78
  - `INVITE -> accepted -> DM`
79
79
  - `COMMENT` only
80
- - `If Open Profile -> INMAIL_OPEN, else INVITE`
80
+ - Sales Nav unified cascade: Open Profile -> Open InMail, otherwise paid-credit check -> Paid InMail or connection fallback
81
81
 
82
82
  ## Output
83
83