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 +7 -1
- package/README.md +1 -1
- package/client/studio-client.js +2 -43
- package/client/studio.css +1 -1
- package/index.ts +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
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
|
package/client/studio-client.js
CHANGED
|
@@ -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
|
-
|
|
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" : "
|
|
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
|
|
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."
|
|
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.
|
|
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",
|