pi-studio 0.6.9 → 0.6.10

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/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@ All notable changes to `pi-studio` are documented here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.6.10] — 2026-05-04
8
+
9
+ ### Fixed
10
+ - SSH tunnel hints now include the full tokenized Studio URL directly so the token remains visible even when the terminal only shows the latest notification.
11
+
7
12
  ## [0.6.9] — 2026-05-01
8
13
 
9
14
  ### Changed
package/README.md CHANGED
@@ -75,7 +75,7 @@ pi -e https://github.com/omaclaren/pi-studio
75
75
  ## Notes
76
76
 
77
77
  - Local-only server (`127.0.0.1`) with tokenized Studio URLs.
78
- - For remote SSH sessions, keep Studio bound to localhost and use SSH local port forwarding; `/studio` and `/studio --status` print the full tokenized localhost URL. Open that URL through the tunnel, preserving the `?token=...` parameter.
78
+ - For remote SSH sessions, keep Studio bound to localhost and use SSH local port forwarding; `/studio` and `/studio --status` print the full tokenized localhost URL. The SSH hint repeats the full URL so it is visible even if your terminal only shows the latest notification. Open that URL through the tunnel, preserving the `?token=...` parameter.
79
79
  - Full Studio is a singleton per Pi session: use `/studio` to open it, `/studio-replace` to explicitly replace it, and `/studio-editor-only` for extra editing/preview tabs that do not take over the full Studio session view.
80
80
  - Studio is designed as a complement to terminal pi, not a replacement.
81
81
  - Installing pi-studio makes the optional `pi-studio-dark` and `pi-studio-light` themes available in pi's theme selector; it does not change your active theme.
package/index.ts CHANGED
@@ -6088,9 +6088,9 @@ function isSshSession(): boolean {
6088
6088
  );
6089
6089
  }
6090
6090
 
6091
- function buildStudioSshTunnelHint(port: number): string | null {
6091
+ function buildStudioSshTunnelHint(port: number, studioUrl: string): string | null {
6092
6092
  if (!isSshSession()) return null;
6093
- return `SSH detected. Forward the remote Studio port, then open the full Studio URL above locally, including its ?token=... parameter: ssh -L ${port}:127.0.0.1:${port} <remote-host>. If you choose a different local port, change only the port in the URL; keep the token.`;
6093
+ return `SSH detected. Full Studio URL: ${studioUrl}. Forward the remote Studio port with: ssh -L ${port}:127.0.0.1:${port} <remote-host>. Open the full URL locally through the tunnel, preserving its ?token=... parameter. If you choose a different local port, change only the port in the URL; keep the token.`;
6094
6094
  }
6095
6095
 
6096
6096
  function resolveRequestedStudioDocumentFromUrl(
@@ -9436,8 +9436,9 @@ export default function (pi: ExtensionAPI) {
9436
9436
  } else {
9437
9437
  ctx.ui.notify("A full pi Studio view is already open for this session. Close it first, use /studio-replace for a fresh full Studio view, or use /studio-editor-only for a concurrent editor-only Studio view.", "warning");
9438
9438
  if (serverState) {
9439
- ctx.ui.notify(`Studio URL: ${buildStudioUrl(serverState.port, serverState.token, "full")}`, "info");
9440
- const sshTunnelHint = buildStudioSshTunnelHint(serverState.port);
9439
+ const url = buildStudioUrl(serverState.port, serverState.token, "full");
9440
+ ctx.ui.notify(`Studio URL: ${url}`, "info");
9441
+ const sshTunnelHint = buildStudioSshTunnelHint(serverState.port, url);
9441
9442
  if (sshTunnelHint) ctx.ui.notify(sshTunnelHint, "info");
9442
9443
  }
9443
9444
  return;
@@ -9464,7 +9465,7 @@ export default function (pi: ExtensionAPI) {
9464
9465
 
9465
9466
  const state = await ensureServer();
9466
9467
  const url = buildStudioUrl(state.port, state.token, mode, selected);
9467
- const sshTunnelHint = buildStudioSshTunnelHint(state.port);
9468
+ const sshTunnelHint = buildStudioSshTunnelHint(state.port, url);
9468
9469
  const openedLabel = mode === "editor-only" ? "pi Studio editor-only view" : "pi Studio";
9469
9470
 
9470
9471
  try {
@@ -9511,7 +9512,7 @@ export default function (pi: ExtensionAPI) {
9511
9512
  `Studio running at ${url} (busy: ${isStudioBusy() ? "yes" : "no"}; full views: ${counts.full}; editor-only views: ${counts.editorOnly})`,
9512
9513
  "info",
9513
9514
  );
9514
- const sshTunnelHint = buildStudioSshTunnelHint(serverState.port);
9515
+ const sshTunnelHint = buildStudioSshTunnelHint(serverState.port, url);
9515
9516
  if (sshTunnelHint) ctx.ui.notify(sshTunnelHint, "info");
9516
9517
  return;
9517
9518
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-studio",
3
- "version": "0.6.9",
3
+ "version": "0.6.10",
4
4
  "description": "Two-pane browser workspace for pi with prompt/response editing, annotations, critiques, prompt/response history, and live Markdown/LaTeX/code preview",
5
5
  "type": "module",
6
6
  "license": "MIT",