@sellable/install 0.1.287 → 0.1.289

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.
@@ -1005,6 +1005,7 @@ const CREATE_CAMPAIGN_ALLOWED_TOOLS = [
1005
1005
  "mcp__sellable__wait_for_campaign_processing",
1006
1006
  "mcp__sellable__resolve_campaign_fill_route",
1007
1007
  "mcp__sellable__get_campaign_refill_state",
1008
+ "mcp__sellable__get_refill_target_plan",
1008
1009
  "mcp__sellable__fill_campaign_horizon",
1009
1010
  "mcp__sellable__start_campaign_message_preparation",
1010
1011
  "mcp__sellable__get_campaign_message_preparation_status",
@@ -1064,6 +1065,7 @@ const REFILL_SENDS_ALLOWED_TOOLS = [
1064
1065
  "mcp__sellable__get_campaign_waterfall",
1065
1066
  "mcp__sellable__resolve_campaign_fill_route",
1066
1067
  "mcp__sellable__get_campaign_refill_state",
1068
+ "mcp__sellable__get_refill_target_plan",
1067
1069
  "mcp__sellable__fill_campaign_horizon",
1068
1070
  "mcp__sellable__get_campaign",
1069
1071
  "mcp__sellable__get_campaign_context",
@@ -1989,10 +1991,11 @@ Desktop, then start a new thread.
1989
1991
 
1990
1992
  1. Call \`mcp__sellable__get_auth_status({})\`.
1991
1993
  2. Normalize invocation arguments with \`mcp__sellable__refill_sends({ yolo, senders, senderIds, senderNames, untilDate })\` when the host exposes typed MCP tools.
1992
- 3. Load the canonical prompt via
1994
+ 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, run only the read-only scheduler settle/re-read loop.
1995
+ 4. Load the canonical prompt via
1993
1996
  \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends" })\`,
1994
1997
  then load \`mcp__sellable__get_subskill_prompt({ subskillName: "refill-sends-workflow" })\`.
1995
- 4. Follow the canonical prompt exactly. Do not launch, start, archive, delete,
1998
+ 5. Follow the canonical prompt exactly. Do not launch, start, archive, delete,
1996
1999
  or write scheduler rows as part of refill sends.
1997
2000
 
1998
2001
  ## MCP Prompt Fallback
@@ -30,6 +30,7 @@ export const REQUIRED_SELLABLE_MCP_TOOLS = [
30
30
  "attach_recommended_sequence",
31
31
  "resolve_campaign_fill_route",
32
32
  "get_campaign_refill_state",
33
+ "get_refill_target_plan",
33
34
  "refill_sends",
34
35
  "setup_evergreen_campaigns",
35
36
  "start_campaign_message_preparation",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.287",
3
+ "version": "0.1.289",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -49,6 +49,7 @@ allowed-tools:
49
49
  - mcp__sellable__wait_for_campaign_processing
50
50
  - mcp__sellable__resolve_campaign_fill_route
51
51
  - mcp__sellable__get_campaign_refill_state
52
+ - mcp__sellable__get_refill_target_plan
52
53
  - mcp__sellable__fill_campaign_horizon
53
54
  - mcp__sellable__start_campaign_message_preparation
54
55
  - mcp__sellable__get_campaign_message_preparation_status
@@ -159,6 +159,14 @@ Post Engagers slots; shared sender scope is the union of senderRefs on the
159
159
  shared Signal Discovery and Shared Cold Fallback waterfall slots. If the
160
160
  waterfall has one clear production evergreen program for the workspace, this is
161
161
  not ambiguous even when `list_senders` returns additional connected senders.
162
+ If non-archived existing shared evergreen campaigns/tables are already attached
163
+ to additional senders, count those attached sender ids as current shared-lane
164
+ membership and include them in the shared-lane report. Do not collapse the
165
+ shared scope down to the one person named for a Post Engagers lane unless the
166
+ operator explicitly asked to limit shared lanes to that person or remove other
167
+ senders. Archived campaigns, archived tables, and archived waterfall bindings
168
+ are stale inventory for scope/counting unless the operator supplied those exact
169
+ ids and explicitly asked for archived dashboard visibility repair.
162
170
  In non-interactive or `--yolo` mode, when more than two connected senders exist
163
171
  and neither the prompt nor product-visible waterfall evidence identifies exact
164
172
  evergreen sender scope, stop before mutation with
@@ -168,6 +176,8 @@ Engagers lanes for extra senders.
168
176
  Short form: Do not pass `allConnectedSenders:true` unless the prompt explicitly says all/every connected sender.
169
177
  Short form: "all 4 campaigns" means explicit sender scope plus two shared lanes, not all connected senders.
170
178
  Short form: Product-visible managed evergreen/prod waterfall senderRefs are exact sender scope.
179
+ Short form: Non-archived shared campaign attachments count as current shared-lane sender scope.
180
+ Short form: A named Post Engagers sender is not automatically the whole shared-lane scope.
171
181
  Short form: Do not report `no_senders` while waterfall senderRefs can be mapped to list_senders.
172
182
  Short form: In `--yolo`, ambiguous multi-sender scope blocks before mutation.
173
183
  </inputs>
@@ -270,7 +280,8 @@ differ, pass both explicit arrays:
270
280
  - `postEngagerSenderIds`: only senders that should have sender-owned Post
271
281
  Engagers campaigns.
272
282
  - `sharedSenderIds`: senders attached to the shared Signal Discovery and Shared
273
- Cold Fallback campaigns.
283
+ Cold Fallback campaigns. This must be the full intended shared sender set,
284
+ not merely the sender named for a Post Engagers lane.
274
285
 
275
286
  If the operator says a sender is shared-only, do not create a Post Engagers lane
276
287
  for that shared-only sender. Example: if Justin already has a Post Engagers
@@ -387,10 +398,13 @@ before completion.
387
398
  Short form: Workers must preserve parent postEngagerSenderIds even for shared lanes.
388
399
  Short form: Never run a shared-lane worker-local plan with `postEngagerSenderIds:[]` unless the parent `postEngagerSenderIds` is exactly `[]`.
389
400
 
390
- Worker fan-out must use visible or durable execution. Preferred in local Codex
391
- is a visible Codex thread created with the actual Codex app thread tools:
392
- first call `codex_app.list_projects`, select the current repo project, then
393
- call `codex_app.create_thread` with `target:{type:"project", projectId,
401
+ Worker fan-out must use visible or durable execution. In local Codex, the
402
+ default and preferred runtime is `workerDispatch.preferredRuntime:
403
+ "visible-codex-app-thread"`. The parent must attempt a visible Codex app thread
404
+ first with the actual Codex app thread tools: if `codex_app.create_thread` is
405
+ not already visible, use tool discovery for the Codex app thread tools; then
406
+ call `codex_app.list_projects`, select the current repo project, and call
407
+ `codex_app.create_thread` with `target:{type:"project", projectId,
394
408
  environment:{type:"local"}}`. Do not create a worktree target for evergreen
395
409
  UAT or lane execution. The parent must record the returned thread id, pass
396
410
  exactly one lane packet into that thread, and require the worker to write the
@@ -404,9 +418,10 @@ worker exits, and contain the current `planRevision`, `actionId`, `laneKey`,
404
418
  `receiptArtifactPath`, and `durableReceiptWritten:true`. If a receipt predates
405
419
  the current run, uses an old path without `receiptRunId`, or was not freshly
406
420
  written by the current worker, stop with `blocked: stale_receipt_artifact`
407
- before parent verify or completion. A streaming worker or branch worker is
408
- acceptable only when it writes a fresh durable per-lane receipt artifact as it
409
- works.
421
+ before parent verify or completion. A streaming worker or branch worker is a
422
+ fallback only when app thread tools are unavailable; the receipt must include
423
+ `preferredRuntimeAttempt` for `visible-codex-app-thread` and a non-empty
424
+ `fallbackReason`, or backend verify rejects it.
410
425
  When visible Codex app thread tools are unavailable but local Codex CLI is
411
426
  available, the accepted durable streaming-worker command shape is:
412
427
  `codex -a never -s danger-full-access -c model_reasoning_effort=xhigh exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> -`.
@@ -716,7 +731,11 @@ not a parent-thread summary. The receipt must include:
716
731
  `workflowAssetPath:"create-campaign-v2/core/flow.v2.json"`,
717
732
  `workflowAssetLoaded:true`, the real `workerRuntime`, a visible
718
733
  `workerThreadId` or durable `receiptArtifactPath`, `durableReceiptWritten:true`
719
- when using a receipt file, and `notAdHoc:true`.
734
+ when using a receipt file, and `notAdHoc:true`. If `workerRuntime` is
735
+ `streaming-worker-with-durable-receipt` or
736
+ `branch-worker-with-durable-receipt`, also include
737
+ `preferredRuntimeAttempt` proving the parent attempted
738
+ `visible-codex-app-thread` first and a non-empty `fallbackReason`.
720
739
  - `researchSenderReceipt`: `research-sender` prompt load proof,
721
740
  `complete_sender_research` result, sender LinkedIn identity basis, and the
722
741
  notes/proof counts used before the net-new `create_campaign` call. It must
@@ -911,7 +930,7 @@ verification unless the same object also appears inside
911
930
  "workflowPromptLoadedToHasMoreFalse": true,
912
931
  "workflowAssetPath": "create-campaign-v2/core/flow.v2.json",
913
932
  "workflowAssetLoaded": true,
914
- "workerRuntime": "separate-codex-thread",
933
+ "workerRuntime": "visible-codex-app-thread",
915
934
  "workerThreadId": "<visible local Codex thread id>",
916
935
  "receiptArtifactPath": "<receiptArtifactPath from workerDispatch.receiptArtifactHint>",
917
936
  "durableReceiptWritten": true,
@@ -1330,21 +1349,35 @@ Message, and verify current-revision sample messages before final completion.
1330
1349
  Short form: Shared lanes must reject internal workflow vocabulary.
1331
1350
  Short form: revise or rerun the packaged create-campaign/generate-messages path.
1332
1351
  - **Post Engagers** first-message style: short, casual, references the
1333
- sender-authored post they engaged with, and stops after the thank-you
1334
- line. Use **no internal vocabulary, no pitch, no meeting ask, no product
1335
- line, and no relevance question** in message one:
1352
+ sender-authored post they engaged with, includes the post URL as a concrete
1353
+ reminder, uses an easy buyer-function/category line, and ends with one
1354
+ row-custom closed question. Use **no internal vocabulary, no meeting ask,
1355
+ no proof block, no feature-stack category, and no generic static question**
1356
+ in message one:
1336
1357
 
1337
1358
  ```
1338
1359
  {{first_name}}
1339
1360
 
1340
1361
  Hey there
1341
1362
 
1342
- Thank you for the support on my post about {{post_topic_line}}
1363
+ Saw you pop up on my post about {{post_topic_line}}
1364
+
1365
+ This one
1366
+ {{post_url}}
1367
+
1368
+ Looks like you lead {{plain_buyer_function}} at {{company_name}}, right?
1369
+
1370
+ {{custom_closed_question}}
1343
1371
  ```
1344
1372
 
1345
- Do not add any paragraph after the thank-you line. In particular, do not
1346
- append `curious, are you trying...`, `open to...`, `worth seeing...`, or
1347
- Sellable/product copy to a Post Engagers first message.
1373
+ `{{custom_closed_question}}` must be specific to the post topic, buyer
1374
+ function, company context, and current offer category. The category should
1375
+ be easy to understand, for example `LinkedIn outbound`, `customer success`,
1376
+ `CX operations`, `support`, `sales`, or `growth`; do not use feature-heavy
1377
+ phrasing like `manual research + follow-up process`, `lead filters`, or
1378
+ `sequence setup`. Do not add any paragraph after the custom closed question.
1379
+ In particular, do not append `open to...`, `worth seeing...`, a meeting ask,
1380
+ proof block, or Sellable/product copy to a Post Engagers first message.
1348
1381
 
1349
1382
  - **Shared Signal Discovery** first-message style: short, casual, starts
1350
1383
  from the real public business theme or buyer problem supported by the row.
@@ -4,6 +4,7 @@ description: Plan regular campaign and evergreen campaign send refill work throu
4
4
  visibility: public
5
5
  allowed-tools:
6
6
  - mcp__sellable__refill_sends
7
+ - mcp__sellable__get_refill_target_plan
7
8
  - mcp__sellable__get_auth_status
8
9
  - mcp__sellable__start_cli_login
9
10
  - mcp__sellable__wait_for_cli_login
@@ -102,11 +103,29 @@ get_subskill_prompt({ subskillName: "refill-sends-workflow" })
102
103
  ```
103
104
 
104
105
  Then follow that workflow exactly. The default path is read-only research:
105
- resolve the route, identify the sender-relevant campaign that most recently had
106
- scheduler-owned sends, read refill state for that target, report the next safe
107
- step using campaign names first, and stop before mutation unless the user has
108
- explicitly approved the exact workspace, campaign/table/source ids, caps/dates,
109
- approval mode, expected side effects, and stop/rollback condition.
106
+ compute the refill target plan first, resolve the route, identify the
107
+ sender-relevant campaign that most recently had scheduler-owned sends, read
108
+ refill state for that target, report the next safe step using campaign names
109
+ first, and stop before mutation unless the user has explicitly approved the
110
+ exact workspace, campaign/table/source ids, caps/dates, approval mode, expected
111
+ side effects, and stop/rollback condition.
112
+
113
+ Immediately after loading the internal workflow, call
114
+ `get_refill_target_plan`. The target plan is the canonical first fact receipt:
115
+ eligible senders, selected sender-local days, gross target, actual sent
116
+ coverage, scheduler-owned scheduled coverage across active enrolled campaigns,
117
+ projected coverage (`sent + scheduled`), inferred per-sender send lane/action
118
+ selections, ready buffer, remaining projected gap, paid-InMail credit/threshold
119
+ feasibility, `targetShapeRevision`, and `stateRevision`. When `actionTypes` are
120
+ omitted, trust the target plan's inferred lane rather than asking whether to
121
+ fill connections, DMs, or InMails. If the target plan is complete by projected
122
+ coverage, report that the selected target is already filled and no-op without
123
+ asking for approval. If the ready buffer covers the projected gap but scheduled
124
+ coverage is still short, run only a bounded read-only scheduler settle/reread
125
+ loop and report `awaiting_scheduler_after_ready_buffer` if it does not settle.
126
+ If paid InMail is below threshold, stale, or missing credit facts, report the
127
+ exact campaign/table/column threshold action or connection fallback; `--yolo`
128
+ does not lower paid-InMail thresholds or create campaigns.
110
129
 
111
130
  If the plain route's managed waterfall targets are stale, for example skipped
112
131
  targets show archived/completed shared slots or the returned targets do not cover
@@ -145,9 +164,14 @@ effect. Starting a paused campaign can let the product scheduler schedule/send
145
164
  approved eligible sequence actions, so include that expected side effect in the
146
165
  packet. It does not authorize starting unrelated, archived, completed, draft, or
147
166
  direct campaigns, separate launch/send actions, archive or delete cleanup,
148
- direct scheduler writes, sender reassignment, or campaigns outside those
167
+ direct scheduler writes, sender reassignment, paid-InMail threshold changes,
168
+ connection campaign creation, or campaigns outside those
149
169
  selected for the eligible sender set. Stop and re-plan if the route, sender set,
150
- ids, caps, blockers, or side-effect class drift before mutation.
170
+ ids, caps, blockers, paid-InMail feasibility, action class, or side-effect class
171
+ drift before mutation. Sent/scheduled counts increasing toward the approved
172
+ target are expected progress:
173
+ they change `stateRevision`, not `targetShapeRevision`, and do not require a
174
+ second approval.
151
175
 
152
176
  In `--yolo`, continue as far as the rendered packet safely allows. After each
153
177
  apply/prep/start result, reread state, settle processing when needed, and move to
@@ -157,18 +181,20 @@ return concrete continuation options with campaign names, exact ids, which optio
157
181
  is already covered by the current packet, and which option needs a new approval
158
182
  packet.
159
183
 
160
- For `--yolo` fill/schedule requests, completion means scheduler-proven horizon
161
- saturation, not merely prepared/approved/ready rows. Maintain a horizon
162
- saturation ledger per selected sender: selected send days, gross capacity,
163
- future scheduler-owned scheduled cells with non-null `scheduledFor`,
164
- ready-to-schedule buffer, remaining scheduled gap, remaining ready-or-scheduled
165
- gap, and the next MCP primitive that can reduce the gap. After every
166
- apply/prep/start result, wait for processing, reread refill state, recompute the
167
- ledger, then keep applying safe bounded actions until the scheduled count fills
168
- the horizon or a concrete blocker/timeout is proven. If ready rows cover the
169
- horizon but the scheduler has not picked them up yet, run a bounded scheduler
170
- settle loop and report `awaiting_scheduler_after_ready_buffer` as not complete
171
- when the timeout is reached.
184
+ For `--yolo` fill/schedule requests, completion means projected horizon
185
+ saturation (`sent + scheduled`), not merely prepared/approved/ready rows.
186
+ Maintain a horizon saturation ledger per selected sender: selected send days,
187
+ gross capacity, actual sent cells, future scheduler-owned scheduled cells with
188
+ non-null `scheduledFor`, projected count, ready-to-schedule buffer, remaining
189
+ projected gap, paid-InMail feasibility, `targetShapeRevision`,
190
+ `stateRevision`, and the next MCP primitive that can reduce the gap. After every
191
+ apply/prep/start result, wait for processing, reread the target plan/refill
192
+ state, recompute the ledger, then keep applying safe bounded actions until
193
+ projected coverage fills the horizon or a concrete blocker/timeout is proven.
194
+ If ready rows cover the projected gap but the scheduler has not picked them up
195
+ yet, run a bounded scheduler settle loop and report
196
+ `awaiting_scheduler_after_ready_buffer` as not complete when the timeout is
197
+ reached.
172
198
 
173
199
  In `--yolo`, the default two-day fill horizon is two send days unless
174
200
  `--until`/`untilDate` is provided. If an until date is provided, compute bounded