@sellable/install 0.1.294 → 0.1.296
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
|
@@ -1973,7 +1973,8 @@ ${allowedToolsYaml(REFILL_SENDS_ALLOWED_TOOLS)}
|
|
|
1973
1973
|
|
|
1974
1974
|
Use this as the customer-facing entrypoint for the Sellable \`refill-sends\`
|
|
1975
1975
|
workflow. It supports \`--yolo\` and optional repeated \`--sender <name-or-id>\`
|
|
1976
|
-
selectors. It also supports \`--
|
|
1976
|
+
selectors. It also supports \`--target-date YYYY-MM-DD\` to fill one exact
|
|
1977
|
+
sender-local date and \`--until YYYY-MM-DD\` to fill through a specific
|
|
1977
1978
|
sender-local date instead of the default scheduler-forward 48-hour target window.
|
|
1978
1979
|
|
|
1979
1980
|
Goal-mode continuation: a skill cannot create or invoke \`/goal\` by itself. If
|
|
@@ -1998,8 +1999,8 @@ Desktop, then start a new thread.
|
|
|
1998
1999
|
## Execute Workflow
|
|
1999
2000
|
|
|
2000
2001
|
1. Call \`mcp__sellable__get_auth_status({})\`.
|
|
2001
|
-
2. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, senders, senderIds, senderNames, untilDate })\` when the host exposes typed MCP tools.
|
|
2002
|
-
3. Call \`mcp__sellable__get_refill_target_plan({ senders, senderIds, senderNames, untilDate })\` before any mutation. 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.
|
|
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\`, execute only one globally ranked primitive from \`target.globalActionQueue[0]\`, then rerun \`get_refill_target_plan\`. Maintain a run-local \`refreshedPaidInmailSenderIds\` set and refresh each selected paid-InMail sender at most once before falling back to an existing connection lane or manual continuation. 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.
|
|
2003
2004
|
4. Load the canonical prompt via
|
|
2004
2005
|
\`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends" })\`,
|
|
2005
2006
|
then load \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends-workflow" })\`.
|
package/lib/runtime-verify.mjs
CHANGED
|
@@ -31,6 +31,7 @@ export const REQUIRED_SELLABLE_MCP_TOOLS = [
|
|
|
31
31
|
"resolve_campaign_fill_route",
|
|
32
32
|
"get_campaign_refill_state",
|
|
33
33
|
"get_refill_target_plan",
|
|
34
|
+
"get_scheduler_fill_capacity",
|
|
34
35
|
"refill_sends",
|
|
35
36
|
"setup_evergreen_campaigns",
|
|
36
37
|
"start_campaign_message_preparation",
|
package/package.json
CHANGED
|
@@ -5,6 +5,7 @@ visibility: public
|
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- mcp__sellable__refill_sends
|
|
7
7
|
- mcp__sellable__get_refill_target_plan
|
|
8
|
+
- mcp__sellable__get_scheduler_fill_capacity
|
|
8
9
|
- mcp__sellable__refresh_paid_inmail_credits
|
|
9
10
|
- mcp__sellable__get_auth_status
|
|
10
11
|
- mcp__sellable__start_cli_login
|
|
@@ -71,16 +72,21 @@ Accepted invocation flags in the same user request:
|
|
|
71
72
|
senders.
|
|
72
73
|
- `--until <YYYY-MM-DD>`: fill through that sender-local date, inclusive,
|
|
73
74
|
instead of the default scheduler-forward 48-hour target window.
|
|
75
|
+
- `--target-date <YYYY-MM-DD>`: fill only that sender-local date. This means
|
|
76
|
+
prepare rows for scheduler-fillable slots on that date, not every remaining
|
|
77
|
+
daily-limit slot and not an inclusive through-date.
|
|
74
78
|
- `senderIds: <id>, <id>` or `senderNames: <name>, <name>`: explicit selector
|
|
75
79
|
alternatives when the host preserves natural-language arguments better than
|
|
76
80
|
shell-style flags.
|
|
77
81
|
- `untilDate: YYYY-MM-DD`: explicit date selector alternative when the host
|
|
78
82
|
preserves natural-language arguments better than shell-style flags.
|
|
83
|
+
- `targetDate: YYYY-MM-DD`: exact-date selector alternative when the host
|
|
84
|
+
preserves natural-language arguments better than shell-style flags.
|
|
79
85
|
|
|
80
86
|
When the host can call typed MCP tools, start with:
|
|
81
87
|
|
|
82
88
|
```text
|
|
83
|
-
refill_sends({ yolo?: boolean, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD" })
|
|
89
|
+
refill_sends({ yolo?: boolean, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD", targetDate?: "YYYY-MM-DD" })
|
|
84
90
|
```
|
|
85
91
|
|
|
86
92
|
That command helper only normalizes arguments and returns the execution
|
|
@@ -137,6 +143,44 @@ two lanes to fill. If a stale target plan selects `send_dm` or
|
|
|
137
143
|
`send_inmail_open`, stop and re-plan with the current planner before mutation.
|
|
138
144
|
Short form: trust the target plan's inferred lane only when it is a
|
|
139
145
|
connection-invite or paid-InMail refill lane.
|
|
146
|
+
|
|
147
|
+
Structured planner packet:
|
|
148
|
+
|
|
149
|
+
- `target.eligibleSenderLedger` is the public sender eligibility ledger.
|
|
150
|
+
- `target.senderRefillPlans[]` is the canonical sender-level packet; read and
|
|
151
|
+
display it before mutation.
|
|
152
|
+
- Each sender packet includes `campaignRanking.options`, `sourcePlan`,
|
|
153
|
+
`nextActions`, and `manualAlternates`.
|
|
154
|
+
- Preserve these coverage labels exactly: `Need to prepare`, `Goal`,
|
|
155
|
+
`Already sent`, `Scheduled`, `Ready and waiting to be scheduled`, and
|
|
156
|
+
`Still need`.
|
|
157
|
+
- `target.globalActionQueue` is the only cross-sender yolo execution queue.
|
|
158
|
+
Execute exactly one globally ranked primitive from
|
|
159
|
+
`target.globalActionQueue[0]`, then rerun `get_refill_target_plan` before
|
|
160
|
+
choosing another action.
|
|
161
|
+
- `manualAlternates` are not yolo actions. Threshold lowering and campaign
|
|
162
|
+
creation are manual continuations only.
|
|
163
|
+
|
|
164
|
+
Run-local paid-credit guard: maintain a `refreshedPaidInmailSenderIds` set for
|
|
165
|
+
the current command call. Refresh each selected sender at most once per refill
|
|
166
|
+
command call, then rerun `get_refill_target_plan`. If fresh facts are still
|
|
167
|
+
below threshold, below-threshold paid-InMail facts fall back to an existing
|
|
168
|
+
connection lane or a manual continuation.
|
|
169
|
+
|
|
170
|
+
Compact refill lessons: sender-level target plan is final truth; trust
|
|
171
|
+
`schedulerGate.sendable` and scheduler gate blockers, not raw
|
|
172
|
+
`unipileAccountStatus` labels alone; use compact prep status checks for
|
|
173
|
+
long-running jobs; reread target plans after prep or cancel; treat ready rows as
|
|
174
|
+
intermediate; avoid huge parallel target-plan reads when output is large. If a
|
|
175
|
+
campaign produces prepared/ready rows but sender-level projected coverage does
|
|
176
|
+
not move after one bounded settle loop, pivot to compact prep status or a
|
|
177
|
+
scheduler-proven lane. Do not keep waiting on campaign-level ready counts.
|
|
178
|
+
|
|
179
|
+
For exact-date requests, pass `targetDate` to `get_refill_target_plan`. If you
|
|
180
|
+
need raw proof, call the read-only `get_scheduler_fill_capacity` query for the
|
|
181
|
+
same sender/action/date; it tells the MCP how many cells the product scheduler
|
|
182
|
+
will try to place and does not import, approve, schedule, refresh credits, or
|
|
183
|
+
mutate.
|
|
140
184
|
If the target plan is complete by projected coverage, report that the selected
|
|
141
185
|
target is already filled and no-op without asking for approval. If the ready
|
|
142
186
|
buffer covers the projected gap but scheduled coverage is still short, keep the
|
|
@@ -149,10 +193,11 @@ state, not a close-out condition.
|
|
|
149
193
|
If paid InMail credit facts are stale or missing and the target plan returns a
|
|
150
194
|
`refresh_paid_inmail_credits` action candidate, include the exact sender id,
|
|
151
195
|
campaign/table/column proof, expected sender-credit-cache writes, and rerun plan
|
|
152
|
-
step in the bounded packet.
|
|
153
|
-
|
|
154
|
-
InMail is below threshold after a
|
|
155
|
-
campaign/table/column threshold action or
|
|
196
|
+
step in the bounded packet. In `--yolo`, refresh each exact selected sender at
|
|
197
|
+
most once for the current refill run, then rerun `get_refill_target_plan` before
|
|
198
|
+
any prep/import/approval/start action. If paid InMail is below threshold after a
|
|
199
|
+
fresh credit read, report the exact campaign/table/column threshold action or
|
|
200
|
+
connection fallback; `--yolo` does not lower paid-InMail thresholds or create campaigns.
|
|
156
201
|
|
|
157
202
|
If the plain route's managed waterfall targets are stale, for example skipped
|
|
158
203
|
targets show archived/completed shared slots or the returned targets do not cover
|
|
@@ -208,7 +253,7 @@ apply/prep/start result, reread state, settle processing when needed, and move t
|
|
|
208
253
|
the next selected sender or start-eligible same-packet campaign instead of
|
|
209
254
|
stopping after the first partial result. If no in-packet safe action remains,
|
|
210
255
|
return concrete continuation options with campaign names, exact ids, which option
|
|
211
|
-
is
|
|
256
|
+
is still covered by the current packet, and which option needs a new approval
|
|
212
257
|
packet.
|
|
213
258
|
|
|
214
259
|
For `--yolo` fill/schedule requests, completion means projected saturation
|
|
@@ -229,8 +274,10 @@ blocked only because it is still `awaiting_scheduler_after_ready_buffer`; keep
|
|
|
229
274
|
waiting unless Christian stops the run or the host cannot continue.
|
|
230
275
|
|
|
231
276
|
In `--yolo`, the default fill target is the scheduler-forward 48-hour window
|
|
232
|
-
unless `--until`/`untilDate
|
|
233
|
-
provided. If
|
|
277
|
+
unless `--target-date`/`targetDate`, `--until`/`untilDate`, or an explicit
|
|
278
|
+
compatibility `horizonSendDays` is provided. If a target date is provided,
|
|
279
|
+
compute bounded gaps for only that sender-local date using scheduler-fillable
|
|
280
|
+
slots. If an until date is provided, compute bounded gaps through that
|
|
234
281
|
sender-local date inclusive, skipping no-send days and never extending beyond
|
|
235
282
|
that date without a new packet. For each target sender, compute the bounded gap
|
|
236
283
|
from that sender's healthy daily capacity, existing future scheduler-owned
|