@sellable/install 0.1.24 → 0.1.26
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 +53 -39
- package/package.json +1 -1
package/bin/sellable-install.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import { createInterface } from "node:readline/promises";
|
|
|
15
15
|
const DEFAULT_API_URL = "https://app.sellable.dev";
|
|
16
16
|
const DEFAULT_SERVER_PACKAGE =
|
|
17
17
|
process.env.SELLABLE_MCP_PACKAGE || "@sellable/mcp";
|
|
18
|
-
const CODEX_PLUGIN_VERSION = "0.1.
|
|
18
|
+
const CODEX_PLUGIN_VERSION = "0.1.26";
|
|
19
19
|
const CODEX_PLUGIN_COMPAT_VERSIONS = [
|
|
20
20
|
"0.1.8",
|
|
21
21
|
"0.1.9",
|
|
@@ -33,6 +33,8 @@ const CODEX_PLUGIN_COMPAT_VERSIONS = [
|
|
|
33
33
|
"0.1.21",
|
|
34
34
|
"0.1.22",
|
|
35
35
|
"0.1.23",
|
|
36
|
+
"0.1.24",
|
|
37
|
+
"0.1.25",
|
|
36
38
|
];
|
|
37
39
|
const INSTALL_PACKAGE_SPEC = `@sellable/install@${CODEX_PLUGIN_VERSION}`;
|
|
38
40
|
|
|
@@ -540,6 +542,11 @@ Use the host-native structured question gate for intake and approval:
|
|
|
540
542
|
installer enables this in Default mode with
|
|
541
543
|
\`[features].default_mode_request_user_input = true\`.
|
|
542
544
|
|
|
545
|
+
Use the structured question gate only for multiple-choice decisions or approval
|
|
546
|
+
gates. Never use it to collect open text input like LinkedIn URLs, company
|
|
547
|
+
domains, notes, pasted context, campaign ideas, or feedback. For open text, ask
|
|
548
|
+
in normal chat and wait for the user to paste the value.
|
|
549
|
+
|
|
543
550
|
Customer-facing language must call this "a couple setup choices" during normal
|
|
544
551
|
campaign progress. Use "quick question panel" only when explaining a missing
|
|
545
552
|
Codex/Claude setup capability. Do not tell customers about \`request_user_input\`,
|
|
@@ -576,9 +583,10 @@ the campaign subject and sender before continuing.
|
|
|
576
583
|
If the user did not provide the launch identity, quietly call
|
|
577
584
|
\`mcp__sellable__list_senders\` once if available. This is a shortcut to deduce
|
|
578
585
|
who the user might be from their Sellable API token and connected LinkedIn
|
|
579
|
-
accounts. Do not
|
|
580
|
-
|
|
581
|
-
|
|
586
|
+
accounts. Do not ask the user to pick an input type before checking connected
|
|
587
|
+
senders. If there is any likely connected sender, use
|
|
588
|
+
\`mcp__sellable__enrich_sender\` on the best match to infer their current or most
|
|
589
|
+
recent company, then ask a structured confirmation question:
|
|
582
590
|
|
|
583
591
|
\`\`\`text
|
|
584
592
|
I’m ready to build this in {workspace}. I found {matched sender} connected here.
|
|
@@ -586,26 +594,30 @@ I’m ready to build this in {workspace}. I found {matched sender} connected her
|
|
|
586
594
|
Is that you, and is this campaign for {company}?
|
|
587
595
|
\`\`\`
|
|
588
596
|
|
|
589
|
-
The options must be:
|
|
597
|
+
The structured options must be no more than three choices:
|
|
598
|
+
|
|
599
|
+
1. \`Yes — use {matched sender} for {company}\`
|
|
600
|
+
2. \`No — I'll paste a LinkedIn profile\`
|
|
601
|
+
3. \`Use a company domain instead\`
|
|
590
602
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
4. \`No, I'll paste the company website instead\`
|
|
595
|
-
5. \`Other / custom\`
|
|
603
|
+
If there are multiple likely connected senders, mention the best one in the
|
|
604
|
+
question and use option 2 for either a different connected sender or a pasted
|
|
605
|
+
LinkedIn profile.
|
|
596
606
|
|
|
597
|
-
|
|
598
|
-
\`
|
|
599
|
-
user chooses option
|
|
607
|
+
Use the structured question tool only for the choice. Do not use
|
|
608
|
+
\`request_user_input\`/\`AskUserQuestion\` to collect a LinkedIn URL, company
|
|
609
|
+
domain, or freeform text. If the user chooses option 2, ask in normal chat:
|
|
610
|
+
\`Paste the LinkedIn URL I should use, and I’ll look it up.\` Then call
|
|
600
611
|
\`mcp__sellable__fetch_linkedin_profile\`, infer their current or most recent
|
|
601
|
-
company,
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
send from.
|
|
612
|
+
company, and confirm company and sender again. If the user chooses option 3, ask
|
|
613
|
+
in normal chat: \`Paste the company domain, and I’ll do a quick lookup before we
|
|
614
|
+
keep going.\` Then call \`mcp__sellable__fetch_company\` when possible, otherwise
|
|
615
|
+
one web lookup, and ask who the LinkedIn messages should send from.
|
|
605
616
|
|
|
606
617
|
If \`mcp__sellable__list_senders\` returns zero connected senders, avoid the
|
|
607
|
-
sender-confirmation branch entirely.
|
|
608
|
-
|
|
618
|
+
sender-confirmation branch entirely. Do not ask the user to choose an input type
|
|
619
|
+
with the structured question tool. Ask in normal chat for the user's LinkedIn
|
|
620
|
+
URL or the company they want to send on behalf of so you can research context:
|
|
609
621
|
|
|
610
622
|
\`\`\`text
|
|
611
623
|
I’m ready to build this in {workspace}.
|
|
@@ -615,11 +627,11 @@ behalf of. I’ll use that to understand the company before we pick the target,
|
|
|
615
627
|
offer, proof, and lead source.
|
|
616
628
|
\`\`\`
|
|
617
629
|
|
|
618
|
-
If there is no strong sender match,
|
|
619
|
-
|
|
620
|
-
sender"; it is to learn who the user is, infer the
|
|
621
|
-
company, and then confirm who we are sending from. The
|
|
622
|
-
should be:
|
|
630
|
+
If there is no strong sender match, do not show a structured choice that says
|
|
631
|
+
"LinkedIn profile" vs "Company website". The point of this gate is not "pick a
|
|
632
|
+
sender" or "pick an input type"; it is to learn who the user is, infer the
|
|
633
|
+
current or most recent company, and then confirm who we are sending from. The
|
|
634
|
+
customer-facing shape should be:
|
|
623
635
|
|
|
624
636
|
\`\`\`text
|
|
625
637
|
I’m ready to build this in {workspace}.
|
|
@@ -628,12 +640,7 @@ First, what’s your LinkedIn URL? If you’d rather start from the company, pas
|
|
|
628
640
|
the company website instead.
|
|
629
641
|
\`\`\`
|
|
630
642
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
1. \`What’s your LinkedIn URL?\` Options: \`I’ll paste my LinkedIn profile\`,
|
|
634
|
-
\`I’ll paste the company website instead\`, \`Other / custom\`.
|
|
635
|
-
|
|
636
|
-
After that answer, do the lightweight lookup. For a LinkedIn profile, call
|
|
643
|
+
After the user pastes a URL/domain, do the lightweight lookup. For a LinkedIn profile, call
|
|
637
644
|
\`mcp__sellable__fetch_linkedin_profile\` and infer the user's current or most
|
|
638
645
|
recent company from the profile. For a company website, call
|
|
639
646
|
\`mcp__sellable__fetch_company\` when possible, otherwise one web lookup.
|
|
@@ -869,8 +876,9 @@ the tokens should and should not be filled.
|
|
|
869
876
|
|
|
870
877
|
Every token needs a fallback. If the row does not have clean data for a token,
|
|
871
878
|
the approval view should say whether to use a safe segment-level phrase, omit
|
|
872
|
-
the sentence, or revise the message.
|
|
873
|
-
or
|
|
879
|
+
the sentence, or revise the message. It should include the exact fallback
|
|
880
|
+
example, like \`omit the noticed... line\` or \`use "operators"\`. Missing data
|
|
881
|
+
should never produce robotic or creepy copy.
|
|
874
882
|
|
|
875
883
|
Approved token guidance is part of the campaign, not just the review. When a
|
|
876
884
|
campaign is minted, the approved brief should carry forward the token fill
|
|
@@ -902,10 +910,10 @@ brief before anything is created.
|
|
|
902
910
|
Good identity setup:
|
|
903
911
|
|
|
904
912
|
\`\`\`text
|
|
905
|
-
I’ll check whether you already have a connected
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
913
|
+
I’ll check whether you already have a connected sender here. If I find one, I’ll
|
|
914
|
+
ask whether that’s you and whether this campaign is for that company. If not,
|
|
915
|
+
just paste your LinkedIn URL or company domain and I’ll look it up before we
|
|
916
|
+
keep going.
|
|
909
917
|
\`\`\`
|
|
910
918
|
|
|
911
919
|
Bad:
|
|
@@ -917,9 +925,15 @@ First I’ll check whether your Sellable token already tells me who you are.
|
|
|
917
925
|
Better:
|
|
918
926
|
|
|
919
927
|
\`\`\`text
|
|
920
|
-
I
|
|
921
|
-
|
|
922
|
-
|
|
928
|
+
I found Christian Reyes connected here. Is that you, and is this campaign for
|
|
929
|
+
Sellable? If not, choose LinkedIn profile or company domain and I’ll ask you to
|
|
930
|
+
paste it in chat.
|
|
931
|
+
\`\`\`
|
|
932
|
+
|
|
933
|
+
Bad:
|
|
934
|
+
|
|
935
|
+
\`\`\`text
|
|
936
|
+
What should I use to confirm who this campaign is for?
|
|
923
937
|
\`\`\`
|
|
924
938
|
|
|
925
939
|
Bad:
|