@sellable/install 0.1.263 → 0.1.265

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.
@@ -1944,7 +1944,8 @@ ${allowedToolsYaml(REFILL_SENDS_ALLOWED_TOOLS)}
1944
1944
 
1945
1945
  Use this as the customer-facing entrypoint for the Sellable \`refill-sends\`
1946
1946
  workflow. It supports \`--yolo\` and optional repeated \`--sender <name-or-id>\`
1947
- selectors.
1947
+ selectors. It also supports \`--until YYYY-MM-DD\` to fill through a specific
1948
+ sender-local date instead of the default two send-day horizon.
1948
1949
 
1949
1950
  ## Bootstrap
1950
1951
 
@@ -1960,7 +1961,7 @@ Desktop, then start a new thread.
1960
1961
  ## Execute Workflow
1961
1962
 
1962
1963
  1. Call \`mcp__sellable__get_auth_status({})\`.
1963
- 2. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, senders, senderIds, senderNames })\` when the host exposes typed MCP tools.
1964
+ 2. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, senders, senderIds, senderNames, untilDate })\` when the host exposes typed MCP tools.
1964
1965
  3. Load the canonical prompt via
1965
1966
  \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends" })\`,
1966
1967
  then load \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends-workflow" })\`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.263",
3
+ "version": "0.1.265",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -234,7 +234,15 @@ blocker and would make the whole yolo plan non-autoExecutable even though the
234
234
  operator asked to leave it untouched. Inventory and waterfall proof may mention
235
235
  the protected lane, but selectedActionIds and lane workers must cover only the
236
236
  shared lane packets.
237
+ If the operator says to preserve existing active/live campaigns, preserve an
238
+ ACTIVE Post Engagers lane the same way: treat it as protected inventory, exclude
239
+ it from `postEngagerSenderIds` for the execution plan, and select only the
240
+ remaining missing/reusable shared-lane actionIds. Do not let a protected active
241
+ Post Engagers reuse packet block shared-lane verification or repair. Report the
242
+ protected active lane in inventory/final notes, but do not dispatch a worker for
243
+ it and do not include it in `selectedActionIds`.
237
244
  Short form: Do not include the protected active Post Engagers lane as a reuse packet when the operator requested only shared lane execution.
245
+ Short form: "preserve existing active/live campaigns" means exclude ACTIVE Post Engagers from yolo execution, not block all shared-lane work.
238
246
 
239
247
  When senders are ambiguous, ask which sender ids belong in the Post Engagers
240
248
  sender scope and which belong in the shared lane sender scope before planning.
@@ -261,11 +269,23 @@ sender scopes, explicit bindings, or an interactive session.
261
269
 
262
270
  When safe-yolo is blocked only because the plan needs normal setup work, ask
263
271
  for a **bounded delegated approval** over the rendered current plan instead of
264
- asking for each substep. The approval packet must name the workspace id, sender
265
- ids, lane keys, campaign/table ids or create intents, source/import caps,
266
- generate-message caps, route-proof approval policy, selectedActionIds,
267
- planRevision, allowed side-effect classes, and stop conditions. After that one
268
- approval covers the current planRevision, the parent may act on behalf of the
272
+ asking for each substep. The approval request must be rendered from the plan's
273
+ `approvalSummary`, not handwritten from raw lane packets alone. Show:
274
+
275
+ - `workspaceId`, `planRevision`, and `selectedActionIds`.
276
+ - Sender scopes with display names and ids: Post Engagers senders and shared-lane senders.
277
+ - `campaignsToCreate`: each campaign/lane name, action id, create intent, attached senders, and allowed side effects.
278
+ - `campaignsToUpdate`: each existing campaign/table id, current status/step, attached senders, and exact repairs or setup side effects.
279
+ - `campaignsToVerifyOnly`: existing campaigns that will only be verified/read.
280
+ - `campaignsLeftUntouched`: existing campaigns attached to selected senders but excluded from the current selected lane scope, with the reason.
281
+ - Source/import caps, generate-message caps, route-proof approval policy, allowed side-effect classes, forbidden side effects, blockers, and stop conditions.
282
+
283
+ If `approvalSummary.approvalQuestion` is present, use it as the short approval
284
+ question and put the detailed buckets underneath. Do not ask a vague yes/no
285
+ question that only says "run evergreen setup" or "approve this plan" without
286
+ naming the campaigns to create, existing campaigns to update/verify, campaigns
287
+ left untouched, and attached senders. After that one approval covers the current
288
+ planRevision and selectedActionIds, the parent may act on behalf of the
269
289
  operator and execute the selectedActionIds end to end. Do not ask again for
270
290
  substep approvals for source import, create-campaign choices, Message Drafting,
271
291
  sequence attach/precheck, or exactly one route-proof approval when those actions
@@ -275,6 +295,7 @@ workspace id, sender ids, source/list id, campaign/table id, new campaign/table
275
295
  id, planRevision, actionId, selectedActionIds, allowed side effects, caps,
276
296
  status, or blocker set outside the approved packet.
277
297
  The short rule: one approval covers the current planRevision and selectedActionIds.
298
+ The approval clarity rule: the operator approves named campaign create/update/verify/untouched buckets and attached senders, not a generic evergreen run.
278
299
  The execution rule: act on behalf of the operator; do not ask again for substep approvals while work stays within the lane packet, approved caps, approved side-effect classes, and route-proof approval policy.
279
300
  The drift rule: stop and re-plan when ids, caps, blockers, side-effect classes, or any new campaign/table id leave the approved packet.
280
301
 
@@ -346,6 +367,14 @@ When launching durable Codex CLI workers from an automation parent, pass an
346
367
  explicit supported worker model instead of relying on the Codex CLI default
347
368
  model. Use the parent runtime model when known, for example:
348
369
  `codex -a never -s danger-full-access exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> -`.
370
+ In Codex CLI, the parent runtime model is visible in the run header as
371
+ `model: <model-name>`. Copy that exact model string into child worker launches
372
+ first. If the parent header says `model: gpt-5.5`, launch workers with
373
+ `-m gpt-5.5`; do not invent or probe nearby aliases such as `gpt-5.3-codex`,
374
+ `gpt-5.2`, `gpt-5-codex`, `codex-latest`, or `codex-mini-latest` before trying
375
+ the exact parent model. A one-line probe must count as supported only when it
376
+ exits 0 and returns the requested output; a session header followed by a
377
+ `not supported` error is rejected, not accepted.
349
378
  Do not rely on the Codex CLI default model; some customer and VPS installs
350
379
  default to unavailable model aliases. If the parent cannot identify a supported
351
380
  worker model and a test `codex exec -m <worker-model>` launch is rejected, stop
@@ -66,14 +66,18 @@ Accepted invocation flags in the same user request:
66
66
  fresh state reread.
67
67
  - `--sender <name-or-id>`: scope to a specific sender; repeat for multiple
68
68
  senders.
69
+ - `--until <YYYY-MM-DD>`: fill through that sender-local date, inclusive,
70
+ instead of the default two send-day horizon.
69
71
  - `senderIds: <id>, <id>` or `senderNames: <name>, <name>`: explicit selector
70
72
  alternatives when the host preserves natural-language arguments better than
71
73
  shell-style flags.
74
+ - `untilDate: YYYY-MM-DD`: explicit date selector alternative when the host
75
+ preserves natural-language arguments better than shell-style flags.
72
76
 
73
77
  When the host can call typed MCP tools, start with:
74
78
 
75
79
  ```text
