@sellable/install 0.1.298 → 0.1.299

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.
@@ -1999,12 +1999,14 @@ Desktop, then start a new thread.
1999
1999
  ## Execute Workflow
2000
2000
 
2001
2001
  1. Call \`mcp__sellable__get_auth_status({})\`.
2002
- 2. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, senders, senderIds, senderNames, targetDate, untilDate })\` when the host exposes typed MCP tools.
2003
- 3. Call \`mcp__sellable__get_refill_target_plan({ senders, senderIds, senderNames, targetDate, untilDate })\` before any mutation. Render \`target.eligibleSenderLedger\`, \`target.senderRefillPlans[]\`, and \`target.globalActionQueue\` as the structured packet. Preserve the labels \`Need to prepare\`, \`Goal\`, \`Already sent\`, \`Scheduled\`, \`Ready and waiting to be scheduled\`, and \`Still need\`. In \`--yolo\`, \`mcp__sellable__refill_sends\` maintains a run-local \`refreshedPaidInmailSenderIds\` set, refreshes stale/missing paid InMail facts for each selected paid-InMail sender at most once, reruns \`get_refill_target_plan\`, and returns \`autoPaidInmailRefresh\` plus the post-refresh \`targetPlan\` before choosing the next prep/approval/start action. Do not present paid-credit refresh as the next operator action after \`refill_sends\` returns that post-refresh plan. For exact-date proof, \`mcp__sellable__get_scheduler_fill_capacity\` is read-only and tells how many cells the scheduler will try to place for a sender/action/date. If the returned target is already complete, stop with the no-op receipt. If ready rows cover the target but scheduled rows do not, keep the run open in the read-only scheduler wait/re-read loop until projected coverage fills, a concrete non-scheduler blocker appears, or Christian explicitly stops/statuses the run.
2004
- 4. Load the canonical prompt via
2002
+ 2. Resolve the target workspace id from the user request, automation config, or install-time workspace mapping. Pass \`workspaceId\` on every scheduled or \`--yolo\` refill tool call. Missing \`workspaceId\` in scheduled or \`--yolo\` mode is a blocker; return \`WORKSPACE_REQUIRED\` instead of running against shared config state. Do not solve automation workspace uncertainty by changing the shared active workspace.
2003
+ 3. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, executionMode, requireWorkspace, workspaceId, senders, senderIds, senderNames, targetDate, untilDate })\` when the host exposes typed MCP tools. Type shape: \`refill_sends({ yolo?: boolean, executionMode?: "manual" | "scheduled" | "yolo", requireWorkspace?: boolean, workspaceId?: string, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })\`.
2004
+ 4. Clover scheduled automation example: \`mcp__sellable__refill_sends({ yolo:false, executionMode:"scheduled", requireWorkspace:true, workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })\`, then \`mcp__sellable__get_refill_target_plan({ intent:"plain", approvalMode:"mark_ready", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })\`.
2005
+ 5. Call \`mcp__sellable__get_refill_target_plan({ workspaceId, senders, senderIds, senderNames, targetDate, untilDate })\` before any mutation. Render \`target.eligibleSenderLedger\`, \`target.senderRefillPlans[]\`, and \`target.globalActionQueue\` as the structured packet. Preserve the labels \`Need to prepare\`, \`Goal\`, \`Already sent\`, \`Scheduled\`, \`Ready and waiting to be scheduled\`, and \`Still need\`. In \`--yolo\`, \`mcp__sellable__refill_sends\` maintains a run-local \`refreshedPaidInmailSenderIds\` set, refreshes stale/missing paid InMail facts for each selected paid-InMail sender at most once, reruns \`get_refill_target_plan\`, and returns \`autoPaidInmailRefresh\` plus the post-refresh \`targetPlan\` before choosing the next prep/approval/start action. Do not present paid-credit refresh as the next operator action after \`refill_sends\` returns that post-refresh plan. For exact-date proof, \`mcp__sellable__get_scheduler_fill_capacity\` is read-only and tells how many cells the scheduler will try to place for a sender/action/date. If the returned target is already complete, stop with the no-op receipt. If ready rows cover the target but scheduled rows do not, keep the run open in the read-only scheduler wait/re-read loop until projected coverage fills, a concrete non-scheduler blocker appears, or Christian explicitly stops/statuses the run.
2006
+ 6. Load the canonical prompt via
2005
2007
  \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends" })\`,
2006
2008
  then load \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends-workflow" })\`.
2007
- 5. Follow the canonical prompt exactly. Do not launch, start, archive, delete,
2009
+ 7. Follow the canonical prompt exactly. Do not launch, start, archive, delete,
2008
2010
  or write scheduler rows as part of refill sends.
2009
2011
 
2010
2012
  ## MCP Prompt Fallback
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.298",
3
+ "version": "0.1.299",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -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
@@ -68,6 +68,9 @@ Accepted invocation flags in the same user request:
68
68
 
69
69
  - `--yolo`: auto-accept the rendered bounded refill packet after the required
70
70
  fresh state reread.
71
+ - `workspaceId: <id>`: required for scheduled automation and `--yolo`; pass it
72
+ through on every refill MCP tool call instead of relying on shared config
73
+ state.
71
74
  - `--sender <name-or-id>`: scope to a specific sender; repeat for multiple
72
75
  senders.
73
76
  - `--until <YYYY-MM-DD>`: fill through that sender-local date, inclusive,
@@ -86,7 +89,7 @@ Accepted invocation flags in the same user request:
86
89
  When the host can call typed MCP tools, start with:
87
90
 
88
91
  ```text
