@lunora/cli 1.0.0-alpha.75 → 1.0.0-alpha.76

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/dist/bin.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { runCli } from './packem_shared/COMMANDS-0BD3K1pb.mjs';
2
+ import { runCli } from './packem_shared/COMMANDS-DW8lQmuW.mjs';
3
3
 
4
4
  try {
5
5
  const code = await runCli();
package/dist/index.d.mts CHANGED
@@ -736,7 +736,7 @@ interface AddCommandResult {
736
736
  * sub-prompt or alias; every other value IS the registry item name applied
737
737
  * directly (`storage` → the `storage` registry item, etc.).
738
738
  */
739
- type StackFeature = "auth" | "backup" | "crons" | "email" | "presence" | "ratelimit" | "storage";
739
+ type StackFeature = "ai" | "auth" | "backup" | "browser" | "cloudflare-access" | "crons" | "email" | "flags" | "hyperdrive" | "payment" | "presence" | "queue" | "storage" | "workflow";
740
740
  /** Customize a resolved manifest before it is written (e.g. inject the chosen R2 bucket name). */
741
741
  type OfferTransformManifest = (manifest: RegistryManifest) => RegistryManifest;
742
742
  /**
@@ -792,7 +792,9 @@ interface OfferDeps {
792
792
  }) => Promise<string>;
793
793
  }
794
794
  /**
795
- * Offer the stack features (auth, email, storage, rate limiting, crons,
795
+ * Offer the stack features (ai, auth, backup, browser, cloudflare-access,
796
+ * crons, email, flags, hyperdrive, payment, presence, queue, storage,
797
+ * workflow) in ONE multi-select after a successful scaffold. Auth,
796
798
  * presence, backups) in ONE multi-select after a successful scaffold. Auth,
797
799
  * email, and storage run a follow-up prompt (provider / destination / bucket
798
800
  * name); every other feature value is applied as its registry item directly.
@@ -806,8 +808,8 @@ type Template = "analog" | "astro" | "next" | "nuxt" | "react-router" | "standal
806
808
  interface InitCommandOptions {
807
809
  /**
808
810
  * Add features non-interactively after scaffolding (the `--add` flag): a
809
- * comma-separated list of `auth | email | storage | ratelimit | crons |
810
- * presence | backup`. Bypasses the interactive multi-select and sub-prompts —
811
+ * comma-separated list of `ai | auth | backup | browser | cloudflare-access | crons | email | flags | hyperdrive | payment | presence | queue | storage | workflow`.
812
+ * Bypasses the interactive multi-select and sub-prompts —
811
813
  * each named feature is applied with its shipped defaults.
812
814
  */
813
815
  add?: string;
package/dist/index.d.ts CHANGED
@@ -736,7 +736,7 @@ interface AddCommandResult {
736
736
  * sub-prompt or alias; every other value IS the registry item name applied
737
737
  * directly (`storage` → the `storage` registry item, etc.).
738
738
  */
739
- type StackFeature = "auth" | "backup" | "crons" | "email" | "presence" | "ratelimit" | "storage";
739
+ type StackFeature = "ai" | "auth" | "backup" | "browser" | "cloudflare-access" | "crons" | "email" | "flags" | "hyperdrive" | "payment" | "presence" | "queue" | "storage" | "workflow";
740
740
  /** Customize a resolved manifest before it is written (e.g. inject the chosen R2 bucket name). */
741
741
  type OfferTransformManifest = (manifest: RegistryManifest) => RegistryManifest;
742
742
  /**
@@ -792,7 +792,9 @@ interface OfferDeps {
792
792
  }) => Promise<string>;
793
793
  }
794
794
  /**
795
- * Offer the stack features (auth, email, storage, rate limiting, crons,
795
+ * Offer the stack features (ai, auth, backup, browser, cloudflare-access,
796
+ * crons, email, flags, hyperdrive, payment, presence, queue, storage,
797
+ * workflow) in ONE multi-select after a successful scaffold. Auth,
796
798
  * presence, backups) in ONE multi-select after a successful scaffold. Auth,
797
799
  * email, and storage run a follow-up prompt (provider / destination / bucket
798
800
  * name); every other feature value is applied as its registry item directly.
@@ -806,8 +808,8 @@ type Template = "analog" | "astro" | "next" | "nuxt" | "react-router" | "standal
806
808
  interface InitCommandOptions {
807
809
  /**
808
810
  * Add features non-interactively after scaffolding (the `--add` flag): a
809
- * comma-separated list of `auth | email | storage | ratelimit | crons |
810
- * presence | backup`. Bypasses the interactive multi-select and sub-prompts —
811
+ * comma-separated list of `ai | auth | backup | browser | cloudflare-access | crons | email | flags | hyperdrive | payment | presence | queue | storage | workflow`.
812
+ * Bypasses the interactive multi-select and sub-prompts —
811
813
  * each named feature is applied with its shipped defaults.
812
814
  */
813
815
  add?: string;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { COMMANDS, VERSION, runCli } from './packem_shared/COMMANDS-0BD3K1pb.mjs';
1
+ export { COMMANDS, VERSION, runCli } from './packem_shared/COMMANDS-DW8lQmuW.mjs';
2
2
  export { runCodegenCommand } from './packem_chunks/runCodegenCommand.mjs';
3
3
  export { DEFAULT_IMPORT_BATCH_SIZE, runExportCommand, runImportCommand } from './packem_shared/DEFAULT_IMPORT_BATCH_SIZE-CRQmmBZM.mjs';
4
4
  export { runDeployCommand } from './packem_chunks/runDeployCommand.mjs';
@@ -343,13 +343,20 @@ ${LUNA_NAME}: ${LUNA_SIGNOFF}`);
343
343
  };
344
344
 
345
345
  const STACK_FEATURE_OPTIONS = [
346
+ { description: "LLMs via Workers AI (summarize, generate, stream)", label: "AI", value: "ai" },
346
347
  { description: "Sign-up / sign-in (asks which provider)", label: "Authentication", value: "auth" },
347
- { description: "Cloudflare Email Workers + a dev mail catcher", label: "Transactional email", value: "email" },
348
- { description: "Typed R2 buckets + signed URLs (@lunora/storage)", label: "File storage", value: "storage" },
349
- { description: "Token-bucket / sliding-window limits (@lunora/ratelimit)", label: "Rate limiting", value: "ratelimit" },
348
+ { description: "Snapshot + restore your Durable Object data", label: "Backups", value: "backup" },
349
+ { description: "Headless browser screenshots + PDFs", label: "Browser rendering", value: "browser" },
350
+ { description: "Zero Trust identity via Cloudflare Access", label: "Cloudflare Access", value: "cloudflare-access" },
350
351
  { description: "Scheduled jobs via Cron Triggers (@lunora/scheduler)", label: "Cron jobs", value: "crons" },
352
+ { description: "Cloudflare Email Workers + a dev mail catcher", label: "Transactional email", value: "email" },
353
+ { description: "OpenFeature feature flags (ctx.flags)", label: "Feature flags", value: "flags" },
354
+ { description: "External Postgres/MySQL via Hyperdrive", label: "Hyperdrive", value: "hyperdrive" },
355
+ { description: "Stripe-first payments (checkout, subscription, webhooks)", label: "Payments", value: "payment" },
351
356
  { description: "Live presence / who's-online over hibernated WebSockets", label: "Presence", value: "presence" },
352
- { description: "Snapshot + restore your Durable Object data", label: "Backups", value: "backup" }
357
+ { description: "Async message queues (push/pull consumers)", label: "Queues", value: "queue" },
358
+ { description: "Typed R2 buckets + signed URLs (@lunora/storage)", label: "File storage", value: "storage" },
359
+ { description: "Durable long-running workflows (step.do, sleep, branch)", label: "Workflows", value: "workflow" }
353
360
  ];
354
361
  const STACK_FEATURE_VALUES = STACK_FEATURE_OPTIONS.map((option) => option.value);
355
362
  const featureItem = (feature) => feature === "email" ? EMAIL_ITEM : feature;
@@ -401,7 +408,10 @@ const offerRegistryExtras = async (deps) => {
401
408
  return;
402
409
  }
403
410
  if (!deps.interactive) {
404
- deps.logger.info("tip: add features later with `lunora add <auth|email|storage|ratelimit|crons|presence|backup>`.");
411
+ deps.logger.info(
412
+ // eslint-disable-next-line no-secrets/no-secrets -- the pipe-separated feature list in this tip is a UI prompt, not a credential
413
+ "tip: add features later with `lunora add <ai|auth|backup|browser|cloudflare-access|crons|email|flags|hyperdrive|payment|presence|queue|storage|workflow>`."
414
+ );
405
415
  return;
406
416
  }
407
417
  const picked = await deps.multiSelect("Which features do you want to add?", STACK_FEATURE_OPTIONS, { defaults: [] });
@@ -10,8 +10,12 @@ import { tmpdir } from 'node:os';
10
10
  import { join } from 'node:path';
11
11
 
12
12
  const addCommand = {
13
- argument: { description: "Feature or registry item: auth | email | storage | crons | presence | ratelimit | backup | …", name: "feature", type: String },
14
- description: "Add a feature or registry item (auth, email, storage, crons, …) to the current Lunora project",
13
+ argument: {
14
+ description: "Feature or registry item: ai | auth | email | storage | crons | presence | queue | workflow | flags | backup | …",
15
+ name: "feature",
16
+ type: String
17
+ },
18
+ description: "Add a feature or registry item (ai, auth, email, storage, crons, …) to the current Lunora project",
15
19
  examples: [
16
20
  ["lunora add auth", "Add authentication (asks which provider)"],
17
21
  ["lunora add auth --provider clerk", "Add Clerk auth without prompting"],
@@ -446,7 +450,7 @@ const initCommand = {
446
450
  type: String
447
451
  },
448
452
  {
449
- description: "Add features non-interactively after scaffolding (comma-separated): auth | email | storage | ratelimit | crons | presence | backup",
453
+ description: "Add features non-interactively after scaffolding (comma-separated): ai | auth | backup | browser | cloudflare-access | crons | email | flags | hyperdrive | payment | presence | queue | storage | workflow",
450
454
  name: "add",
451
455
  type: String
452
456
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/cli",
3
- "version": "1.0.0-alpha.75",
3
+ "version": "1.0.0-alpha.76",
4
4
  "description": "The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands",
5
5
  "keywords": [
6
6
  "agent-skills",