@letterstory/cli 0.176.94 → 0.176.96
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/lib/cli.mjs +6 -3
- package/lib/commands/collection.mjs +18 -1
- package/lib/commands/domains.mjs +8 -2
- package/package.json +1 -1
package/lib/cli.mjs
CHANGED
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
import { fetchParkedSections, withoutParked } from "./parked.mjs";
|
|
87
87
|
|
|
88
88
|
// Matches cli/package.json; publish-cli.yml rewrites both to the published version.
|
|
89
|
-
export const VERSION = "0.176.
|
|
89
|
+
export const VERSION = "0.176.96";
|
|
90
90
|
|
|
91
91
|
/** The exit code for a gate refusal (CARD_REQUIRED, PAYMENT_FAILED, OUT_OF_TOKENS): 1 is a plain error. */
|
|
92
92
|
export const EXIT_PAYMENT_REQUIRED = 3;
|
|
@@ -101,6 +101,8 @@ export const BOOLEAN_FLAGS = new Set([
|
|
|
101
101
|
"advance",
|
|
102
102
|
// build list: only what the Plan started.
|
|
103
103
|
"from-plan",
|
|
104
|
+
// domains plan: scores only, no model call.
|
|
105
|
+
"no-write",
|
|
104
106
|
// build: a website or app of its own (deploy create's path). deploy create: hold until its build starts.
|
|
105
107
|
"new-site",
|
|
106
108
|
"wait",
|
|
@@ -563,6 +565,7 @@ Collections (the content engine as a primitive — one door, 'collection run'):
|
|
|
563
565
|
collection run-status <run-id> Status, steps, constraints, verification
|
|
564
566
|
collection runs [--collection <id>] [--status <s>] [--limit <n>]
|
|
565
567
|
collection approve <run-id> [--now] Answer the gate (--now publishes immediately)
|
|
568
|
+
collection start <run-id> Start a scheduled slot's writing now (it goes live at its slot)
|
|
566
569
|
collection move <run-id> --date YYYY-MM-DD Move a slot not yet written, or an approved written post, to another day
|
|
567
570
|
collection cancel <run-id>
|
|
568
571
|
collection inventory <id> Where every piece is; each finished draft's publish-on-its-own time
|
|
@@ -1970,10 +1973,10 @@ Domains (the domains you hold, and free ones that match what people search):
|
|
|
1970
1973
|
Free .com/.org domains on what people search in your
|
|
1971
1974
|
space (brainstormed, or the phrases given), ranked
|
|
1972
1975
|
domains buy <domain> --dry-run | --yes The price and whose account pays; --yes buys it
|
|
1973
|
-
domains plan <domain> [--phrase "<search>"] [--searches <n>]
|
|
1976
|
+
domains plan <domain> [--phrase "<search>"] [--searches <n>] [--version <version>] [--no-write]
|
|
1974
1977
|
The most strategic site for the domain, every version
|
|
1975
1978
|
scored, and whether it can launch; spends nothing
|
|
1976
|
-
domains launch <domain> [--phrase …] [--searches …] [--words "<plan words>"] --yes
|
|
1979
|
+
domains launch <domain> [--phrase …] [--searches …] [--version <version>] [--words "<plan words>"] --yes
|
|
1977
1980
|
Build and Launch Site: buys the domain if needed, builds
|
|
1978
1981
|
the plan and puts it live
|
|
1979
1982
|
|
|
@@ -134,6 +134,9 @@ export const ARGS = {
|
|
|
134
134
|
cancel_collection_run: {
|
|
135
135
|
run_id: { positional: 0, label: "run-id", required: true },
|
|
136
136
|
},
|
|
137
|
+
start_collection_run: {
|
|
138
|
+
run_id: { positional: 0, label: "run-id", required: true },
|
|
139
|
+
},
|
|
137
140
|
reschedule_collection_run: {
|
|
138
141
|
run_id: { positional: 0, label: "run-id", required: true },
|
|
139
142
|
date: { flag: "date", required: true },
|
|
@@ -184,6 +187,8 @@ export async function cmdCollection(ctx) {
|
|
|
184
187
|
return collectionApprove(rest);
|
|
185
188
|
case "cancel":
|
|
186
189
|
return collectionCancel(rest);
|
|
190
|
+
case "start":
|
|
191
|
+
return collectionStart(rest);
|
|
187
192
|
case "move":
|
|
188
193
|
case "reschedule":
|
|
189
194
|
return collectionMove(rest);
|
|
@@ -197,7 +202,7 @@ export async function cmdCollection(ctx) {
|
|
|
197
202
|
return collectionMentions(rest);
|
|
198
203
|
default:
|
|
199
204
|
throw new CliError(
|
|
200
|
-
`Unknown collection subcommand: ${sub ?? "(none)"}. Try: list, overview, new, config, delete, run, add, queue, headline, run-status, runs, approve, move, cancel, inventory, links, mentions`
|
|
205
|
+
`Unknown collection subcommand: ${sub ?? "(none)"}. Try: list, overview, new, config, delete, run, add, queue, headline, run-status, runs, approve, start, move, cancel, inventory, links, mentions`
|
|
201
206
|
);
|
|
202
207
|
}
|
|
203
208
|
}
|
|
@@ -395,6 +400,18 @@ async function collectionCancel(ctx) {
|
|
|
395
400
|
return 0;
|
|
396
401
|
}
|
|
397
402
|
|
|
403
|
+
// `collection start <run-id>` — a slot on the calendar starts writing now; it still goes live at its slot
|
|
404
|
+
// (start_collection_run, the way a letterbase's writing automation starts its slot).
|
|
405
|
+
async function collectionStart(ctx) {
|
|
406
|
+
const result = await ctx.client.callTool(
|
|
407
|
+
"start_collection_run",
|
|
408
|
+
argsFromFlags(ARGS.start_collection_run, ctx.flags, ctx.positionals)
|
|
409
|
+
);
|
|
410
|
+
ok(ctx, toolField(result, "started") ? "Started: it is being written." : "Not started yet: see its step.");
|
|
411
|
+
printResult(ctx.io, ctx.flags, result);
|
|
412
|
+
return 0;
|
|
413
|
+
}
|
|
414
|
+
|
|
398
415
|
// `collection move <run-id> --date YYYY-MM-DD` — a slot not yet written, or a written post
|
|
399
416
|
// already approved, onto another day (reschedule_collection_run).
|
|
400
417
|
async function collectionMove(ctx) {
|
package/lib/commands/domains.mjs
CHANGED
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
// letterstory domains scan "nano banana pro" ["ai headshots" …] [--tld com,org,ai] [--expand none|searches|space]
|
|
8
8
|
// letterstory domains buy nanobananaprofree.com --dry-run the price and whose account pays; buys nothing
|
|
9
9
|
// letterstory domains buy nanobananaprofree.com --yes buys it (spends money; domains:write)
|
|
10
|
-
// letterstory domains plan bestaidatalabs.com [--phrase "best ai data labs"] [--searches 880]
|
|
10
|
+
// letterstory domains plan bestaidatalabs.com [--phrase "best ai data labs"] [--searches 880] [--version comparison]
|
|
11
|
+
// [--no-write]
|
|
11
12
|
// the most strategic site for it; spends nothing
|
|
12
|
-
// letterstory domains launch bestaidatalabs.com [--phrase …] [--searches …] --yes
|
|
13
|
+
// letterstory domains launch bestaidatalabs.com [--phrase …] [--searches …] [--version …] --yes
|
|
13
14
|
// Build and Launch Site: buys it if needed, builds the
|
|
14
15
|
// plan and puts it live (spends money; domains:write)
|
|
15
16
|
|
|
@@ -42,11 +43,16 @@ export const ARGS = {
|
|
|
42
43
|
domain: { value: (flags, positionals) => stripScheme(requirePositional(positionals, 0, "domain")) },
|
|
43
44
|
phrase: { flag: "phrase" },
|
|
44
45
|
monthly_searches: { flag: "searches", type: "num" },
|
|
46
|
+
// A version other than the top score (ranked_list, comparison, directory, free_tool, templates, guide).
|
|
47
|
+
version: { flag: "version" },
|
|
48
|
+
// The scores and whether it can launch, at once: the version's own plan, no model call.
|
|
49
|
+
write: { flag: "no-write", type: "bool", invert: true },
|
|
45
50
|
},
|
|
46
51
|
launch_domain_site: {
|
|
47
52
|
domain: { value: (flags, positionals) => stripScheme(requirePositional(positionals, 0, "domain")) },
|
|
48
53
|
phrase: { flag: "phrase" },
|
|
49
54
|
monthly_searches: { flag: "searches", type: "num" },
|
|
55
|
+
version: { flag: "version" },
|
|
50
56
|
// The words of a plan already read (`domains plan … --json`'s plan.words): that plan is built as it was.
|
|
51
57
|
words: { flag: "words" },
|
|
52
58
|
},
|