@lumerahq/cli 0.22.0 → 0.22.2

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.
@@ -95,7 +95,7 @@ async function deploy(options) {
95
95
  console.log(pc.dim("Ensuring app record..."));
96
96
  await ensureAppRecord(apiUrl, token, appName, appTitle);
97
97
  console.log(pc.cyan(`Deploying ${appTitle}...`));
98
- const version = options.version || resolveVersion(dirname(distDir));
98
+ const version = options.version || process.env.LUMERA_APP_VERSION?.trim() || resolveVersion(dirname(distDir));
99
99
  console.log(pc.dim(`Version: ${version}`));
100
100
  const tarball = await createTarball(distDir);
101
101
  console.log(pc.dim(`Package: ${(tarball.length / 1024).toFixed(1)} KB`));
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  dev
3
- } from "./chunk-A55Q4P2T.js";
3
+ } from "./chunk-WV5HOQNX.js";
4
4
  import {
5
5
  syncDeps
6
6
  } from "./chunk-3ESHIPZH.js";
package/dist/index.js CHANGED
@@ -226,29 +226,29 @@ async function main() {
226
226
  switch (command) {
227
227
  // Resource commands
228
228
  case "plan":
229
- await import("./resources-W7TYJOQN.js").then((m) => m.plan(args.slice(1)));
229
+ await import("./resources-TJUKE2O3.js").then((m) => m.plan(args.slice(1)));
230
230
  break;
231
231
  case "apply":
232
- await import("./resources-W7TYJOQN.js").then((m) => m.apply(args.slice(1)));
232
+ await import("./resources-TJUKE2O3.js").then((m) => m.apply(args.slice(1)));
233
233
  break;
234
234
  case "pull":
235
- await import("./resources-W7TYJOQN.js").then((m) => m.pull(args.slice(1)));
235
+ await import("./resources-TJUKE2O3.js").then((m) => m.pull(args.slice(1)));
236
236
  break;
237
237
  case "destroy":
238
- await import("./resources-W7TYJOQN.js").then((m) => m.destroy(args.slice(1)));
238
+ await import("./resources-TJUKE2O3.js").then((m) => m.destroy(args.slice(1)));
239
239
  break;
240
240
  case "list":
241
- await import("./resources-W7TYJOQN.js").then((m) => m.list(args.slice(1)));
241
+ await import("./resources-TJUKE2O3.js").then((m) => m.list(args.slice(1)));
242
242
  break;
243
243
  case "show":
244
- await import("./resources-W7TYJOQN.js").then((m) => m.show(args.slice(1)));
244
+ await import("./resources-TJUKE2O3.js").then((m) => m.show(args.slice(1)));
245
245
  break;
246
246
  case "diff":
247
- await import("./resources-W7TYJOQN.js").then((m) => m.diff(args.slice(1)));
247
+ await import("./resources-TJUKE2O3.js").then((m) => m.diff(args.slice(1)));
248
248
  break;
249
249
  // Development
250
250
  case "dev":
251
- await import("./dev-GQKLR7AK.js").then((m) => m.dev(args.slice(1)));
251
+ await import("./dev-UTPD4MN5.js").then((m) => m.dev(args.slice(1)));
252
252
  break;
253
253
  case "run":
254
254
  await import("./run-DJXAXDD2.js").then((m) => m.run(args.slice(1)));
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  deploy
3
- } from "./chunk-A55Q4P2T.js";
3
+ } from "./chunk-WV5HOQNX.js";
4
4
  import {
5
5
  syncDeps
6
6
  } from "./chunk-3ESHIPZH.js";
@@ -3375,6 +3375,14 @@ async function apply(args) {
3375
3375
  totalErrors += await applyMailboxes(api, localMailboxes);
3376
3376
  console.log();
3377
3377
  }
