showpane 0.4.4 → 0.4.5

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.
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-04-09T13:24:17.013Z",
4
- "scaffoldVersion": "0.2.1",
3
+ "generatedAt": "2026-04-09T14:11:15.147Z",
4
+ "scaffoldVersion": "0.2.2",
5
5
  "files": {
6
6
  ".env.example": "0dd692f1c7e6bcabdf5dbdfe9abb73797d79d8e90da150d6098b63ddc695dc29",
7
7
  ".gitignore": "998e5f43865ea56ac79a05acfd5d4b0d696f310bd5325a1ed458c3d40154d437",
8
- "VERSION": "71015c979ccb0fc8a0be7ca0ae83046ab045cdc2c8faa09fb2f0f7e440f9b4a6",
8
+ "VERSION": "998f6b887ed7a6ef44e84210d0237b715bed42ea7254f48dc418afec0a484103",
9
9
  "docker-compose.yml": "420fd123da019c22f03662933537e24779b4c2c91f90c23abfec5965cd0f35ce",
10
10
  "docker/Caddyfile": "d9c58086986795f5b3e42ff9b5942e60b8df946a1a0c40351381616c0b4d2bed",
11
11
  "docker/Dockerfile": "340470e3735ea53b2c03003a13a91361652291add33c40a2bf13e6af2a8cb73a",
@@ -47,7 +47,7 @@
47
47
  "src/app/api/health/route.ts": "78fff55707372ce0cd6e9e49ef4f049622bc43cc42916d3f83e0162409d678b1",
48
48
  "src/app/globals.css": "28dcda76006d0e6af01b6dcf1a315dc5b5b6931c880fc53fd6565ff09d5dd13a",
49
49
  "src/app/layout.tsx": "c17aabeb2b486f023e777230343ace6cc06840f641a10b9dd9f65e092018f82f",
50
- "src/app/page.tsx": "1c48a37632621373db7730756aacde708e29d6f1bd14062b63736fe8057ce842",
50
+ "src/app/page.tsx": "df6abc817e751782df1f59ed770d6e0b47d3a24ea4ad3682485680bdf71845f8",
51
51
  "src/components/copy-button.tsx": "2f3d1d8a6a0a570c8d78e19c3c15519c44af17b5d8893ae5a5f57db5ecce7077",
52
52
  "src/components/portal-login.tsx": "8b0d91bb28674e1102fd2e5b5ddcc3a93755dd806fbd3d1b2dbea2646cffca5e",
53
53
  "src/components/portal-shell.tsx": "a4e16e118ef93f79e71fb69e80f1fac6e6fff90f0fbdacdf8deb821a57656877",
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -16,9 +16,9 @@ const PROMPT_EXAMPLES = [
16
16
  export default async function Home() {
17
17
  let portalCount = 0;
18
18
  const showpaneBinDir = path.join(os.homedir(), ".showpane", "bin");
19
- const resumeCommand = (process.env.PATH ?? "").split(path.delimiter).includes(showpaneBinDir)
20
- ? "showpane claude"
21
- : "npx showpane claude";
19
+ const prefersCanonicalCommand = (process.env.PATH ?? "").split(path.delimiter).includes(showpaneBinDir);
20
+ const primaryCommand = "showpane claude";
21
+ const fallbackCommand = "npx showpane claude";
22
22
  try {
23
23
  if (isRuntimeSnapshotMode()) {
24
24
  const state = await getRuntimeState();
@@ -46,7 +46,7 @@ export default async function Home() {
46
46
  Your Showpane workspace is ready
47
47
  </h1>
48
48
  <p className="mt-4 max-w-2xl text-base leading-7 text-white/82 sm:text-lg">
49
- Open Claude in your Showpane workspace and create your first client portal.
49
+ Open a new terminal window, run Showpane with Claude, and create your first client portal.
50
50
  </p>
51
51
  </div>
52
52
  </div>
@@ -61,15 +61,21 @@ export default async function Home() {
61
61
  Start with Claude
62
62
  </div>
63
63
  <p className="mt-3 text-sm leading-6 text-white/72">
64
- This opens Claude in the right Showpane workspace so you can start creating portals immediately.
64
+ Open a new terminal window and run this command there. Your current terminal is running the local app, so this command belongs in a fresh one.
65
65
  </p>
66
+ {!prefersCanonicalCommand && (
67
+ <p className="mt-2 text-xs leading-5 text-white/60">
68
+ If <code className="font-mono text-white">{primaryCommand}</code> isn&apos;t available in your shell yet, use{" "}
69
+ <code className="font-mono text-white">{fallbackCommand}</code>.
70
+ </p>
71
+ )}
66
72
  </div>
67
- <CopyButton text={resumeCommand} invert />
73
+ <CopyButton text={primaryCommand} invert />
68
74
  </div>
69
75
 
70
76
  <div className="mt-5 rounded-2xl border border-white/10 bg-white/5 p-4">
71
77
  <code className="block overflow-x-auto font-mono text-sm text-white sm:text-[15px]">
72
- {resumeCommand}
78
+ {primaryCommand}
73
79
  </code>
74
80
  </div>
75
81
  </section>
@@ -1 +1 @@
1
- 1.1.1 (requires app >= 0.2.1)
1
+ 1.1.2 (requires app >= 0.2.2)
package/dist/index.js CHANGED
@@ -331,6 +331,18 @@ function stepFailure(label, errorLike, hint) {
331
331
  }
332
332
  process.exit(1);
333
333
  }
334
+ function shouldUseSpinner(verbose) {
335
+ return process.stdout.isTTY && !verbose;
336
+ }
337
+ function stepStartForCreate(label, options) {
338
+ stepStart(label, shouldUseSpinner(options.verbose));
339
+ }
340
+ function stepSuccessForCreate(label) {
341
+ stepSuccess(label);
342
+ }
343
+ function stepFailureForCreate(label, errorLike, hint) {
344
+ stepFailure(label, errorLike, hint);
345
+ }
334
346
  function attachSpinnerCleanup() {
335
347
  const cleanup = () => stopSpinner();
336
348
  process.on("exit", cleanup);
@@ -792,9 +804,11 @@ function printCreateSuccessCard(projectRoot, url) {
792
804
  console.log(` ${BOLD}App:${RESET} ${url}`);
793
805
  console.log(` ${BOLD}Demo:${RESET} example / demo-only-password`);
794
806
  console.log();
795
- console.log(` ${BOLD}Next:${RESET}`);
807
+ console.log(` ${BOLD}Next (in a new terminal window):${RESET}`);
796
808
  console.log(` ${DIM}${resumeCommand}${RESET}`);
797
809
  console.log();
810
+ console.log(` ${DIM}Your current terminal is running the local app logs, so open a fresh terminal before you run that command.${RESET}`);
811
+ console.log();
798
812
  console.log(` ${BOLD}Try:${RESET}`);
799
813
  console.log(` ${DIM}Create a portal for my call with Acme Health${RESET}`);
800
814
  if (resumeHint) {
@@ -1046,19 +1060,19 @@ async function createProject(args) {
1046
1060
  console.log();
1047
1061
  blue(`Setting up ${BOLD}${companyName}${RESET} portal as ${DIM}${dirName}/${RESET}`);
1048
1062
  console.log();
1049
- stepStart("Create project");
1063
+ stepStartForCreate("Create project", options);
1050
1064
  try {
1051
1065
  copyScaffoldFiles(join(bundleRoot, "scaffold"), projectRoot, scaffoldManifest);
1052
- stepSuccess("Project created");
1066
+ stepSuccessForCreate("Project created");
1053
1067
  } catch (errorLike) {
1054
- stepFailure("Create project", errorLike);
1068
+ stepFailureForCreate("Create project", errorLike);
1055
1069
  }
1056
- stepStart("Install dependencies");
1070
+ stepStartForCreate("Install dependencies", options);
1057
1071
  try {
1058
1072
  installDependencies(projectRoot, options.verbose);
1059
- stepSuccess("Dependencies installed");
1073
+ stepSuccessForCreate("Dependencies installed");
1060
1074
  } catch (errorLike) {
1061
- stepFailure(
1075
+ stepFailureForCreate(
1062
1076
  "Install dependencies",
1063
1077
  errorLike,
1064
1078
  "Check your Node.js version and network connection, then try again."
@@ -1072,19 +1086,19 @@ async function createProject(args) {
1072
1086
  AUTH_SECRET="${authSecret}"
1073
1087
  `
1074
1088
  );
1075
- stepStart("Configure database");
1089
+ stepStartForCreate("Configure database", options);
1076
1090
  try {
1077
1091
  generateLocalDatabase(projectRoot, databaseUrl, options.verbose);
1078
1092
  seedProject(projectRoot, databaseUrl, options.verbose);
1079
- stepSuccess("Database configured");
1093
+ stepSuccessForCreate("Database configured");
1080
1094
  } catch (errorLike) {
1081
- stepFailure(
1095
+ stepFailureForCreate(
1082
1096
  "Configure database",
1083
1097
  errorLike,
1084
1098
  "Check Prisma setup and the generated .env file, then retry the install."
1085
1099
  );
1086
1100
  }
1087
- stepStart("Install Claude skills");
1101
+ stepStartForCreate("Install Claude skills", options);
1088
1102
  let toolchainInfo;
1089
1103
  try {
1090
1104
  toolchainInfo = syncToolchain(bundleRoot, showpaneVersion, false);
@@ -1102,15 +1116,15 @@ AUTH_SECRET="${authSecret}"
1102
1116
  toolchainInfo.toolchainVersion
1103
1117
  );
1104
1118
  tryInitializeGitRepo(projectRoot, false);
1105
- stepSuccess("Claude skills installed");
1119
+ stepSuccessForCreate("Claude skills installed");
1106
1120
  } catch (errorLike) {
1107
- stepFailure(
1121
+ stepFailureForCreate(
1108
1122
  "Install Claude skills",
1109
1123
  errorLike,
1110
1124
  "Check permissions for ~/.showpane and ~/.claude/skills, then try again."
1111
1125
  );
1112
1126
  }
1113
- stepStart("Start app");
1127
+ stepStartForCreate("Start app", options);
1114
1128
  let serverStart;
1115
1129
  try {
1116
1130
  serverStart = await startDevServer(
@@ -1120,7 +1134,7 @@ AUTH_SECRET="${authSecret}"
1120
1134
  options.verbose
1121
1135
  );
1122
1136
  } catch (errorLike) {
1123
- stepFailure(
1137
+ stepFailureForCreate(
1124
1138
  "Start app",
1125
1139
  errorLike,
1126
1140
  `Run ${BOLD}cd ${dirName} && npm run dev${RESET} for more detail.`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "showpane",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "CLI for Showpane — AI-generated client portals",
5
5
  "type": "module",
6
6
  "bin": {