@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.
@@ -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.24";
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 present it as a sender picker yet. If there is one strong
580
- likely sender, use \`mcp__sellable__enrich_sender\` to infer their current or
581
- most recent company, then ask a structured confirmation question:
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
- 1. \`Yes, that's me and this is for {company}\`
592
- 2. \`That's me, but this is for a different company\`
593
- 3. \`No, I'll paste my LinkedIn URL so you can look me up\`
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
- If the user chooses option 2, ask for the company website/domain and call
598
- \`mcp__sellable__fetch_company\` when possible, otherwise one web lookup. If the
599
- user chooses option 3, ask for their LinkedIn URL, call
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, then confirm company and sender again. If the user chooses option 4,
602
- ask for the company website/domain, call \`mcp__sellable__fetch_company\` when
603
- possible, otherwise one web lookup, then ask who the LinkedIn messages should
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. Ask for the user's LinkedIn URL or the
608
- company they want to send on behalf of so you can research context:
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, make the first setup choice ask for the
619
- user's LinkedIn URL or company website. The point of this gate is not "pick a
620
- sender"; it is to learn who the user is, infer the current or most recent
621
- company, and then confirm who we are sending from. The customer-facing shape
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
- The LinkedIn/company identity gate should ask:
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. Missing data should never produce robotic
873
- or creepy copy.
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 LinkedIn account here. If I cant
906
- confirm it, Ill ask for your LinkedIn URL or company website and use that to
907
- understand the company before we choose the target, offer, proof, and lead
908
- source.
913
+ I’ll check whether you already have a connected sender here. If I find one, Ill
914
+ ask whether thats 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’ll first check whether you already have a connected sender here. If not, I’ll
921
- ask for your LinkedIn URL or company website and use that to understand the
922
- campaign before we choose the audience and offer.
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:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.24",
3
+ "version": "0.1.26",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {