pi-studio 0.9.2 → 0.9.3

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,10 +4,16 @@ All notable changes to `pi-studio` are documented here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.9.3] — 2026-05-16
8
+
9
+ ### Changed
10
+ - Simplified the global Zen button label to text-only (`Zen` / `Exit Zen`).
11
+ - Removed the visible Fresh/Classic UI toggle; Studio now keeps the refreshed UI by default, with the legacy layout still available only via `?uiRefresh=0` for now.
12
+
7
13
  ## [0.9.2] — 2026-05-16
8
14
 
9
15
  ### Added
10
- - Added a global **⊙ Zen** / **Exit Zen** toggle that hides secondary Studio chrome while preserving the current pane layout and panel focus state.
16
+ - Added a global **Zen** / **Exit Zen** toggle that hides secondary Studio chrome while preserving the current pane layout and panel focus state.
11
17
  - Added a Focus action for explicit `studio-pdf` preview cards, opening the embedded PDF in a larger Studio overlay with optional browser fullscreen.
12
18
 
13
19
  ### Fixed
package/README.md CHANGED
@@ -20,7 +20,7 @@ Extension for [pi](https://pi.dev) that opens a local two-pane browser workspace
20
20
 
21
21
  - Opens a two-pane browser workspace: **Editor** (left) + **Response/Working/Editor Preview** (right)
22
22
  - Supports one canonical full Studio view per Pi session, plus additional editor-only companion views when you just want extra editing/preview surfaces; the editor toolbar can open a detached copy of the current editor text as a companion view
23
- - Includes a global **⊙ Zen** mode for hiding secondary Studio chrome without changing the current left/right pane layout
23
+ - Includes a global **Zen** mode for hiding secondary Studio chrome without changing the current left/right pane layout
24
24
  - Runs editor text directly, or asks for structured critique (auto/writing/code focus)
25
25
  - Includes a live **Working** view for following current model/tool activity, with `All` / `Thinking` / `Tools` filters, image previews for image-producing tool outputs, plus **Load visible into editor** and **Copy visible** actions; when cycling response history, Working follows saved working details for the selected response when available
26
26
  - Includes an optional tmux-backed **REPL** view for Shell, Python, IPython, Julia, R, GHCi, and Clojure sessions, with Raw/Literate send modes, `Cmd/Ctrl+Shift+Enter` **Send to REPL**, session start/new/stop/interrupt controls, a compact refresh-persistent **REPL Studio** record of user and Pi-sent code, a secondary raw tmux mirror, agent-facing `studio_repl_status` / `studio_repl_send` tools, and Markdown/PDF/HTML export
@@ -1679,7 +1679,6 @@
1679
1679
  let lineNumbersEnabled = false;
1680
1680
  let lineNumbersRenderRaf = null;
1681
1681
  let annotationsEnabled = true;
1682
- const STUDIO_UI_REFRESH_STORAGE_KEY = "piStudio.uiRefresh";
1683
1682
  const STUDIO_ZEN_MODE_STORAGE_KEY = "piStudio.zenMode";
1684
1683
  const studioUiRefreshEnabled = readStudioUiRefreshEnabled();
1685
1684
  const EDITOR_FONT_SIZE_OPTIONS = [10, 11, 12, 13, 14, 15, 16, 18];
@@ -1724,16 +1723,8 @@
1724
1723
  const isFalsey = (value) => ["0", "false", "no", "off", "classic"].indexOf(normalize(value)) !== -1;
1725
1724
  if (queryValue !== null) {
1726
1725
  const normalizedQuery = normalize(queryValue);
1727
- const enabled = isTruthy(queryValue) || (!isFalsey(queryValue) && normalizedQuery !== "");
1728
- try {
1729
- window.localStorage && window.localStorage.setItem(STUDIO_UI_REFRESH_STORAGE_KEY, enabled ? "1" : "0");
1730
- } catch {}
1731
- return enabled;
1726
+ return isTruthy(queryValue) || (!isFalsey(queryValue) && normalizedQuery !== "");
1732
1727
  }
1733
- try {
1734
- const stored = window.localStorage ? window.localStorage.getItem(STUDIO_UI_REFRESH_STORAGE_KEY) : null;
1735
- if (stored !== null) return stored !== "0" && !isFalsey(stored);
1736
- } catch {}
1737
1728
  return true;
1738
1729
  }
1739
1730
 
@@ -1762,7 +1753,7 @@
1762
1753
  function syncStudioZenModeUi() {
1763
1754
  if (document.body) document.body.classList.toggle("studio-zen-mode", studioZenModeEnabled);
1764
1755
  if (!zenModeBtn) return;
1765
- zenModeBtn.textContent = studioZenModeEnabled ? "Exit Zen" : "Zen";
1756
+ zenModeBtn.textContent = studioZenModeEnabled ? "Exit Zen" : "Zen";
1766
1757
  zenModeBtn.title = studioZenModeEnabled ? "Show full Studio controls." : "Hide secondary Studio controls.";
1767
1758
  zenModeBtn.setAttribute("aria-pressed", studioZenModeEnabled ? "true" : "false");
1768
1759
  }
