@sellable/install 0.1.100 → 0.1.101
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 +4 -1
- package/bin/sellable-install.mjs +106 -24
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -55,12 +55,15 @@ starts in one registry entry instead of scattered prompt edits.
|
|
|
55
55
|
|
|
56
56
|
## Names
|
|
57
57
|
|
|
58
|
-
Use the same public
|
|
58
|
+
Use the same public entrypoints in both hosts:
|
|
59
59
|
|
|
60
60
|
- Claude Code: `/sellable:create-campaign`
|
|
61
|
+
- Claude Code: `/sellable:interview`
|
|
61
62
|
- Codex: `$sellable:create-campaign`
|
|
63
|
+
- Codex: `$sellable:interview`
|
|
62
64
|
- Codex Desktop plugin: `sellable@sellable`
|
|
63
65
|
- Codex visible skill: `Sellable Create Campaign`
|
|
66
|
+
- Codex visible skill: `Sellable Identity Interview`
|
|
64
67
|
- Internal MCP workflow prompt: `create-campaign-v2`
|
|
65
68
|
|
|
66
69
|
Do not ask users to run `/sellable:create-campaign-v2`,
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -134,7 +134,7 @@ Usage:
|
|
|
134
134
|
npx -y @sellable/install@latest -- [options]
|
|
135
135
|
|
|
136
136
|
Commands:
|
|
137
|
-
create Show how to launch
|
|
137
|
+
create Show how to launch public Sellable workflows.
|
|
138
138
|
auth set <token> Save a Sellable API token for first-run auth.
|
|
139
139
|
uninstall Remove Sellable host config and installed artifacts.
|
|
140
140
|
|
|
@@ -167,7 +167,7 @@ Auth:
|
|
|
167
167
|
function printCreateCommandHint() {
|
|
168
168
|
printBanner();
|
|
169
169
|
console.log(
|
|
170
|
-
` ${C.bold}
|
|
170
|
+
` ${C.bold}Run Sellable from Claude Code or Codex.${C.reset}`
|
|
171
171
|
);
|
|
172
172
|
console.log("");
|
|
173
173
|
console.log(
|
|
@@ -175,14 +175,20 @@ function printCreateCommandHint() {
|
|
|
175
175
|
);
|
|
176
176
|
console.log("");
|
|
177
177
|
console.log(` ${"═".repeat(63)}`);
|
|
178
|
-
console.log(` ${C.bold}Start a Sellable
|
|
178
|
+
console.log(` ${C.bold}Start a Sellable workflow:${C.reset}`);
|
|
179
179
|
console.log(` ${"═".repeat(63)}`);
|
|
180
180
|
console.log("");
|
|
181
181
|
console.log("");
|
|
182
|
-
printAgentBox("Using Claude Code?", "claude",
|
|
182
|
+
printAgentBox("Using Claude Code?", "claude", [
|
|
183
|
+
{ label: "Campaign", command: "/sellable:create-campaign" },
|
|
184
|
+
{ label: "Identity", command: "/sellable:interview" },
|
|
185
|
+
]);
|
|
183
186
|
console.log("");
|
|
184
187
|
console.log("");
|
|
185
|
-
printAgentBox("Using Codex?", "codex",
|
|
188
|
+
printAgentBox("Using Codex?", "codex", [
|
|
189
|
+
{ label: "Campaign", command: "$sellable:create-campaign" },
|
|
190
|
+
{ label: "Identity", command: "$sellable:interview" },
|
|
191
|
+
]);
|
|
186
192
|
console.log("");
|
|
187
193
|
console.log(` ${"─".repeat(63)}`);
|
|
188
194
|
console.log(` ${C.grey}If those commands are missing, run:${C.reset}`);
|
|
@@ -1000,6 +1006,59 @@ If subskill lookup fails, use \`mcp__sellable__search_subskill_prompts({ query:
|
|
|
1000
1006
|
`;
|
|
1001
1007
|
}
|
|
1002
1008
|
|
|
1009
|
+
function interviewSkillMd() {
|
|
1010
|
+
return `---
|
|
1011
|
+
name: interview
|
|
1012
|
+
description: Build Sellable core identity/company memory for writing workflows.
|
|
1013
|
+
allowed-tools:
|
|
1014
|
+
- mcp__sellable__get_subskill_prompt
|
|
1015
|
+
- mcp__sellable__get_subskill_asset
|
|
1016
|
+
- mcp__sellable__search_subskill_prompts
|
|
1017
|
+
- Read
|
|
1018
|
+
- Write
|
|
1019
|
+
- Edit
|
|
1020
|
+
- Glob
|
|
1021
|
+
- Grep
|
|
1022
|
+
---
|
|
1023
|
+
|
|
1024
|
+
# Sellable Identity Interview
|
|
1025
|
+
|
|
1026
|
+
Use this as the customer-facing entrypoint for the Sellable \`interview\`
|
|
1027
|
+
workflow. It builds durable identity/company memory, proof hygiene, reusable
|
|
1028
|
+
answers, transcript references, and anti-AI writing rules for downstream
|
|
1029
|
+
Sellable writing workflows.
|
|
1030
|
+
|
|
1031
|
+
## Bootstrap
|
|
1032
|
+
|
|
1033
|
+
MCP prompt access is required. Do not inspect repo files, run shell commands,
|
|
1034
|
+
use \`npm\`, \`node\`, local harness scripts, or read local prompt files to
|
|
1035
|
+
emulate this workflow.
|
|
1036
|
+
|
|
1037
|
+
If the Sellable MCP prompt tools are unavailable, stop and say this is a Codex
|
|
1038
|
+
install/reload problem. Tell the user to run
|
|
1039
|
+
\`npx -y ${INSTALL_PACKAGE_SPEC} --host all\`, fully quit and reopen Codex
|
|
1040
|
+
Desktop, then start a new thread.
|
|
1041
|
+
|
|
1042
|
+
## Execute Workflow
|
|
1043
|
+
|
|
1044
|
+
1. Load the canonical prompt via
|
|
1045
|
+
\`mcp__sellable__get_subskill_prompt({ subskillName: "interview" })\`.
|
|
1046
|
+
If the response has \`hasMore=true\`, continue with \`nextOffset\` until
|
|
1047
|
+
\`hasMore=false\`.
|
|
1048
|
+
2. When the canonical prompt asks for \`references/*.md\`, load those files
|
|
1049
|
+
with \`mcp__sellable__get_subskill_asset({ subskillName: "interview", assetPath: "references/<file>.md" })\`.
|
|
1050
|
+
3. Follow the canonical prompt exactly. Save local memory only where that prompt
|
|
1051
|
+
directs, under \`.sellable/configs/core/**\` and
|
|
1052
|
+
\`.sellable/interviews/**\`.
|
|
1053
|
+
|
|
1054
|
+
## MCP Prompt Fallback
|
|
1055
|
+
|
|
1056
|
+
If exact subskill lookup fails, use
|
|
1057
|
+
\`mcp__sellable__search_subskill_prompts({ query: "interview", includePublic: true })\`,
|
|
1058
|
+
then retry \`get_subskill_prompt\`.
|
|
1059
|
+
`;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1003
1062
|
function createCampaignSoulMd() {
|
|
1004
1063
|
return `# Sellable Campaign GTM Engineer Soul
|
|
1005
1064
|
|
|
@@ -1189,6 +1248,12 @@ function codexPluginSkills() {
|
|
|
1189
1248
|
skillMd: createCampaignSkillMd(),
|
|
1190
1249
|
soulMd: createCampaignSoulMd(),
|
|
1191
1250
|
},
|
|
1251
|
+
{
|
|
1252
|
+
dir: "sellable-interview",
|
|
1253
|
+
displayName: "Sellable Identity Interview",
|
|
1254
|
+
description: "Build durable identity and company memory",
|
|
1255
|
+
skillMd: interviewSkillMd(),
|
|
1256
|
+
},
|
|
1192
1257
|
];
|
|
1193
1258
|
}
|
|
1194
1259
|
|
|
@@ -1795,16 +1860,21 @@ function verify(opts) {
|
|
|
1795
1860
|
".codex-plugin",
|
|
1796
1861
|
"plugin.json"
|
|
1797
1862
|
);
|
|
1798
|
-
const
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1863
|
+
const skillPaths = codexPluginSkills().map((skill) =>
|
|
1864
|
+
join(
|
|
1865
|
+
codexHome(),
|
|
1866
|
+
"plugins",
|
|
1867
|
+
"cache",
|
|
1868
|
+
"sellable",
|
|
1869
|
+
"sellable",
|
|
1870
|
+
CODEX_PLUGIN_VERSION,
|
|
1871
|
+
"skills",
|
|
1872
|
+
skill.dir,
|
|
1873
|
+
"SKILL.md"
|
|
1874
|
+
)
|
|
1875
|
+
);
|
|
1876
|
+
const hasSkillBundles = skillPaths.every((skillPath) =>
|
|
1877
|
+
existsSync(skillPath)
|
|
1808
1878
|
);
|
|
1809
1879
|
checks.push({
|
|
1810
1880
|
ok: existsSync(pluginPath),
|
|
@@ -1813,10 +1883,10 @@ function verify(opts) {
|
|
|
1813
1883
|
: "Codex Desktop plugin missing",
|
|
1814
1884
|
});
|
|
1815
1885
|
checks.push({
|
|
1816
|
-
ok:
|
|
1817
|
-
label:
|
|
1818
|
-
? "Codex skill
|
|
1819
|
-
: "Codex skill
|
|
1886
|
+
ok: hasSkillBundles,
|
|
1887
|
+
label: hasSkillBundles
|
|
1888
|
+
? "Codex skill bundles present"
|
|
1889
|
+
: "Codex skill bundles missing",
|
|
1820
1890
|
});
|
|
1821
1891
|
const codexAgentPaths = codexCustomAgents().map((agent) =>
|
|
1822
1892
|
join(codexHome(), "agents", agent.filename)
|
|
@@ -1878,10 +1948,13 @@ function visibleLen(s) {
|
|
|
1878
1948
|
return s.replace(/\x1b\[[0-9;]*m/g, "").length;
|
|
1879
1949
|
}
|
|
1880
1950
|
|
|
1881
|
-
function printAgentBox(title, terminalCmd,
|
|
1951
|
+
function printAgentBox(title, terminalCmd, agentCommands) {
|
|
1882
1952
|
// Inner width between │ ... │ — i.e. the printable area excluding the borders.
|
|
1883
1953
|
const W = 58;
|
|
1884
1954
|
const agentName = title.replace("Using ", "").replace("?", "");
|
|
1955
|
+
const commands = Array.isArray(agentCommands)
|
|
1956
|
+
? agentCommands
|
|
1957
|
+
: [{ label: "", command: agentCommands }];
|
|
1885
1958
|
|
|
1886
1959
|
const line = (text) => {
|
|
1887
1960
|
const pad = Math.max(0, W - visibleLen(text));
|
|
@@ -1902,7 +1975,10 @@ function printAgentBox(title, terminalCmd, agentCmd) {
|
|
|
1902
1975
|
console.log(blank());
|
|
1903
1976
|
console.log(line(` ${C.bold}STEP 2${C.reset} Then in ${agentName}, run:`));
|
|
1904
1977
|
console.log(blank());
|
|
1905
|
-
|
|
1978
|
+
for (const item of commands) {
|
|
1979
|
+
const label = item.label ? `${item.label.padEnd(8)} ` : "";
|
|
1980
|
+
console.log(line(` ${label}${C.cyan}${item.command}${C.reset}`));
|
|
1981
|
+
}
|
|
1906
1982
|
console.log(blank());
|
|
1907
1983
|
console.log(bot);
|
|
1908
1984
|
}
|
|
@@ -2015,18 +2091,24 @@ function printNextSteps(installedHosts, authReused) {
|
|
|
2015
2091
|
console.log("");
|
|
2016
2092
|
console.log("");
|
|
2017
2093
|
console.log(` ${"═".repeat(63)}`);
|
|
2018
|
-
console.log(` ${C.bold}To launch
|
|
2094
|
+
console.log(` ${C.bold}To launch a Sellable workflow:${C.reset}`);
|
|
2019
2095
|
console.log(` ${"═".repeat(63)}`);
|
|
2020
2096
|
console.log("");
|
|
2021
2097
|
console.log("");
|
|
2022
2098
|
|
|
2023
2099
|
if (hasClaude) {
|
|
2024
|
-
printAgentBox("Using Claude Code?", "claude",
|
|
2100
|
+
printAgentBox("Using Claude Code?", "claude", [
|
|
2101
|
+
{ label: "Campaign", command: "/sellable:create-campaign" },
|
|
2102
|
+
{ label: "Identity", command: "/sellable:interview" },
|
|
2103
|
+
]);
|
|
2025
2104
|
console.log("");
|
|
2026
2105
|
console.log("");
|
|
2027
2106
|
}
|
|
2028
2107
|
if (hasCodex) {
|
|
2029
|
-
printAgentBox("Using Codex?", "codex",
|
|
2108
|
+
printAgentBox("Using Codex?", "codex", [
|
|
2109
|
+
{ label: "Campaign", command: "$sellable:create-campaign" },
|
|
2110
|
+
{ label: "Identity", command: "$sellable:interview" },
|
|
2111
|
+
]);
|
|
2030
2112
|
console.log("");
|
|
2031
2113
|
}
|
|
2032
2114
|
|