@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.
@@ -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 \`--until YYYY-MM-DD\` to fill through a specific
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" })\`.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.294",
3
+ "version": "0.1.296",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -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. After `refresh_paid_inmail_credits`, rerun
153
- `get_refill_target_plan` before any prep/import/approval/start action. If paid
154
- InMail is below threshold after a fresh credit read, report the exact
155
- campaign/table/column threshold action or connection fallback; `--yolo` does not lower paid-InMail thresholds or create campaigns.
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 already covered by the current packet, and which option needs a new approval
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` or an explicit compatibility `horizonSendDays` is
233
- provided. If an until date is provided, compute bounded gaps through that
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