3378
+ if (totalErrors > 0) {
3379
+ console.log(pc2.red(` \u2717 ${totalErrors} error${totalErrors > 1 ? "s" : ""} during apply.`));
3380
+ if (willDeployApp) {
3381
+ console.log(pc2.dim(" App deploy skipped because resource apply failed."));
3382
+ }
3383
+ console.log();
3384
+ process.exit(1);
3385
+ }
3378
3386
  if (willDeployApp) {
3379
3387
  console.log(pc2.bold(" App:"));
3380
3388
  await applyApp(args);
@@ -3382,11 +3390,6 @@ async function apply(args) {
3382
3390
  }
3383
3391
  totalCreated = creates.length;
3384
3392
  totalUpdated = updates.length;
3385
- if (totalErrors > 0) {
3386
- console.log(pc2.red(` \u2717 ${totalErrors} error${totalErrors > 1 ? "s" : ""} during apply.`));
3387
- console.log();
3388
- process.exit(1);
3389
- }
3390
3393
  const summary = [];
3391
3394
  if (totalCreated > 0) summary.push(pc2.green(`${totalCreated} created`));
3392
3395
  if (totalUpdated > 0) summary.push(pc2.yellow(`${totalUpdated} updated`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumerahq/cli",
3
- "version": "0.22.0",
3
+ "version": "0.22.2",
4
4
  "description": "CLI for building and deploying Lumera apps",
5
5
  "type": "module",
6
6
  "engines": {
@@ -4,9 +4,16 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta name="theme-color" content="#000000" />
7
+ <!--
8
+ App fonts are an identity choice, not a default. Replace the pairing
9
+ below with fonts chosen for THIS app (see the building-enterprise-apps
10
+ skill, "Typography"): a characterful UI face plus a mono face for
11
+ figures, optionally a display face for page titles. Then update the
12
+ font tokens at the top of src/styles.css to match.
13
+ -->
7
14
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
15
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
16
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400..700&display=swap" rel="stylesheet">
10
17
  <title>{{projectTitle}}</title>
11
18
  </head>
12
19
  <body>
@@ -98,15 +98,50 @@
98
98
 
99
99
  @custom-variant dark (&:is(.dark *));
100
100
 
101
+ /* ──────────────────────────────────────────────────────────────────────────
102
+ APP IDENTITY — choose, don't inherit.
103
+
104
+ The fonts and core colors in this file are placeholders, not a design.
105
+ Before building screens, commit to a visual direction for THIS app (see
106
+ the building-enterprise-apps skill: "Design Direction" and "Typography"):
107
+ pick a font pairing in index.html and set the tokens below to match, then
108
+ re-derive at minimum --primary, --accent, --ring, and the background/
109
+ foreground neutrals from the chosen direction (bias neutrals toward the
110
+ accent instead of pure gray). Shipping this file unchanged is a
111
+ non-choice — every app built that way looks identical.
112
+ ────────────────────────────────────────────────────────────────────────── */
113
+
114
+ :root {
115
+ /* UI face — replace Inter with the app's chosen face */
116
+ --font-ui: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
117
+ /* Data face — figures, amounts, and IDs render in this, with tabular numerals */
118
+ --font-data: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
119
+ /* Optional display face for page titles (often a serif); defaults to the UI face */
120
+ --font-titles: var(--font-ui);
121
+ }
122
+
123
+ @theme inline {
124
+ --font-sans: var(--font-ui);
125
+ --font-mono: var(--font-data);
126
+ --font-display: var(--font-titles);
127
+ }
128
+
101
129
  body {
102
130
  @apply m-0;
103
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
131
+ font-family: var(--font-ui);
104
132
  font-feature-settings: "cv11", "ss01";
105
133
  -webkit-font-smoothing: antialiased;
106
134
  -moz-osx-font-smoothing: grayscale;
107
135
  }
108
136
 
109
- /* Lumera brand theme + full shadcn variable set */
137
+ /* Numerals line up wherever data lives */
138
+ table,
139
+ .font-mono {
140
+ font-variant-numeric: tabular-nums;
141
+ }
142
+
143
+ /* Core identity colors (placeholder: Lumera coral on warm off-white) + the
144
+ full shadcn variable set. Keep the variable names; change the values. */
110
145
 
111
146
  :root {
112
147
  --radius: 0.75rem;
@@ -3,5 +3,5 @@
3
3
  "title": "Blank Starter",
4
4
  "description": "A minimal blank canvas with React frontend and Lumera platform scaffolding. No pre-built collections or agents — start from scratch.",
5
5
  "category": "General",
6
- "version": "1.2.0"
6
+ "version": "1.3.0"
7
7
  }