@sellable/install 0.1.281 → 0.1.283
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
|
@@ -37,7 +37,7 @@ function getInstallVersion() {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
const CODEX_PLUGIN_VERSION = "0.1.
|
|
40
|
+
const CODEX_PLUGIN_VERSION = "0.1.53";
|
|
41
41
|
const CODEX_PLUGIN_COMPAT_VERSIONS = [
|
|
42
42
|
"0.1.8",
|
|
43
43
|
"0.1.9",
|
|
@@ -74,6 +74,7 @@ const CODEX_PLUGIN_COMPAT_VERSIONS = [
|
|
|
74
74
|
"0.1.40",
|
|
75
75
|
"0.1.41",
|
|
76
76
|
"0.1.51",
|
|
77
|
+
"0.1.52",
|
|
77
78
|
];
|
|
78
79
|
const RAW_INSTALL_PACKAGE_SPEC =
|
|
79
80
|
process.env.SELLABLE_INSTALL_PACKAGE_SPEC || "@sellable/install@latest";
|
package/package.json
CHANGED
|
@@ -62,13 +62,15 @@ long-form contract below:
|
|
|
62
62
|
callable, return `blocked: missing_visible_or_durable_lane_worker_runtime`
|
|
63
63
|
before mutation.
|
|
64
64
|
4. Write one compact prompt file per selected lane using the matching
|
|
65
|
-
`createCampaignGoals[].goalPrompt
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
`createCampaignGoals[].goalPrompt` as the authoritative campaign task, plus
|
|
66
|
+
only the lane packet, receipt path, side-effect caps, and canonical receipt
|
|
67
|
+
requirement. Paste the goal prompt verbatim; do not replace it with a
|
|
68
|
+
handcrafted `Goal:` paragraph. Do not paste the full evergreen skill, receipt
|
|
69
|
+
schema, repair history, verifier checklist, or lane-specific copy checklist
|
|
70
|
+
into the worker prompt. The worker goal is simple: run
|
|
71
|
+
`$sellable:create-campaign` normally for that campaign goal, use the
|
|
72
|
+
evergreen-selected provider/source only as internal sourcing metadata, and
|
|
73
|
+
write the receipt. The parent does not create campaign shells.
|
|
72
74
|
5. Collect fresh durable receipts, verify with the original planRevision and
|
|
73
75
|
selectedActionIds, then run the idempotency plan and show sample messages.
|
|
74
76
|
|
|
@@ -497,10 +499,17 @@ path/thread id, stop with `blocked: parent_mutated_before_worker_receipt` and
|
|
|
497
499
|
do not continue setup in the parent.
|
|
498
500
|
Short form: dispatch every selected lane worker before shell creation.
|
|
499
501
|
Short form: do not call `setup_evergreen_campaigns` with `mode:"apply"` from the parent.
|
|
500
|
-
Use a compact worker prompt: include
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
502
|
+
Use a compact worker prompt: include the exact matching
|
|
503
|
+
`createCampaignGoals[].goalPrompt`, lane packet JSON, original
|
|
504
|
+
selectedActionIds, original planRevision, parent postEngagerSenderIds, parent
|
|
505
|
+
sharedSenderIds, receiptArtifactPath, workspace id, sender ids, side-effect
|
|
506
|
+
caps, and the instruction to load packaged prompts through MCP. The worker
|
|
507
|
+
prompt must explicitly state the authority order:
|
|
508
|
+
`createCampaignGoals[].goalPrompt` first, then loaded `$sellable:create-campaign`
|
|
509
|
+
/ `create-campaign-v2` / `generate-messages` prompts and assets, then evergreen
|
|
510
|
+
lane/receipt proof requirements. Evergreen packet fields and receipt rules are
|
|
511
|
+
operational proof context only; they must not become campaign brief copy,
|
|
512
|
+
message-writing instructions, or generated customer-facing text.
|
|
504
513
|
The worker prompt must include the exact filter status rule:
|
|
505
514
|
`filterDecisionReceipt.status:"applied"` only; never `completed`, `confirmed`,
|
|
506
515
|
`done`, or any other alias.
|
|
@@ -542,7 +551,9 @@ worker with stdin redirected from that file:
|
|
|
542
551
|
|
|
543
552
|
```
|
|
544
553
|
codex -a never -s danger-full-access exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> - <<'WORKER_PROMPT'
|
|
545
|
-
Use $sellable:create-
|
|
554
|
+
Use $sellable:create-campaign as the governing campaign workflow for this one lane worker.
|
|
555
|
+
Use the evergreen plan/packet below only for lane scope, source metadata,
|
|
556
|
+
postconditions, side-effect caps, and durable receipt proof.
|
|
546
557
|
|
|
547
558
|
Workspace id: <workspaceId>
|
|
548
559
|
Parent planRevision: <planRevision>
|
|
@@ -558,6 +569,24 @@ If your runtime exposes a goal tool, create or maintain this exact goal:
|
|
|
558
569
|
complete action <actionId> only when <receiptArtifactPath> exists as valid JSON
|
|
559
570
|
for this lane or when a blocked receipt has been written at that same path.
|
|
560
571
|
|
|
572
|
+
Create-campaign goal prompt (authoritative; paste verbatim from the matching
|
|
573
|
+
createCampaignGoals[].goalPrompt):
|
|
574
|
+
<createCampaignGoalPrompt>
|
|
575
|
+
|
|
576
|
+
Authority order:
|
|
577
|
+
1. The create-campaign goal prompt above is the campaign task.
|
|
578
|
+
2. Loaded `$sellable:create-campaign`, `create-campaign-v2`, and
|
|
579
|
+
`generate-messages` prompts/assets own the campaign brief and message
|
|
580
|
+
strategy.
|
|
581
|
+
3. The evergreen lane packet and receipt rules below are operational scope and
|
|
582
|
+
proof requirements only.
|
|
583
|
+
|
|
584
|
+
Do not paste evergreen lane keys, provider/source names, receipt terms, setup
|
|
585
|
+
plan terminology, verifier fields, or workflow mechanics into the campaign
|
|
586
|
+
brief or generated customer-facing messages. Do not add evergreen-authored
|
|
587
|
+
message-writing rules to the brief; let the loaded create-campaign and
|
|
588
|
+
generate-messages workflow do its job.
|
|
589
|
+
|
|
561
590
|
Worker lane packet JSON:
|
|
562
591
|
<lane packet JSON>
|
|
563
592
|
|
|
@@ -572,16 +601,24 @@ response, run a local file-existence and JSON self-check for
|
|
|
572
601
|
receipt there; if any postcondition, quality gate, verifier schema, or file
|
|
573
602
|
write blocks, write a canonical blocked receipt there with `status:"blocked"`,
|
|
574
603
|
`blocker`, `campaignId`, `tableId`, `actionId`, `laneKey`, `planRevision`, and
|
|
575
|
-
the latest product readback.
|
|
576
|
-
|
|
604
|
+
the latest product readback. For Post Engagers lanes, no sender-authored posts
|
|
605
|
+
or no sender-owned post-engager source is an acceptable terminal blocked/no-op
|
|
606
|
+
receipt, not a worker crash: use one of
|
|
607
|
+
`post_engagers_no_sender_posts`, `post_engagers_no_recent_sender_posts`,
|
|
608
|
+
`post_engagers_no_sender_owned_posts`, or
|
|
609
|
+
`post_engagers_source_author_mismatch`, include the source/readback evidence,
|
|
610
|
+
and stop without scraping third-party authors or generating misleading warm
|
|
611
|
+
copy. The terminal condition is filesystem proof that <receiptArtifactPath>
|
|
612
|
+
exists.
|
|
577
613
|
WORKER_PROMPT
|
|
578
614
|
|
|
579
615
|
# Multi-worker launcher equivalent:
|
|
580
616
|
codex -a never -s danger-full-access exec --skip-git-repo-check -m <worker-model> -C <repo> -o <worker-final-file> - < <worker-prompt-file>
|
|
581
617
|
```
|
|
582
618
|
|
|
583
|
-
If any placeholder cannot be filled from the current
|
|
584
|
-
|
|
619
|
+
If any placeholder cannot be filled from the current plan, matching
|
|
620
|
+
`createCampaignGoals[]` entry, or lane packet, do not inspect the filesystem or
|
|
621
|
+
rerun inventory; stop with `blocked: worker_dispatch_stalled`.
|
|
585
622
|
`multi_agent_v1.spawn_agent`, raw `spawn_agent`, or any opaque Task/subagent
|
|
586
623
|
runtime that cannot expose a visible thread id or durable receipt artifact is
|
|
587
624
|
not accepted as command-level UAT proof and must not be used for mutating
|
|
@@ -816,6 +853,17 @@ the lane is complete. Do not use `status:"passed"` or
|
|
|
816
853
|
in a separate `warnings` array, but the completion status stays canonical.
|
|
817
854
|
The backend verifier rejects `status:"passed"`, `status:"pass"`, and
|
|
818
855
|
`status:"passed_with_warnings"` as primary completion statuses.
|
|
856
|
+
Exception: a Post Engagers lane may write `status:"blocked"` when Sellable MCP
|
|
857
|
+
sender-post/source readback proves there are no recent sender-authored posts to
|
|
858
|
+
scrape, no sender-owned post-engager source, or the current source is authored
|
|
859
|
+
by someone else. Use the explicit blocker codes
|
|
860
|
+
`post_engagers_no_sender_posts`, `post_engagers_no_recent_sender_posts`,
|
|
861
|
+
`post_engagers_no_sender_owned_posts`, or
|
|
862
|
+
`post_engagers_source_author_mismatch`. Parent verify treats these as
|
|
863
|
+
`acceptedLaneBlockers`, so the parent can report the truthful no-op instead of
|
|
864
|
+
retrying invalid source repair. This exception does not apply to shared lanes,
|
|
865
|
+
bad generated copy, stale plans, target mismatch, missing receipt files, launch
|
|
866
|
+
or schedule side effects, or arbitrary worker failures.
|
|
819
867
|
|
|
820
868
|
All step proof objects must live under `createCampaignStepReceipt`. Do not put
|
|
821
869
|
`createCampaignWorkflowReceipt`, `campaignBriefReceipt`,
|
|
@@ -1097,8 +1145,13 @@ The parent then calls
|
|
|
1097
1145
|
`setup_evergreen_campaigns({ mode:"verify", postEngagerSenderIds,
|
|
1098
1146
|
sharedSenderIds, planRevision, selectedActionIds, receipts })` using the same
|
|
1099
1147
|
sender scopes as the plan call and the original execution planRevision/actionIds,
|
|
1100
|
-
and reports only verified completion.
|
|
1101
|
-
`
|
|
1148
|
+
and reports only verified completion. If verify returns `verified:true` with
|
|
1149
|
+
`acceptedLaneBlockers`, report those lanes as accepted blocked/no-op lanes, not
|
|
1150
|
+
completed campaigns. Do not include `yolo` in the verify call; `yolo` is
|
|
1151
|
+
plan-mode only. A verify call without the same sender scopes can recompute an
|
|
1152
|
+
empty or different plan and is invalid proof. A verify call that uses a later
|
|
1153
|
+
reuse planRevision instead of the original execution planRevision is also
|
|
1154
|
+
invalid proof. Only after verify succeeds, rerun
|
|
1102
1155
|
`setup_evergreen_campaigns({ mode:"plan", postEngagerSenderIds,
|
|
1103
1156
|
sharedSenderIds, yolo:true })` without explicit campaign/table bindings. That
|
|
1104
1157
|
idempotency rerun must return `intent:"reuse"` for every completed lane and no
|
|
@@ -1253,7 +1306,8 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1253
1306
|
Short form: Do not pass the warm template into Shared Signal Discovery or Shared Cold Fallback.
|
|
1254
1307
|
Short form: Shared lanes must reject generic product-summary samples.
|
|
1255
1308
|
Short form: Shared lanes must reject three nearly identical samples.
|
|
1256
|
-
Short form: Shared lanes must reject unsupported
|
|
1309
|
+
Short form: Shared lanes must reject unsupported low-confidence relevance hedges.
|
|
1310
|
+
Short form: Shared lane message quality is owned by the packaged generate-messages prompt and validation; evergreen does not author source-thread bridge phrasing.
|
|
1257
1311
|
Short form: Shared lanes must reject internal workflow vocabulary.
|
|
1258
1312
|
Short form: revise or rerun the packaged create-campaign/generate-messages path.
|
|
1259
1313
|
- **Post Engagers** first-message style: short, casual, references the
|
|
@@ -1294,21 +1348,12 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1294
1348
|
product summaries, or repeated structure are bad. If the first generated
|
|
1295
1349
|
batch violates these rules, rerun, but record that as a repaired UAT path
|
|
1296
1350
|
rather than the desired zero-shot path.
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
not claim a reaction, comment, sender-authored post, or other engagement
|
|
1304
|
-
that is not proven. Do not use "found you in a thread" or other raw
|
|
1305
|
-
source/discovery mechanics.
|
|
1306
|
-
Shared Signal Discovery InMail subjects should follow the Dotwork plus-sign
|
|
1307
|
-
A + B + C pattern: concrete topic + buyer outcome + useful artifact/picture,
|
|
1308
|
-
for example "initiatives + business outcomes + one live picture".
|
|
1309
|
-
Translate source/tool terms into prospect-facing business language; do not
|
|
1310
|
-
put internal workflow
|
|
1311
|
-
vocabulary such as "Codex-style workflow", "MCP", "agent workflows",
|
|
1351
|
+
Shared Signal Discovery samples may use a supported topic bridge such as
|
|
1352
|
+
"saw you around conversations about [high-level topic], so hope this is
|
|
1353
|
+
relevant" when the topic is grounded in source evidence and not
|
|
1354
|
+
activity-log phrasing. Translate source/tool terms into prospect-facing
|
|
1355
|
+
business language; do not put internal workflow vocabulary such as
|
|
1356
|
+
"Codex-style workflow", "MCP", "agent workflows",
|
|
1312
1357
|
"Claude Code", or "Claude-style agent workflows" in customer-facing
|
|
1313
1358
|
message one. Also avoid generic product-process nouns such as "dashboard",
|
|
1314
1359
|
"workflow", "source", "send-ready copy", "reviewed prospect lists",
|
|
@@ -1319,7 +1364,8 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1319
1364
|
Short form: Shared Signal Discovery uses no self-intro such as "I'm building Sellable".
|
|
1320
1365
|
Short form: Shared Signal Discovery uses no self-intro such as "We're building Sellable".
|
|
1321
1366
|
Short form: Shared Signal Discovery uses no "I've put together".
|
|
1322
|
-
Short form:
|
|
1367
|
+
Short form: Shared Signal Discovery may use "saw you around conversations about [topic], so hope this is relevant" when source-supported.
|
|
1368
|
+
Short form: topic-level bridge rules are owned by the packaged generate-messages prompt and validation, not by the evergreen wrapper.
|
|
1323
1369
|
Short form: no internal workflow vocabulary such as "Codex-style workflow", "MCP", "agent workflows", "Claude Code", or "Claude-style agent workflows".
|
|
1324
1370
|
- **Shared Cold Fallback** first-message style: cold, direct, and cohesive.
|
|
1325
1371
|
It must not pretend there was engagement, must not say "saw you pop up",
|
|
@@ -1335,14 +1381,15 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1335
1381
|
Sellable/Codex/Claude-Code feature summary
|
|
1336
1382
|
across prospects. This is a single-message cold path unless the approved
|
|
1337
1383
|
create-campaign message workflow proves a better delivery format.
|
|
1338
|
-
Do not
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1384
|
+
Do not open with "hope this is relevant" or a similar low-confidence
|
|
1385
|
+
relevance hedge in Shared Cold Fallback. Do not use a repeated product-definition paragraph such
|
|
1386
|
+
as "Sellable is a GTM system" across samples; every reviewed cold sample
|
|
1387
|
+
should be specific enough to the role, company, or problem that the three
|
|
1388
|
+
sample messages do not share the same body skeleton.
|
|
1389
|
+
Do not use source-thread hedges such as "might be interested", "saw you
|
|
1390
|
+
around conversations about...", or "saw you in a few conversations" in
|
|
1391
|
+
Shared Cold Fallback. Start from a concrete role, company, or buyer-problem
|
|
1392
|
+
observation instead.
|
|
1346
1393
|
Do not use mechanical Sellable process language such as "campaign idea into
|
|
1347
1394
|
prospects, filters, messages, and sequence setup", "sequence-prospects",
|
|
1348
1395
|
"dashboard overhead", "campaign map", "send-ready copy", or "reviewed
|
|
@@ -1359,7 +1406,8 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1359
1406
|
Short form: Shared Cold Fallback uses no "I've put together".
|
|
1360
1407
|
Short form: Shared Cold Fallback uses no opt-out shrug such as "If this isn't relevant, ignore me".
|
|
1361
1408
|
Short form: Shared Cold Fallback uses no product-stack dump.
|
|
1362
|
-
Short form:
|
|
1409
|
+
Short form: Shared Cold Fallback uses no low-confidence relevance hedge such as "hope this is relevant".
|
|
1410
|
+
Short form: no "hope this is relevant", "might be interested", "saw you around conversations about", or "saw you in a few conversations" in Shared Cold Fallback; Shared Signal Discovery has the topic-level conversation-bridge exception above.
|
|
1363
1411
|
Short form: no repeated product-definition paragraph such as "Sellable is a GTM system".
|
|
1364
1412
|
- Customer-visible evergreen lanes must enable ICP filtering before Message
|
|
1365
1413
|
Drafting. This applies to Post Engagers, Shared Signal Discovery, and
|
|
@@ -1460,13 +1508,18 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1460
1508
|
or a product-stack dump that repeats the same
|
|
1461
1509
|
Sellable/Codex/Claude-Code feature summary across prospects. For all
|
|
1462
1510
|
shared lanes, reject generic product-summary samples, repeated
|
|
1463
|
-
near-identical samples,
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1511
|
+
near-identical samples, unsupported low-confidence relevance hedges, internal
|
|
1512
|
+
workflow vocabulary, any sample with non-empty `issues`, and any preserved
|
|
1513
|
+
Post Engagers opener; revise or rerun the packaged
|
|
1514
|
+
create-campaign/generate-messages path before reporting completion. Do not
|
|
1515
|
+
approve or final-report samples with `verdict:"passed"` and non-empty
|
|
1516
|
+
`issues`.
|
|
1517
|
+
Shared Signal Discovery samples may use `"saw you around conversations
|
|
1518
|
+
about [high-level topic], so hope this is relevant"` when the topic is
|
|
1519
|
+
supported by source evidence and not activity-log phrasing. Shared Cold
|
|
1520
|
+
Fallback samples must still reject source/conversation hedges such as
|
|
1521
|
+
`"hope this is relevant"`, `"might be interested"`, or `"saw you in a few
|
|
1522
|
+
conversations"`.
|
|
1470
1523
|
- The first review batch exists and at least 3 review rows have generated
|
|
1471
1524
|
messages from the approved brief. If fewer than 3 usable rows exist, report
|
|
1472
1525
|
the actual count and why.
|
|
@@ -1530,7 +1583,7 @@ Message, and verify current-revision sample messages before final completion.
|
|
|
1530
1583
|
internal-only objects, verify the active waterfall linkage, table ID,
|
|
1531
1584
|
source type, and priority, and label them `internal source pool` rather
|
|
1532
1585
|
than treating them as completed campaigns.
|
|
1533
|
-
- Post Engagers lanes are sender-owned source lanes. The selected/source LinkedIn posts must be authored by that exact sender (for example, Thomas post-engager source posts must visibly be Thomas-authored posts). If selected/source posts include another person or company author,
|
|
1586
|
+
- Post Engagers lanes are sender-owned source lanes. The selected/source LinkedIn posts must be authored by that exact sender (for example, Thomas post-engager source posts must visibly be Thomas-authored posts). If Sellable MCP readback proves the sender has no recent posts to scrape, no sender-authored posts with usable engagers, no sender-owned post-engager source, or the selected/source posts include another person or company author, write a blocked receipt with the matching accepted blocker code and report that back to the parent as an accepted no-op. Do not scrape/import engagers from third-party authors and do not report completion until the source is sender-owned. Shared Signal Discovery lanes are the only evergreen lanes allowed to mix authors.
|
|
1534
1587
|
5. **Interactive polish mode only: confirm the message template with the user — and check it reads chat-native.** Show the exact first-message template each created campaign's brief carries and ask the user to confirm or adjust it before moving on. Because DM copy may send paragraph-by-paragraph (each blank-line block becomes its own message), every paragraph must read like something a human literally typed as a separate chat message:
|
|
1535
1588
|
- **No letter punctuation.** `Hey {{first_name}}` — never `Hey {{first_name}},` (nobody types a trailing comma and hits send). No `Dear`, no sign-offs, no `Best,`.
|
|
1536
1589
|
- Each paragraph stands alone as a message — short, lowercase-casual is fine, sentence fragments are fine.
|