pi-studio 0.9.13 → 0.9.14
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 +12 -0
- package/client/studio-client.js +61 -0
- package/client/studio.css +21 -4
- package/index.ts +13 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to `pi-studio` are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.9.14] — 2026-05-22
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Added active-pane text-size shortcuts: Alt/Option+= to increase, Alt/Option+- to decrease, and Alt/Option+0 to reset editor or right-pane text size when not editing text.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Blank and last-response Studio launches now default the working directory/resource context to the current Pi directory.
|
|
14
|
+
- Made the working-directory label use normal muted text styling instead of standing out like a primary control.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Fixed the keyboard-shortcuts overlay layout so shortcut groups are no longer clipped by the global pane section styles.
|
|
18
|
+
|
|
7
19
|
## [0.9.13] — 2026-05-22
|
|
8
20
|
|
|
9
21
|
### Added
|
package/client/studio-client.js
CHANGED
|
@@ -2174,6 +2174,49 @@
|
|
|
2174
2174
|
scheduleResponsePaneRepaintNudge();
|
|
2175
2175
|
}
|
|
2176
2176
|
|
|
2177
|
+
function getActivePaneTextSizeConfig() {
|
|
2178
|
+
if (activePane === "right") {
|
|
2179
|
+
return {
|
|
2180
|
+
label: "Right pane text size",
|
|
2181
|
+
value: responseFontSize,
|
|
2182
|
+
defaultValue: DEFAULT_RESPONSE_FONT_SIZE,
|
|
2183
|
+
options: RESPONSE_FONT_SIZE_OPTIONS,
|
|
2184
|
+
setValue: setResponseFontSize,
|
|
2185
|
+
};
|
|
2186
|
+
}
|
|
2187
|
+
return {
|
|
2188
|
+
label: "Editor text size",
|
|
2189
|
+
value: editorFontSize,
|
|
2190
|
+
defaultValue: DEFAULT_EDITOR_FONT_SIZE,
|
|
2191
|
+
options: EDITOR_FONT_SIZE_OPTIONS,
|
|
2192
|
+
setValue: setEditorFontSize,
|
|
2193
|
+
};
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
function getNextStudioFontSizeOption(currentValue, options, defaultValue, direction) {
|
|
2197
|
+
const normalized = normalizeStudioFontSize(currentValue, options, defaultValue);
|
|
2198
|
+
const currentIndex = Math.max(0, options.findIndex((option) => Math.abs(option - normalized) < 0.001));
|
|
2199
|
+
const nextIndex = Math.max(0, Math.min(options.length - 1, currentIndex + direction));
|
|
2200
|
+
return options[nextIndex];
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2203
|
+
function adjustActivePaneTextSize(direction) {
|
|
2204
|
+
const config = getActivePaneTextSizeConfig();
|
|
2205
|
+
const nextSize = getNextStudioFontSizeOption(config.value, config.options, config.defaultValue, direction);
|
|
2206
|
+
if (Math.abs(nextSize - config.value) < 0.001) {
|
|
2207
|
+
setStatus(config.label + " already at " + formatStudioFontSizeLabel(nextSize) + ".", "warning");
|
|
2208
|
+
return;
|
|
2209
|
+
}
|
|
2210
|
+
config.setValue(nextSize);
|
|
2211
|
+
setStatus(config.label + ": " + formatStudioFontSizeLabel(nextSize) + ".");
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
function resetActivePaneTextSize() {
|
|
2215
|
+
const config = getActivePaneTextSizeConfig();
|
|
2216
|
+
config.setValue(config.defaultValue);
|
|
2217
|
+
setStatus(config.label + " reset to " + formatStudioFontSizeLabel(config.defaultValue) + ".");
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2177
2220
|
function getStudioUiRefreshAnnotationHeaderEnabled() {
|
|
2178
2221
|
try {
|
|
2179
2222
|
return Boolean(stripAnnotationHeader(sourceTextEl.value).hadHeader);
|
|
@@ -3648,6 +3691,24 @@
|
|
|
3648
3691
|
}
|
|
3649
3692
|
}
|
|
3650
3693
|
|
|
3694
|
+
if (!isTextEntryShortcutTarget(event.target) && !event.metaKey && !event.ctrlKey && event.altKey) {
|
|
3695
|
+
if (code === "Equal" || code === "NumpadAdd" || key === "=" || key === "+") {
|
|
3696
|
+
event.preventDefault();
|
|
3697
|
+
adjustActivePaneTextSize(1);
|
|
3698
|
+
return;
|
|
3699
|
+
}
|
|
3700
|
+
if (code === "Minus" || code === "NumpadSubtract" || key === "-" || key === "_") {
|
|
3701
|
+
event.preventDefault();
|
|
3702
|
+
adjustActivePaneTextSize(-1);
|
|
3703
|
+
return;
|
|
3704
|
+
}
|
|
3705
|
+
if (code === "Digit0" || code === "Numpad0" || key === "0") {
|
|
3706
|
+
event.preventDefault();
|
|
3707
|
+
resetActivePaneTextSize();
|
|
3708
|
+
return;
|
|
3709
|
+
}
|
|
3710
|
+
}
|
|
3711
|
+
|
|
3651
3712
|
const isPaneSwitchShortcut = key === "F6" && !event.metaKey && !event.ctrlKey && !event.altKey;
|
|
3652
3713
|
if (isPaneSwitchShortcut) {
|
|
3653
3714
|
event.preventDefault();
|
package/client/studio.css
CHANGED
|
@@ -641,6 +641,7 @@
|
|
|
641
641
|
overflow: hidden;
|
|
642
642
|
text-overflow: ellipsis;
|
|
643
643
|
white-space: nowrap;
|
|
644
|
+
font-weight: 400;
|
|
644
645
|
}
|
|
645
646
|
.resource-dir-label:hover {
|
|
646
647
|
color: var(--fg);
|
|
@@ -3583,17 +3584,29 @@
|
|
|
3583
3584
|
|
|
3584
3585
|
.shortcuts-body {
|
|
3585
3586
|
display: grid;
|
|
3586
|
-
gap:
|
|
3587
|
-
padding:
|
|
3587
|
+
gap: 16px;
|
|
3588
|
+
padding: 16px 18px 18px;
|
|
3588
3589
|
overflow-y: auto;
|
|
3589
3590
|
overflow-x: hidden;
|
|
3590
3591
|
min-height: 0;
|
|
3591
3592
|
background: var(--panel);
|
|
3592
3593
|
}
|
|
3593
3594
|
|
|
3595
|
+
.shortcuts-group {
|
|
3596
|
+
display: block;
|
|
3597
|
+
min-height: auto;
|
|
3598
|
+
border: 0;
|
|
3599
|
+
border-radius: 0;
|
|
3600
|
+
background: transparent;
|
|
3601
|
+
box-shadow: none;
|
|
3602
|
+
overflow: visible;
|
|
3603
|
+
}
|
|
3604
|
+
|
|
3594
3605
|
.shortcuts-group h3 {
|
|
3595
|
-
margin: 0 0
|
|
3606
|
+
margin: 0 0 8px;
|
|
3607
|
+
padding-top: 3px;
|
|
3596
3608
|
font-size: 12px;
|
|
3609
|
+
line-height: 1.5;
|
|
3597
3610
|
font-weight: 700;
|
|
3598
3611
|
color: var(--studio-info-text, var(--muted));
|
|
3599
3612
|
text-transform: uppercase;
|
|
@@ -4259,7 +4272,6 @@
|
|
|
4259
4272
|
}
|
|
4260
4273
|
|
|
4261
4274
|
body.studio-ui-refresh #resourceDirBtn,
|
|
4262
|
-
body.studio-ui-refresh #resourceDirLabel,
|
|
4263
4275
|
body.studio-ui-refresh #reviewNotesBtn,
|
|
4264
4276
|
body.studio-ui-refresh #outlineBtn,
|
|
4265
4277
|
body.studio-ui-refresh #scratchpadBtn,
|
|
@@ -4267,6 +4279,11 @@
|
|
|
4267
4279
|
color: var(--text);
|
|
4268
4280
|
}
|
|
4269
4281
|
|
|
4282
|
+
body.studio-ui-refresh #resourceDirLabel {
|
|
4283
|
+
color: var(--studio-info-text, var(--muted));
|
|
4284
|
+
font-weight: 400;
|
|
4285
|
+
}
|
|
4286
|
+
|
|
4270
4287
|
body.studio-ui-refresh #resourceDirInputWrap.visible {
|
|
4271
4288
|
display: inline-flex;
|
|
4272
4289
|
}
|
package/index.ts
CHANGED
|
@@ -9600,6 +9600,14 @@ ${cssVarsBlock}
|
|
|
9600
9600
|
<div><dt>?</dt><dd>Show keyboard shortcuts when not editing text</dd></div>
|
|
9601
9601
|
</dl>
|
|
9602
9602
|
</section>
|
|
9603
|
+
<section class="shortcuts-group">
|
|
9604
|
+
<h3>View</h3>
|
|
9605
|
+
<dl>
|
|
9606
|
+
<div><dt>Alt/Option+=</dt><dd>Increase the active pane's text size when not editing text</dd></div>
|
|
9607
|
+
<div><dt>Alt/Option+-</dt><dd>Decrease the active pane's text size when not editing text</dd></div>
|
|
9608
|
+
<div><dt>Alt/Option+0</dt><dd>Reset the active pane's text size when not editing text</dd></div>
|
|
9609
|
+
</dl>
|
|
9610
|
+
</section>
|
|
9603
9611
|
<section class="shortcuts-group">
|
|
9604
9612
|
<h3>Editor</h3>
|
|
9605
9613
|
<dl>
|
|
@@ -13298,6 +13306,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
13298
13306
|
label: "last model response",
|
|
13299
13307
|
source: "last-response",
|
|
13300
13308
|
draftId: createStudioDraftId(),
|
|
13309
|
+
resourceDir: ctx.cwd,
|
|
13301
13310
|
};
|
|
13302
13311
|
}
|
|
13303
13312
|
return {
|
|
@@ -13305,6 +13314,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
13305
13314
|
label: "blank",
|
|
13306
13315
|
source: "blank",
|
|
13307
13316
|
draftId: createStudioDraftId(),
|
|
13317
|
+
resourceDir: ctx.cwd,
|
|
13308
13318
|
};
|
|
13309
13319
|
}
|
|
13310
13320
|
|
|
@@ -13314,6 +13324,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
13314
13324
|
label: "blank",
|
|
13315
13325
|
source: "blank",
|
|
13316
13326
|
draftId: createStudioDraftId(),
|
|
13327
|
+
resourceDir: ctx.cwd,
|
|
13317
13328
|
};
|
|
13318
13329
|
}
|
|
13319
13330
|
|
|
@@ -13325,6 +13336,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
13325
13336
|
label: "blank",
|
|
13326
13337
|
source: "blank",
|
|
13327
13338
|
draftId: createStudioDraftId(),
|
|
13339
|
+
resourceDir: ctx.cwd,
|
|
13328
13340
|
};
|
|
13329
13341
|
}
|
|
13330
13342
|
return {
|
|
@@ -13332,6 +13344,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
13332
13344
|
label: "last model response",
|
|
13333
13345
|
source: "last-response",
|
|
13334
13346
|
draftId: createStudioDraftId(),
|
|
13347
|
+
resourceDir: ctx.cwd,
|
|
13335
13348
|
};
|
|
13336
13349
|
}
|
|
13337
13350
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-studio",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.14",
|
|
4
4
|
"description": "Two-pane browser workspace for pi with prompt/response editing, annotations, critiques, active quiz, prompt/response history, live previews, and tmux-backed REPL/literate REPL workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|