Catch NotSupportedException in SDK deserialization and fix PluginLoadContext
Details
SdkHost only caught JsonException but .NET 9's System.Text.Json throws
NotSupportedException for polymorphic type errors (missing discriminator,
unsupported interface types). Added catch for NotSupportedException so
these errors return graceful SdkResponse.Fail instead of crashing callers.
PluginLoadContext: changed from Default.LoadFromAssemblyPath (which could
conflict with runtime-managed assemblies) to returning null to let the
runtime's standard probing handle host-provided assemblies.
Fix PluginLoadContext: delegate to runtime probing instead of Default.LoadFromAssemblyPath
Details
The previous approach used Default.LoadFromAssemblyPath() to explicitly
load host-provided assemblies into the Default context. This could
conflict with runtime-managed assemblies and cause JSON polymorphic
deserialization failures (NotSupportedException for types with
JsonPolymorphic attributes).
Changed to return null when the host resolver can provide the assembly,
letting the runtime's standard default-context probing handle it. The
runtime finds the DLL in the app's output directory and loads it into
Default naturally, avoiding conflicts with already-loaded assemblies.
Fix MissingMethodException for shared assemblies in plugin load context
Details
PluginLoadContext only checked Default.Assemblies (already-loaded) when
deciding whether to delegate to the host. Assemblies the host ships but
hasn't loaded yet (e.g. LiveCharts via UI.Adaptive) were resolved from
the plugin's publish directory instead, creating a type identity split
that caused MissingMethodException on AdaptiveCartesianChart.set_Series.
Added a host-side AssemblyDependencyResolver that checks the host's deps
graph. If the host CAN provide an assembly, it's loaded into the default
context to maintain type identity — even if it hasn't been loaded yet.
Fix stale plugin dependencies in incremental build
Details
The --with-plugins incremental skip check only looked at plugin source
files (.cs, .csproj, .axaml) to decide if a rebuild was needed. When
PrivStack.Sdk or PrivStack.UI.Adaptive changed without any plugin source
change, the stale dependency DLLs persisted in plugins/ output, causing
MissingMethodExceptions at runtime.
Now also checks if PrivStack.Sdk.dll or PrivStack.UI.Adaptive.dll build
output is newer than the plugin DLL, triggering a republish when shared
dependencies change.
Replace terse action catalog with concrete examples
Details
Models follow copy-pasteable examples far better than compact schema
listings. Replace the DatasetActionReference with three concrete [ACTION]
examples (create note with chart, update note, generate insights) that
the model can directly adapt. This fixes Duncan describing actions
instead of emitting [ACTION] blocks.
~318 tokens (was 188 terse, but 188 wasn't working). Total dataset
context injection is ~1,169 tokens — still under the original draft.
Get notified about new releases