@letterstory/cli 0.134.1 → 0.135.0

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 CHANGED
@@ -62,7 +62,7 @@ import {
62
62
  } from "./commands.mjs";
63
63
 
64
64
  // Keep in sync with cli/package.json.
65
- export const VERSION = "0.134.1";
65
+ export const VERSION = "0.135.0";
66
66
 
67
67
  // Flags that never take a value. Listing them explicitly means `deploy get --json <id>`
68
68
  // can't accidentally swallow the id as --json's value. Every `type: "bool"` flag (and its
@@ -1372,11 +1372,13 @@ Repo changes (Claude Code edits your repo in a sandbox; the Letterstory GitHub A
1372
1372
  [--branch <base>] [--attach <path>]... [--attach-url <name>=<https url>]...
1373
1373
  [--attach-ref <path>]... [--attach-url-ref <name>=<https url>]...
1374
1374
  [--action build|build_pr|build_merge|slack|linear] [--with-preview]
1375
- [--harness claude-code|letterpress-1] [--wait]
1375
+ [--harness claude-code|letterpress-1] [--verifier|--no-verifier] [--wait]
1376
1376
  Start a change (attached files go to the sandbox;
1377
1377
  -ref ones are context, never put in the repo);
1378
1378
  --with-preview keeps a preview up next to the PR;
1379
1379
  --harness picks the coding agent (default: the deployment's);
1380
+ --verifier reviews the change and has the agent fix
1381
+ what's blocking before it goes out;
1380
1382
  --wait follows it to the PR
1381
1383
  repo fix-audit --issue <issue-type>... [--audit <id>] [--branch <base>] [--action build|build_pr|build_merge|slack|linear] [--wait]
1382
1384
  One PR fixing site-audit issues (repeat --issue to bundle) on every affected page,
@@ -110,6 +110,10 @@ export const ARGS = {
110
110
  ...fields,
111
111
  },
112
112
  list_generator_starters: {},
113
+ write_generator_steps: {
114
+ generator_id: { positional: 0, label: "enclosure-id", required: true },
115
+ prospect_id: "prospect",
116
+ },
113
117
  get_generator_version: {
114
118
  generator_id: { positional: 0, label: "enclosure-id", required: true },
115
119
  version: { value: (_flags, positionals) => Number(requirePositional(positionals, 1, "version")) },
@@ -177,6 +181,7 @@ const USAGE = `Usage: enclosures <list|show|create|update|prints>
177
181
  enclosures prints <enclosure-id> [--status done|failed|no_fit|…] [--limit <n>]
178
182
  enclosures starters
179
183
  enclosures create --starter site_audit --login <app-id> Begin from a starter (its version 1 included)
184
+ enclosures write-steps <enclosure-id> [--prospect <id>] Claude Code writes its steps from its description
180
185
  enclosures version <enclosure-id> <n> One version in full: its steps and the script prints replay
181
186
  enclosures add-version <enclosure-id> (--script <code>|--script-file <path>) --step <text>… [--host <h>…] [--summary <s>]
182
187
  enclosures approve <enclosure-id> --version <n>
@@ -208,6 +213,8 @@ export async function cmdEnclosures(ctx) {
208
213
  return enclosuresStarters(rest);
209
214
  case "version":
210
215
  return enclosuresVersion(rest);
216
+ case "write-steps":
217
+ return enclosuresWriteSteps(rest);
211
218
  case "add-version":
212
219
  return enclosuresAddVersion(rest);
213
220
  case "approve":
@@ -353,6 +360,18 @@ async function enclosuresStarters(ctx) {
353
360
  return 0;
354
361
  }
355
362
 
363
+ async function enclosuresWriteSteps(ctx) {
364
+ const { client, flags, positionals, io } = ctx;
365
+ refuseUnknownFlags(ctx, ARGS.write_generator_steps, []);
366
+ const result = await client.callTool(
367
+ "write_generator_steps",
368
+ argsFromFlags(ARGS.write_generator_steps, flags, positionals)
369
+ );
370
+ ok(ctx, "Claude Code is writing the steps. It takes a few minutes: watch it with `enclosures show`.");
371
+ printResult(io, flags, result, (r) => `run ${r.run.id} (${r.run.phase}), budget $${r.run.budget_usd}`);
372
+ return 0;
373
+ }
374
+
356
375
  async function enclosuresVersion(ctx) {
357
376
  const { client, flags, positionals, io } = ctx;
358
377
  refuseUnknownFlags(ctx, ARGS.get_generator_version, []);
@@ -68,6 +68,8 @@ const ARGS = {
68
68
  with_preview: { flag: "with-preview", type: "bool" },
69
69
  // --harness claude-code|letterpress-1: the coding agent; omitted, the deployment's default.
70
70
  harness: { flag: "harness", enum: ["claude-code", "letterpress-1"] },
71
+ // --verifier / --no-verifier: review the change before it goes out; omitted, the deployment's choice.
72
+ verifier: { value: (flags) => (flags["no-verifier"] ? false : flags.verifier ? true : undefined) },
71
73
  },
72
74
  create_repo_change_upload: { file_names: { internal: "the basenames of the --attach files" } },
73
75
  list_repo_sites: {},
@@ -341,6 +343,8 @@ async function repoStart(ctx) {
341
343
  "preview",
342
344
  "with-preview",
343
345
  "harness",
346
+ "verifier",
347
+ "no-verifier",
344
348
  "wait",
345
349
  ]);
346
350
  // One upload for every file (names must be unique across both), then the references marked.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letterstory/cli",
3
- "version": "0.134.1",
3
+ "version": "0.135.0",
4
4
  "description": "Spin up and manage Letterstory phantom blogs from your terminal.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",