@letterstory/cli 0.177.15 → 0.177.17
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/deploy.mjs +13 -2
- 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.17";
|
|
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
|
@@ -5141,12 +5141,14 @@ const RECIPE_FILE_FIELDS = [
|
|
|
5141
5141
|
"tool_access",
|
|
5142
5142
|
"primitives_access",
|
|
5143
5143
|
"immediate",
|
|
5144
|
+
// Whether its row must name what it acts on (2026-11-11); left out here, an export would drop it.
|
|
5145
|
+
"names_subject",
|
|
5144
5146
|
"status",
|
|
5145
5147
|
"needs",
|
|
5146
5148
|
"variations",
|
|
5147
5149
|
];
|
|
5148
5150
|
const RECIPES_USAGE =
|
|
5149
|
-
"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] [--status live|parked] [--needs <what a parked recipe is missing>] | delete <id> --yes";
|
|
5151
|
+
"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] [--status live|parked] [--needs <what a parked recipe is missing>] | delete <id> --yes";
|
|
5150
5152
|
|
|
5151
5153
|
const recipeForFile = (r) => Object.fromEntries(RECIPE_FILE_FIELDS.map((k) => [k, r[k]]));
|
|
5152
5154
|
|
|
@@ -5196,6 +5198,7 @@ function recipeDetail(r) {
|
|
|
5196
5198
|
: r.primitives_access
|
|
5197
5199
|
? [" letter's tools: its build may read the account through them (primitives_access)"]
|
|
5198
5200
|
: []),
|
|
5201
|
+
...(r.names_subject ? [" title: names what it acts on, or it is a no (names_subject)"] : []),
|
|
5199
5202
|
...(variations.length > 1
|
|
5200
5203
|
? variations.flatMap((v, i) => [` variation ${i + 1}: ${v.name}`, ...fields(v, " ")])
|
|
5201
5204
|
: fields(r, " ")),
|
|
@@ -5250,6 +5253,8 @@ function recipeFromFlags(flags) {
|
|
|
5250
5253
|
flags["primitives-access"] === undefined ? undefined : String(flags["primitives-access"]) === "true",
|
|
5251
5254
|
// --immediate is accepted for old scripts and read by nothing: a quick row is one whose runs is empty.
|
|
5252
5255
|
immediate: flags.immediate === undefined ? undefined : String(flags.immediate) === "true",
|
|
5256
|
+
// --names-subject true: its row names what it acts on, or is a no; false: it may keep its general name.
|
|
5257
|
+
names_subject: flags["names-subject"] === undefined ? undefined : String(flags["names-subject"]) === "true",
|
|
5253
5258
|
// --reads llms_txt,github declares the facts its conditions rest on; --reads "" clears them.
|
|
5254
5259
|
reads: flagStr(flags.reads)
|
|
5255
5260
|
?.split(",")
|
package/lib/commands/deploy.mjs
CHANGED
|
@@ -123,9 +123,20 @@ export async function cmdDeploy(ctx) {
|
|
|
123
123
|
case "advance":
|
|
124
124
|
refuseUnknownFlags(rest, ARGS.advance_deployment, []);
|
|
125
125
|
return deployShow(rest, await call(rest, "advance_deployment"));
|
|
126
|
-
case "page":
|
|
126
|
+
case "page": {
|
|
127
127
|
refuseUnknownFlags(rest, ARGS.add_deployment_page, []);
|
|
128
|
-
|
|
128
|
+
const result = await call(rest, "add_deployment_page");
|
|
129
|
+
if (result?.app) return deployShow(rest, result);
|
|
130
|
+
// A phantom moved to code answers with the phantom, not an app.
|
|
131
|
+
printResult(
|
|
132
|
+
rest.io,
|
|
133
|
+
rest.flags,
|
|
134
|
+
result,
|
|
135
|
+
(r) =>
|
|
136
|
+
`${r.phantom?.name ?? "The site"}: adding a landing page\n Run ${r.run_id} (repo show ${r.run_id})`
|
|
137
|
+
);
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
129
140
|
case "connect":
|
|
130
141
|
return deployShow(rest, await call(rest, "connect_deployment_repo"));
|
|
131
142
|
case "source": {
|