Skip to content

Enhance widget support with live channels, state management, and documentation - #99

Merged
TorreyBetts merged 18 commits into
mainfrom
feature/interactive-widgets
Aug 5, 2026
Merged

Enhance widget support with live channels, state management, and documentation#99
TorreyBetts merged 18 commits into
mainfrom
feature/interactive-widgets

Conversation

@TorreyBetts

Copy link
Copy Markdown
Contributor

This pull request adds comprehensive support and documentation for interactive widgets in Python cells, including both ipywidgets and anywidget. It clarifies how widgets behave in live and static states, introduces a new user guide, updates the documentation to cover new features, and improves test coverage for widgets. The most important changes are:

Documentation: Interactive Widgets

  • Added a new guide, docs/guides/interactive-widgets.md, covering how widgets work, their live/static states, file exports, network requirements, sharing widget values with other kernels via #!bind, and limitations.
  • Updated README.md, docs/guides/language-kernels.md, and docs/migration/from-jupyter.md to clarify that widgets built on ipywidgets and anywidget are supported, are live when possible, and their values can be shared with other languages. References to the new guide were added. [1] [2] [3] [4] [5]

Testing: Widget Integration

  • Enhanced CI in .github/workflows/verso-ci.yml to run widget tests against a real ipywidgets installation in a dedicated environment, ensuring both real and stand-in widget behaviors are covered.

API/Reference Updates

  • Documented the new OutputChannels property in the extension context reference (docs/extensions/context-reference.md), describing two-way message channels for output and view communication.

When embedding ipywidgets, include the widget manager state that retains class defaults the page needs while stripping null defaults that were never assigned. Pass a reconciled state to ipywidgets.embed.embed_snippet, implemented via new _embedded_state and _without_unset_values helpers. Add Python unit tests and a C# integration test to cover the behavior, and run the real-ipywidgets widget tests in an isolated venv on CI (Python 3.13) so the integration can be validated without affecting the main test environment.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Introduce HostProtocol.IsExecutionScoped to distinguish messages owned by a running cell from session-scoped messages. Add EventReceived forwarding on PythonHostProcess and update PythonHostConnection docs to note replies abandoned before arrival. In PythonHostSession track whether an execution handler is attached, prevent duplicate delivery by routing only execution-scoped messages to the per-execution handler, and add session-scoped EventUnclaimed plus ReportUnclaimed/OnSessionEvent to log and surface messages that no handler claimed. Include tests (SessionEventDeliveryTests) verifying correct delivery and that unclaimed messages are reported.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Introduce two-way, session-scoped output channels to support live communication between a cell output and the view that renders it. Add IOutputChannel and IOutputChannelHost interfaces, and a concrete OutputChannelHost (with transport abstraction) implementing channel lifecycle, queuing, byte/message bounds, reserved/extension type handling, delivery, and diagnostics.

Wire the capability through IVersoContext.OutputChannels (default null) and propagate the host: Scaffold now owns an OutputChannelHost (attachable via an IOutputChannelTransport), ExecutionPipeline passes the host into magic/extension contexts, and VersoContext and testing stubs expose the OutputChannels property. Update docs (context reference) and add unit tests covering the default null behavior and comprehensive OutputChannelHost behavior.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Add support for live output channels used by widget outputs.

- Introduce OutputChannelProtocol with Version and MajorOf helpers.
- Add LiveChannelId to CellOutput and a Widget(document, channelId) overload.
- Propagate channel id into WidgetFrame (data-verso-live attribute) and pass it to JS interop on mount.
- Extend widget-interop.js to inject channel handshake script, track frames by channel, route messages between views and the host, and expose window.versoOutputChannel for the host to register and post/close channels.
- Wire Blazor page: register vers oOutputChannel, add JSInvokable handlers OnOutputChannelReady/OnOutputChannelMessage and dispose registration.
- ServerNotebookService: expose Scaffold for tests, handle OutputChannelReady/OutputChannelMessage, decode base64 buffers, add BrowserOutputChannelTransport to post/close channel messages via JS, and attach/detach transport to scaffold lifecycle.
- Update OutputChannelHost.HandleReadyAsync to report protocol-major mismatches using OutputChannelProtocol but mount the view anyway.
- Add InternalsVisibleTo for shared tests in Verso.Blazor.csproj.
- Add unit tests covering routing, widget frame mounting/attributes, and version/host behavior adjustments.

These changes enable two-way, routed communication for live widget outputs while preserving backward compatibility for saved/static widgets.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Introduce support for live output channels so views and channel owners can exchange messages. Adds new protocol method names (channel/ready, channel/message, channel/post, channel/closed), DTOs for channel params, an out-of-process OutputChannelHandler, and a SessionOutputChannelTransport that forwards owner messages as session notifications. Wire transport into HostSession and expose channel post/closed handling in RemoteNotebookService (JS interop calls versoOutputChannel.post/closed). Include LiveChannelId on cell outputs and update notebook mapping. Also update the Blazor bridge to subscribe to channel notifications and add unit tests covering the transport, handler, and bridge behavior.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Implement end-to-end widget comm handling between subprocess and views. Add HostProtocol constants for comm types/fields and a Comm capability flag; embed a new Python module (_versohost_comm.py) that implements comm integration for the interpreter. Introduce PythonCommRouter to route comm frames to output channels (ordered delivery, broadcasting to holders, channel-targeted replies) and wire it into PythonHostSession (TrackCommChannel, route incoming comm frames, send-to-subprocess helper). Update versohost.py to install and dispatch comm messages on the main thread and include the new script in the host extractor and project resources. Add unit and integration tests (CommRoutingTests, CommIntegrationTests) and a Python test (tests/versohost/test_comm.py); update CI to run the comm test alongside display tests.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Add support for live widget channels and configurable widget asset source. Introduces new host protocol fields (live_widgets, widget_asset_source, msg_id, comm_ack) and routes widget "live" MIME through the host so the session can open an output channel for interactive views. Injects a manager script into widget documents and improves iframe sizing (initial height and an unsized grace fallback) so widgets render stably while measuring. Implements comm acknowledgements in the Python comm layer so the front-end's single-message throttle is released, and propagates msg_id through the router. Add WidgetAssetSource enum, kernel/env parsing, and plumbing to configure CDN vs bundled assets. Update tests to exercise live channel workflows and adjust comm routing logic and bookkeeping.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Add support for capturing a widget's current page when saving and improve handling of live outputs. Key changes:

- Introduce SnapshotProvider on IOutputChannel and RequestSnapshotAsync in OutputChannelHost so callers can ask a channel's owner for a current document.
- Wire snapshot requests through the host protocol (widget_snapshot / widget_snapshot_reply) and carry widget_id with live widget payloads.
- Extend Python host/display code to emit widget_id, build/lookup widget documents, and answer snapshot requests on the interpreter thread.
- Close output channels when cells are re-run, cleared, deleted, or kernels restart; add CloseForCell and CloseChannelsForKernelAsync to silently teardown channels where views go away.
- Before serializing/saving a notebook, RefreshLiveOutputsAsync asks live outputs (with a bounded deadline) for fresh content so the saved file reflects what readers see.
- Frontend: show an inert notice and visual treatment when a widget is not live (CSS, JS interop, markup), and add localized strings for the notice.
- Add and update tests covering snapshot requests, close behavior, and view re-attachment semantics.

These changes ensure saves can record the state a reader is looking at, prevent stale live controls after kernel restarts, and keep channel lifecycles consistent across host and client.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Introduce cross-kernel projection for widget traits so a widget trait can be projected into the notebook's shared variable store. Changes include:

