@sellable/install 0.1.297 → 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.
package/bin/sellable-install.mjs
CHANGED
|
@@ -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.
|
|
2003
|
-
3.
|
|
2004
|
-
4.
|
|
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
|
-
|
|
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
|
@@ -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
|
|
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
|
|
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
|
|
1606
|
-
`attach_recommended_sequence` would have selected.
|
|
1607
|
-
|
|
1608
|
-
the current lane packet explicitly allowed sequence
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
136
|
-
(`send_inmail_closed`),
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
`
|
|
144
|
-
|
|
145
|
-
|
|
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`
|
|
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
|
|
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
|
|
@@ -195,12 +234,14 @@ report. Treat `awaiting_scheduler_after_ready_buffer` as an in-progress wait
|
|
|
195
234
|
state, not a close-out condition.
|
|
196
235
|
If paid InMail credit facts are stale or missing and the first target plan
|
|
197
236
|
contains `refresh_paid_inmail_credits`, do not present that as the operator's
|
|
198
|
-
next action in `--yolo`.
|
|
237
|
+
next action in `--yolo`. Do not present paid-credit refresh as the next operator
|
|
238
|
+
action after `refill_sends` returns `autoPaidInmailRefresh` and the
|
|
239
|
+
post-refresh `targetPlan`. Trust `refill_sends.autoPaidInmailRefresh`: it should
|
|
199
240
|
show the exact sender ids refreshed once, sender-credit-cache write receipts,
|
|
200
241
|
and a returned post-refresh `targetPlan`. Continue from that post-refresh packet.
|
|
201
242
|
If paid InMail is below threshold after the fresh credit read, report the exact
|
|
202
|
-
campaign/table/column threshold action or connection fallback;
|
|
203
|
-
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.
|
|
204
245
|
|
|
205
246
|
If the plain route's managed waterfall targets are stale, for example skipped
|
|
206
247
|
targets show archived/completed shared slots or the returned targets do not cover
|
|
@@ -230,7 +271,7 @@ If Christian includes `--yolo` in the same refill request, treat that flag as
|
|
|
230
271
|
auto-accept for the rendered bounded refill packet after the required fresh state
|
|
231
272
|
reread. For sender-scoped language with no named senders, `--yolo` means all
|
|
232
273
|
eligible healthy senders enrolled in active campaign-backed sequence campaigns in
|
|
233
|
-
the
|
|
274
|
+
the requested `workspaceId`. Without `--yolo`, if Christian did not name senders, ask
|
|
234
275
|
which eligible enrolled senders to refill before choosing campaigns or mutating.
|
|
235
276
|
|
|
236
277
|
`--yolo` only covers the exact sender set, per-sender target campaigns, caps,
|