@letterstory/cli 0.177.41 → 0.177.42
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 +1 -1
- package/lib/commands/admin.mjs +6 -1
- package/lib/commands/build.mjs +3 -0
- package/package.json +1 -1
package/lib/cli.mjs
CHANGED
|
@@ -88,7 +88,7 @@ import {
|
|
|
88
88
|
import { fetchParkedSections, withoutParked } from "./parked.mjs";
|
|
89
89
|
|
|
90
90
|
// Matches cli/package.json; publish-cli.yml rewrites both to the published version.
|
|
91
|
-
export const VERSION = "0.177.
|
|
91
|
+
export const VERSION = "0.177.42";
|
|
92
92
|
|
|
93
93
|
/** The exit code for a gate refusal (CARD_REQUIRED, PAYMENT_FAILED, OUT_OF_TOKENS): 1 is a plain error. */
|
|
94
94
|
export const EXIT_PAYMENT_REQUIRED = 3;
|
package/lib/commands/admin.mjs
CHANGED
|
@@ -5179,6 +5179,8 @@ const RECIPE_FILE_FIELDS = [
|
|
|
5179
5179
|
"immediate",
|
|
5180
5180
|
// Whether its row must name what it acts on (2026-11-11); left out here, an export would drop it.
|
|
5181
5181
|
"names_subject",
|
|
5182
|
+
// A row per thing the account has, not one (2026-11-13); left out here, an export would drop it.
|
|
5183
|
+
"repeats",
|
|
5182
5184
|
// Where its row shows: ideas or fix (a deficit, 2026-11-13); left out here, an export would drop it.
|
|
5183
5185
|
"shows_in",
|
|
5184
5186
|
"status",
|
|
@@ -5186,7 +5188,7 @@ const RECIPE_FILE_FIELDS = [
|
|
|
5186
5188
|
"variations",
|
|
5187
5189
|
];
|
|
5188
5190
|
const RECIPES_USAGE =
|
|
5189
|
-
"Usage: admin recipes list [--kind recipe|known_issue] [--status live|parked] [--approach seo|geo|agent_conviction|inbound_conversion|outbound|other] | show <id|name> | runs <id|name> [--days 1..90] [--limit n] | vocab | stats | export [--out <file>] | import <file> [--dry-run] | refit [--org <id>,…] [--recipe <id|name>] [--limit n] | save [<id>] [--file <recipe.json>] [--kind recipe|known_issue] [--name …] [--description …] [--recipe …] [--when-to-use …] [--when-not-to-use …] [--weight 1..10] [--approaches seo,geo,…] [--reads llms_txt,github,…] [--runs <catalog action id>] [--primitives-access true|false] [--immediate true|false] [--names-subject true|false] [--shows-in ideas|fix] [--status live|parked] [--needs <what a parked recipe is missing>] | delete <id> --yes";
|
|
5191
|
+
"Usage: admin recipes list [--kind recipe|known_issue] [--status live|parked] [--approach seo|geo|agent_conviction|inbound_conversion|outbound|other] | show <id|name> | runs <id|name> [--days 1..90] [--limit n] | vocab | stats | export [--out <file>] | import <file> [--dry-run] | refit [--org <id>,…] [--recipe <id|name>] [--limit n] | save [<id>] [--file <recipe.json>] [--kind recipe|known_issue] [--name …] [--description …] [--recipe …] [--when-to-use …] [--when-not-to-use …] [--weight 1..10] [--approaches seo,geo,…] [--reads llms_txt,github,…] [--runs <catalog action id>] [--primitives-access true|false] [--immediate true|false] [--names-subject true|false] [--repeats true|false] [--shows-in ideas|fix] [--status live|parked] [--needs <what a parked recipe is missing>] | delete <id> --yes";
|
|
5190
5192
|
|
|
5191
5193
|
const recipeForFile = (r) => Object.fromEntries(RECIPE_FILE_FIELDS.map((k) => [k, r[k]]));
|
|
5192
5194
|
|
|
@@ -5237,6 +5239,7 @@ function recipeDetail(r) {
|
|
|
5237
5239
|
? [" letter's tools: its build may read the account through them (primitives_access)"]
|
|
5238
5240
|
: []),
|
|
5239
5241
|
...(r.names_subject ? [" title: names what it acts on, or it is a no (names_subject)"] : []),
|
|
5242
|
+
...(r.repeats ? [" rows: one per thing the account has, up to 4 (repeats)"] : []),
|
|
5240
5243
|
...(r.shows_in === "fix" ? [" shows in: Fix, as a deficit (shows_in)"] : []),
|
|
5241
5244
|
...(variations.length > 1
|
|
5242
5245
|
? variations.flatMap((v, i) => [` variation ${i + 1}: ${v.name}`, ...fields(v, " ")])
|
|
@@ -5294,6 +5297,8 @@ function recipeFromFlags(flags) {
|
|
|
5294
5297
|
immediate: flags.immediate === undefined ? undefined : String(flags.immediate) === "true",
|
|
5295
5298
|
// --names-subject true: its row names what it acts on, or is a no; false: it may keep its general name.
|
|
5296
5299
|
names_subject: flags["names-subject"] === undefined ? undefined : String(flags["names-subject"]) === "true",
|
|
5300
|
+
// --repeats true: a row per thing the account has (a comparison per rival), up to 4; false: one row.
|
|
5301
|
+
repeats: flags.repeats === undefined ? undefined : String(flags.repeats) === "true",
|
|
5297
5302
|
// --shows-in fix: its row is a deficit, in Fix's Deficits; ideas (the default): a thing to build, on Ideas.
|
|
5298
5303
|
shows_in: flagStr(flags["shows-in"]),
|
|
5299
5304
|
// --reads llms_txt,github declares the facts its conditions rest on; --reads "" clears them.
|
package/lib/commands/build.mjs
CHANGED
|
@@ -84,6 +84,8 @@ const ARGS = {
|
|
|
84
84
|
recipe: "recipe",
|
|
85
85
|
// Preserve the account-specific task selected by the Plan.
|
|
86
86
|
fit_run: "fit-run",
|
|
87
|
+
// --instance <n>: which of a repeating recipe's rows (recipe:<id>~<n>), from 2; omitted: the recipe's own.
|
|
88
|
+
instance: { flag: "instance", type: "num" },
|
|
87
89
|
// --plan-action <id>: a Plan row's account action started as an Idea (blog:post, outbound:campaign, …).
|
|
88
90
|
action: "plan-action",
|
|
89
91
|
// --accepted-quote '<json>': the price the Ideas row showed, echoed to accept what it buys.
|
|
@@ -274,6 +276,7 @@ async function buildStart(ctx) {
|
|
|
274
276
|
"subject",
|
|
275
277
|
"recipe",
|
|
276
278
|
"fit-run",
|
|
279
|
+
"instance",
|
|
277
280
|
"plan-action",
|
|
278
281
|
"accepted-quote",
|
|
279
282
|
"action",
|