@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.
package/bin/sellable-install.mjs
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
package/lib/runtime-verify.mjs
CHANGED
|
@@ -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
|
@@ -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.
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
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
|
-
|
|
409
|
-
|
|
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": "
|
|
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,
|
|
1334
|
-
|
|
1335
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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,
|
|
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
|
|
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
|
|
161
|
-
saturation, not merely prepared/approved/ready rows.
|
|
162
|
-
saturation ledger per selected sender: selected send days,
|
|
163
|
-
future scheduler-owned scheduled cells with
|
|
164
|
-
ready-to-schedule buffer, remaining
|
|
165
|
-
gap,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|