@sellable/install 0.1.210 → 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.
@@ -771,7 +771,46 @@ function codexSkillOpenAiYaml(displayName, description) {
771
771
  `;
772
772
  }
773
773
 
774
- function createCampaignSkillMd() {
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 readFileSync(templatePath, "utf8");
828
+ return addCreateCampaignHostContract(
829
+ readFileSync(templatePath, "utf8"),
830
+ host
831
+ );
790
832
  }
791
833
  } catch {
792
834
  // fall through to hardcoded fallback below
@@ -1827,7 +1869,7 @@ function codexPluginSkills() {
1827
1869
  dir: "sellable-create-campaign",
1828
1870
  displayName: "Sellable Create Campaign",
1829
1871
  description: "Create a Sellable campaign with approval gates",
1830
- skillMd: createCampaignSkillMd(),
1872
+ skillMd: createCampaignSkillMd({ host: "codex" }),
1831
1873
  soulMd: createCampaignSoulMd(),
1832
1874
  },
1833
1875
  {
@@ -2051,7 +2093,7 @@ function claudeCommands() {
2051
2093
  filename: join("sellable", "create-campaign.md"),
2052
2094
  description: "Create a Sellable campaign through the approval-gated workflow.",
2053
2095
  argumentHint: "[campaign goal, company, or offer]",
2054
- skillMd: createCampaignSkillMd(),
2096
+ skillMd: createCampaignSkillMd({ host: "claude" }),
2055
2097
  allowedTools: ["AskUserQuestion", "Task", ...CREATE_CAMPAIGN_ALLOWED_TOOLS],
2056
2098
  },
2057
2099
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/install",
3
- "version": "0.1.210",
3
+ "version": "0.1.211",
4
4
  "type": "module",
5
5
  "description": "One-command installer for Sellable MCP in Claude Code and Codex",
6
6
  "bin": {
@@ -775,9 +775,10 @@ messages, and wait for final launch approval.
775
775
  What's your LinkedIn profile URL or handle?
776
776
  ```
777
777
 
778
- Do not silently ask Codex intake or approval questions as plain chat when
779
- `request_user_input` is unavailable in an interactive session. Stop and tell
780
- the user:
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:
781
782
 
782
783
  ```text
783
784
  I need Codex’s quick question panel to collect campaign inputs and approvals cleanly.
@@ -816,17 +817,18 @@ there.
816
817
  ## Bootstrap
817
818
 
818
819
  MCP tool access is required. First call `mcp__sellable__get_auth_status({})`
819
- directly. If that tool is unavailable, stop and say this is a Codex
820
- install/reload problem, not a campaign problem. Tell the user to
821
- run `curl -fsSL "https://app.sellable.dev/api/v2/cli/install" | sh` so the
822
- packaged MCP server, Codex Desktop plugin, and Sellable skill bundle are
823
- installed. If they want an agent-readable checklist, tell them:
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:
824
825
  `Install Sellable CLI and skills using https://app.sellable.dev/agent-install.txt`.
825
826
  For CLI verification, tell them to run
826
827
  `sellable --verify-only --host all --json --artifact "$HOME/.local/sellable/app-sellable-dev/installer/.last-verify.json"`.
827
- After that, they must fully quit and reopen Codex Desktop before starting a new
828
- thread. Do not use `scripts/mcp/sellable-tool-call.mjs`, `npm run`, `node`, or
829
- any local harness as a fallback for this interactive skill.
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.
830
832
  Do not mention prompt loading, local skill files, missing linked versions,
831
833
  plugin cache paths, MCP namespaces, or runbooks in customer-facing progress
832
834
  updates.
@@ -938,8 +940,10 @@ updates.
938
940
  - Do not call `mcp__sellable__get_campaigns`.
939
941
  - Do not call `mcp__sellable__get_campaign` to hunt for IDs.
940
942
  - Do not call `mcp__sellable__create_campaign({ campaignId: ... })` unless the user supplied that id.
941
- 6. Call `mcp__sellable__bootstrap_create_campaign({ flowVersion: "v2", campaignId?, host?, model?, reasoningEffort? })`.
942
- Pass the current host, model, and reasoning when the host exposes them.
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.
943
947
  7. If `safeToProceed !== true`, stop and show `blockingErrors` + `nextStep`.
944
948
  8. If `modelQuality.status === "warn"` and `modelQuality.metadataStale !== true`,
945
949
  show `modelQuality.message` before any setup/research and wait for the user