89
- refill_sends({ yolo?: boolean, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })
92
+ refill_sends({ yolo?: boolean, executionMode?: "manual" | "scheduled" | "yolo", requireWorkspace?: boolean, workspaceId?: string, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })
90
93
  ```
91
94
 
92
95
  That command helper only normalizes arguments and returns the execution
@@ -94,9 +97,40 @@ contract. It does not mutate. Continue with the workflow below for route
94
97
  selection, state rereads, approval gating, source import, preparation, and
95
98
  bounded approval.
96
99
 
97
- First call `get_auth_status({})`. If auth or active workspace is not OK, follow
98
- the returned login/workspace guidance before route resolution. Do not run refill
99
- research against an implicit or guessed workspace.
100
+ ## Workspace Contract
101
+
102
+ First resolve the target workspace id from the user's request, automation config,
103
+ or install-time workspace mapping. Pass `workspaceId` on every scheduled or
104
+ `--yolo` refill tool call, including setup/read calls such as
105
+ `refill_sends`, `get_refill_target_plan`, `list_senders`,
106
+ `get_sender_routing`, `resolve_campaign_fill_route`,
107
+ `get_campaign_refill_state`, `get_scheduler_fill_capacity`, and any later
108
+ refill mutation covered by the packet. Missing `workspaceId` in scheduled or
109
+ `--yolo` mode is a blocker; stop with `WORKSPACE_REQUIRED` instead of running
110
+ against an implicit or guessed workspace.
111
+
112
+ Do not solve scheduled or `--yolo` workspace uncertainty by changing the shared
113
+ active workspace. Manual interactive workspace switching remains a separate
114
+ diagnostic/setup flow, outside automation.
115
+
116
+ Examples:
117
+
118
+ ```text
119
+ refill_sends({ yolo:true, executionMode:"yolo", requireWorkspace:true, workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
120
+ get_refill_target_plan({ intent:"plain", approvalMode:"approve", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
121
+ list_senders({ workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
122
+ ```
123
+
124
+ Clover scheduled automation must name the Clover workspace explicitly:
125
+
126
+ ```text
127
+ refill_sends({ yolo:false, executionMode:"scheduled", requireWorkspace:true, workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
128
+ get_refill_target_plan({ intent:"plain", approvalMode:"mark_ready", workspaceId:"cmlq1v8ms0000jx04ang4hi7e" })
129
+ ```
130
+
131
+ First call `get_auth_status({})`. If auth is not OK, follow the returned login
132
+ guidance before route resolution. Do not run refill research against an implicit
133
+ or guessed workspace.
100
134
 
101
135
  Treat "refill senders", "fill senders", "load everyone up", and "max out
102
136
  senders" as sender-scoped requests. The target set is senders enrolled in active
@@ -131,18 +165,21 @@ eligible senders, selected sender-local days, gross target, actual sent
131
165
  coverage, scheduler-owned scheduled coverage across active enrolled campaigns,
132
166
  projected coverage (`sent + scheduled`), inferred per-sender send lane/action
133
167
  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.
168
+ feasibility, `targetShapeRevision`, and `stateRevision`. Refill target lanes are
169
+ connection invites (`send_invite`), standalone paid InMails
170
+ (`send_inmail_closed`), or unified Sales Nav cascades represented publicly as
171
+ `send_inmail_closed` with `campaignClassification:"sales_nav_cascade"`. For a
172
+ Sales Nav cascade, refill the selected campaign first; its sequence can route
173
+ prospects to Open InMail, paid InMail while fresh credits are >= 5, or
174
+ same-campaign connection fallback without asking for separate open/paid/
175
+ connection campaigns. DMs (`send_dm`) are follow-up actions, not refill horizon
176
+ target capacity, and must not be counted as refill sent, scheduled, or ready
177
+ coverage. When `actionTypes` are omitted, trust the target plan's inferred lane
178
+ rather than asking which campaign class to fill. If a stale target plan selects
179
+ `send_dm` or `send_inmail_open` as the lane, stop and re-plan with the current
180
+ planner before mutation.
181
+ Short form: trust the target plan's inferred lane when it is a connection invite,
182
+ paid-InMail refill lane, or unified Sales Nav cascade.
146
183
 
147
184
  Structured planner packet:
148
185
 
@@ -156,7 +193,8 @@ Structured planner packet:
156
193
  `Still need`.
157
194
  - `target.globalActionQueue` is the only cross-sender yolo execution queue.
158
195
  Execute exactly one globally ranked primitive from
159
- `target.globalActionQueue[0]`, then rerun `get_refill_target_plan` before
196
+ `target.globalActionQueue[0]`, then rerun `get_refill_target_plan` with the
197
+ same `workspaceId` before
160
198
  choosing another action.
161
199
  - `manualAlternates` are not yolo actions. Threshold lowering and campaign
162
200
  creation are manual continuations only.
@@ -168,7 +206,8 @@ facts, it refreshes each selected sender at most once, reruns
168
206
  `get_refill_target_plan`, and returns the post-refresh `targetPlan` before
169
207
  choosing the next prep/approval/start action. If fresh facts are still below
170
208
  threshold, below-threshold paid-InMail facts fall back to an existing connection
171
- lane or a manual continuation.
209
+ lane, the same Sales Nav cascade campaign's connection branch, or a manual
210
+ continuation.
172
211
 
173
212
  Compact refill lessons: sender-level target plan is final truth; trust
174
213
  `schedulerGate.sendable` and scheduler gate blockers, not raw
@@ -201,8 +240,8 @@ post-refresh `targetPlan`. Trust `refill_sends.autoPaidInmailRefresh`: it should
201
240
  show the exact sender ids refreshed once, sender-credit-cache write receipts,
202
241
  and a returned post-refresh `targetPlan`. Continue from that post-refresh packet.
203
242
  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.
243
+ campaign/table/column threshold action or same-campaign connection fallback;
244
+ `--yolo` does not lower paid-InMail thresholds or create campaigns.
206
245
 
207
246
  If the plain route's managed waterfall targets are stale, for example skipped
208
247
  targets show archived/completed shared slots or the returned targets do not cover
@@ -232,7 +271,7 @@ If Christian includes `--yolo` in the same refill request, treat that flag as
232
271
  auto-accept for the rendered bounded refill packet after the required fresh state
233
272
  reread. For sender-scoped language with no named senders, `--yolo` means all
234
273
  eligible healthy senders enrolled in active campaign-backed sequence campaigns in
235
- the active workspace. Without `--yolo`, if Christian did not name senders, ask
274
+ the requested `workspaceId`. Without `--yolo`, if Christian did not name senders, ask
236
275
  which eligible enrolled senders to refill before choosing campaigns or mutating.
237
276
 
238
277
  `--yolo` only covers the exact sender set, per-sender target campaigns, caps,