@@ -2001,37 +1992,6 @@
2001
1992
  return { name, anchor: anchorEl, button: buttonEl, menu: menuEl };
2002
1993
  }
2003
1994
 
2004
- function setStudioUiRefreshPreference(enabled) {
2005
- try {
2006
- window.localStorage && window.localStorage.setItem(STUDIO_UI_REFRESH_STORAGE_KEY, enabled ? "1" : "0");
2007
- } catch {}
2008
- try {
2009
- const url = new URL(window.location.href);
2010
- url.searchParams.set("uiRefresh", enabled ? "1" : "0");
2011
- window.location.assign(url.toString());
2012
- } catch {
2013
- window.location.reload();
2014
- }
2015
- }
2016
-
2017
- function setupStudioUiRefreshToggleButton() {
2018
- if (!footerMetaEl || document.getElementById("studioUiRefreshToggleBtn")) return;
2019
- const button = makeStudioUiRefreshElement("button", "footer-compact-btn studio-ui-refresh-toggle", studioUiRefreshEnabled ? "UI: Fresh" : "UI: Classic");
2020
- button.id = "studioUiRefreshToggleBtn";
2021
- button.type = "button";
2022
- button.title = studioUiRefreshEnabled
2023
- ? "Switch Studio to the classic layout."
2024
- : "Switch Studio to the refreshed layout.";
2025
- button.addEventListener("click", () => {
2026
- setStudioUiRefreshPreference(!studioUiRefreshEnabled);
2027
- });
2028
- if (compactBtn && compactBtn.parentNode === footerMetaEl) {
2029
- compactBtn.insertAdjacentElement("afterend", button);
2030
- } else {
2031
- footerMetaEl.appendChild(button);
2032
- }
2033
- }
2034
-
2035
1995
  function setupStudioUiRefreshPrototype() {
2036
1996
  if (!studioUiRefreshEnabled || studioUiRefreshUi) return;
2037
1997
  const leftHeaderEl = document.getElementById("leftSectionHeader");
@@ -2161,7 +2121,6 @@
2161
2121
  syncStudioUiRefreshSummaries();
2162
2122
  }
2163
2123
 
2164
- setupStudioUiRefreshToggleButton();
2165
2124
  setupStudioUiRefreshPrototype();
2166
2125
  syncStudioZenModeUi();
2167
2126
  const annotationHelpers = globalThis.PiStudioAnnotationHelpers;
package/client/studio.css CHANGED
@@ -3329,7 +3329,7 @@
3329
3329
  }
3330
3330
  }
3331
3331
 
3332
- /* Default refreshed Studio layout. Classic layout remains available with ?uiRefresh=0 or the footer UI switch. */
3332
+ /* Default Studio layout. The legacy classic layout remains available only via ?uiRefresh=0. */
3333
3333
  body.studio-ui-refresh {
3334
3334
  --studio-editor-font-size: 12px;
3335
3335
  --studio-editor-line-number-font-size: 11px;
package/index.ts CHANGED
@@ -7968,7 +7968,7 @@ ${cssVarsBlock}
7968
7968
  <label class="file-label" title="Load a local file into editor text.">Load file content<input id="fileInput" type="file" accept=".md,.markdown,.mdx,.qmd,.js,.mjs,.cjs,.jsx,.ts,.mts,.cts,.tsx,.py,.pyw,.sh,.bash,.zsh,.json,.jsonc,.json5,.rs,.c,.h,.cpp,.cxx,.cc,.hpp,.hxx,.jl,.f90,.f95,.f03,.f,.for,.r,.R,.m,.tex,.latex,.diff,.patch,.java,.go,.rb,.swift,.html,.htm,.css,.xml,.yaml,.yml,.toml,.lua,.txt,.rst,.adoc" /></label>
7969
7969
  <button id="loadGitDiffBtn" type="button" title="Load the current git diff from the Studio context into the editor.">Load git diff</button>
7970
7970
  <button id="getEditorBtn" type="button" title="Load the current terminal editor draft into Studio.">Load from pi editor</button>
7971
- <button id="zenModeBtn" class="zen-mode-btn" type="button" title="Hide secondary Studio controls.">⊙ Zen</button>
7971
+ <button id="zenModeBtn" class="zen-mode-btn" type="button" title="Hide secondary Studio controls.">Zen</button>
7972
7972
  </div>
7973
7973
  </header>
7974
7974
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-studio",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "Two-pane browser workspace for pi with prompt/response editing, annotations, critiques, prompt/response history, live previews, and tmux-backed REPL/literate REPL workflows",
5
5
  "type": "module",
6
6
  "license": "MIT",