@sellable/install 0.1.91 → 0.1.93
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 +10 -0
- package/bin/sellable-install.mjs +48 -1
- package/package.json +1 -1
- package/skill-templates/create-campaign.md +7 -0
package/README.md
CHANGED
|
@@ -6,6 +6,16 @@ Installs Sellable MCP for Claude Code and Codex.
|
|
|
6
6
|
npx -y @sellable/install@latest --host all
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
+
After install, `sellable create` is a terminal helper that prints the correct
|
|
10
|
+
agent command for launching a campaign:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
sellable create
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Campaign creation itself runs inside Claude Code or Codex, where the Sellable
|
|
17
|
+
MCP tools and approval flow are available.
|
|
18
|
+
|
|
9
19
|
If you do not pass a token, the installer prompts you for one and shows where to get it.
|
|
10
20
|
|
|
11
21
|
The installer uses package stdio MCP by default:
|
package/bin/sellable-install.mjs
CHANGED
|
@@ -129,9 +129,15 @@ function usage() {
|
|
|
129
129
|
return `Sellable agent installer
|
|
130
130
|
|
|
131
131
|
Usage:
|
|
132
|
+
sellable create
|
|
132
133
|
sellable-install [options]
|
|
133
134
|
npx -y @sellable/install@latest -- [options]
|
|
134
135
|
|
|
136
|
+
Commands:
|
|
137
|
+
create Show how to launch the create-campaign workflow.
|
|
138
|
+
auth set <token> Save a Sellable API token for first-run auth.
|
|
139
|
+
uninstall Remove Sellable host config and installed artifacts.
|
|
140
|
+
|
|
135
141
|
Options:
|
|
136
142
|
--host <host> claude, codex, or all. Default: all
|
|
137
143
|
--server <mode> package, local, or hosted. Default: package
|
|
@@ -158,6 +164,34 @@ Auth:
|
|
|
158
164
|
`;
|
|
159
165
|
}
|
|
160
166
|
|
|
167
|
+
function printCreateCommandHint() {
|
|
168
|
+
printBanner();
|
|
169
|
+
console.log(
|
|
170
|
+
` ${C.bold}Create campaigns from Claude Code or Codex.${C.reset}`
|
|
171
|
+
);
|
|
172
|
+
console.log("");
|
|
173
|
+
console.log(
|
|
174
|
+
` ${C.grey}The terminal command installs and verifies Sellable. Campaign creation runs inside your agent session so the workflow can use MCP tools, live state, and approval gates.${C.reset}`
|
|
175
|
+
);
|
|
176
|
+
console.log("");
|
|
177
|
+
console.log(` ${"═".repeat(63)}`);
|
|
178
|
+
console.log(` ${C.bold}Start a Sellable campaign:${C.reset}`);
|
|
179
|
+
console.log(` ${"═".repeat(63)}`);
|
|
180
|
+
console.log("");
|
|
181
|
+
console.log("");
|
|
182
|
+
printAgentBox("Using Claude Code?", "claude", "/sellable:create-campaign");
|
|
183
|
+
console.log("");
|
|
184
|
+
console.log("");
|
|
185
|
+
printAgentBox("Using Codex?", "codex", "$sellable:create-campaign");
|
|
186
|
+
console.log("");
|
|
187
|
+
console.log(` ${"─".repeat(63)}`);
|
|
188
|
+
console.log(` ${C.grey}If those commands are missing, run:${C.reset}`);
|
|
189
|
+
console.log("");
|
|
190
|
+
console.log(` ${C.cyan}sellable --host all${C.reset}`);
|
|
191
|
+
console.log(` ${C.cyan}sellable --verify-only --host all${C.reset}`);
|
|
192
|
+
console.log("");
|
|
193
|
+
}
|
|
194
|
+
|
|
161
195
|
function parseArgs(argv) {
|
|
162
196
|
const opts = {
|
|
163
197
|
host: process.env.SELLABLE_INSTALL_HOST || "all",
|
|
@@ -1524,8 +1558,17 @@ exec npx -y ${INSTALL_PACKAGE_SPEC} "$@"
|
|
|
1524
1558
|
writeFile(binPath, shim, opts, 0o755);
|
|
1525
1559
|
}
|
|
1526
1560
|
|
|
1561
|
+
const WATCH_MODE_DRIVER_ENV = {
|
|
1562
|
+
claude: "SELLABLE_WATCH_MODE_DRIVER=claude",
|
|
1563
|
+
codex: "SELLABLE_WATCH_MODE_DRIVER=codex",
|
|
1564
|
+
};
|
|
1565
|
+
|
|
1527
1566
|
function withWatchModeDriver(command, args, driver) {
|
|
1528
|
-
|
|
1567
|
+
const envArg = WATCH_MODE_DRIVER_ENV[driver];
|
|
1568
|
+
if (!envArg) {
|
|
1569
|
+
throw new Error(`Unknown watch mode driver: ${driver}`);
|
|
1570
|
+
}
|
|
1571
|
+
return ["env", [envArg, command, ...args]];
|
|
1529
1572
|
}
|
|
1530
1573
|
|
|
1531
1574
|
function mcpCommand(opts) {
|
|
@@ -2236,6 +2279,10 @@ async function main() {
|
|
|
2236
2279
|
runUninstall();
|
|
2237
2280
|
process.exit(0);
|
|
2238
2281
|
}
|
|
2282
|
+
if (rawArgs[0] === "create") {
|
|
2283
|
+
printCreateCommandHint();
|
|
2284
|
+
process.exit(0);
|
|
2285
|
+
}
|
|
2239
2286
|
const opts = parseArgs(process.argv.slice(2));
|
|
2240
2287
|
if (opts.help) {
|
|
2241
2288
|
console.log(usage());
|
package/package.json
CHANGED
|
@@ -191,6 +191,11 @@ a fresh watch link once with `create_campaign({ campaignId })` or `get_campaign`
|
|
|
191
191
|
and print that link. Do not claim the browser was opened, inspected, or
|
|
192
192
|
synchronized.
|
|
193
193
|
|
|
194
|
+
Never print a placeholder watch link such as "Open campaign" or "link will
|
|
195
|
+
update once the shell is created." If the shell is not created yet, call
|
|
196
|
+
`create_campaign` first. If `create_campaign` does not return `watchUrl`, stop
|
|
197
|
+
and surface the missing watch-link error before lead sourcing.
|
|
198
|
+
|
|
194
199
|
After every `update_campaign({ campaignId, currentStep })`, use
|
|
195
200
|
`get_campaign_navigation_state` when available as a compact orientation check:
|
|
196
201
|
match the saved campaign state to the expected watch-link step, explain the
|
|
@@ -565,6 +570,8 @@ updates.
|
|
|
565
570
|
`message-validation.md` proves the message-review safety-gate workflow ran,
|
|
566
571
|
`message-review.md` approves the template, rubrics are saved, and the
|
|
567
572
|
approved message set is synced into the campaign brief.
|
|
573
|
+
Do not ask the user to approve the brief before shell creation unless they
|
|
574
|
+
explicitly requested a no-write draft; the shell itself is the review surface.
|
|
568
575
|
6. The main thread owns watch navigation. Call
|
|
569
576
|
`mcp__sellable__update_campaign({ campaignId, currentStep })` before major
|
|
570
577
|
visible work so the user can watch progress in the app: `create-offer` for
|