@sellable/mcp 0.1.312 → 0.1.313
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
|
@@ -97,8 +97,11 @@ startup/auth update check and tells the agent to run
|
|
|
97
97
|
installed runtime is behind npm.
|
|
98
98
|
|
|
99
99
|
For CI/scripted installs, set `SELLABLE_TOKEN` and `SELLABLE_WORKSPACE_ID`
|
|
100
|
-
before running the installer.
|
|
101
|
-
|
|
100
|
+
before running the curl installer. The public path remains:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
curl -fsSL "https://app.sellable.dev/api/v2/cli/install" | sh
|
|
104
|
+
```
|
|
102
105
|
|
|
103
106
|
### Publishing `@sellable/mcp`
|
|
104
107
|
|
|
@@ -14,6 +14,7 @@ export type CampaignModelQualityResult = {
|
|
|
14
14
|
recommendedReasoningEffort: string;
|
|
15
15
|
minimumSummary: string;
|
|
16
16
|
confirmationRequired: boolean;
|
|
17
|
+
metadataStale: boolean;
|
|
17
18
|
message: string;
|
|
18
19
|
};
|
|
19
20
|
export type CampaignModelQualityHostConfig = {
|
|
@@ -33,6 +34,7 @@ export type CampaignModelQualityConfig = {
|
|
|
33
34
|
};
|
|
34
35
|
warningCopy: {
|
|
35
36
|
ok: string;
|
|
37
|
+
staleCodexMetadata: string;
|
|
36
38
|
unknownSettings: string;
|
|
37
39
|
belowMinimum: string;
|
|
38
40
|
};
|
|
@@ -37,6 +37,7 @@ const DEFAULT_MODEL_QUALITY_CONFIG = {
|
|
|
37
37
|
},
|
|
38
38
|
warningCopy: {
|
|
39
39
|
ok: "Campaign model settings meet the configured minimum: {minimumSummary}.",
|
|
40
|
+
staleCodexMetadata: "Codex host metadata appears stale: it can report GPT-5/default or GPT-5/high even when the UI is set to GPT 5.5 Extra High. Treating this as acceptable; continue without asking the user to switch.",
|
|
40
41
|
unknownSettings: "Model settings were not provided by the host. Best campaigns need at least {minimumSummary}. Confirm the user is on one of those settings, or ask them to switch before continuing.",
|
|
41
42
|
belowMinimum: "Best campaigns need at least {minimumSummary}. Current settings look below that: {currentSettings}. Please switch before continuing, or explicitly say to continue anyway.",
|
|
42
43
|
},
|
|
@@ -146,6 +147,22 @@ function findAcceptedHostConfig(host, model, config) {
|
|
|
146
147
|
: [[host, config.hosts[host]]];
|
|
147
148
|
return candidates.find(([, hostConfig]) => modelMeetsMinimum(model, hostConfig));
|
|
148
149
|
}
|
|
150
|
+
function looksLikeCodexStaleMetadata(host, model, reasoningEffort, config) {
|
|
151
|
+
if (host !== "codex")
|
|
152
|
+
return false;
|
|
153
|
+
if (!model || !reasoningEffort)
|
|
154
|
+
return false;
|
|
155
|
+
const normalizedModel = normalize(model).replace(/[_-]+/g, " ");
|
|
156
|
+
const normalizedReasoning = normalizeReasoning(reasoningEffort);
|
|
157
|
+
if (!normalizedModel.includes("gpt"))
|
|
158
|
+
return false;
|
|
159
|
+
const versions = extractModelVersions(normalizedModel);
|
|
160
|
+
const looksLikeBaseGpt5 = versions.some((version) => version === "5" || version === "5.0");
|
|
161
|
+
if (!looksLikeBaseGpt5)
|
|
162
|
+
return false;
|
|
163
|
+
return (["default", "auto", "standard"].includes(normalizedReasoning) ||
|
|
164
|
+
acceptsReasoning(reasoningEffort, config.hosts.codex));
|
|
165
|
+
}
|
|
149
166
|
export function evaluateCampaignModelQuality(input = {}) {
|
|
150
167
|
const config = getCampaignModelQualityConfig();
|
|
151
168
|
const host = normalizeHost([input.host, input.model].filter(Boolean).join(" "));
|
|
@@ -166,6 +183,7 @@ export function evaluateCampaignModelQuality(input = {}) {
|
|
|
166
183
|
recommendedReasoningEffort,
|
|
167
184
|
minimumSummary,
|
|
168
185
|
confirmationRequired: true,
|
|
186
|
+
metadataStale: false,
|
|
169
187
|
message: formatCopy(config.warningCopy.unknownSettings, {
|
|
170
188
|
minimumSummary,
|
|
171
189
|
currentSettings: "unknown",
|
|
@@ -185,12 +203,30 @@ export function evaluateCampaignModelQuality(input = {}) {
|
|
|
185
203
|
recommendedReasoningEffort,
|
|
186
204
|
minimumSummary,
|
|
187
205
|
confirmationRequired: false,
|
|
206
|
+
metadataStale: false,
|
|
188
207
|
message: formatCopy(config.warningCopy.ok, {
|
|
189
208
|
minimumSummary,
|
|
190
209
|
currentSettings: "current settings",
|
|
191
210
|
}),
|
|
192
211
|
};
|
|
193
212
|
}
|
|
213
|
+
if (looksLikeCodexStaleMetadata(host, model, reasoningEffort, config)) {
|
|
214
|
+
return {
|
|
215
|
+
status: "ok",
|
|
216
|
+
host,
|
|
217
|
+
model,
|
|
218
|
+
reasoningEffort,
|
|
219
|
+
recommendedModel,
|
|
220
|
+
recommendedReasoningEffort,
|
|
221
|
+
minimumSummary,
|
|
222
|
+
confirmationRequired: false,
|
|
223
|
+
metadataStale: true,
|
|
224
|
+
message: formatCopy(config.warningCopy.staleCodexMetadata, {
|
|
225
|
+
minimumSummary,
|
|
226
|
+
currentSettings: "stale Codex host metadata",
|
|
227
|
+
}),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
194
230
|
const currentSettings = [
|
|
195
231
|
model ? `model "${model}"` : "unknown model",
|
|
196
232
|
reasoningEffort ? `reasoning "${reasoningEffort}"` : "unknown reasoning",
|
|
@@ -204,6 +240,7 @@ export function evaluateCampaignModelQuality(input = {}) {
|
|
|
204
240
|
recommendedReasoningEffort,
|
|
205
241
|
minimumSummary,
|
|
206
242
|
confirmationRequired: true,
|
|
243
|
+
metadataStale: false,
|
|
207
244
|
message: formatCopy(config.warningCopy.belowMinimum, {
|
|
208
245
|
minimumSummary,
|
|
209
246
|
currentSettings,
|
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,
|
|
@@ -935,8 +941,10 @@ updates.
|
|
|
935
941
|
6. Call `mcp__sellable__bootstrap_create_campaign({ flowVersion: "v2", campaignId?, host?, model?, reasoningEffort? })`.
|
|
936
942
|
Pass the current host, model, and reasoning when the host exposes them.
|
|
937
943
|
7. If `safeToProceed !== true`, stop and show `blockingErrors` + `nextStep`.
|
|
938
|
-
8. If `modelQuality.status === "warn"
|
|
939
|
-
setup/research and wait for the user
|
|
944
|
+
8. If `modelQuality.status === "warn"` and `modelQuality.metadataStale !== true`,
|
|
945
|
+
show `modelQuality.message` before any setup/research and wait for the user
|
|
946
|
+
to switch or explicitly continue. If `metadataStale === true`, continue
|
|
947
|
+
normally and do not tell the user to switch.
|
|
940
948
|
|
|
941
949
|
## Execute Workflow
|
|
942
950
|
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"warningCopy": {
|
|
24
24
|
"ok": "Campaign model settings meet the configured minimum: {minimumSummary}.",
|
|
25
|
+
"staleCodexMetadata": "Codex host metadata appears stale: it can report GPT-5/default or GPT-5/high even when the UI is set to GPT 5.5 Extra High. Treating this as acceptable; continue without asking the user to switch.",
|
|
25
26
|
"unknownSettings": "Model settings were not provided by the host. Best campaigns need at least {minimumSummary}. Confirm the user is on one of those settings, or ask them to switch before continuing.",
|
|
26
27
|
"belowMinimum": "Best campaigns need at least {minimumSummary}. Current settings look below that: {currentSettings}. Please switch before continuing, or explicitly say to continue anyway."
|
|
27
28
|
}
|