Handle AI truncation in Tasks plugin, increase title token limit
Details
Tasks AI features now check AiResponse.WasTruncated to provide clear
user feedback instead of displaying garbled or partial AI output.
Changes:
- Title generation: reject truncated responses with clear status message,
increase MaxTokens from 48 to 128 (48 was too tight for titles)
- Description rewrite: accept content but warn "(may be truncated)"
- Q&A questions: reject truncated responses (JSON would be malformed)
- Q&A description: accept content but show truncation warning
Fix info panel hover zone blocking plugin content clicks
Details
The info-tab-hover-zone Border used a 36px-wide transparent background
with IsHitTestVisible=True at ZIndex=10, creating an invisible click
barrier across the entire right edge of the content area. This blocked
clicks on plugin UI elements positioned near the right edge (e.g., the
settings cog in Tasks).
Fix: Remove the wide transparent hit area. The tab button is now always
slightly visible (opacity 0.15) and becomes fully visible on hover of
the button itself. The parent border no longer has a background or
forced hit-test, so pointer events pass through to the plugin content
below.
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.
Get notified about new releases