@sellable/install 0.1.293 → 0.1.295

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,15 +1973,17 @@ ${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
1977
- sender-local date instead of the default two send-day horizon.
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
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
1980
1981
  this command is already running inside an active Codex goal, keep that goal open
1981
- until every selected sender lane is horizon-filled by projected coverage
1982
- (\`sent + scheduled\`), Christian explicitly stops/statuses the run, or a
1983
- concrete non-scheduler blocker appears. Do not call the goal complete or blocked
1984
- only because the current state is \`awaiting_scheduler_after_ready_buffer\`.
1982
+ until every selected sender lane is filled by projected coverage
1983
+ (\`sent + scheduled\`) for the scheduler-forward target window, Christian
1984
+ explicitly stops/statuses the run, or a concrete non-scheduler blocker appears.
1985
+ Do not call the goal complete or blocked only because the current state is
1986
+ \`awaiting_scheduler_after_ready_buffer\`; treat it as loaded, awaiting scheduler.
1985
1987
 
1986
1988
  ## Bootstrap
1987
1989
 
@@ -1997,8 +1999,8 @@ Desktop, then start a new thread.
1997
1999
  ## Execute Workflow
1998
2000
 
1999
2001
  1. Call \`mcp__sellable__get_auth_status({})\`.
2000
- 2. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, senders, senderIds, senderNames, untilDate })\` when the host exposes typed MCP tools.
2001
- 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. 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.
2002
2004
  4. Load the canonical prompt via
2003
2005
  \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends" })\`,
2004
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.293",
3
+ "version": "0.1.295",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -138,10 +138,10 @@ explicit user selection; it is never the default response to plain fill. When
138
138
  choosing among active targets, use refill-state scheduled-count evidence to
139
139
  continue the campaign that most recently had scheduler-owned sends for the
140
140
  relevant sender set; do not treat every active campaign as a refill candidate.
141
- In `--yolo` fill/refill mode, default to one best recent-send campaign and a
142
- two-send-day horizon: subtract future scheduler-owned scheduled sends and
143
- ready-to-schedule rows from healthy sender daily capacity, then prepare only
144
- that bounded gap.
141
+ In `--yolo` fill/refill mode, default to one best recent-send campaign and the
142
+ scheduler-forward 48-hour target window: subtract future scheduler-owned
143
+ scheduled sends and ready-to-schedule rows from healthy sender daily capacity,
144
+ then prepare only that bounded gap.
145
145
  When more leads are needed, the refill workflow must recommend same-campaign
146
146
  source-ladder replenishment first; do not create warm-post-engager side
147
147
  campaigns, on-demand campaigns, or unrelated campaigns. If same-source copy hits
@@ -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
@@ -70,17 +71,22 @@ Accepted invocation flags in the same user request:
70
71
  - `--sender <name-or-id>`: scope to a specific sender; repeat for multiple
71
72
  senders.
72
73
  - `--until <YYYY-MM-DD>`: fill through that sender-local date, inclusive,
73
- instead of the default two send-day horizon.
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
@@ -99,10 +105,11 @@ resolver.
99
105
 
100
106
  Goal-mode continuation: a skill cannot create or invoke `/goal` by itself. When
101
107
  this command is already running inside an active Codex goal, keep that goal open
102
- until every selected sender lane is horizon-filled by projected coverage
103
- (`sent + scheduled`), Christian explicitly stops/statuses the run, or a concrete
104
- non-scheduler blocker appears. Do not call the goal complete or blocked only
105
- because the current state is `awaiting_scheduler_after_ready_buffer`.
108
+ until every selected sender lane is filled by projected coverage
109
+ (`sent + scheduled`) for the scheduler-forward target window, Christian
110
+ explicitly stops/statuses the run, or a concrete non-scheduler blocker appears.
111
+ Do not call the goal complete or blocked only because the current state is
112
+ `awaiting_scheduler_after_ready_buffer`; treat it as loaded, awaiting scheduler.
106
113
 
107
114
  Load the internal workflow prompt before taking any operational step:
108
115
 
@@ -136,6 +143,11 @@ two lanes to fill. If a stale target plan selects `send_dm` or
136
143
  `send_inmail_open`, stop and re-plan with the current planner before mutation.
137
144
  Short form: trust the target plan's inferred lane only when it is a
138
145
  connection-invite or paid-InMail refill lane.
146
+ For exact-date requests, pass `targetDate` to `get_refill_target_plan`. If you
147
+ need raw proof, call the read-only `get_scheduler_fill_capacity` query for the
148
+ same sender/action/date; it tells the MCP how many cells the product scheduler
149
+ will try to place and does not import, approve, schedule, refresh credits, or
150
+ mutate.
139
151
  If the target plan is complete by projected coverage, report that the selected
140
152
  target is already filled and no-op without asking for approval. If the ready
141
153
  buffer covers the projected gap but scheduled coverage is still short, keep the
@@ -210,32 +222,35 @@ return concrete continuation options with campaign names, exact ids, which optio
210
222
  is already covered by the current packet, and which option needs a new approval
211
223
  packet.
212
224
 
213
- For `--yolo` fill/schedule requests, completion means projected horizon
214
- saturation (`sent + scheduled`), not merely prepared/approved/ready rows.
215
- Maintain a horizon saturation ledger per selected sender: selected send days,
216
- gross capacity, actual sent cells, future scheduler-owned scheduled cells with
217
- non-null `scheduledFor`, projected count, ready-to-schedule buffer, remaining
218
- projected gap, paid-InMail feasibility, `targetShapeRevision`,
219
- `stateRevision`, and the next MCP primitive that can reduce the gap. After every
220
- apply/prep/start result, wait for processing, reread the target plan/refill
221
- state, recompute the ledger, then keep applying safe bounded actions until
222
- projected coverage fills the horizon or a concrete non-scheduler blocker is
223
- proven.
225
+ For `--yolo` fill/schedule requests, completion means projected saturation
226
+ (`sent + scheduled`) for the scheduler-forward target window, not merely
227
+ prepared/approved/ready rows. Maintain a target-window saturation ledger per
228
+ selected sender: selected send days, gross capacity, actual sent cells, future
229
+ scheduler-owned scheduled cells with non-null `scheduledFor`, projected count,
230
+ ready-to-schedule buffer, remaining projected gap, paid-InMail feasibility,
231
+ `targetShapeRevision`, `stateRevision`, and the next MCP primitive that can
232
+ reduce the gap. After every apply/prep/start result, wait for processing, reread
233
+ the target plan/refill state, recompute the ledger, then keep applying safe
234
+ bounded actions until projected coverage fills the target window or a concrete
235
+ non-scheduler blocker is proven.
224
236
  If ready rows cover the projected gap but the scheduler has not picked them up
225
- yet, run the persistent read-only scheduler wait loop. Do not finish the refill
226
- goal, mark it complete, or mark it blocked only because it is still
227
- `awaiting_scheduler_after_ready_buffer`; keep waiting unless Christian stops the
228
- run or the host cannot continue.
229
-
230
- In `--yolo`, the default two-day fill horizon is two send days unless
231
- `--until`/`untilDate` is provided. If an until date is provided, compute bounded
232
- gaps through that sender-local date inclusive, skipping no-send days and never
233
- extending beyond that date without a new packet. For each target sender, compute
234
- the bounded gap from that sender's healthy daily capacity, existing future
235
- scheduler-owned scheduled sends, and rows already ready to schedule across
236
- active campaigns enrolled with that sender. Then pick the best same-sender
237
- campaign to fill the gap: prefer recent/future scheduler-owned sends for that
238
- sender, then strongest recent result evidence, then source health. Do not stop
237
+ yet, report loaded, awaiting scheduler and run the persistent read-only
238
+ scheduler wait loop. Do not finish the refill goal, mark it complete, or mark it
239
+ blocked only because it is still `awaiting_scheduler_after_ready_buffer`; keep
240
+ waiting unless Christian stops the run or the host cannot continue.
241
+
242
+ In `--yolo`, the default fill target is the scheduler-forward 48-hour window
243
+ unless `--target-date`/`targetDate`, `--until`/`untilDate`, or an explicit
244
+ compatibility `horizonSendDays` is provided. If a target date is provided,
245
+ compute bounded gaps for only that sender-local date using scheduler-fillable
246
+ slots. If an until date is provided, compute bounded gaps through that
247
+ sender-local date inclusive, skipping no-send days and never extending beyond
248
+ that date without a new packet. For each target sender, compute the bounded gap
249
+ from that sender's healthy daily capacity, existing future scheduler-owned
250
+ scheduled sends, and rows already ready to schedule across active campaigns
251
+ enrolled with that sender. Then pick the best same-sender campaign to fill the
252
+ gap: prefer recent/future scheduler-owned sends for that sender, then strongest
253
+ recent result evidence, then source health. Do not stop
239
254
  after filling only one sender when the request was sender-scoped. If a
240
255
  same-source copy hits the campaign-table row cap, split the current source into
241
256
  a bounded LinkedIn profile source list, confirm only that smaller list into the