pi-studio 0.5.16 → 0.5.18
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 +11 -0
- package/client/studio-client.js +1 -1
- package/index.ts +14 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,17 @@ All notable changes to `pi-studio` are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.5.18] — 2026-03-17
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- cmux sidebar Studio status pills now use a darker blue in light mode, making `running…` / `compacting…` much easier to read.
|
|
11
|
+
- The annotated-reply header wording in Studio now says `user annotation syntax: [an: note]`, matching the intended user-guidance semantics more clearly.
|
|
12
|
+
|
|
13
|
+
## [0.5.17] — 2026-03-17
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Studio preview and PDF rendering now accept Markdown lists without a preceding blank line, so common model output like `What I read:\n- item` renders as a real list instead of collapsing into a paragraph.
|
|
17
|
+
|
|
7
18
|
## [0.5.16] — 2026-03-17
|
|
8
19
|
|
|
9
20
|
### Fixed
|
package/client/studio-client.js
CHANGED
|
@@ -3364,7 +3364,7 @@
|
|
|
3364
3364
|
const sourceDescriptor = describeSourceForAnnotation();
|
|
3365
3365
|
let header = "annotated reply below:\n";
|
|
3366
3366
|
header += "original source: " + sourceDescriptor + "\n";
|
|
3367
|
-
header += "annotation syntax: [an:
|
|
3367
|
+
header += "user annotation syntax: [an: note]\n";
|
|
3368
3368
|
header += "precedence: later messages supersede these annotations unless user explicitly references them\n\n---\n\n";
|
|
3369
3369
|
return header;
|
|
3370
3370
|
}
|
package/index.ts
CHANGED
|
@@ -160,6 +160,8 @@ const UPDATE_CHECK_TIMEOUT_MS = 1800;
|
|
|
160
160
|
const CMUX_NOTIFY_TIMEOUT_MS = 1200;
|
|
161
161
|
const STUDIO_TERMINAL_NOTIFY_TITLE = "pi Studio";
|
|
162
162
|
const CMUX_STUDIO_STATUS_KEY = "pi_studio";
|
|
163
|
+
const CMUX_STUDIO_STATUS_COLOR_DARK = "#5ea1ff";
|
|
164
|
+
const CMUX_STUDIO_STATUS_COLOR_LIGHT = "#0047ab";
|
|
163
165
|
|
|
164
166
|
const PDF_PREAMBLE = `\\usepackage{titlesec}
|
|
165
167
|
\\titleformat{\\section}{\\Large\\bfseries\\sffamily}{}{0pt}{}[\\vspace{2pt}\\titlerule]
|
|
@@ -1590,7 +1592,7 @@ async function preprocessStudioMermaidForPdf(markdown: string, workDir: string):
|
|
|
1590
1592
|
|
|
1591
1593
|
async function renderStudioMarkdownWithPandoc(markdown: string, isLatex?: boolean, resourcePath?: string): Promise<string> {
|
|
1592
1594
|
const pandocCommand = process.env.PANDOC_PATH?.trim() || "pandoc";
|
|
1593
|
-
const inputFormat = isLatex ? "latex" : "markdown+tex_math_dollars+tex_math_single_backslash+tex_math_double_backslash+autolink_bare_uris-raw_html";
|
|
1595
|
+
const inputFormat = isLatex ? "latex" : "markdown+lists_without_preceding_blankline+tex_math_dollars+tex_math_single_backslash+tex_math_double_backslash+autolink_bare_uris-raw_html";
|
|
1594
1596
|
const args = ["-f", inputFormat, "-t", "html5", "--mathml", "--wrap=none"];
|
|
1595
1597
|
if (resourcePath) {
|
|
1596
1598
|
args.push(`--resource-path=${resourcePath}`);
|
|
@@ -1819,7 +1821,7 @@ async function renderStudioPdfWithPandoc(
|
|
|
1819
1821
|
};
|
|
1820
1822
|
|
|
1821
1823
|
if (!isLatex && effectiveEditorLanguage === "diff") {
|
|
1822
|
-
const inputFormat = "markdown+tex_math_dollars+autolink_bare_uris+superscript+subscript-raw_html";
|
|
1824
|
+
const inputFormat = "markdown+lists_without_preceding_blankline+tex_math_dollars+autolink_bare_uris+superscript+subscript-raw_html";
|
|
1823
1825
|
const diffMarkdown = prepareStudioPdfMarkdown(markdown, false, effectiveEditorLanguage);
|
|
1824
1826
|
try {
|
|
1825
1827
|
return await runPandocPdfExport(inputFormat, diffMarkdown);
|
|
@@ -1835,7 +1837,7 @@ async function renderStudioPdfWithPandoc(
|
|
|
1835
1837
|
|
|
1836
1838
|
const inputFormat = isLatex
|
|
1837
1839
|
? "latex"
|
|
1838
|
-
: "markdown+tex_math_dollars+tex_math_single_backslash+tex_math_double_backslash+autolink_bare_uris+superscript+subscript-raw_html";
|
|
1840
|
+
: "markdown+lists_without_preceding_blankline+tex_math_dollars+tex_math_single_backslash+tex_math_double_backslash+autolink_bare_uris+superscript+subscript-raw_html";
|
|
1839
1841
|
const normalizedMarkdown = prepareStudioPdfMarkdown(markdown, isLatex, effectiveEditorLanguage);
|
|
1840
1842
|
|
|
1841
1843
|
const tempDir = join(tmpdir(), `pi-studio-pdf-${Date.now()}-${randomUUID()}`);
|
|
@@ -3139,16 +3141,22 @@ export default function (pi: ExtensionAPI) {
|
|
|
3139
3141
|
runCmuxCommand(["clear-notifications"]);
|
|
3140
3142
|
};
|
|
3141
3143
|
|
|
3144
|
+
const getCmuxStudioStatusColor = (): string => {
|
|
3145
|
+
const mode = getStudioThemeMode(lastCommandCtx?.ui?.theme);
|
|
3146
|
+
return mode === "light" ? CMUX_STUDIO_STATUS_COLOR_LIGHT : CMUX_STUDIO_STATUS_COLOR_DARK;
|
|
3147
|
+
};
|
|
3148
|
+
|
|
3142
3149
|
const syncCmuxStudioStatus = () => {
|
|
3143
3150
|
if (!shouldUseCmuxTerminalIntegration()) return;
|
|
3144
3151
|
const workspaceArgs = getCmuxWorkspaceArgs();
|
|
3152
|
+
const statusColor = getCmuxStudioStatusColor();
|
|
3145
3153
|
if (activeRequest) {
|
|
3146
3154
|
runCmuxCommand([
|
|
3147
3155
|
"set-status",
|
|
3148
3156
|
CMUX_STUDIO_STATUS_KEY,
|
|
3149
3157
|
"running…",
|
|
3150
3158
|
"--color",
|
|
3151
|
-
|
|
3159
|
+
statusColor,
|
|
3152
3160
|
...workspaceArgs,
|
|
3153
3161
|
]);
|
|
3154
3162
|
return;
|
|
@@ -3159,7 +3167,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
3159
3167
|
CMUX_STUDIO_STATUS_KEY,
|
|
3160
3168
|
"compacting…",
|
|
3161
3169
|
"--color",
|
|
3162
|
-
|
|
3170
|
+
statusColor,
|
|
3163
3171
|
...workspaceArgs,
|
|
3164
3172
|
]);
|
|
3165
3173
|
return;
|
|
@@ -4392,6 +4400,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
4392
4400
|
const json = JSON.stringify(vars);
|
|
4393
4401
|
if (json !== lastThemeVarsJson) {
|
|
4394
4402
|
lastThemeVarsJson = json;
|
|
4403
|
+
syncCmuxStudioStatus();
|
|
4395
4404
|
for (const client of serverState.clients) {
|
|
4396
4405
|
sendToClient(client, { type: "theme_update", vars });
|
|
4397
4406
|
}
|