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-
|
|
4
|
-
"scaffoldVersion": "0.2.
|
|
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": "
|
|
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": "
|
|
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",
|
package/bundle/scaffold/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.2.
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
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
|
-
|
|
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'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={
|
|
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
|
-
{
|
|
78
|
+
{primaryCommand}
|
|
73
79
|
</code>
|
|
74
80
|
</div>
|
|
75
81
|
</section>
|
package/bundle/toolchain/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.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
|
-
|
|
1063
|
+
stepStartForCreate("Create project", options);
|
|
1050
1064
|
try {
|
|
1051
1065
|
copyScaffoldFiles(join(bundleRoot, "scaffold"), projectRoot, scaffoldManifest);
|
|
1052
|
-
|
|
1066
|
+
stepSuccessForCreate("Project created");
|
|
1053
1067
|
} catch (errorLike) {
|
|
1054
|
-
|
|
1068
|
+
stepFailureForCreate("Create project", errorLike);
|
|
1055
1069
|
}
|
|
1056
|
-
|
|
1070
|
+
stepStartForCreate("Install dependencies", options);
|
|
1057
1071
|
try {
|
|
1058
1072
|
installDependencies(projectRoot, options.verbose);
|
|
1059
|
-
|
|
1073
|
+
stepSuccessForCreate("Dependencies installed");
|
|
1060
1074
|
} catch (errorLike) {
|
|
1061
|
-
|
|
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
|
-
|
|
1089
|
+
stepStartForCreate("Configure database", options);
|
|
1076
1090
|
try {
|
|
1077
1091
|
generateLocalDatabase(projectRoot, databaseUrl, options.verbose);
|
|
1078
1092
|
seedProject(projectRoot, databaseUrl, options.verbose);
|
|
1079
|
-
|
|
1093
|
+
stepSuccessForCreate("Database configured");
|
|
1080
1094
|
} catch (errorLike) {
|
|
1081
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1119
|
+
stepSuccessForCreate("Claude skills installed");
|
|
1106
1120
|
} catch (errorLike) {
|
|
1107
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1137
|
+
stepFailureForCreate(
|
|
1124
1138
|
"Start app",
|
|
1125
1139
|
errorLike,
|
|
1126
1140
|
`Run ${BOLD}cd ${dirName} && npm run dev${RESET} for more detail.`
|