- HostProtocol: new message and field types (bind, unbind, bind_reply, bind_set, bind_update, related fields and bind capability).
- PythonHostSession: projection lifecycle, storing projections, applying updates, sending/receiving projection messages, fingerprinting to avoid echoes, projection timeout handling, and store subscription management.
- New VariableProjection and ProjectionOutcome records for exposing projection state.
- New Python-side support module _versohost_bind.py to implement binding, unbinding, change publication and applying remote writes; integrated into versohost.py.
- Expose reduce_one in _versohost_vars to reduce single values for projection.
- New BindMagicCommand providing #!bind command (list/remove/bind) and related parsing/validation logic.
- Kernel helper GetBoundSessionAsync to obtain a session bound to the notebook for use by the magic command.
- Tests added for bind behavior and CI updated to run the new tests.
- Localized resource strings updated for the new magic command messages.

This adds end-to-end support for projecting a widget trait under a shared name, keeping the shared store and widget trait in sync across kernels while avoiding infinite echo and limiting size of transmitted values.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Add a new Interactive Widgets guide (docs/guides/interactive-widgets.md) describing live vs static widgets, saved state, network/loading behavior, anywidget support, binding (#!bind) and size/transport limits. Update top-level README, language-kernels guide, migration notes, Python README, and VS Code README to reference the new guide, clarify that ipywidgets and anywidget widgets can be live (controls reach the interpreter), and document widget binding/sharing between kernels. These changes clarify widget behavior, cross-language variable sharing, and export/import implications for readers and users.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Introduce the DAG Notebook showcase: adds a new samples/showcase/dag-notebook package with demo .verso notebooks and README, and implements the layout extension (DagNotebookLayout.cs) plus supporting files (DagNotebookStyles.cs, DependencyAnalyzer.cs, csproj). The layout provides dependency-aware, reactive notebook behavior (badges, stale marking, auto-run cascade, widget-bound controls) and emits CSS/JS assets for the client. Also includes minor updates to host integration points (LayoutHandler.cs, HostSession.cs) and the Python host display helper to support the extension's runtime behavior.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Use an explicit identity (LiveChannelId when present, otherwise the output) for ErrorBoundary and WidgetFrame keys instead of the output record. This prevents tearing down views for live outputs when their serialized content is refreshed (value-equality of the record would force rebuilds), while still treating re-runs (new channel IDs) as new outputs. Updated comments explain the rationale and retained retry/version behavior for forcing re-attempts.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Enable capturing of stdout/stderr and display payloads into ipywidgets.Output areas when running without a kernel. Adds a per-thread capture stack, pending-clear tracking, and helpers (capture_stream, capture_display, capture_clear) plus _record/_append plumbing in _versohost_display. install_output_capture overrides Output.__enter__/__exit__/clear_output to redirect writes and exceptions into the active Output, and is installed on first comm open in _versohost_comm.__init__. StreamWriter.write is updated to offer stream text to the current capture before routing to the host. Defensive error handling and weakrefs are used so widgets still work if capture installation fails.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Assign module.clear_output to the host clear_output implementation so ipywidgets and other helpers clear output areas correctly instead of emitting terminal escape sequences in notebooks. The assignment is wrapped in a try/except to avoid breaking environments where the binding may not be possible.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Add missing "widget" glossary entries (German, Spanish, Japanese) and add localized configuration strings for widgets.assetSource (bundled, cdn, description) in package.nls.* for de, es, ja, qps-ploc and zh-cn. Also adjust pseudo-localized UI text in UI.qps-Ploc.resx and reorder the Magic_Bind_Removed entry in Strings.qps-Ploc.resx to match surrounding entries. These changes surface the new widget asset-source settings in translations and fix/update qps-ploc resource ordering/strings.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Summary

Summary
Generated on: 08/04/2026 - 23:59:13
Coverage date: 08/04/2026 - 23:55:04 - 08/04/2026 - 23:59:03
Parser: MultiReport (30x Cobertura)
Assemblies: 17
Classes: 680
Files: 500
Line coverage: 66.3% (22681 of 34161)
Covered lines: 22681
Uncovered lines: 11480
Coverable lines: 34161
Total lines: 85813
Branch coverage: 58.4% (10671 of 18249)
Covered branches: 10671
Total branches: 18249
Method coverage: Feature is only available for sponsors

Coverage

Verso - 79.8%
Name Line Branch
Verso 79.8% 70%
Verso.Contexts.CellRenderContext 68.7%
Verso.Contexts.ExecutionContext 96% 50%
Verso.Contexts.MagicCommandContext 83.3% 50%
Verso.Contexts.NotebookMetadataContext 100% 50%
Verso.Contexts.PanelContext 31.2% 50%
Verso.Contexts.SimpleFormatterContext 0% 0%
Verso.Contexts.VariablePreviewService 68% 61.5%
Verso.Contexts.VariableStore 100% 100%
Verso.Contexts.VersoContext 97.3% 50%
Verso.Diffing.CellAligner 95.8% 92.9%
Verso.Diffing.NotebookDiffEngine 97.5% 86.5%
Verso.Display.DisplayFormatterContext 23% 50%
Verso.Display.DisplayHandler 14.6% 0%
Verso.Display.FormatterResolver 96% 100%
Verso.Display.HintedFormatterContext 33.3% 50%
Verso.Execution.BackgroundFaultMonitor 93.8% 100%
Verso.Execution.BackgroundFaultSink 100% 93.7%
Verso.Execution.ExecutionPipeline 95.3% 85%
Verso.Execution.ExecutionResult 100%
Verso.Execution.OutputBudget 86.6% 80%
Verso.Execution.OutputChannelHost 93.6% 85.7%
Verso.Export.ExportOptions 100%
Verso.Export.NotebookHtmlExporter 54% 58%
Verso.Export.NotebookMarkdownExporter 70.1% 78.4%
Verso.Extensions.CellDisplayPropertyProvider 84.3% 47.6%
Verso.Extensions.CellTypes.HtmlCellType 68.7%
Verso.Extensions.CellTypes.MarkdownCellType 100%
Verso.Extensions.CellTypes.MermaidCellType 68.7%
Verso.Extensions.CellTypes.ParametersCellType 100%
Verso.Extensions.CellVisibilityPropertyProvider 78.3% 50.6%
Verso.Extensions.ExtensionDirectoryResolver 81.8% 90%
Verso.Extensions.ExtensionHost 96.9% 90.5%
Verso.Extensions.ExtensionLoadContext 66.6% 64.2%
Verso.Extensions.ExtensionLoadException 69.2% 50%
Verso.Extensions.ExtensionTrustStore 91.2% 80.7%
Verso.Extensions.ExtensionValidationError 100%
Verso.Extensions.Formatters.CollectionFormatter 100% 100%
Verso.Extensions.Formatters.ExceptionFormatter 100% 75%
Verso.Extensions.Formatters.HtmlFormatter 100% 50%
Verso.Extensions.Formatters.ImageFormatter 92.5% 81.8%
Verso.Extensions.Formatters.ObjectFormatter 96.1% 87.5%
Verso.Extensions.Formatters.ObjectTreeRenderer 92.2% 80.3%
Verso.Extensions.Formatters.PrimitiveFormatter 100% 75%
Verso.Extensions.Formatters.SvgFormatter 100% 100%
Verso.Extensions.Kernels.HtmlKernel 82.2% 76.9%
Verso.Extensions.Kernels.MermaidKernel 84.5% 74.3%
Verso.Extensions.Layouts.ContentFallbackRenderer 7.1%
Verso.Extensions.Layouts.DashboardLayout 84.2% 65.4%
Verso.Extensions.Layouts.NotebookLayout 75.5% 38.3%
Verso.Extensions.Layouts.NotebookLayoutStyles 100% 100%
Verso.Extensions.Layouts.PresentationLayout 100% 100%
Verso.Extensions.Marketplace.ExtensionPackageRef 100% 100%
Verso.Extensions.Marketplace.LocalInstallResult 100%
Verso.Extensions.Marketplace.MarketplaceInstallResult 100%
Verso.Extensions.Marketplace.MarketplaceLoader 65.4% 64.6%
Verso.Extensions.Marketplace.MarketplaceSearchItem 0%
Verso.Extensions.Marketplace.NuGetMarketplaceService 57.8% 68.2%
Verso.Extensions.Renderers.HtmlCellRenderer 23% 0%
Verso.Extensions.Renderers.MarkdownRenderer 95% 100%
Verso.Extensions.Renderers.MermaidCellRenderer 23% 0%
Verso.Extensions.Renderers.ParametersCellRenderer 91.5% 69.4%
Verso.Extensions.Themes.VersoDarkTheme 99%
Verso.Extensions.Themes.VersoHighContrastTheme 99.2%
Verso.Extensions.Themes.VersoLightTheme 100%
Verso.Extensions.ToolbarActions.ClearCellOutputAction 85% 66.6%
Verso.Extensions.ToolbarActions.ClearOutputsAction 82.3%
Verso.Extensions.ToolbarActions.ExportHtmlAction 73.6% 30%
Verso.Extensions.ToolbarActions.ExportMarkdownAction 80.7% 50%
Verso.Extensions.ToolbarActions.ExportVersoAction 97.8% 80%
Verso.Extensions.ToolbarActions.RestartKernelAction 83.3%
Verso.Extensions.ToolbarActions.RunAllAction 88.8% 100%
Verso.Extensions.ToolbarActions.RunCellAction 88.8% 100%
Verso.Extensions.ToolbarActions.SwitchLayoutAction 34.6% 0%
Verso.Extensions.ToolbarActions.SwitchThemeAction 92.3% 83.3%
Verso.Extensions.Utilities.CellViewStateReader 72.5% 29.3%
Verso.Extensions.Utilities.CellVisibilityResolver 91.8% 87.5%
Verso.Extensions.Utilities.LegacyMetadataMigrator 100% 100%
Verso.Extensions.Utilities.VariableSubstitution 100% 94.4%
Verso.Kernels.CSharpKernel 72.3% 56.3%
Verso.Kernels.CSharpKernelOptions 100%
Verso.Kernels.NuGetPackageResolver 11.3% 8.2%
Verso.Kernels.NuGetResolveResult 0%
Verso.Kernels.NuGetRuntimeResolver 15.9% 9.8%
Verso.Kernels.NuGetSourceRegistry 0% 0%
Verso.Kernels.RoslynWorkspaceManager 81.2% 73%
Verso.Kernels.ScriptGlobals 100% 50%
Verso.Kernels.ScriptStateManager 77.4% 66.6%
Verso.LayoutManager 82.9% 67%
Verso.Localization.CellText 50%
Verso.Localization.VersoCultures 95.1% 100%
Verso.MagicCommands.AboutMagicCommand 89.6% 37.5%
Verso.MagicCommands.ExtensionMagicCommand 10.6% 14.2%
Verso.MagicCommands.ImportMagicCommand 90.4% 90.1%
Verso.MagicCommands.MagicCommandParser 90.4% 88.8%
Verso.MagicCommands.NuGetMagicCommand 38.8% 6.2%
Verso.MagicCommands.RestartMagicCommand 100% 100%
Verso.MagicCommands.TimeMagicCommand 100% 100%
Verso.NotebookOperations 76.9% 50%
Verso.Parameters.ParameterValueParser 100% 100%
Verso.Resources.Strings 75.9% 100%
Verso.Scaffold 93.3% 79%
Verso.Serializers.DibSerializer 96.1% 96.9%
Verso.Serializers.JupyterPolyglotPostProcessor 97.5% 94.8%
Verso.Serializers.JupyterSerializer 89.6% 72.2%
Verso.Serializers.LanguageDirectiveMap 86.1% 79.1%
Verso.Serializers.MarkdownSerializer 100% 92.8%
Verso.Serializers.Migrations.NotebookMigrationPipeline 100% 100%
Verso.Serializers.Migrations.V1_0ToV1_1Migration 100%
Verso.Serializers.VersoSerializer 94.6% 81.7%
Verso.SettingsManager 100% 82.5%
Verso.Stubs.StubExtensionHostContext 77.2% 90%
Verso.Stubs.StubNotebookOperations 0%
Verso.Stubs.StubThemeContext 100% 100%
Verso.ThemeEngine 95.9% 79.5%
Verso.Abstractions - 83.9%
Name Line Branch
Verso.Abstractions 83.9% 63.1%
Verso.Abstractions.CellContainerInfo 100%
Verso.Abstractions.CellDiffEntry 100%
Verso.Abstractions.CellInteractionContext 100%
Verso.Abstractions.CellModel 100%
Verso.Abstractions.CellOutput 42.8% 21.8%
Verso.Abstractions.Completion 100%
Verso.Abstractions.Diagnostic 100%
Verso.Abstractions.DisplayContext 81.8% 50%
Verso.Abstractions.DisplayExtensions 0% 0%
Verso.Abstractions.ExtensionConsentInfo 100%
Verso.Abstractions.ExtensionInfo 100%
Verso.Abstractions.FontDescriptor 100%
Verso.Abstractions.HoverInfo 100%
Verso.Abstractions.ICellRenderer 50%
Verso.Abstractions.ICellType 100%
Verso.Abstractions.IDataFormatter 0%
Verso.Abstractions.IExecutionContext 0%
Verso.Abstractions.IExtensionHostContext 50%
Verso.Abstractions.ILayoutEngine 80%
Verso.Abstractions.INotebookMetadata 0%
Verso.Abstractions.INotebookOperations 100%
Verso.Abstractions.INotebookPanel 100%
Verso.Abstractions.INotebookSerializer 100%
Verso.Abstractions.ITheme 0%
Verso.Abstractions.IToolbarAction 0%
Verso.Abstractions.IVersoContext 66.6%
Verso.Abstractions.LayoutCapabilityException 0%
Verso.Abstractions.LayoutDefaults 100%
Verso.Abstractions.LayoutHostCapabilities 100%
Verso.Abstractions.LayoutInteractionContext 100%
Verso.Abstractions.LayoutReference 26.6% 0%
Verso.Abstractions.LayoutRendererIsolationExtensions 100% 100%
Verso.Abstractions.LayoutRendererMountContext 100%
Verso.Abstractions.LayoutRendererPackage 100%
Verso.Abstractions.LayoutRendererUnmountContext 100%
Verso.Abstractions.LayoutStaticAsset 100%
Verso.Abstractions.LayoutStaticAssetLoadHints 100%
Verso.Abstractions.MetadataChange 100%
Verso.Abstractions.NotebookDiffResult 100%
Verso.Abstractions.NotebookDiffSummary 100%
Verso.Abstractions.NotebookFormatVersion 100% 100%
Verso.Abstractions.NotebookMigrationLog 100%
Verso.Abstractions.NotebookModel 100% 100%
Verso.Abstractions.NotebookParameterDefinition 100%
Verso.Abstractions.OutputChannelMessage 100%
Verso.Abstractions.OutputChannelProtocol 100% 66.6%
Verso.Abstractions.PanelInteractionContext 88.8%
Verso.Abstractions.ParameterDefinition 100%
Verso.Abstractions.Plural 100% 100%
Verso.Abstractions.PropertyField 100%
Verso.Abstractions.PropertyFieldOption 100%
Verso.Abstractions.PropertySection 100%
Verso.Abstractions.RenderResult 100%
Verso.Abstractions.SettingConstraints 100%
Verso.Abstractions.SettingDefinition 100%
Verso.Abstractions.SyntaxColorMap 100% 100%
Verso.Abstractions.ThemeColorTokens 100%
Verso.Abstractions.ThemeCss 100% 88.4%
Verso.Abstractions.ThemeElevation 100%
Verso.Abstractions.ThemeSpacing 100%
Verso.Abstractions.ThemeTypography 100%
Verso.Abstractions.UnavailableExtensionInfo 0%
Verso.Abstractions.VariableDescriptor 100%
Verso.Abstractions.VariableExplorerEntry 0%
Verso.Ado - 81.4%
Name Line Branch
Verso.Ado 81.4% 77.7%
Verso.Ado.CellType.SqlCellRenderer 76% 100%
Verso.Ado.CellType.SqlCellType 100%
Verso.Ado.Formatters.ResultSetFormatter 97.3% 86.3%
Verso.Ado.Helpers.ArgumentParser 100% 100%
Verso.Ado.Helpers.ConnectionResolver 69.2% 71.4%
Verso.Ado.Helpers.DbTypeMapper 100%
Verso.Ado.Helpers.ParameterReference 100%
Verso.Ado.Helpers.PlaceholderResolver 98.3% 91.6%
Verso.Ado.Helpers.ProviderDiscovery 52.8% 38.3%
Verso.Ado.Helpers.ProviderMessageListener 86.8% 86.9%
Verso.Ado.Helpers.SqlClrTypeMapper 97.9% 77.5%
Verso.Ado.Helpers.SqlDialectExtensions 100% 100%
Verso.Ado.Helpers.SqlDialectResolver 100% 100%
Verso.Ado.Helpers.SqlLocalScopeAnalyzer 81.3% 80.8%
Verso.Ado.Helpers.SqlParameterScanner 100% 95.7%
Verso.Ado.Helpers.SqlStatementSplitter 95% 95.1%
Verso.Ado.Import.JupyterSqlImportHook 97.3% 90%
Verso.Ado.Kernel.ColumnInfo 100%
Verso.Ado.Kernel.ForeignKeyInfo 100%
Verso.Ado.Kernel.SchemaCache 70.2% 56.8%
Verso.Ado.Kernel.SchemaCacheEntry 100%
Verso.Ado.Kernel.SqlKernel 82.9% 72.2%
Verso.Ado.Kernel.TableInfo 100%
Verso.Ado.Localization.CellText 50%
Verso.Ado.MagicCommands.SqlConnectMagicCommand 77.2% 69.1%
Verso.Ado.MagicCommands.SqlDisconnectMagicCommand 95.6% 100%
Verso.Ado.MagicCommands.SqlScaffoldMagicCommand 29.2% 25%
Verso.Ado.MagicCommands.SqlSchemaMagicCommand 92.2% 84.3%
Verso.Ado.Models.SqlColumnMetadata 100%
Verso.Ado.Models.SqlConnectionInfo 83.3%
Verso.Ado.Models.SqlDirectives 100% 100%
Verso.Ado.Models.SqlResultSet 100%
Verso.Ado.Resources.Strings 54.1% 100%
Verso.Ado.Scaffold.EfCorePrerequisiteChecker 100% 100%
Verso.Ado.Scaffold.EfCoreScaffolder 94% 87%
Verso.Ado.Scaffold.MagicCommandExecutionContext 0%
Verso.Ado.Scaffold.NamingConventions 96.7% 94.2%
Verso.Ado.Scaffold.ScaffoldResult 100%
Verso.Ado.SqlAdoExtension 0%
Verso.Ado.ToolbarActions.ExportCsvAction 84.9% 94.1%
Verso.Ado.ToolbarActions.ExportJsonAction 88% 93.7%
Verso.Blazor - 26.8%
Name Line Branch
Verso.Blazor 26.8% 21.9%
Program 0% 0%
Verso.Blazor.Components.App 0% 0%
Verso.Blazor.Components.DiffSourcePickerDialog 33.3% 16.6%
Verso.Blazor.Components.Layout.MainLayout 0%
Verso.Blazor.Components.NotebookInputDialog 70.3% 60%
Verso.Blazor.Components.Pages.NotebookPage 31.8% 35.3%
Verso.Blazor.Components.Routes 0%
Verso.Blazor.Localization.VersoLocalization 0% 0%
Verso.Blazor.Services.BlazorCellRenderContext 0% 0%
Verso.Blazor.Services.BlazorLayoutRenderContext 21% 37.5%
Verso.Blazor.Services.BlazorToolbarActionContext 0% 0%
Verso.Blazor.Services.GitCliHelper 86.6% 58.3%
Verso.Blazor.Services.LayoutAssetCache 9.5% 0%
Verso.Blazor.Services.LayoutAssetProvider 85% 71.4%
Verso.Blazor.Services.NotebookService 0% 0%
Verso.Blazor.Services.NotebookServiceOptions 60% 25%
Verso.Blazor.Services.ServerInputRequest 100%
Verso.Blazor.Services.ServerNotebookService 26.8% 18.3%
Verso.Blazor.Shared - 61.1%
Name Line Branch
Verso.Blazor.Shared 61.1% 50.8%
Verso.Blazor.Shared.Components.CustomLayoutFrame 0% 0%
Verso.Blazor.Shared.Components.Editor.MonacoDiffEditor 95% 100%
Verso.Blazor.Shared.Components.Editor.MonacoEditor 64.7% 62.5%
Verso.Blazor.Shared.Components.Notebook.Cell 49% 49.8%
Verso.Blazor.Shared.Components.Notebook.CellPropertiesPanel 65% 80%
Verso.Blazor.Shared.Components.Notebook.ComparePanel 90.3% 73%
Verso.Blazor.Shared.Components.Notebook.CustomLayoutHtml 67.8% 41.8%
Verso.Blazor.Shared.Components.Notebook.DefaultCellList 84.6% 80.7%
Verso.Blazor.Shared.Components.Notebook.DiffErrorDialog 54.5% 25%
Verso.Blazor.Shared.Components.Notebook.ExtensionConsentDialog 90.9% 79.1%
Verso.Blazor.Shared.Components.Notebook.ExtensionPanel 57.2% 44.3%
Verso.Blazor.Shared.Components.Notebook.ExtensionPanelHost 84.4% 76%
Verso.Blazor.Shared.Components.Notebook.LayoutRenderer 47% 22.2%
Verso.Blazor.Shared.Components.Notebook.MetadataPanel 71.4% 44.4%
Verso.Blazor.Shared.Components.Notebook.NotebookCellContext 100% 100%
Verso.Blazor.Shared.Components.Notebook.NotebookDiffView 94% 77.2%
Verso.Blazor.Shared.Components.Notebook.OutputView 69% 50%
Verso.Blazor.Shared.Components.Notebook.PropertyFieldComponent 45.1% 41.5%
Verso.Blazor.Shared.Components.Notebook.PropertySectionComponent 100% 100%
Verso.Blazor.Shared.Components.Notebook.SettingsPanel 53% 46.1%
Verso.Blazor.Shared.Components.Notebook.Toolbar 76.5% 70.8%
Verso.Blazor.Shared.Components.Notebook.VariableExplorer 64.9% 83.3%
Verso.Blazor.Shared.Components.Notebook.ViewPanel 93.5% 89.2%
Verso.Blazor.Shared.Components.Notebook.WidgetFrame 77.2% 80%
Verso.Blazor.Shared.Components.ThemeProvider 94.4% 81.2%
Verso.Blazor.Shared.Models.CellOutputUpdatedEventArgs 0%
Verso.Blazor.Shared.Models.CellTypeInfo 100%
Verso.Blazor.Shared.Models.CompletionItemDto 0%
Verso.Blazor.Shared.Models.CompletionsResultDto 0%
Verso.Blazor.Shared.Models.DiffSourceInfo 83.3%
Verso.Blazor.Shared.Models.DiffSources 100% 95.8%
Verso.Blazor.Shared.Models.ExecutionResultDto 60%
Verso.Blazor.Shared.Models.ExtensionSettingsGroup 100%
Verso.Blazor.Shared.Models.HeadingDetector 44.8% 34%
Verso.Blazor.Shared.Models.HostPanels 100% 100%
Verso.Blazor.Shared.Models.HoverRangeDto 0%
Verso.Blazor.Shared.Models.HoverResultDto 0%
Verso.Blazor.Shared.Models.InstalledExtensionDto 77.7% 0%
Verso.Blazor.Shared.Models.KernelHealthChangedEventArgs 100%
Verso.Blazor.Shared.Models.KernelLanguageInfo 100%
Verso.Blazor.Shared.Models.LayoutFrameMessageEventArgs 0%
Verso.Blazor.Shared.Models.LayoutInfo 70%
Verso.Blazor.Shared.Models.LayoutRendererPackageDto 0%
Verso.Blazor.Shared.Models.LayoutStaticAssetDescriptor 0%
Verso.Blazor.Shared.Models.LayoutThemeBundle 100%
Verso.Blazor.Shared.Models.LayoutThemeBundleBuilder 100% 100%
Verso.Blazor.Shared.Models.LayoutUpdatedEventArgs 100%
Verso.Blazor.Shared.Models.NotebookComparison 100% 100%
Verso.Blazor.Shared.Models.NotebookPanelInfo 100% 100%
Verso.Blazor.Shared.Models.PackageInstallResultDto 40%
Verso.Blazor.Shared.Models.PackageSearchResultDto 88.8%
Verso.Blazor.Shared.Models.PanelDisplayNames 100% 100%
Verso.Blazor.Shared.Models.PanelIcons 100% 100%
Verso.Blazor.Shared.Models.PanelUpdatedEventArgs 100%
Verso.Blazor.Shared.Models.PropertySectionResult 100%
Verso.Blazor.Shared.Models.ThemeData 100%
Verso.Blazor.Shared.Models.ThemeInfo 100%
Verso.Blazor.Shared.Models.ToolbarActionInfo 90%
Verso.Blazor.Shared.Models.VariableEntryDto 100%
Verso.Blazor.Shared.Models.VariableInspectResultDto 60%
Verso.Blazor.Shared.Resources.UI 57.2% 100%
Verso.Blazor.Shared.Services.INotebookService 11.1%
Verso.Cli - 41.3%
Name Line Branch
Verso.Cli 41.3% 41.8%
Program 0%
System.Text.RegularExpressions.Generated.HtmlTagRegex_0 100%
Verso.Cli.Commands.ConvertCommand 52.1% 100%
Verso.Cli.Commands.ExportCommand 0% 0%
Verso.Cli.Commands.InfoCommand 8.1% 0%
Verso.Cli.Commands.ReplCommand 14.4% 0%
Verso.Cli.Commands.RunCommand 53.9%
Verso.Cli.Commands.ServeCommand 49.5%
Verso.Cli.Execution.CellOutcome 88.4% 88.4%
Verso.Cli.Execution.CliToolbarActionContext 0% 0%
Verso.Cli.Execution.HeadlessRunner 80.4% 73.8%
Verso.Cli.Execution.JsonCellOutput 100%
Verso.Cli.Execution.JsonMimeOutput 100%
Verso.Cli.Execution.JsonOutputDocument 100%
Verso.Cli.Execution.JsonOutputWriter 88.8% 80.7%
Verso.Cli.Execution.JsonSummary 100%
Verso.Cli.Execution.OutputRenderer 84.4% 85%
Verso.Cli.Execution.RunOptions 90.9%
Verso.Cli.Execution.RunResult 100%
Verso.Cli.Execution.ToolbarActionResolver 46.5% 38.8%
Verso.Cli.Hosting.BlazorHostBuilder 0% 0%
Verso.Cli.Hosting.ServeOptions 0%
Verso.Cli.Parameters.ParameterResolutionResult 100%
Verso.Cli.Parameters.ParameterResolver 92.9% 87.2%
Verso.Cli.Parameters.ParameterTypeParser 50%
Verso.Cli.Repl.Meta.Commands.ClearMeta 60%
Verso.Cli.Repl.Meta.Commands.ConvertMeta 11.1% 0%
Verso.Cli.Repl.Meta.Commands.ExitMeta 40% 0%
Verso.Cli.Repl.Meta.Commands.ExportMeta 4.3% 0%
Verso.Cli.Repl.Meta.Commands.HelpMeta 12% 0%
Verso.Cli.Repl.Meta.Commands.HistoryMeta 12% 0%
Verso.Cli.Repl.Meta.Commands.KernelMeta 10.7% 0%
Verso.Cli.Repl.Meta.Commands.LayoutMeta 20% 0%
Verso.Cli.Repl.Meta.Commands.ListMeta 5.3% 0%
Verso.Cli.Repl.Meta.Commands.LoadMeta 6.3% 0%
Verso.Cli.Repl.Meta.Commands.MdMeta 50%
Verso.Cli.Repl.Meta.Commands.RecallMeta 15.7% 0%
Verso.Cli.Repl.Meta.Commands.RerunMeta 4.8% 0%
Verso.Cli.Repl.Meta.Commands.ResetMeta 42.8%
Verso.Cli.Repl.Meta.Commands.SaveMeta 70.7% 88.8%
Verso.Cli.Repl.Meta.Commands.SetMeta 7.5% 0%
Verso.Cli.Repl.Meta.Commands.ThemeMeta 15% 0%
Verso.Cli.Repl.Meta.Commands.VarsMeta 10.3% 0%
Verso.Cli.Repl.Meta.Commands.ViewMeta 13% 0%
Verso.Cli.Repl.Meta.IMetaCommand 100%
Verso.Cli.Repl.Meta.MetaCommandRegistry 100% 83.3%
Verso.Cli.Repl.Meta.MetaContext 75% 50%
Verso.Cli.Repl.Prompt.HistoryStore 83.3% 75%
Verso.Cli.Repl.Prompt.KernelPromptCallbacks 11.2% 17.9%
Verso.Cli.Repl.Prompt.MinimalHighlighter 57.4% 52.9%
Verso.Cli.Repl.Prompt.PlainPromptDriver 87.5% 92.3%
Verso.Cli.Repl.Prompt.PrettyPromptDriver 0% 0%
Verso.Cli.Repl.Prompt.ReplInput 100%
Verso.Cli.Repl.Prompt.TerminalCapabilities 18.1% 14.2%
Verso.Cli.Repl.Rendering.MimeDispatcher 78.3% 71.6%
Verso.Cli.Repl.Rendering.Renderers.CsvTableRenderer 86.6% 63.6%
Verso.Cli.Repl.Rendering.Renderers.HtmlStripRenderer 100% 50%
Verso.Cli.Repl.Rendering.Renderers.ImagePlaceholderRenderer 51.6% 19.2%
Verso.Cli.Repl.Rendering.Renderers.JsonRenderer 0% 0%
Verso.Cli.Repl.Rendering.Renderers.MarkdownRenderer 91.6% 77.7%
Verso.Cli.Repl.Rendering.Renderers.PlainTextRenderer 100% 50%
Verso.Cli.Repl.Rendering.TerminalRenderer 63.2% 45.3%
Verso.Cli.Repl.Rendering.TruncationPolicy 100% 83.3%
Verso.Cli.Repl.ReplLoop 18.2% 0%
Verso.Cli.Repl.ReplOptions 0%
Verso.Cli.Repl.ReplSession 69.2% 70%
Verso.Cli.Repl.Settings.ReplSettings 100%
Verso.Cli.Repl.Settings.ReplSettingsLoader 71% 75%
Verso.Cli.Repl.Signals.SignalHandler 48.3% 25%
Verso.Cli.Resources.Strings 47.8% 100%
Verso.Cli.Utilities.BrowserLauncher 0% 0%
Verso.Cli.Utilities.CellCount 100%
Verso.Cli.Utilities.DisplayWidth 63.6% 60.8%
Verso.Cli.Utilities.LanguageOption 0% 0%
Verso.Cli.Utilities.Messages 90% 50%
Verso.Cli.Utilities.PythonAutoInstallOption 25% 0%
Verso.Cli.Utilities.PythonInterpreterOption 25% 0%
Verso.Cli.Utilities.SerializerNotFoundException 100%
Verso.Cli.Utilities.SerializerResolver 94.7% 87.5%
Verso.FSharp - 82.4%
Name Line Branch
Verso.FSharp 82.4% 70.4%
Verso.FSharp.Formatters.FSharpDataFormatter 82.8% 68.4%
Verso.FSharp.FSharpExtension 100%
Verso.FSharp.Helpers.DiagnosticMapper 95.6% 78.5%
Verso.FSharp.Helpers.FSharpValueFormatter 23.2% 33.3%
Verso.FSharp.Helpers.GlyphMapper 95.6% 97.7%
Verso.FSharp.Import.JupyterFSharpPostProcessor 91.1% 75%
Verso.FSharp.Kernel.FSharpCheckerManager 97.8% 66.6%
Verso.FSharp.Kernel.FSharpKernel 81.8% 69.4%
Verso.FSharp.Kernel.FSharpKernelOptions 100%
Verso.FSharp.Kernel.FSharpProjectContext 100% 100%
Verso.FSharp.Kernel.FsiSessionManager 89.5% 67.7%
Verso.FSharp.Kernel.VariableBridge 80.5% 76.1%
Verso.FSharp.NuGet.FSharpNuGetResolveResult 100%
Verso.FSharp.NuGet.NuGetFallbackResolver 74.8% 62.3%
Verso.FSharp.NuGet.NuGetProcessResult 100%
Verso.FSharp.NuGet.NuGetReferenceProcessor 82.4% 81.2%
Verso.FSharp.NuGet.ScriptDirectiveProcessor 89.3% 79.1%
Verso.FSharp.Resources.Strings 64.5% 100%
Verso.Host - 56.2%
Name Line Branch
Verso.Host 56.2% 41.7%
Program 0% 0%
Verso.Host.Channels.SessionOutputChannelTransport 100%
Verso.Host.Dto.CellAddParams 100%
Verso.Host.Dto.CellChangeLanguageParams 0%
Verso.Host.Dto.CellChangeTypeParams 100%
Verso.Host.Dto.CellDto 100%
Verso.Host.Dto.CellGetParams 100%
Verso.Host.Dto.CellInsertParams 100%
Verso.Host.Dto.CellInteractParams 100%
Verso.Host.Dto.CellInteractResult 100%
Verso.Host.Dto.CellMoveParams 100%
Verso.Host.Dto.CellOutputDto 100%
Verso.Host.Dto.CellRemoveParams 100%
Verso.Host.Dto.CellTypeDto 0%
Verso.Host.Dto.CellTypesResult 0%
Verso.Host.Dto.CellUpdateSourceParams 100%
Verso.Host.Dto.ChannelMessageParams 100%
Verso.Host.Dto.ChannelReadyParams 100%
Verso.Host.Dto.CompletionDto 0%
Verso.Host.Dto.CompletionsParams 0%
Verso.Host.Dto.CompletionsResult 0%
Verso.Host.Dto.DiagnosticDto 0%
Verso.Host.Dto.DiagnosticsParams 0%
Verso.Host.Dto.DiagnosticsResult 0%
Verso.Host.Dto.ExecutionResultDto 100%
Verso.Host.Dto.ExecutionRunParams 100%
Verso.Host.Dto.ExecutionStateNotification 100%
Verso.Host.Dto.ExtensionInfoDto 100%
Verso.Host.Dto.ExtensionInstallLocalParams 0%
Verso.Host.Dto.ExtensionInstallParams 0%
Verso.Host.Dto.ExtensionInstallResult 0%
Verso.Host.Dto.ExtensionListResult 100%
Verso.Host.Dto.ExtensionSearchParams 0%
Verso.Host.Dto.ExtensionSearchResult 0%
Verso.Host.Dto.ExtensionSettingsDto 0%
Verso.Host.Dto.ExtensionToggleParams 100%
Verso.Host.Dto.ExtensionUninstallParams 0%
Verso.Host.Dto.ExtensionVersionsParams 0%
Verso.Host.Dto.ExtensionVersionsResult 0%
Verso.Host.Dto.FontDto 100%
Verso.Host.Dto.HoverParams 0%
Verso.Host.Dto.HoverResult 0%
Verso.Host.Dto.InstalledExtensionItemDto 100%
Verso.Host.Dto.KernelRestartParams 0%
Verso.Host.Dto.LanguageDto 100%
Verso.Host.Dto.LanguagesResult 100%
Verso.Host.Dto.LayoutAllocateFrameInstanceParams 100%
Verso.Host.Dto.LayoutAllocateFrameInstanceResult 100%
Verso.Host.Dto.LayoutDto 100%
Verso.Host.Dto.LayoutGetCellContainerParams 0%
Verso.Host.Dto.LayoutGetCellContainerResult 0%
Verso.Host.Dto.LayoutGetRendererPackageParams 100%
Verso.Host.Dto.LayoutGetRendererPackageResult 100%
Verso.Host.Dto.LayoutGetStaticAssetsParams 100%
Verso.Host.Dto.LayoutGetStaticAssetsResult 100%
Verso.Host.Dto.LayoutInteractParams 100%
Verso.Host.Dto.LayoutRendererMountedParams 100%
Verso.Host.Dto.LayoutRendererMountedResult 100%
Verso.Host.Dto.LayoutRendererUnmountedParams 100%
Verso.Host.Dto.LayoutRenderParams 0%
Verso.Host.Dto.LayoutRenderResult 0%
Verso.Host.Dto.LayoutsResult 100%
Verso.Host.Dto.LayoutStaticAssetDto 100%
Verso.Host.Dto.LayoutStaticAssetLoadHintsDto 100%
Verso.Host.Dto.LayoutSwitchParams 0%
Verso.Host.Dto.LayoutUpdateCellParams 100%
Verso.Host.Dto.LogExtensionParams 100%
Verso.Host.Dto.NotebookCloseParams 100%
Verso.Host.Dto.NotebookDiffParams 100%
Verso.Host.Dto.NotebookOpenParams 100%
Verso.Host.Dto.NotebookOpenResult 100%
Verso.Host.Dto.NotebookSaveResult 100%
Verso.Host.Dto.NotebookSetDefaultKernelParams 0%
Verso.Host.Dto.NotebookSetFilePathParams 0%
Verso.Host.Dto.PackageSearchItemDto 0%
Verso.Host.Dto.PanelInfoDto 100%
Verso.Host.Dto.PanelInteractParams 100%
Verso.Host.Dto.PanelListParams 100%
Verso.Host.Dto.PanelListResult 100%
Verso.Host.Dto.PanelRenderParams 100%
Verso.Host.Dto.PanelRenderResult 100%
Verso.Host.Dto.PanelRepresentationDto 100%
Verso.Host.Dto.ParameterAddParams 0%
Verso.Host.Dto.ParameterDefDto 0%
Verso.Host.Dto.ParameterListResult 0%
Verso.Host.Dto.ParameterRemoveParams 0%
Verso.Host.Dto.ParameterUpdateParams 0%
Verso.Host.Dto.PropertiesGetSectionsParams 100%
Verso.Host.Dto.PropertiesGetSectionsResult 100%
Verso.Host.Dto.PropertiesGetSupportedResult 100%
Verso.Host.Dto.PropertiesUpdatePropertyParams 100%
Verso.Host.Dto.PropertyFieldDto 100%
Verso.Host.Dto.PropertyFieldOptionDto 100%
Verso.Host.Dto.PropertySectionDto 100%
Verso.Host.Dto.PropertySectionResultDto 100%
Verso.Host.Dto.RangeDto 0%
Verso.Host.Dto.SettingConstraintsDto 0%
Verso.Host.Dto.SettingDefinitionDto 0%
Verso.Host.Dto.SettingsGetDefinitionsResult 0%
Verso.Host.Dto.SettingsGetParams 0%
Verso.Host.Dto.SettingsGetResult 0%
Verso.Host.Dto.SettingsResetParams 0%
Verso.Host.Dto.SettingsUpdateParams 0%
Verso.Host.Dto.ThemeElevationDto 100%
Verso.Host.Dto.ThemeListItemDto 0%
Verso.Host.Dto.ThemeResult 100%
Verso.Host.Dto.ThemeSpacingDto 100%
Verso.Host.Dto.ThemesResult 0%
Verso.Host.Dto.ThemeTypographyDto 100%
Verso.Host.Dto.ToolbarActionDto 0%
Verso.Host.Dto.ToolbarActionsResult 0%
Verso.Host.Dto.ToolbarExecuteParams 0%
Verso.Host.Dto.ToolbarGetEnabledStatesParams 0%
Verso.Host.Dto.ToolbarGetEnabledStatesResult 0%
Verso.Host.Dto.VariableEntryDto 100%
Verso.Host.Dto.VariableInspectParams 0%
Verso.Host.Dto.VariableInspectResult 0%
Verso.Host.Dto.VariableListResult 100%
Verso.Host.Handlers.CellHandler 71.2% 46.5%
Verso.Host.Handlers.DiffHandler 100% 80%
Verso.Host.Handlers.ExecutionHandler 41.2% 23.6%
Verso.Host.Handlers.ExtensionHandler 28.3% 9.5%
Verso.Host.Handlers.InteractionHandler 95.8% 70%
Verso.Host.Handlers.KernelHandler 0% 0%
Verso.Host.Handlers.LayoutHandler 71.6% 51.1%
Verso.Host.Handlers.LogHandler 90.9% 90%
Verso.Host.Handlers.NotebookHandler 56.6% 55.3%
Verso.Host.Handlers.OutputChannelHandler 95.6% 72.7%
Verso.Host.Handlers.OutputHandler 100%
Verso.Host.Handlers.PanelHandler 100% 70.8%
Verso.Host.Handlers.ParameterHandler 0% 0%
Verso.Host.Handlers.PropertiesHandler 76.9% 62.5%
Verso.Host.Handlers.SettingsHandler 21.3% 14.5%
Verso.Host.Handlers.ThemeHandler 83.4% 12.5%
Verso.Host.Handlers.ToolbarHandler 0% 0%
Verso.Host.Handlers.VariableHandler 33.3% 15%
Verso.Host.HostSession 40.6% 42.4%
Verso.Host.Layouts.IframeFrameChannel 100%
Verso.Host.Layouts.LayoutFrameChannel 100% 100%
Verso.Host.Layouts.LayoutSessionFrameTracker 100% 91.6%
Verso.Host.NotebookSession 77.6% 46.4%
Verso.Host.Protocol.JsonRpcMessage 98% 91.6%
Verso.Host.Resources.Strings 33.3% 100%
Verso.Http - 74.7%
Name Line Branch
Verso.Http 74.7% 58.2%
Verso.Http.CellType.HttpCellRenderer 35.7%
Verso.Http.CellType.HttpCellType 100%
Verso.Http.Formatting.HttpResponseFormatter 91.2% 76.9%
Verso.Http.Kernel.HttpKernel 58.3% 40.7%
Verso.Http.Localization.CellText 100%
Verso.Http.MagicCommands.HttpSetBaseMagicCommand 100% 100%
Verso.Http.MagicCommands.HttpSetHeaderMagicCommand 88.5% 83.3%
Verso.Http.MagicCommands.HttpSetTimeoutMagicCommand 100% 100%
Verso.Http.Models.HttpRequestBlock 100%
Verso.Http.Models.HttpResponseData 100%
Verso.Http.Models.ParsedVariable 100%
Verso.Http.Parsing.HttpRequestParser 98.2% 98.4%
Verso.Http.Parsing.HttpResponseReference 85.1% 83.3%
Verso.Http.Parsing.HttpVariableResolver 64.5% 35.2%
Verso.Http.Resources.Strings 47.7% 100%
Verso.JavaScript - 52.7%
Name Line Branch
Verso.JavaScript 52.7% 47.6%
Verso.JavaScript.Kernel.IJavaScriptRunner 0%
Verso.JavaScript.Kernel.JavaScriptDisplayOutput 0%
Verso.JavaScript.Kernel.JavaScriptEngineManager 53.7% 50%
Verso.JavaScript.Kernel.JavaScriptKernel 81.8% 74.2%
Verso.JavaScript.Kernel.JavaScriptKernelOptions 100%
Verso.JavaScript.Kernel.JavaScriptRunResult 100%
Verso.JavaScript.Kernel.JintConsoleShim 100% 66.6%
Verso.JavaScript.Kernel.JintRunner 84.8% 79%
Verso.JavaScript.Kernel.NodeDetectionResult 100%
Verso.JavaScript.Kernel.NodeProcessRunner 0% 0%
Verso.JavaScript.Kernel.TranspileResult 0% 0%
Verso.JavaScript.Kernel.TypeScriptKernel 20.8% 12.8%
Verso.JavaScript.Kernel.VariableBridge 84.4% 81.8%
Verso.JavaScript.MagicCommands.NpmMagicCommand 56.3% 25%
Verso.JavaScript.MagicCommands.NpmManager 7.2% 12.5%
Verso.JavaScript.MagicCommands.NpmPackage 100% 50%
Verso.JavaScript.MagicCommands.NpmReport 96.2% 79.5%
Verso.JavaScript.Resources.Strings 53.4% 100%
Verso.PowerShell - 64.7%
Name Line Branch
Verso.PowerShell 64.7% 51.3%
System.Text.RegularExpressions.Generated.AnsiEscapeSequenceRegex_0 100%
Verso.PowerShell.Helpers.CompletionResultTypeMapper 27.7% 13.3%
Verso.PowerShell.Kernel.Host.PowerShellHostInputRequest 100%
Verso.PowerShell.Kernel.Host.PowerShellHostOutput 100%
Verso.PowerShell.Kernel.Host.VersoPowerShellHost 61.9%
Verso.PowerShell.Kernel.Host.VersoPowerShellHostUserInterface 35.9% 22.8%
Verso.PowerShell.Kernel.Host.VersoPowerShellRawUserInterface 21.8%
Verso.PowerShell.Kernel.InvokeResult 100%
Verso.PowerShell.Kernel.PowerShellKernel 88.8% 75%
Verso.PowerShell.Kernel.PowerShellKernelOptions 100%
Verso.PowerShell.Kernel.RunspaceManager 66.6% 51.4%
Verso.PowerShell.Kernel.VariableBridge 82.8% 83.3%
Verso.PowerShell.PowerShellExtension 100%
Verso.PowerShell.Resources.Strings 61.5% 100%
Verso.Python - 76.9%
Name Line Branch
Verso.Python 76.9% 69.8%
Verso.Python.Helpers.JediTypeMapper 100% 100%
Verso.Python.Helpers.PythonPositionHelpers 100% 100%
Verso.Python.Host.HostBootstrap 100% 100%
Verso.Python.Host.HostHandshake 100% 70%
Verso.Python.Host.HostIntelliSense 100% 100%
Verso.Python.Host.HostPackages 100% 100%
Verso.Python.Host.HostProcessLauncher 66.6% 50%
Verso.Python.Host.HostProcessStartInfo 100%
Verso.Python.Host.HostProtocol 96.7% 98.1%
Verso.Python.Host.HostScriptExtractor 81.6% 65%
Verso.Python.Host.HostVariables 77.1% 52.5%
Verso.Python.Host.ManagedHostProcessHandle 87.5% 75%
Verso.Python.Host.NdjsonFramer 86.2% 73%
Verso.Python.Host.ProjectionOutcome 100%
Verso.Python.Host.PythonCommRouter 82.4% 86.2%
Verso.Python.Host.PythonHostAuthenticationException 100%
Verso.Python.Host.PythonHostConnection 86.3% 83.3%
Verso.Python.Host.PythonHostException 50%
Verso.Python.Host.PythonHostProcess 81.7% 66.2%
Verso.Python.Host.PythonHostProtocolException 100%
Verso.Python.Host.PythonHostSession 84.5% 74.1%
Verso.Python.Host.PythonHostTimeoutException 0%
Verso.Python.Host.RequestCorrelator 92% 78.5%
Verso.Python.Host.StreamLineAssembler 90.4% 92.8%
Verso.Python.Host.VariableConverters 48.4% 69.2%
Verso.Python.Host.VariableProjection 100%
Verso.Python.Host.VariableShapes 80.5% 58.8%
Verso.Python.Host.WindowsHostProcessHandle 0% 0%
Verso.Python.Host.WireTag 73.9% 83.3%
Verso.Python.Interpreter.InterpreterInfo 66.6% 20%
Verso.Python.Interpreter.InterpreterLocator 62.1% 62.7%
Verso.Python.Interpreter.InterpreterQuery 100%
Verso.Python.Interpreter.InterpreterResolution 72.2% 37.5%
Verso.Python.Interpreter.InterpreterValidation 100%
Verso.Python.Interpreter.InterpreterValidator 91.4% 78.2%
Verso.Python.Interpreter.JediTools 82.5% 94.4%
Verso.Python.Interpreter.ManagedEnvironment 81.8% 62.5%
Verso.Python.Interpreter.ProcessRunner 95% 75%
Verso.Python.Interpreter.UvTool 66.6% 33.3%
Verso.Python.Interpreter.WellKnownInterpreterPaths 0% 0%
Verso.Python.Kernel.PythonKernel 74.3% 61.2%
Verso.Python.Kernel.PythonKernelOptions 100%
Verso.Python.MagicCommands.BindMagicCommand 72.5% 68.8%
Verso.Python.MagicCommands.PipMagicCommand 22.8% 0%
Verso.Python.MagicCommands.PythonMagicCommand 81.4% 63.7%
Verso.Python.PackageManagement.AutoInstallService 99.3% 97%
Verso.Python.PackageManagement.ImportMap 100% 92.8%
Verso.Python.PackageManagement.ImportScan 100% 100%
Verso.Python.PackageManagement.InstalledPackage 100%
Verso.Python.PackageManagement.InstallReport 95.8% 87.2%
Verso.Python.PackageManagement.PackageInstaller 92.8% 88.6%
Verso.Python.PackageManagement.Pep723Block 97.7% 94.8%
Verso.Python.PackageManagement.RequirementGuard 88% 71.7%
Verso.Python.PackageManagement.RequiresPython 94.4% 91.3%
Verso.Python.PackageManagement.ResolvedImport 100%
Verso.Python.PackageManagement.ScannedImport 100%
Verso.Python.PackageManagement.ScriptMetadata 100%
Verso.Python.Resources.Strings 64.5% 100%
Verso.Sample.Diagram - 80.1%
Name Line Branch
Verso.Sample.Diagram 80.1% 85.5%
Verso.Sample.Diagram.DiagramCellType 0%
Verso.Sample.Diagram.DiagramKernel 82% 100%
Verso.Sample.Diagram.DiagramRenderer 65% 100%
Verso.Sample.Diagram.Models.DiagramEdge 100%
Verso.Sample.Diagram.Models.DiagramGraph 100%
Verso.Sample.Diagram.Models.DiagramNode 100%
Verso.Sample.Diagram.Parsing.ArrowNotationParser 100% 100%
Verso.Sample.Diagram.Rendering.SvgFlowchartRenderer 96.5% 79.1%
Verso.Sample.Dice - 82.2%
Name Line Branch
Verso.Sample.Dice 82.2% 90%
Verso.Sample.Dice.DiceExtension 82.8% 81.8%
Verso.Sample.Dice.DiceFormatter 82.3% 83.3%
Verso.Sample.Dice.DiceRenderer 70.8% 100%
Verso.Sample.Dice.DiceRollAction 57.1% 100%
Verso.Sample.Dice.Models.DiceNotation 100% 100%
Verso.Sample.Dice.Models.DiceResult 100%
Verso.Sample.Slides - 58.8%
Name Line Branch
Verso.Sample.Slides 58.8% 55.5%
Verso.Sample.Slides.Models.SlideAssignment 100%
Verso.Sample.Slides.PresentationLayout 57.9% 55.5%
Verso.Sample.Sparkline - 67.3%
Name Line Branch
Verso.Sample.Sparkline 67.3% 50%
Verso.Sample.Sparkline.RendererScript 100% 50%
Verso.Sample.Sparkline.SparklineLayout 64.5% 50%
Verso.Testing - 80.1%
Name Line Branch
Verso.Testing 80.1% 69.5%
Verso.Testing.Fakes.FakeCellInteractionHandler 82.1% 0%
Verso.Testing.Fakes.FakeCellPropertyProvider 100%
Verso.Testing.Fakes.FakeCellRenderer 80%
Verso.Testing.Fakes.FakeCellType 80% 75%
Verso.Testing.Fakes.FakeDataFormatter 70.8% 0%
Verso.Testing.Fakes.FakeExtension 73.9%
Verso.Testing.Fakes.FakeFrameChannel 94.7% 83.3%
Verso.Testing.Fakes.FakeIsolatedLayoutEngine 75% 100%
Verso.Testing.Fakes.FakeLanguageKernel 86.8% 100%
Verso.Testing.Fakes.FakeLayoutInteractionHandler 75.6% 100%
Verso.Testing.Fakes.RecordedFrameMessage 100%
Verso.Testing.Stubs.StubCellRenderContext 75%
Verso.Testing.Stubs.StubExecutionContext 88% 100%
Verso.Testing.Stubs.StubFormatterContext 81.8%
Verso.Testing.Stubs.StubMagicCommandContext 80%
Verso.Testing.Stubs.StubNotebookOperations 73.8% 100%
Verso.Testing.Stubs.StubToolbarActionContext 80%
Verso.Testing.Stubs.StubVersoContext 64.2%

Ensure replies are addressed only when they come from the same comm by tracking comm_id per-thread and adding _answering_channel logic; update dispatch to set/clear comm_id. Improve embed state extraction to use ipywidgets.dependency_state for a view-local closure (with a fallback to session-wide get_manager_state), and fix embed_snippet call to pass the widget instance. Prevent double-counting replayed messages in OutputChannelHost by tracking _replayHeld, change overflow handling to mark closed under lock and report outside it, and make FlushAsync replay semantics safer. Make Scaffold refreshes robust by reading outputs defensively (ReadOutputs) and matching snapshots by channel id; start snapshot deadline lazily. Adjust BindMagicCommand parsing to handle a trailing keyword with no name and refine separator detection. Add/adjust tests for comm behavior, embedding state, and BindMagic parsing.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Fix widget height reporting by including children bottoms so margin-collapsed content and output areas are measured correctly. Introduce a pending queue to hold kernel-initiated comm messages until the state snapshot is applied, and add drainPending to replay or discard held messages after snapshot. Add hasModel helper to avoid exceptions from get_model for unknown ids, use it when checking for missing models and before drawing slots, and adjust the comm message handler to enqueue messages when appropriate. These changes make widget loading more robust against out-of-order messages and model lookup errors.

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
Delete samples/showcase/dag-notebook/dag-notebook-test.verso, removing the DAG Notebook example notebook (verso format). The deleted file included metadata, markdown and C# example cells, and layout configuration (com.verso.showcase.dag-notebook:dag-notebook with autoRun).

Signed-off-by: Torrey Betts <torrey.betts@gmail.com>
@TorreyBetts
TorreyBetts marked this pull request as ready for review August 5, 2026 00:06
@TorreyBetts
TorreyBetts merged commit 5cd9280 into main Aug 5, 2026
10 checks passed
@TorreyBetts
TorreyBetts deleted the feature/interactive-widgets branch August 5, 2026 00:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant