Skip to content

verso-v1.1.2

Choose a tag to compare

@github-actions github-actions released this 18 Jul 19:06
· 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 @verso participant'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 import always 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