@sellable/install 0.1.209 → 0.1.211
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
|
@@ -771,7 +771,46 @@ function codexSkillOpenAiYaml(displayName, description) {
|
|
|
771
771
|
`;
|
|
772
772
|
}
|
|
773
773
|
|
|
774
|
-
function
|
|
774
|
+
function createCampaignHostContract(host) {
|
|
775
|
+
if (host === "codex") {
|
|
776
|
+
return `## Installed Host Contract
|
|
777
|
+
|
|
778
|
+
This installed skill is running in Codex. Treat Codex as the current host, use
|
|
779
|
+
\`request_user_input\` for structured questions when it is exposed, use
|
|
780
|
+
\`$sellable:create-campaign\` in user-facing retry instructions, and call
|
|
781
|
+
\`mcp__sellable__bootstrap_create_campaign\` with \`host: "Codex"\` plus the
|
|
782
|
+
current Codex model and reasoning when available.
|
|
783
|
+
|
|
784
|
+
Do not describe this run as Claude Code and do not recommend Claude Code-only
|
|
785
|
+
commands or settings from this Codex skill.`;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
if (host === "claude") {
|
|
789
|
+
return `## Installed Host Contract
|
|
790
|
+
|
|
791
|
+
This installed command is running in Claude Code. Treat Claude Code as the
|
|
792
|
+
current host, use \`AskUserQuestion\` for structured questions, use
|
|
793
|
+
\`/sellable:create-campaign\` in user-facing retry instructions, and call
|
|
794
|
+
\`mcp__sellable__bootstrap_create_campaign\` with \`host: "Claude Code"\` plus
|
|
795
|
+
the current Claude Code model and reasoning when available.
|
|
796
|
+
|
|
797
|
+
Do not describe this run as Codex and do not recommend Codex-only commands or
|
|
798
|
+
settings from this Claude Code command.`;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
return "";
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
function addCreateCampaignHostContract(markdown, host) {
|
|
805
|
+
const contract = createCampaignHostContract(host);
|
|
806
|
+
if (!contract) return markdown;
|
|
807
|
+
return String(markdown).replace(
|
|
808
|
+
"\n# Sellable Create Campaign\n",
|
|
809
|
+
`\n# Sellable Create Campaign\n\n${contract}\n`
|
|
810
|
+
);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
function createCampaignSkillMd({ host = "shared" } = {}) {
|
|
775
814
|
// Single source of truth: ../skill-templates/create-campaign.md, which is
|
|
776
815
|
// copied from the canonical mcp/sellable/skills/create-campaign/SKILL.md at
|
|
777
816
|
// publish time via scripts/sync-skill-templates.mjs (prepublishOnly hook).
|
|
@@ -786,7 +825,10 @@ function createCampaignSkillMd() {
|
|
|
786
825
|
"create-campaign.md"
|
|
787
826
|
);
|
|
788
827
|
if (existsSync(templatePath)) {
|
|
789
|
-
return
|
|
828
|
+
return addCreateCampaignHostContract(
|
|
829
|
+
readFileSync(templatePath, "utf8"),
|
|
830
|
+
host
|
|
831
|
+
);
|
|
790
832
|
}
|
|
791
833
|
} catch {
|
|
792
834
|
// fall through to hardcoded fallback below
|
|
@@ -814,11 +856,17 @@ person/company this campaign is for, then I’ll turn that into a campaign brief
|
|
|
814
856
|
before anything is created.
|
|
815
857
|
\`\`\`
|
|
816
858
|
|
|
817
|
-
Exception: if \`bootstrap_create_campaign.modelQuality.status === "warn"
|
|
818
|
-
|
|
859
|
+
Exception: if \`bootstrap_create_campaign.modelQuality.status === "warn"\` and
|
|
860
|
+
\`bootstrap_create_campaign.modelQuality.metadataStale !== true\`, the first
|
|
861
|
+
visible campaign message must be the model-quality warning from
|
|
819
862
|
\`modelQuality.message\`. Ask the user to switch to the configured minimum model
|
|
820
863
|
or explicitly continue anyway before identity setup, research, lead filtering,
|
|
821
|
-
message generation, or launch review.
|
|
864
|
+
message generation, or launch review. If \`metadataStale === true\`, continue
|
|
865
|
+
normally and do not ask the user to switch.
|
|
866
|
+
|
|
867
|
+
If \`bootstrap_create_campaign.modelQuality.metadataStale === true\`, continue
|
|
868
|
+
normally. Do not ask the user to switch models; this is an accepted Codex host
|
|
869
|
+
metadata mismatch.
|
|
822
870
|
|
|
823
871
|
If a linked/local skill file is stale or missing, silently use the installed
|
|
824
872
|
\`sellable@sellable\` plugin copy. Do not tell the user about the stale link,
|
|
@@ -1260,8 +1308,10 @@ updates.
|
|
|
1260
1308
|
5. Call \`mcp__sellable__bootstrap_create_campaign({ flowVersion: "v2", campaignId?, host?, model?, reasoningEffort? })\`.
|
|
1261
1309
|
Pass the current host, model, and reasoning when the host exposes them.
|
|
1262
1310
|
6. If \`safeToProceed !== true\`, stop and show \`blockingErrors\` + \`nextStep\`.
|
|
1263
|
-
7. If \`modelQuality.status === "warn"
|
|
1264
|
-
setup/research and wait for the user
|
|
1311
|
+
7. If \`modelQuality.status === "warn"\` and \`modelQuality.metadataStale !== true\`,
|
|
1312
|
+
show \`modelQuality.message\` before any setup/research and wait for the user
|
|
1313
|
+
to switch or explicitly continue. If \`metadataStale === true\`, continue
|
|
1314
|
+
normally and do not tell the user to switch.
|
|
1265
1315
|
|
|
1266
1316
|
## Execute Workflow
|
|
1267
1317
|
|
|
@@ -1819,7 +1869,7 @@ function codexPluginSkills() {
|
|
|
1819
1869
|
dir: "sellable-create-campaign",
|
|
1820
1870
|
displayName: "Sellable Create Campaign",
|
|
1821
1871
|
description: "Create a Sellable campaign with approval gates",
|
|
1822
|
-
skillMd: createCampaignSkillMd(),
|
|
1872
|
+
skillMd: createCampaignSkillMd({ host: "codex" }),
|
|
1823
1873
|
soulMd: createCampaignSoulMd(),
|
|
1824
1874
|
},
|
|
1825
1875
|
{
|
|
@@ -2043,7 +2093,7 @@ function claudeCommands() {
|
|
|
2043
2093
|
filename: join("sellable", "create-campaign.md"),
|
|
2044
2094
|
description: "Create a Sellable campaign through the approval-gated workflow.",
|
|
2045
2095
|
argumentHint: "[campaign goal, company, or offer]",
|
|
2046
|
-
skillMd: createCampaignSkillMd(),
|
|
2096
|
+
skillMd: createCampaignSkillMd({ host: "claude" }),
|
|
2047
2097
|
allowedTools: ["AskUserQuestion", "Task", ...CREATE_CAMPAIGN_ALLOWED_TOOLS],
|
|
2048
2098
|
},
|
|
2049
2099
|
{
|
package/package.json
CHANGED
|
@@ -179,11 +179,17 @@ person/company this campaign is for, then I’ll turn that into a campaign brief
|
|
|
179
179
|
before we move into lead sourcing.
|
|
180
180
|
```
|
|
181
181
|
|
|
182
|
-
Exception: if `bootstrap_create_campaign.modelQuality.status === "warn"
|
|
183
|
-
|
|
182
|
+
Exception: if `bootstrap_create_campaign.modelQuality.status === "warn"` and
|
|
183
|
+
`bootstrap_create_campaign.modelQuality.metadataStale !== true`, the first
|
|
184
|
+
visible campaign message must be the model-quality warning from
|
|
184
185
|
`modelQuality.message`. Ask the user to switch to the configured minimum model
|
|
185
186
|
or explicitly continue anyway before identity setup, research, lead filtering,
|
|
186
|
-
message generation, or launch review.
|
|
187
|
+
message generation, or launch review. If `metadataStale === true`, continue
|
|
188
|
+
normally and do not ask the user to switch.
|
|
189
|
+
|
|
190
|
+
If `bootstrap_create_campaign.modelQuality.metadataStale === true`, continue
|
|
191
|
+
normally. Do not ask the user to switch models; this is an accepted Codex host
|
|
192
|
+
metadata mismatch.
|
|
187
193
|
|
|
188
194
|
If a linked/local skill file is stale or missing, silently use the installed
|
|
189
195
|
`sellable@sellable` plugin copy. Do not tell the user about the stale link,
|
|
@@ -769,9 +775,10 @@ messages, and wait for final launch approval.
|
|
|
769
775
|
What's your LinkedIn profile URL or handle?
|
|
770
776
|
```
|
|
771
777
|
|
|
772
|
-
|
|
773
|
-
`request_user_input` is unavailable in an interactive session.
|
|
774
|
-
|
|
778
|
+
Codex only: do not silently ask intake or approval questions as plain chat when
|
|
779
|
+
`request_user_input` is unavailable in an interactive Codex session. Claude Code
|
|
780
|
+
uses `AskUserQuestion`; do not apply this Codex setup blocker in Claude Code.
|
|
781
|
+
In Codex, stop and tell the user:
|
|
775
782
|
|
|
776
783
|
```text
|
|
777
784
|
I need Codex’s quick question panel to collect campaign inputs and approvals cleanly.
|
|
@@ -810,17 +817,18 @@ there.
|
|
|
810
817
|
## Bootstrap
|
|
811
818
|
|
|
812
819
|
MCP tool access is required. First call `mcp__sellable__get_auth_status({})`
|
|
813
|
-
directly. If that tool is unavailable, stop and say this is a
|
|
814
|
-
install/reload problem, not a campaign problem. Tell the
|
|
815
|
-
run `curl -fsSL "https://app.sellable.dev/api/v2/cli/install" | sh` so
|
|
816
|
-
packaged MCP server
|
|
817
|
-
|
|
820
|
+
directly. If that tool is unavailable, stop and say this is a Sellable
|
|
821
|
+
install/reload problem for the current host, not a campaign problem. Tell the
|
|
822
|
+
user to run `curl -fsSL "https://app.sellable.dev/api/v2/cli/install" | sh` so
|
|
823
|
+
the packaged MCP server and the current host integration are installed. If they
|
|
824
|
+
want an agent-readable checklist, tell them:
|
|
818
825
|
`Install Sellable CLI and skills using https://app.sellable.dev/agent-install.txt`.
|
|
819
826
|
For CLI verification, tell them to run
|
|
820
827
|
`sellable --verify-only --host all --json --artifact "$HOME/.local/sellable/app-sellable-dev/installer/.last-verify.json"`.
|
|
821
|
-
After that, they must fully quit and reopen
|
|
822
|
-
thread.
|
|
823
|
-
|
|
828
|
+
After that, they must fully quit and reopen the current host app before starting
|
|
829
|
+
a new thread. In Codex, say Codex Desktop. In Claude Code, say Claude Code. Do
|
|
830
|
+
not use `scripts/mcp/sellable-tool-call.mjs`, `npm run`, `node`, or any local
|
|
831
|
+
harness as a fallback for this interactive skill.
|
|
824
832
|
Do not mention prompt loading, local skill files, missing linked versions,
|
|
825
833
|
plugin cache paths, MCP namespaces, or runbooks in customer-facing progress
|
|
826
834
|
updates.
|
|
@@ -932,11 +940,15 @@ updates.
|
|
|
932
940
|
- Do not call `mcp__sellable__get_campaigns`.
|
|
933
941
|
- Do not call `mcp__sellable__get_campaign` to hunt for IDs.
|
|
934
942
|
- Do not call `mcp__sellable__create_campaign({ campaignId: ... })` unless the user supplied that id.
|
|
935
|
-
6. Call `mcp__sellable__bootstrap_create_campaign({ flowVersion: "v2", campaignId?, host
|
|
936
|
-
Pass the current host
|
|
943
|
+
6. Call `mcp__sellable__bootstrap_create_campaign({ flowVersion: "v2", campaignId?, host, model?, reasoningEffort? })`.
|
|
944
|
+
Pass the explicit current host label: `host: "Codex"` from Codex and
|
|
945
|
+
`host: "Claude Code"` from Claude Code. Also pass the current model and
|
|
946
|
+
reasoning when the host exposes them.
|
|
937
947
|
7. If `safeToProceed !== true`, stop and show `blockingErrors` + `nextStep`.
|
|
938
|
-
8. If `modelQuality.status === "warn"
|
|
939
|
-
setup/research and wait for the user
|
|
948
|
+
8. If `modelQuality.status === "warn"` and `modelQuality.metadataStale !== true`,
|
|
949
|
+
show `modelQuality.message` before any setup/research and wait for the user
|
|
950
|
+
to switch or explicitly continue. If `metadataStale === true`, continue
|
|
951
|
+
normally and do not tell the user to switch.
|
|
940
952
|
|
|
941
953
|
## Execute Workflow
|
|
942
954
|
|