verso-v1.1.2
·
47 commits
to main
since this release
Release adding a cell-level notebook comparison view, a Slide Studio slide-deck showcase layout, markdown that renders as soon as a notebook opens, per-output error isolation with coalesced rendering for output-heavy notebooks, a runtime-partitioned extension store, TypeScript 7 detection with a pinned 6.x toolchain, and fixes across layout resolution, mermaid rendering, imports, and Blazor Server prerendering.
New: Notebook Comparison
- Compare the open notebook, including unsaved edits, against the last saved file, git HEAD, any branch, tag, or commit, or another notebook file (
.verso,.ipynb, or.dib) - The view shows added, removed, edited, and moved cells with side-by-side source comparison, and when a cell's outputs changed, the old and new rendered outputs appear next to each other
- Cells are matched by Verso's stable cell identity, so an edited cell is distinguished from a deleted-plus-added pair; formats without cell identity (
.ipynb,.dib) match by content and are labeled as approximate matches - Notebook-level changes (title, default kernel, layout, theme, extension requirements, parameters, and saved layout state) are listed at the top, with save-time noise such as the modified timestamp excluded
- The comparison is read-only and never marks the notebook dirty; on very large change sets, source comparisons load as you expand them
- In VS Code: a Compare toolbar button, a diff icon in the editor title bar, and the Verso: Compare Notebook with... command
New: Slide Studio Showcase Layout
- A fourth showcase layout extension,
Verso.Showcase.SlideStudio, turns a notebook into a slide deck with a filmstrip of cell previews, an editor and output split view, and a full-screen presenter mode - Per-cell presenter flags (include, show source, show output) persist in cell metadata and are editable from the filmstrip, the pane headers, or the properties panel
- Presenter slides show live outputs, so interactive charts and widgets keep working while presenting
- The CI and release workflows pack the sample so it ships as a NuGet package alongside the other showcase extensions
New: Markdown Renders on Open
- A built-in Markdown cell type pre-renders its markup when a notebook opens, so prose arrives already rendered instead of showing raw source until run
- Rendered markdown is transient: it is stripped on save, does not increment execution counts, and does not mark the notebook dirty
- The initially selected cell is chosen so a rendered markdown cell does not immediately flip into its editor
Improved: Output Rendering and Resiliency
- Each cell output renders inside its own error boundary, so a faulty output degrades to an inline error with a Retry action instead of blanking the rest of the notebook
- Output update notifications are coalesced, reducing whole-page re-renders during output bursts
- Cell toolbar enabled-state queries are cached and coalesced, and re-query when variables, extensions, or kernel state change, cutting host traffic during re-renders
- The Monaco editor only receives a language change when the language actually changed, reducing webview main-thread traffic
- Non-editable cells auto-execute once instead of repeatedly before their first output arrives
- The F# Interactive session initializes on a thread-pool thread, avoiding deadlocks on context-bound threads during startup and kernel restart
Improved: Extension Store Runtime Partitioning
- Managed extension installs are stored under a per-target-framework subfolder (for example
net8.0), so hosts running different .NET runtimes keep compatible copies side by side instead of overwriting each other's assemblies - Loading selects the newest compatible runtime folder, and an assembly's required runtime is inferred from its metadata without loading it
Improved: TypeScript 7 Detection
- Auto-installed TypeScript is pinned to the 6.x line; TypeScript 7 removed the JS compiler API the kernel depends on
- An existing unsupported 7+ install is detected and replaced with the pinned version automatically, with clearer error messages when installation fails
Improved: Copilot Participant Guidance
- The
@versoparticipant's system prompt now covers package installation,Display()and rich outputs, and clarifies that Verso is not built on .NET Interactive
Fixed: Layout and Required-Extension Resolution
- The missing-layout notification is deferred while required extensions are still resolving and only appears if the layout remains missing after they load
- A default layout that was missing at startup is retried and activated once its extension becomes available
- The pre-session extension pass stays offline but now loads an unpinned reference when an approved copy already exists on disk
- The notebook open response carries the resolved active layout and the client seeds its first render with it, removing the visible layout flash when opening a notebook
Fixed: Mermaid Rendering in Hidden Contexts
- Mermaid diagrams no longer collapse to a tiny square when rendered inside a hidden container (a parked presenter slide, a collapsed pane): rendering defers until the element is visible
- Layouts can emit host-side mermaid containers for output copies, so filmstrip tiles and slide fallbacks show real rendered diagrams
Fixed: Import and Execution Reliability
verso importalways captures cell outputs so errors are visible, tracks failures, marks the summary as an error when any cell failed, and prints non-error outputs with--show-output- Value-equal duplicate outputs render correctly through indexed render keys
- Code routed by language now reaches kernels contributed by extensions and cell types, not just built-ins
- Structural cell changes made through the RPC API (add, insert, remove, move, type change) notify connected clients, so cells added by chat tools appear without reopening the notebook
- Blazor Server no longer hits JS interop during prerender, preventing crashes when a theme change or extension status check runs before the first interactive render