@sellable/install 0.1.306 → 0.1.307
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
|
@@ -1122,6 +1122,7 @@ const REFILL_SENDS_ALLOWED_TOOLS = [
|
|
|
1122
1122
|
"mcp__sellable__get_subskill_asset",
|
|
1123
1123
|
"mcp__sellable__search_subskill_prompts",
|
|
1124
1124
|
"mcp__sellable__get_scheduler_fill_capacity",
|
|
1125
|
+
"mcp__sellable__run_scheduler_sweep",
|
|
1125
1126
|
"mcp__sellable__refresh_paid_inmail_credits",
|
|
1126
1127
|
"mcp__sellable__list_senders",
|
|
1127
1128
|
"mcp__sellable__get_sender_routing",
|
|
@@ -2086,9 +2087,9 @@ Desktop, then start a new thread.
|
|
|
2086
2087
|
|
|
2087
2088
|
1. Call \`mcp__sellable__get_auth_status({})\`.
|
|
2088
2089
|
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.
|
|
2089
|
-
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" })\`.
|
|
2090
|
+
3. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, executionMode, requireWorkspace, workspaceId, senders, senderIds, senderNames, horizonSendDays, 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" })\`.
|
|
2090
2091
|
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" })\`.
|
|
2091
|
-
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/source-copy/bounded-approval/read-only wait action. Refill ladder: approve generated rows only through the explicit bounded approval gate, process existing same-campaign unenriched/unprepared rows before source work, then same-source copy, then provider-aligned source-more. New source/provider switches change reply-rate baseline and are manual alternates, not \`--yolo\` side effects. 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.
|
|
2092
|
+
5. Call \`mcp__sellable__get_refill_target_plan({ workspaceId, senders, senderIds, senderNames, horizonSendDays, 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/source-copy/bounded-approval/read-only wait action. Refill ladder: approve generated rows only through the explicit bounded approval gate, process existing same-campaign unenriched/unprepared rows before source work, then same-source copy, then provider-aligned source-more. New source/provider switches change reply-rate baseline and are manual alternates, not \`--yolo\` side effects. 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. When ready rows cover the target but scheduled rows do not, \`mcp__sellable__run_scheduler_sweep({ workspaceId, action:"run", targetDate })\` may request immediate placement within existing gates and returns a receipt, but it never sends or bypasses limits. 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.
|
|
2092
2093
|
6. Load the canonical prompt and deterministic flow asset via
|
|
2093
2094
|
\`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends" })\`,
|
|
2094
2095
|
then load \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends-workflow" })\`,
|
package/lib/runtime-verify.mjs
CHANGED
|
@@ -32,7 +32,7 @@ export const REQUIRED_SELLABLE_MCP_TOOLS = [
|
|
|
32
32
|
"get_campaign_refill_state",
|
|
33
33
|
"get_refill_target_plan",
|
|
34
34
|
"get_scheduler_fill_capacity",
|
|
35
|
-
"
|
|
35
|
+
"run_scheduler_sweep",
|
|
36
36
|
"refill_sends",
|
|
37
37
|
"setup_evergreen_campaigns",
|
|
38
38
|
"start_campaign_message_preparation",
|
package/package.json
CHANGED
|
@@ -37,16 +37,21 @@ active workspace readback. Scheduled or autonomous usage must carry
|
|
|
37
37
|
`workspaceId` on every tool call. If the workspace is missing or ambiguous, stop
|
|
38
38
|
with `WORKSPACE_REQUIRED`; do not switch the shared active workspace.
|
|
39
39
|
|
|
40
|
+
Date selectors are sender-local and mutually exclusive by precedence:
|
|
41
|
+
`targetDate > untilDate > horizonSendDays`. Use `targetDate` for one exact sender-local date, `untilDate` for an inclusive through-date, and `horizonSendDays` for the next N sender-local send days. If none is provided, the planner uses the default scheduler-forward 48-hour behavior.
|
|
42
|
+
|
|
40
43
|
For a real refill run:
|
|
41
44
|
|
|
42
45
|
```text
|
|
43
|
-
refill_sends_v2({ workspaceId, intent:"auto", senderIds?, approvalMode? })
|
|
46
|
+
refill_sends_v2({ workspaceId, intent:"auto", senderIds?, approvalMode?, targetDate?, untilDate?, horizonSendDays? })
|
|
47
|
+
refill_sends_v2({ workspaceId, targetDate:"2026-07-07" })
|
|
48
|
+
refill_sends_v2({ workspaceId, untilDate:"2026-07-09" })
|
|
44
49
|
```
|
|
45
50
|
|
|
46
51
|
For read-only inspection:
|
|
47
52
|
|
|
48
53
|
```text
|
|
49
|
-
refill_sends_v2({ workspaceId, dryRun:true, intent:"auto", senderIds? })
|
|
54
|
+
refill_sends_v2({ workspaceId, dryRun:true, intent:"auto", senderIds?, targetDate?, untilDate?, horizonSendDays? })
|
|
50
55
|
```
|
|
51
56
|
|
|
52
57
|
To resume an in-progress run, pass the handle back exactly:
|
|
@@ -55,6 +60,11 @@ To resume an in-progress run, pass the handle back exactly:
|
|
|
55
60
|
refill_sends_v2({ workspaceId, runId, fence })
|
|
56
61
|
```
|
|
57
62
|
|
|
63
|
+
The original run's date window is stored in the run record. On resume, the
|
|
64
|
+
stored window is reused and conflicting resume input is blocked; do not add,
|
|
65
|
+
change, or remove `targetDate`, `untilDate`, or `horizonSendDays` while passing
|
|
66
|
+
an existing `{ runId, fence }`.
|
|
67
|
+
|
|
58
68
|
If a stale handle loses the lease, the tool reports the holder status and the
|
|
59
69
|
approximately 10 minute lockout window. Reinvoke with the current handle or wait
|
|
60
70
|
for lease expiry; never guess a fence.
|
|
@@ -125,9 +135,23 @@ host guard, heartbeats the run lease, and may return:
|
|
|
125
135
|
```
|
|
126
136
|
|
|
127
137
|
Reinvoke with that handle. The approximately five minute scheduler budget is at
|
|
128
|
-
the run level, not one tool call.
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
the run level, not one tool call. Exact-date runs request pickup with
|
|
139
|
+
`run_scheduler_sweep({ workspaceId, targetDate })`; `untilDate` and
|
|
140
|
+
`horizonSendDays` runs sweep each planner-selected exact target date. A
|
|
141
|
+
window-closed or loaded-awaiting scheduler report must include remaining-ready
|
|
142
|
+
count, exact expected pickup time, and the resume handle; never treat bare
|
|
143
|
+
"awaiting scheduler" copy as a final answer.
|
|
144
|
+
Scheduler-run receipt interpretation still applies to terminal progress:
|
|
145
|
+
`cellsConsidered is allocation-attempt count`, not total ready supply, while
|
|
146
|
+
`readyCellsFound` is ready inventory found before prefilters. Inspect
|
|
147
|
+
`campaignScopeSummary` before assuming the selected refill campaign/table was
|
|
148
|
+
included; if absent, do not infer that target was ready-but-blocked. Interpret
|
|
149
|
+
`prefiltered`, `skipped`, and `deferred` separately. For ready closed-InMail
|
|
150
|
+
cells with stale paid-credit reasons, route to
|
|
151
|
+
`refresh_paid_inmail_credits_then_rerun` once, then rerun/status.
|
|
152
|
+
`wait_for_capacity_or_window` means report loaded/capped/waiting and do not
|
|
153
|
+
source or prep more rows; `no_ready_cells_continue_refill_prep` means return to
|
|
154
|
+
the refill/prep ladder. Do not treat `cellsScheduled:0` alone as failure.
|
|
131
155
|
|
|
132
156
|
After the first prep batch, read the conversion-verdict journal line. It is
|
|
133
157
|
rendered from packet facts: `supplyCensus`, `censusReason`, and
|
|
@@ -6,6 +6,7 @@ allowed-tools:
|
|
|
6
6
|
- mcp__sellable__refill_sends
|
|
7
7
|
- mcp__sellable__get_refill_target_plan
|
|
8
8
|
- mcp__sellable__get_scheduler_fill_capacity
|
|
9
|
+
- mcp__sellable__run_scheduler_sweep
|
|
9
10
|
- mcp__sellable__refresh_paid_inmail_credits
|
|
10
11
|
- mcp__sellable__get_subskill_asset
|
|
11
12
|
- mcp__sellable__get_auth_status
|
|
@@ -86,6 +87,12 @@ Accepted invocation flags in the same user request:
|
|
|
86
87
|
preserves natural-language arguments better than shell-style flags.
|
|
87
88
|
- `targetDate: YYYY-MM-DD`: exact-date selector alternative when the host
|
|
88
89
|
preserves natural-language arguments better than shell-style flags.
|
|
90
|
+
- `horizonSendDays: N`: compatibility selector for the next N sender-local send
|
|
91
|
+
days when no exact or through-date selector is present.
|
|
92
|
+
|
|
93
|
+
Date selector precedence is `targetDate > untilDate > horizonSendDays`. Use
|
|
94
|
+
`targetDate` for one exact sender-local date, `untilDate` for an inclusive
|
|
95
|
+
through-date, and `horizonSendDays` for the next N sender-local send days.
|
|
89
96
|
|
|
90
97
|
When the host can call typed MCP tools, start with:
|
|
91
98
|
|
|
@@ -114,10 +121,11 @@ or install-time workspace mapping. Pass `workspaceId` on every scheduled or
|
|
|
114
121
|
`--yolo` refill tool call, including setup/read calls such as
|
|
115
122
|
`refill_sends`, `get_refill_target_plan`, `list_senders`,
|
|
116
123
|
`get_sender_routing`, `resolve_campaign_fill_route`,
|
|
117
|
-
`get_campaign_refill_state`, `get_scheduler_fill_capacity`,
|
|
118
|
-
refill mutation covered by the packet.
|
|
119
|
-
`--yolo` mode is a blocker; stop with
|
|
120
|
-
against an implicit or guessed
|
|
124
|
+
`get_campaign_refill_state`, `get_scheduler_fill_capacity`,
|
|
125
|
+
`run_scheduler_sweep`, and any later refill mutation covered by the packet.
|
|
126
|
+
Missing `workspaceId` in scheduled or `--yolo` mode is a blocker; stop with
|
|
127
|
+
`WORKSPACE_REQUIRED` instead of running against an implicit or guessed
|
|
128
|
+
workspace.
|
|
121
129
|
|
|
122
130
|
Do not solve scheduled or `--yolo` workspace uncertainty by changing the shared
|
|
123
131
|
active workspace. Manual interactive workspace switching remains a separate
|
|
@@ -269,6 +277,25 @@ need raw proof, call the read-only `get_scheduler_fill_capacity` query for the
|
|
|
269
277
|
same sender/action/date; it tells the MCP how many cells the product scheduler
|
|
270
278
|
will try to place and does not import, approve, schedule, refresh credits, or
|
|
271
279
|
mutate.
|
|
280
|
+
When the refill loop has ready rows and needs scheduler pickup now, use
|
|
281
|
+
`run_scheduler_sweep({ workspaceId, targetDate })` for exact-date requests. For
|
|
282
|
+
`untilDate` or `horizonSendDays` requests, sweep each planner-selected
|
|
283
|
+
`targetDate` with the same explicit `workspaceId`. The sweep can place cells
|
|
284
|
+
within existing scheduler gates and returns the receipt, but it never sends or
|
|
285
|
+
bypasses limits.
|
|
286
|
+
Scheduler-run receipt interpretation: `cellsConsidered is allocation-attempt
|
|
287
|
+
count`, not total ready supply, while `readyCellsFound` is ready inventory found
|
|
288
|
+
before prefilters. Inspect `campaignScopeSummary` before assuming the selected
|
|
289
|
+
refill campaign/table was included; if absent, do not infer that target was
|
|
290
|
+
ready-but-blocked. Interpret `prefiltered` as ready cells removed before
|
|
291
|
+
allocation, `skipped` as considered cells blocked by scheduler gates, and
|
|
292
|
+
`deferred` as considered cells waiting on windows/capacity/cooldown. For ready
|
|
293
|
+
closed-InMail cells with stale paid-credit prefilter/defer reasons, refresh
|
|
294
|
+
paid-InMail credits once through existing tools, then rerun `run_scheduler_sweep`
|
|
295
|
+
or read `action:"status"`; `refresh_paid_inmail_credits_then_rerun` is that
|
|
296
|
+
path. `wait_for_capacity_or_window` means report loaded/capped/waiting and do
|
|
297
|
+
not source or prep more rows; `no_ready_cells_continue_refill_prep` means return
|
|
298
|
+
to the refill/prep ladder. Do not treat `cellsScheduled:0` alone as failure.
|
|
272
299
|
If the target plan is complete by projected coverage, report that the selected
|
|
273
300
|
target is already filled and no-op without asking for approval. If the ready
|
|
274
301
|
buffer covers the projected gap, paid InMail credit facts are fresh for every
|