76
- refill_sends({ yolo?: boolean, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number })
80
+ refill_sends({ yolo?: boolean, senders?: string[], senderIds?: string[], senderNames?: string[], horizonSendDays?: number, untilDate?: "YYYY-MM-DD" })
77
81
  ```
78
82
 
79
83
  That command helper only normalizes arguments and returns the execution
@@ -132,13 +136,16 @@ reassignment, or campaigns outside those selected for the eligible sender set.
132
136
  Stop and re-plan if the route, sender set, ids, caps, blockers, or side-effect
133
137
  class drift before mutation.
134
138
 
135
- In `--yolo`, the default two-day fill horizon is two send days. For each target
136
- sender, compute the bounded gap from that sender's healthy daily capacity,
137
- existing future scheduler-owned scheduled sends, and rows already ready to
138
- schedule across active campaigns enrolled with that sender. Then pick the best
139
- same-sender campaign to fill the gap: prefer recent/future scheduler-owned sends
140
- for that sender, then strongest recent result evidence, then source health. Do
141
- not stop after filling only one sender when the request was sender-scoped. If a
139
+ In `--yolo`, the default two-day fill horizon is two send days unless
140
+ `--until`/`untilDate` is provided. If an until date is provided, compute bounded
141
+ gaps through that sender-local date inclusive, skipping no-send days and never
142
+ extending beyond that date without a new packet. For each target sender, compute
143
+ the bounded gap from that sender's healthy daily capacity, existing future
144
+ scheduler-owned scheduled sends, and rows already ready to schedule across
145
+ active campaigns enrolled with that sender. Then pick the best same-sender
146
+ campaign to fill the gap: prefer recent/future scheduler-owned sends for that
147
+ sender, then strongest recent result evidence, then source health. Do not stop
148
+ after filling only one sender when the request was sender-scoped. If a
142
149
  same-source copy hits the campaign-table row cap, split the current source into
143
150
  a bounded LinkedIn profile source list, confirm only that smaller list into the
144
151
  same campaign, and operate on the copied review batch. Do not fall back to