showpane 0.4.18 → 0.4.20

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,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-04-11T23:07:20.944Z",
3
+ "generatedAt": "2026-04-12T08:47:16.973Z",
4
4
  "scaffoldVersion": "0.2.7",
5
5
  "files": {
6
6
  ".env.example": "ed105f2bdcd1888a98181d55e3c9f7d6eff3ae9c3e2366c2e777a12e3caddfa7",
@@ -1 +1 @@
1
- 0.4.18
1
+ 0.4.20
@@ -133,7 +133,10 @@ If the helper fails, stop and tell the user to run `/portal-setup` again instead
133
133
  of guessing with ad-hoc SQL.
134
134
 
135
135
  Do not probe `showpane --help`, `package.json`, `scripts/`, `prisma/`, or template
136
- directories just to understand the project. The canonical references for this skill are:
136
+ directories just to understand the project. Do not call `check-slug.ts` with
137
+ anything except `--org-id`.
138
+
139
+ The canonical references for this skill are:
137
140
 
138
141
  - the configured `APP_PATH`
139
142
  - the configured `ORG_SLUG`
@@ -191,10 +194,10 @@ the user chose `/portal-create` because they want the fast path, not a wizard.
191
194
  3. **onboarding** — Welcome, setup steps, resources. Best for new client onboarding.
192
195
  4. **blank** — Start from scratch with just an overview tab.
193
196
 
194
- Read the chosen template file from `$SKILL_DIR/templates/` for structural inspiration:
197
+ Read the chosen template file from the exact toolchain path for structural inspiration:
195
198
 
196
199
  ```bash
197
- cat "$SKILL_DIR/templates/sales-followup/sales-followup-client.tsx"
200
+ cat "$SKILL_DIR/templates/<chosen-template>/<chosen-template>-client.tsx"
198
201
  ```
199
202
 
200
203
  Always also read the example portal as your quality and style reference:
@@ -205,6 +208,9 @@ cat "$APP_PATH/src/app/(portal)/client/example/example-client.tsx"
205
208
 
206
209
  The template provides content structure. The example provides quality and styling. Match the example's patterns: card styles, typography, spacing, responsive breakpoints. Templates are inspiration, not rigid scaffolds. Adapt the structure to fit the actual content.
207
210
 
211
+ Do not search the repo for templates or ask the filesystem where templates live.
212
+ Use the selected template and the exact `SKILL_DIR` path above.
213
+
208
214
  ### Step 5: Analyze transcript (if available)
209
215
 
210
216
  If a transcript was provided (from Granola or pasted), analyze it to extract:
@@ -38,7 +38,10 @@ If the helper fails, stop and tell the user to run `/portal-setup` again instead
38
38
  of guessing with ad-hoc SQL.
39
39
 
40
40
  Do not probe `showpane --help`, `package.json`, `scripts/`, `prisma/`, or template
41
- directories just to understand the project. The canonical references for this skill are:
41
+ directories just to understand the project. Do not call `check-slug.ts` with
42
+ anything except `--org-id`.
43
+
44
+ The canonical references for this skill are:
42
45
 
43
46
  - the configured `APP_PATH`
44
47
  - the configured `ORG_SLUG`
@@ -96,10 +99,10 @@ the user chose `/portal-create` because they want the fast path, not a wizard.
96
99
  3. **onboarding** — Welcome, setup steps, resources. Best for new client onboarding.
97
100
  4. **blank** — Start from scratch with just an overview tab.
98
101
 
99
- Read the chosen template file from `$SKILL_DIR/templates/` for structural inspiration:
102
+ Read the chosen template file from the exact toolchain path for structural inspiration:
100
103
 
101
104
  ```bash
102
- cat "$SKILL_DIR/templates/sales-followup/sales-followup-client.tsx"
105
+ cat "$SKILL_DIR/templates/<chosen-template>/<chosen-template>-client.tsx"
103
106
  ```
104
107
 
105
108
  Always also read the example portal as your quality and style reference:
@@ -110,6 +113,9 @@ cat "$APP_PATH/src/app/(portal)/client/example/example-client.tsx"
110
113
 
111
114
  The template provides content structure. The example provides quality and styling. Match the example's patterns: card styles, typography, spacing, responsive breakpoints. Templates are inspiration, not rigid scaffolds. Adapt the structure to fit the actual content.
112
115
 
116
+ Do not search the repo for templates or ask the filesystem where templates live.
117
+ Use the selected template and the exact `SKILL_DIR` path above.
118
+
113
119
  ### Step 5: Analyze transcript (if available)
114
120
 
115
121
  If a transcript was provided (from Granola or pasted), analyze it to extract:
package/dist/index.js CHANGED
@@ -1554,11 +1554,18 @@ async function openClaude(args) {
1554
1554
  async function login() {
1555
1555
  printBanner();
1556
1556
  ensureShowpaneShim();
1557
+ const config = readShowpaneConfig();
1557
1558
  blue("Authenticating with Showpane...");
1558
1559
  console.log();
1559
1560
  let initRes;
1560
1561
  try {
1561
- initRes = await fetch(`${API_BASE}/api/cli/init`, { method: "POST" });
1562
+ initRes = await fetch(`${API_BASE}/api/cli/init`, {
1563
+ method: "POST",
1564
+ headers: { "Content-Type": "application/json" },
1565
+ body: JSON.stringify({
1566
+ orgSlug: typeof config.orgSlug === "string" ? config.orgSlug : ""
1567
+ })
1568
+ });
1562
1569
  } catch (errorLike) {
1563
1570
  const message = errorLike instanceof Error ? errorLike.message : String(errorLike);
1564
1571
  throw new Error(
@@ -1590,14 +1597,14 @@ async function login() {
1590
1597
  }
1591
1598
  const data = await pollRes.json();
1592
1599
  if (data.status !== "approved") continue;
1593
- const config = readShowpaneConfig();
1594
- config.accessToken = data.accessToken;
1595
- config.accessTokenExpiresAt = data.tokenExpiresAt;
1596
- config.orgSlug = data.orgSlug;
1597
- config.portalUrl = data.portalUrl;
1598
- const currentWorkspace = findWorkspaceRoot(process.cwd()) ?? (config.app_path ? findWorkspaceRoot(config.app_path) ?? resolve(config.app_path) : null);
1600
+ const config2 = readShowpaneConfig();
1601
+ config2.accessToken = data.accessToken;
1602
+ config2.accessTokenExpiresAt = data.tokenExpiresAt;
1603
+ config2.orgSlug = data.orgSlug;
1604
+ config2.portalUrl = data.portalUrl;
1605
+ const currentWorkspace = findWorkspaceRoot(process.cwd()) ?? (config2.app_path ? findWorkspaceRoot(config2.app_path) ?? resolve(config2.app_path) : null);
1599
1606
  if (currentWorkspace) {
1600
- updateWorkspaceFromConfig(config, currentWorkspace, {
1607
+ updateWorkspaceFromConfig(config2, currentWorkspace, {
1601
1608
  name: basename(currentWorkspace),
1602
1609
  deployMode: "cloud",
1603
1610
  orgSlug: data.orgSlug
@@ -1607,9 +1614,9 @@ async function login() {
1607
1614
  } catch {
1608
1615
  }
1609
1616
  } else {
1610
- config.deploy_mode = "cloud";
1617
+ config2.deploy_mode = "cloud";
1611
1618
  }
1612
- writeShowpaneConfig(config);
1619
+ writeShowpaneConfig(config2);
1613
1620
  console.log();
1614
1621
  green(`Authenticated! Connected to ${BOLD}${data.orgSlug}${RESET}`);
1615
1622
  console.log();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "showpane",
3
- "version": "0.4.18",
3
+ "version": "0.4.20",
4
4
  "description": "CLI for Showpane — AI-generated client portals",
5
5
  "type": "module",
6
6
  "bin": {