@sellable/mcp 0.1.20 → 0.1.22
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/README.md
CHANGED
|
@@ -83,14 +83,14 @@ The token is provided when you generate it. Use `list_workspaces` +
|
|
|
83
83
|
For customer/package installs, use the public installer:
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
npx -y @sellable/install@0.1.
|
|
86
|
+
npx -y @sellable/install@0.1.22 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
If you already have `~/.sellable/config.json`, rerun/verify without rewriting
|
|
90
90
|
auth:
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
npx -y @sellable/install@0.1.
|
|
93
|
+
npx -y @sellable/install@0.1.22 --host codex
|
|
94
94
|
sellable --verify-only --host codex
|
|
95
95
|
```
|
|
96
96
|
|
package/package.json
CHANGED
|
@@ -324,7 +324,7 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
|
|
|
324
324
|
strategic choice or the user has not already made the direction obvious. The
|
|
325
325
|
user-facing choice should be approve/revise language, not "looks good".
|
|
326
326
|
Approval options should refer to what the user just read, e.g. `Approve this
|
|
327
|
-
|
|
327
|
+
brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
|
|
328
328
|
Include `Open artifacts:` links to `brief-v1.md` and `brief.md` before the
|
|
329
329
|
approval question.
|
|
330
330
|
|
|
@@ -861,23 +861,28 @@ Orchestration requirements:
|
|
|
861
861
|
with `Status: message-review` as the first visible line. Do not put a
|
|
862
862
|
markdown heading, preface, or summary before that status line. This is a
|
|
863
863
|
customer checkpoint, not an audit report: show the approved campaign message
|
|
864
|
-
template first, then show
|
|
865
|
-
|
|
864
|
+
template first, then show one filled sample prospect version immediately after
|
|
865
|
+
it so the user can judge whether the tokens are being used correctly. Then
|
|
866
|
+
show rendered examples that prove the tokens fill well and can be omitted
|
|
867
|
+
cleanly when row data is weak. Keep the detailed
|
|
866
868
|
gold-standard/rule audit inside `message-validation.md`, not in the
|
|
867
869
|
user-facing review. The review must use this exact label shape so the gate can
|
|
868
|
-
be parsed: `Subject: ...`, `
|
|
869
|
-
`
|
|
870
|
-
`
|
|
870
|
+
be parsed: `Subject: ...`, `Tokenized template: ...`, `Sample prospect fill:
|
|
871
|
+
...`, `Rendered examples: ...`, `Good token fill: ...`, `Good omit: ...`,
|
|
872
|
+
`Bad token fill: ...`, `Why bad: ...`, `Token notes: ...`, `My take: ...`,
|
|
873
|
+
`Suggested adjustment: ...`,
|
|
871
874
|
`Question: approve-message or revise-messaging?`, `Recommendation:
|
|
872
875
|
approve-message|revise-messaging`.
|
|
873
876
|
- Never ask the message approval question until the full message review is
|
|
874
877
|
visible in the chat. A summary like `Message review is ready` or `the draft
|
|
875
|
-
|
|
876
|
-
the actual tokenized message template,
|
|
877
|
-
good
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
878
|
+
avoids a generic pitch` is not enough. The user must see the actual subject,
|
|
879
|
+
the actual tokenized message template, one filled sample prospect version, at
|
|
880
|
+
least one good filled example, one good omit example, one bad fill example,
|
|
881
|
+
why the bad fill is wrong, token notes, your take, and the suggested
|
|
882
|
+
adjustment before any `approve-message` /
|
|
883
|
+
`revise-messaging` question appears. If you catch yourself wanting to offer
|
|
884
|
+
`show me message` as a choice, stop: render the message review first, then ask
|
|
885
|
+
only `approve-message` or `revise-messaging`.
|
|
881
886
|
Include `Open artifacts:` links to `message-review.md` and
|
|
882
887
|
`message-validation.md` before the approval question.
|
|
883
888
|
- `My take:` and `Suggested adjustment:` are mandatory customer-facing decision
|
|
@@ -886,7 +891,7 @@ approve-message|revise-messaging`.
|
|
|
886
891
|
non-empty, specific to the current message, and useful for one last manual
|
|
887
892
|
feedback pass. Never render a message review that jumps straight from token
|
|
888
893
|
notes to `Question:` or `Recommendation:`.
|
|
889
|
-
- `
|
|
894
|
+
- `Tokenized template:` in `message-review.md` must be a tokenized template with supported
|
|
890
895
|
enriched-row tokens such as `{{first_name}}`, `{{company}}`,
|
|
891
896
|
`{{workflow_context}}`, `{{headline}}`, `{{source_post_topic}}`, or
|
|
892
897
|
`{{row_proof_note}}`. It must not be a one-row-only raw sample. It must
|
|
@@ -894,18 +899,33 @@ approve-message|revise-messaging`.
|
|
|
894
899
|
enriched rows can actually fill or safely omit. If you cannot produce a
|
|
895
900
|
tokenized template from supported enriched-row fields, stop with
|
|
896
901
|
`Recommendation: revise-messaging`.
|
|
902
|
+
- `Sample prospect fill:` must render the same template for one named sample
|
|
903
|
+
prospect from `lead-sample.json` or the selected row used in
|
|
904
|
+
`message-validation.md`. It must show the complete subject and body the
|
|
905
|
+
prospect would receive, plus a one-line `Token fill basis:` naming which row
|
|
906
|
+
fields filled each token. This is the user-facing proof that the template
|
|
907
|
+
works. Do not ask for approval if the user cannot compare the template to a
|
|
908
|
+
concrete filled message.
|
|
897
909
|
- `{{profile_signal}}` is never a supported customer-facing token. It is an
|
|
898
|
-
internal enrichment label and must not appear in `Subject:`, `
|
|
899
|
-
|
|
900
|
-
`approval-packet.md`. If a
|
|
901
|
-
|
|
902
|
-
`{{workflow_context}}` or
|
|
910
|
+
internal enrichment label and must not appear in `Subject:`, `Tokenized
|
|
911
|
+
template:`, `Sample prospect fill:`, rendered examples, `Token notes:`,
|
|
912
|
+
`message-validation.md` selected copy, or `approval-packet.md`. If a
|
|
913
|
+
profile-derived signal matters, translate it into a buyer-readable derived
|
|
914
|
+
token with a clear fill rule, such as `{{workflow_context}}` or
|
|
915
|
+
`{{row_proof_note}}`; otherwise omit the line.
|
|
903
916
|
- `Rendered examples:` must include at least one `Good token fill:` rendered
|
|
904
917
|
message where the row has a clean signal and one `Good omit:` rendered message
|
|
905
918
|
where an optional token line is omitted instead of forced. Each example must
|
|
906
919
|
be a complete rendered subject + body, not a bullet list of token names or a
|
|
907
920
|
single bridge-line fragment. Do not use bracketed instructions, deferred row
|
|
908
921
|
notes, or phrases like `approve the selected winner above`.
|
|
922
|
+
- `Bad token fill:` must show at least one realistic wrong fill for the current
|
|
923
|
+
campaign, followed by `Why bad:`. This teaches the user and the live campaign
|
|
924
|
+
runtime what not to do. Examples: overclaiming signal intent (`you are
|
|
925
|
+
evaluating Clay` when the only evidence is a post reaction), using forbidden
|
|
926
|
+
phrasing (`you engaged with content...` when the approved voice is `raised
|
|
927
|
+
your hand in a conversation around...`), forcing a weak optional token,
|
|
928
|
+
lowercasing proper nouns, or making row signal sound like AI mail merge.
|
|
909
929
|
- rendered examples may only use token values that exist in `lead-sample.json`,
|
|
910
930
|
`lead-review.md`, `lead-filter.md`, or the selected winner's documented
|
|
911
931
|
supported-token plan. Do not invent example values to make the template look
|
|
@@ -936,12 +956,12 @@ approve-message|revise-messaging`.
|
|
|
936
956
|
`thought this was relevant enough`, `seemed close
|
|
937
957
|
enough`, `{{profile_signal}}`, `profile signal`, `is why I thought this might
|
|
938
958
|
be relevant`, `Austin's`, a sender/founder name in the subject, a one-row raw
|
|
939
|
-
sample under `
|
|
959
|
+
sample under `Tokenized template:`, rendered examples without full copy, a
|
|
940
960
|
mail-merge-sounding tokenized opener, missing or empty `My take:`, missing or
|
|
941
961
|
empty `Suggested adjustment:`, `My take:` that only says `looks good`,
|
|
942
962
|
`strong`, or `approved`, `Suggested adjustment:` that only says `none`, or no
|
|
943
|
-
literal `{{...}}` token in `
|
|
944
|
-
Do not output
|
|
963
|
+
literal `{{...}}` token in `Tokenized template:`, revise the message before
|
|
964
|
+
showing it. Do not output
|
|
945
965
|
`Recommendation: approve-message` when any hard-fail preflight item is
|
|
946
966
|
present.
|
|
947
967
|
- `My take` must be 1-3 short bullets or sentences, focused on what a founder
|
|
@@ -999,8 +1019,9 @@ proof:`, `p.s. useful proof:`, `p.s. proof:`, or `p.s. social proof:`.
|
|
|
999
1019
|
standalone commit-gate question. Include a clear `## Message Review` section
|
|
1000
1020
|
inside the approval packet before `## Approved Message Template`. It should
|
|
1001
1021
|
summarize the customer checkpoint from `message-review.md` and preserve the
|
|
1002
|
-
same literal `My take:`, `Suggested adjustment:`,
|
|
1003
|
-
|
|
1022
|
+
same literal `My take:`, `Suggested adjustment:`, `Good token fill:`,
|
|
1023
|
+
`Good omit:`, `Bad token fill:`, `Why bad:`, `Token fill basis:`, and
|
|
1024
|
+
`Recommendation:` labels.
|
|
1004
1025
|
Include `Open artifacts:` links to `approval-packet.md`,
|
|
1005
1026
|
`message-review.md`, `lead-review.md`, and `brief.md` before the commit-gate
|
|
1006
1027
|
question.
|
|
@@ -1015,8 +1036,16 @@ proof:`, `p.s. useful proof:`, `p.s. proof:`, or `p.s. social proof:`.
|
|
|
1015
1036
|
- the live body under `## Approved Message Template` must be sender-ready copy.
|
|
1016
1037
|
Do not include bracketed instruction placeholders such as `[ROW BRIDGE ...]`,
|
|
1017
1038
|
`[insert ...]`, `[generated ...]`, or prose that tells a later step to
|
|
1018
|
-
paraphrase/fill a line. Put per-row generation rules in
|
|
1019
|
-
with concrete enriched-row fields,
|
|
1039
|
+
paraphrase/fill a line. Put per-row generation rules in `## Token Fill Rules`
|
|
1040
|
+
with concrete enriched-row fields, and copy approved good/bad examples into
|
|
1041
|
+
`## Token Fill Examples`, or route to `revise-messaging`.
|
|
1042
|
+
- `approval-packet.md` and the live campaign brief passed to `create_campaign`
|
|
1043
|
+
must include `## Approved Message Template`, `## Token Fill Rules`, and
|
|
1044
|
+
`## Token Fill Examples`. `## Token Fill Examples` must copy the approved
|
|
1045
|
+
examples from `message-review.md` / `message-validation.md`, including
|
|
1046
|
+
`Good token fill:`, `Good omit:`, `Bad token fill:`, `Why bad:`, and
|
|
1047
|
+
`Token fill basis:`. Do not call `create_campaign` if these sections are
|
|
1048
|
+
missing from the campaign brief.
|
|
1020
1049
|
- `message-validation.md` must not call the winner a canonical template or
|
|
1021
1050
|
hide per-row generation in bracketed body text. `## Selected Winner` must
|
|
1022
1051
|
be a real sendable message that could be approved as-is.
|
|
@@ -1086,11 +1115,16 @@ Do not:
|
|
|
1086
1115
|
|
|
1087
1116
|
- `Status: message-review`
|
|
1088
1117
|
- `Subject:` using the approved tokenized A + B + C subject shape
|
|
1089
|
-
- `
|
|
1118
|
+
- `Tokenized template:` followed by the tokenized approved message template
|
|
1119
|
+
- `Sample prospect fill:` with one concrete sample prospect's complete rendered
|
|
1120
|
+
subject + body and a `Token fill basis:` line
|
|
1090
1121
|
- `Rendered examples:`
|
|
1091
1122
|
- `Good token fill:` with a complete concrete rendered subject + body
|
|
1092
1123
|
- `Good omit:` with a complete concrete rendered subject + body where optional
|
|
1093
1124
|
row signal is omitted cleanly
|
|
1125
|
+
- `Bad token fill:` with a realistic wrong fill for the current campaign
|
|
1126
|
+
- `Why bad:` explaining the exact overclaim, unsupported token, weak signal,
|
|
1127
|
+
casing mistake, or mail-merge phrasing that makes the bad fill unacceptable
|
|
1094
1128
|
- `Token notes:` naming which tokens are safe to fill, which optional token line
|
|
1095
1129
|
should be omitted when absent, and whether the message uses standard sentence
|
|
1096
1130
|
case or casual lowercase static words
|
|
@@ -1220,11 +1254,14 @@ Anchor validation (block `approve` when empty):
|
|
|
1220
1254
|
`Pass Rate`, `Recommendation`, and `Implementation Details`
|
|
1221
1255
|
- `message-validation.md` has `Status: confirmed`, `Mode: DRY MODE (no DB
|
|
1222
1256
|
mutation)`, a `Selected Winner`, and a non-empty `Token Adherence Table`
|
|
1223
|
-
- `message-review.md` has `Status: message-review`, `Subject:`,
|
|
1224
|
-
with at least one literal `{{...}}` token,
|
|
1225
|
-
`
|
|
1226
|
-
|
|
1227
|
-
|
|
1257
|
+
- `message-review.md` has `Status: message-review`, `Subject:`,
|
|
1258
|
+
`Tokenized template:` with at least one literal `{{...}}` token,
|
|
1259
|
+
`Sample prospect fill:` with a complete rendered subject + body and
|
|
1260
|
+
`Token fill basis:`, `Rendered examples:`, `Good token fill:` with a complete
|
|
1261
|
+
rendered subject + body, `Good omit:` with a complete rendered subject + body,
|
|
1262
|
+
`Bad token fill:`, `Why bad:`, `Token notes:`, `My take:`,
|
|
1263
|
+
`Suggested adjustment:`, `Question:
|
|
1264
|
+
approve-message or revise-messaging?`, and
|
|
1228
1265
|
`Recommendation: approve-message`
|
|
1229
1266
|
- `message-review-decision.md` is exactly `approve-message`
|
|
1230
1267
|
|
|
@@ -1324,7 +1361,7 @@ Exact sequence:
|
|
|
1324
1361
|
The live template body must contain only sender-ready copy plus supported
|
|
1325
1362
|
`{{tokens}}`; no bracketed instructions or placeholder prose may appear in
|
|
1326
1363
|
the body.
|
|
1327
|
-
Include
|
|
1364
|
+
Include `## Token Fill Rules` for every enriched-prospect-row token in the
|
|
1328
1365
|
template. Tokens may be row fields such as `{{first_name}}`,
|
|
1329
1366
|
`{{company}}`, `{{role}}`, `{{headline}}`, `{{profile_summary}}`,
|
|
1330
1367
|
`{{post_context}}`, `{{comment_summary}}`, `{{source_post_topic}}`, or
|
|
@@ -1333,6 +1370,13 @@ Exact sequence:
|
|
|
1333
1370
|
proof points, casing style, `{{recent_signal_quote}}`, or abstract slot
|
|
1334
1371
|
tokens such as `{{hookLine}}`, `{{painLine}}`, `{{productLine}}`,
|
|
1335
1372
|
`{{closeLine}}`, or `{{psLine}}`.
|
|
1373
|
+
Include `## Token Fill Examples` copied from the approved message review and
|
|
1374
|
+
validation artifacts. It must preserve `Good token fill:`, `Good omit:`,
|
|
1375
|
+
`Bad token fill:`, `Why bad:`, and `Token fill basis:` so the minted campaign
|
|
1376
|
+
brief teaches future row generation how to fill tokens and what fills are
|
|
1377
|
+
blocked. If the brief does not contain `## Token Fill Rules` and
|
|
1378
|
+
`## Token Fill Examples`, do not call `create_campaign`; route back to
|
|
1379
|
+
message review or approval packet generation.
|
|
1336
1380
|
3. Call `bootstrap_create_campaign({ flowVersion: "v2" })`. Respect
|
|
1337
1381
|
`safeToProceed`; on blocking errors, surface and stop.
|
|
1338
1382
|
4. Call
|
|
@@ -65,8 +65,17 @@ or plain paths to the files behind the decision. The artifact links are a backup
|
|
|
65
65
|
for inspection, not a replacement for showing the content in chat.
|
|
66
66
|
|
|
67
67
|
This applies especially to message approvals. Never ask someone to approve a
|
|
68
|
-
message they cannot see. Show the subject,
|
|
69
|
-
|
|
68
|
+
message they cannot see. Show the subject, tokenized template, a filled sample
|
|
69
|
+
prospect version, good fill example, good omit example, bad fill example, why
|
|
70
|
+
the bad fill is wrong, token notes, your take, and suggested adjustment first.
|
|
71
|
+
The user should be able to compare "here is the template" against "here is what
|
|
72
|
+
one real prospect would receive" before approving, and understand exactly how
|
|
73
|
+
the tokens should and should not be filled.
|
|
74
|
+
|
|
75
|
+
Approved token guidance is part of the campaign, not just the review. When a
|
|
76
|
+
campaign is minted, the approved brief should carry forward the token fill
|
|
77
|
+
rules and examples: good fills, good omits, bad fills, and why the bad fills are
|
|
78
|
+
blocked.
|
|
70
79
|
|
|
71
80
|
## Progress Updates
|
|
72
81
|
|
|
@@ -603,8 +603,10 @@
|
|
|
603
603
|
"requiredInlineMarker": "Status: message-review",
|
|
604
604
|
"panels": [
|
|
605
605
|
"subject",
|
|
606
|
-
"
|
|
606
|
+
"tokenized template",
|
|
607
|
+
"sample prospect fill",
|
|
607
608
|
"rendered examples",
|
|
609
|
+
"bad token examples",
|
|
608
610
|
"token notes",
|
|
609
611
|
"my take",
|
|
610
612
|
"suggested adjustment",
|
|
@@ -620,10 +622,13 @@
|
|
|
620
622
|
"artifactLinkTiming": "before_approval_question",
|
|
621
623
|
"requiredLabels": [
|
|
622
624
|
"Subject:",
|
|
623
|
-
"
|
|
625
|
+
"Tokenized template:",
|
|
626
|
+
"Sample prospect fill:",
|
|
624
627
|
"Rendered examples:",
|
|
625
628
|
"Good token fill:",
|
|
626
629
|
"Good omit:",
|
|
630
|
+
"Bad token fill:",
|
|
631
|
+
"Why bad:",
|
|
627
632
|
"Token notes:",
|
|
628
633
|
"My take:",
|
|
629
634
|
"Suggested adjustment:",
|
|
@@ -640,6 +645,8 @@
|
|
|
640
645
|
"no generic signal tokens",
|
|
641
646
|
"no bracketed or deferred row instructions",
|
|
642
647
|
"tokenized template with rendered examples",
|
|
648
|
+
"tokenized template plus filled sample prospect",
|
|
649
|
+
"good and bad token-fill examples",
|
|
643
650
|
"complete rendered subject plus body examples",
|
|
644
651
|
"message-review hard-fail preflight",
|
|
645
652
|
"A + B + C subject quality",
|
|
@@ -658,10 +665,13 @@
|
|
|
658
665
|
"questionPrerequisiteVisibleLabels": [
|
|
659
666
|
"Status: message-review",
|
|
660
667
|
"Subject:",
|
|
661
|
-
"
|
|
668
|
+
"Tokenized template:",
|
|
669
|
+
"Sample prospect fill:",
|
|
662
670
|
"Rendered examples:",
|
|
663
671
|
"Good token fill:",
|
|
664
672
|
"Good omit:",
|
|
673
|
+
"Bad token fill:",
|
|
674
|
+
"Why bad:",
|
|
665
675
|
"Token notes:",
|
|
666
676
|
"My take:",
|
|
667
677
|
"Suggested adjustment:",
|
|
@@ -924,6 +934,22 @@
|
|
|
924
934
|
"requiredValues": {
|
|
925
935
|
"currentStep": "auto-execute-leads"
|
|
926
936
|
},
|
|
937
|
+
"requiredCampaignBriefSections": [
|
|
938
|
+
"Approved Message Template",
|
|
939
|
+
"Token Fill Rules",
|
|
940
|
+
"Token Fill Examples"
|
|
941
|
+
],
|
|
942
|
+
"preserveTokenGuidanceFromArtifacts": [
|
|
943
|
+
"message-review.md",
|
|
944
|
+
"message-validation.md"
|
|
945
|
+
],
|
|
946
|
+
"requiredTokenGuidanceLabels": [
|
|
947
|
+
"Good token fill:",
|
|
948
|
+
"Good omit:",
|
|
949
|
+
"Bad token fill:",
|
|
950
|
+
"Why bad:",
|
|
951
|
+
"Token fill basis:"
|
|
952
|
+
],
|
|
927
953
|
"capture": ["campaignId", "watchUrl"],
|
|
928
954
|
"onMissingWatchUrl": "recoverable_failure_abort_before_rubric_save"
|
|
929
955
|
},
|