@letterstory/cli 0.108.2 → 0.109.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
@@ -60,7 +60,7 @@ import {
60
60
  } from "./commands.mjs";
61
61
 
62
62
  // Keep in sync with cli/package.json.
63
- export const VERSION = "0.108.2";
63
+ export const VERSION = "0.109.0";
64
64
 
65
65
  // Flags that never take a value. Listing them explicitly means `deploy get --json <id>`
66
66
  // can't accidentally swallow the id as --json's value. Every `type: "bool"` flag (and its
@@ -893,6 +893,7 @@ Seers (event-driven signals -> drafts):
893
893
  org export [--sections <s>…] [--file <path>] The org's whole config as one JSON bundle
894
894
  org export --split <dir> …as one file per record (for keeping config in git)
895
895
  org join <dir> [--file <path>] Rebuild the bundle from a --split directory
896
+ org integrations Every integration and whether it's connected
896
897
  org diff <file|dir> What applying a bundle would change (reads only)
897
898
  org apply <file|dir> [--dry-run] [--prune --yes] Make the org match a bundle (adds/updates; --prune deletes)
898
899
  [--allow spends,sends,destroys,access --yes] Also apply gated changes (admins; without --yes it only previews)
@@ -179,6 +179,8 @@ export const ARGS = {
179
179
  propose_primitive_plan: {
180
180
  domain: { positional: 0, label: "domain" },
181
181
  retry: { flag: "retry", type: "bool" },
182
+ // Only these primitives, as a plan recipe allows: kernel,phantom,mailer,sequence.
183
+ primitives: { flag: "primitives", type: "list" },
182
184
  },
183
185
  propose_phantom_plan: {
184
186
  client_domain: { positional: 0, label: "client-domain" },
@@ -26,6 +26,7 @@ export const ARGS = {
26
26
  confirm: { flag: "confirm" },
27
27
  },
28
28
  get_org_config_source: {},
29
+ list_integrations: {},
29
30
  connect_org_config_source: {
30
31
  repo: { positional: 0, label: "owner/name" },
31
32
  branch: { flag: "branch" },
@@ -53,11 +54,27 @@ export async function cmdOrg(ctx) {
53
54
  return orgApply(rest);
54
55
  case "git":
55
56
  return orgGit(rest);
57
+ case "integrations":
58
+ return orgIntegrations(rest);
56
59
  default:
57
- throw new CliError(`Unknown org subcommand: ${sub ?? "(none)"}. Try: export, join, diff, apply, git`);
60
+ throw new CliError(
61
+ `Unknown org subcommand: ${sub ?? "(none)"}. Try: export, join, diff, apply, git, integrations`
62
+ );
58
63
  }
59
64
  }
60
65
 
66
+ /** `org integrations`: every integration and whether it's connected (list_integrations). */
67
+ async function orgIntegrations(ctx) {
68
+ const { client, flags, io } = ctx;
69
+ refuseUnknownFlags(ctx, {}, []);
70
+ const result = await client.callTool("list_integrations", {});
71
+ ok(ctx, result.message);
72
+ printResult(io, flags, result, (r) =>
73
+ r.integrations.map((i) => `${i.connected ? "●" : "○"} ${i.name}${i.detail ? ` (${i.detail})` : ""}`).join("\n")
74
+ );
75
+ return 0;
76
+ }
77
+
61
78
  const ROOT_FILE = "organization.json";
62
79
 
63
80
  function slug(name) {
@@ -58,6 +58,14 @@ const ARGS = {
58
58
  unfold: { flag: "unfold", type: "bool" },
59
59
  subtree: { flag: "subtree", type: "bool" },
60
60
  since: { flag: "since" },
61
+ // The ranking's top n, or "all", instead of the attention policy's short list.
62
+ focus_size: {
63
+ value: (flags) => {
64
+ const raw = flags["focus-size"];
65
+ if (raw === undefined || raw === true) return undefined;
66
+ return raw === "all" ? "all" : Number(raw);
67
+ },
68
+ },
61
69
  },
62
70
  list_competitor_sites: {
63
71
  since: { flag: "since" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letterstory/cli",
3
- "version": "0.108.2",
3
+ "version": "0.109.0",
4
4
  "description": "Spin up and manage Letterstory phantom blogs from your terminal.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",