@lumerahq/cli 0.19.11 → 0.19.13

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/index.js CHANGED
@@ -248,7 +248,7 @@ async function main() {
248
248
  break;
249
249
  // Project
250
250
  case "init":
251
- await import("./init-QCNR4ULM.js").then((m) => m.init(args.slice(1)));
251
+ await import("./init-KJOWD2KQ.js").then((m) => m.init(args.slice(1)));
252
252
  break;
253
253
  case "register":
254
254
  await import("./register-QBRKXWNX.js").then((m) => m.register(args.slice(1)));
@@ -25,7 +25,7 @@ init_auth();
25
25
  import pc from "picocolors";
26
26
  import prompts from "prompts";
27
27
  import { execSync } from "child_process";
28
- import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, readlinkSync, symlinkSync } from "fs";
28
+ import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync, readlinkSync, symlinkSync } from "fs";
29
29
  import { join, resolve } from "path";
30
30
  function toTitleCase(str) {
31
31
  return str.split(/[-_]/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
@@ -41,6 +41,7 @@ function processTemplate(content, replacements) {
41
41
  }
42
42
  var TEMPLATE_EXCLUDE = /* @__PURE__ */ new Set(["template.json"]);
43
43
  var TEMPLATE_RENAMES = /* @__PURE__ */ new Map([["_gitignore", ".gitignore"]]);
44
+ var TEMPLATE_RAW_COPY = /* @__PURE__ */ new Set(["pnpm-lock.yaml"]);
44
45
  function copyDir(src, dest, replacements, isRoot = true) {
45
46
  if (!existsSync(dest)) {
46
47
  mkdirSync(dest, { recursive: true });
@@ -60,6 +61,10 @@ function copyDir(src, dest, replacements, isRoot = true) {
60
61
  } else if (entry.isDirectory()) {
61
62
  copyDir(srcPath, destPath, replacements, false);
62
63
  } else {
64
+ if (TEMPLATE_RAW_COPY.has(entry.name)) {
65
+ copyFileSync(srcPath, destPath);
66
+ continue;
67
+ }
63
68
  const content = readFileSync(srcPath, "utf-8");
64
69
  const processed = processTemplate(content, replacements);
65
70
  writeFileSync(destPath, processed);
@@ -363,6 +368,7 @@ async function init(args) {
363
368
  ];
364
369
  copyDir(templateDir, targetDir, replacements);
365
370
  ensureClaudeInstructionsLink(targetDir);
371
+ const installCommand = existsSync(join(targetDir, "pnpm-lock.yaml")) ? "pnpm install --frozen-lockfile" : "pnpm install";
366
372
  function listFiles(dir, prefix = "") {
367
373
  for (const entry of readdirSync(dir, { withFileTypes: true })) {
368
374
  const relativePath = prefix + entry.name;
@@ -405,7 +411,7 @@ async function init(args) {
405
411
  if (opts.install) {
406
412
  const stopInstall = spinner("Installing dependencies...");
407
413
  try {
408
- execSync("pnpm install", { cwd: targetDir, stdio: "ignore" });
414
+ execSync(installCommand, { cwd: targetDir, stdio: "ignore" });
409
415
  stopInstall(pc.green("\u2713") + pc.dim(" Dependencies installed"));
410
416
  } catch {
411
417
  stopInstall(pc.yellow("\u26A0") + pc.dim(" Failed to install dependencies"));
@@ -453,7 +459,7 @@ async function init(args) {
453
459
  console.log();
454
460
  console.log(pc.cyan(` cd ${finalDirectory}`));
455
461
  if (!opts.install) {
456
- console.log(pc.cyan(" pnpm install"));
462
+ console.log(pc.cyan(` ${installCommand}`));
457
463
  }
458
464
  if (!registered) {
459
465
  console.log(pc.cyan(" lumera login"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumerahq/cli",
3
- "version": "0.19.11",
3
+ "version": "0.19.13",
4
4
  "description": "CLI for building and deploying Lumera apps",
5
5
  "type": "module",
6
6
  "engines": {
@@ -17,6 +17,12 @@ src/
17
17
  scripts/ # Utility scripts (seed data, migrations, etc.)
18
18
  ```
19
19
 
20
+ The starter UI is intentionally throwaway. `src/routes/index.tsx` is just the
21
+ default landing page shown before the real app exists, and `index.html` is only
22
+ the Vite shell. When building the user's first real workflow or screen, replace
23
+ the starter home page with the app experience instead of preserving or building
24
+ around the placeholder content.
25
+
20
26
  ## Lumera Concepts
21
27
 
22
28
  A Lumera app is built from these primitives — all defined as code in `platform/`:
@@ -49,11 +55,11 @@ For detailed technical reference (data models, relationships, design decisions),
49
55
 
50
56
  ### Installing components
51
57
 
52
- Install shadcn components with `pnpm dlx` (the sandbox's default JS package manager):
58
+ Install shadcn components with `pnpm dlx` (the sandbox's default JS package manager). Match the sandbox-pinned shadcn version:
53
59
 
54
60
  ```bash
55
- pnpm dlx shadcn@latest add button card dialog # Install specific components
56
- pnpm dlx shadcn@latest add table input label select # Install more as needed
61
+ pnpm dlx shadcn@4.1.2 add button card dialog # Install specific components
62
+ pnpm dlx shadcn@4.1.2 add table input label select # Install more as needed
57
63
  ```
58
64
 
59
65
  Components install into `src/components/ui/` and are fully editable.
@@ -122,6 +128,17 @@ const invoiceLink = buildShareableAppUrl('/invoices/123', { router: 'hash' });
122
128
 
123
129
  When reporting a deployed app, use `launch_url` or `url` from the deploy response. Do not share `iframe_url`; it is only the internal iframe/static asset mount.
124
130
 
131
+ ## Preview and Verification
132
+
133
+ The Studio environment already runs the Vite dev server and exposes it through
134
+ the portal's **Preview tab**. Users are not expected to run local developer
135
+ commands, and raw localhost URLs are not reachable from the Studio portal.
136
+
137
+ **Never tell users to run `pnpm dev`, `pnpm dev:vite`, `npm run dev`, or any
138
+ other dev-server command. Never tell users to open `localhost`, `127.0.0.1`, or
139
+ Vite ports such as `http://localhost:5173/`.** When explaining how to verify UI
140
+ changes, tell them to open the **Preview tab**.
141
+
125
142
 
126
143
  ## Workflow
127
144
 
@@ -134,7 +151,7 @@ Follow the user's lead. If they tell you exactly what to build, build it. The wo
134
151
 
135
152
  ### Step 2: Build (one slice at a time)
136
153
  4. **Build horizontally** — Pick the first step. Build the full slice: collection schema → `lumera apply` → seed data → UI route/components → commit. Each slice should be deployable and usable on its own.
137
- 5. **Stop and ask for feedback** — Tell the user to open the **Preview tab** to see the app. The dev server starts automatically you do NOT need to run `pnpm dev` or start any server. Iterate on the slice until they're happy.
154
+ 5. **Stop and ask for feedback** — Tell the user to open the **Preview tab** to see the app. Do not mention local dev-server commands or localhost URLs. Iterate on the slice until they're happy.
138
155
  6. **Repeat** — Move to the next step. Build, deploy, get feedback.
139
156
 
140
157
  ### Rules
@@ -1,6 +1,5 @@
1
1
  node_modules
2
2
  dist
3
- pnpm-lock.yaml
4
3
  .env
5
4
  .env.local
6
5
  *.local
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
@@ -24,29 +24,26 @@
24
24
  "check:ci": "biome check . && tsr generate && tsc --noEmit"
25
25
  },
26
26
  "dependencies": {
27
- "@lumerahq/ui": "^0.7.6",
27
+ "@lumerahq/ui": "^0.9.1",
28
28
  "@tanstack/react-query": "^5.90.11",
29
29
  "@tanstack/react-router": "1.155.0",
30
- "@tanstack/router-plugin": "1.155.0",
31
- "class-variance-authority": "^0.7.1",
32
30
  "clsx": "^2.1.1",
33
31
  "lucide-react": "^1.7.0",
34
- "radix-ui": "^1.4.3",
35
- "shadcn": "^4.1.2",
36
32
  "tailwind-merge": "^3.4.0",
37
- "tw-animate-css": "^1.4.0",
38
33
  "react": "^19.2.0",
39
34
  "react-dom": "^19.2.0",
40
- "sonner": "^2.0.7",
41
- "tailwindcss": "^4.2.2"
35
+ "sonner": "^2.0.7"
42
36
  },
43
37
  "devDependencies": {
44
38
  "@biomejs/biome": "^2.4.10",
45
39
  "@tailwindcss/vite": "^4.2.2",
46
40
  "@tanstack/router-cli": "1.155.0",
41
+ "@tanstack/router-plugin": "1.155.0",
47
42
  "@types/react": "^19.2.14",
48
43
  "@types/react-dom": "^19.2.3",
49
44
  "@vitejs/plugin-react": "^6.0.1",
45
+ "tailwindcss": "^4.2.2",
46
+ "tw-animate-css": "^1.4.0",
50
47
  "typescript": "^6.0.2",
51
48
  "vite": "^8.0.3"
52
49
  }