Skip to content

chore(deps): Bump the minor-and-patch group with 4 updates - #167

Merged
sandovaldavid merged 1 commit into
developfrom
dependabot/nuget/scripts/Kioku.Benchmarks/minor-and-patch-7b62f20144
Jul 4, 2026
Merged

chore(deps): Bump the minor-and-patch group with 4 updates#167
sandovaldavid merged 1 commit into
developfrom
dependabot/nuget/scripts/Kioku.Benchmarks/minor-and-patch-7b62f20144

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 4, 2026

Copy link
Copy Markdown
Contributor

Updated BenchmarkDotNet from 0.14.0 to 0.15.8.

Release notes

Sourced from BenchmarkDotNet's releases.

0.15.8

This release adds OpenMetrics exporter support for Prometheus-compatible metrics export, improves the Roslyn analyzers with multi-target support and better type checking, and fixes several bugs including process deadlocks and WASM trimming issues.

Features

  • Add OpenMetrics exporter for Prometheus-compatible metrics output (#​2801)
  • Add Job info to DisassemblyDiagnoser report headers to distinguish assemblies when using multiple coreruns (#​2884, fixes #​2573)
  • Add NO_COLOR environment variable support for disabling console colors (#​2870)

Improvements

  • Multi-target analyzers with improved type assignability checking using semantic model (#​2866)
  • Add new analyzer diagnostic BDN1503 for better argument/params validation (#​2865, fixes #​2864)
  • Use PolySharp for [DynamicallyAccessedMembers] attribute polyfill (#​2883)
  • Refactor to use AsyncProcessOutputReader for cleaner process output handling (#​2878)

Bug Fixes

  • Fix process deadlock issue when reading process output (#​2877)
  • Fix WASM generated project being trimmed out (#​2872)
  • Allow filters to filter out every benchmark from a type without errors (#​2879, fixes #​2860)
  • Fix unhandled exception when running BenchmarkRunner.Run<T>() with arguments on invalid benchmark type (#​2880, fixes #​2724)

Internal

  • Update release workflow for analyzers (#​2882)
  • Improve docs building workflow
  • Cleanup #if-#endif preprocessor directives using PolySharp polyfills (#​2881)

Full Changelog: dotnet/BenchmarkDotNet@v0.15.7...v0.15.8

0.15.7

This release introduces Roslyn analyzers to catch incorrect BenchmarkDotNet usage at compile time, improves .NET Framework version detection, and updates OS detection support.

Features

  • Add Roslyn analyzers to detect incorrect usage of BenchmarkDotNet at compile-time (#​2837)
    • Validates benchmark class structure (public, non-sealed, generic constraints)
    • Checks [Arguments], [Params], and [ParamsAllValues] attribute usage
    • Verifies [GenericTypeArguments] requirements
    • Ensures only one baseline method per category
    • Validates BenchmarkRunner.Run invocations

Improvements

  • Improve .NET Framework version detection by retrieving version from TargetFrameworkAttribute (#​2682)
  • Bump Perfolizer 0.6.0 → 0.6.1, bringing updated Windows and macOS version detection in OsBrandHelper

Bug Fixes

  • Fix null reference handling and exception logging in TestCaseFilter for the test adapter
  • Fix flaky CI tests by increasing build timeout values (#​2854)

Internal

  • Improve release workflow in release.yaml

Full Changelog: dotnet/BenchmarkDotNet@v0.15.6...v0.15.7

0.15.6

v0.15.6

This release adds ref struct parameter support for [ArgumentsSource], fixes Native AOT runtime moniker resolution, and upgrades to Perfolizer 0.6.0 with the new Pragmastat statistical engine.

Features

  • Add ref struct parameter support for [ArgumentsSource] attribute, enabling Span<T> and ReadOnlySpan<char> parameters (#​2849)

Bug Fixes

  • Fix runtime moniker normalization for Native AOT targets (#​2852)

Improvements

  • Upgrade to Perfolizer 0.6.0 with Pragmastat statistical engine integration

Documentation

  • Add documentation for breaking changes related to disassembler native dependencies (#​2836)

Internal

  • Introduce GitHub Actions release workflow

Full Changelog: dotnet/BenchmarkDotNet@v0.15.5...v0.15.6

0.15.5

This release fixes job naming consistency when using --runtimes, clamps histogram bin bounds to avoid confusing negative values, and reduces output directory clutter by filtering unnecessary runtime and satellite assembly files.

Features

  • Add custom MSBuild targets to remove unnecessary files from the bin directory (#​2737)
    • Filters out Capstone native binaries for non-target platforms
    • Removes satellite assemblies from Microsoft.CodeAnalysis packages

Bug Fixes

  • Fix job names consistency between SimpleJobAttribute and --runtimes CLI option (#​2841)
    • Jobs now use runtime names as IDs consistently across all runtime monikers
  • Clamp histogram bin lower bounds to non-negative values (#​1821)
    • Prevents confusing negative values in histogram output for non-negative measurements

Internal

  • Bump Perfolizer: 0.5.3 → 0.5.4 (#​2773)
  • Update changelog and GitHub Pages generation workflows
  • Enable workflow_dispatch for test workflow (#​2835)

Full Changelog: dotnet/BenchmarkDotNet@v0.15.4...v0.15.5

0.15.4

This release fixes issues with ParamsSource attribute resolution in inheritance scenarios and corrects a MSBuild syntax error in the TestAdapter.

Bug Fixes

  • Allow [ParamsSource] to resolve overridden methods and properties in derived classes (#​2832)
  • Fix MSBuild condition syntax for TestTfmsInParallel property that prevented Visual Studio from loading projects (#​2831)

Full Changelog: dotnet/BenchmarkDotNet@v0.15.3...v0.15.4

0.15.3

This release brings .NET 10 NativeAOT instruction set support, improved CPU detection on Windows when WMIC is unavailable, test adapter filtering, and numerous bug fixes.

Breaking Changes

  • Deprecated .WithNuget() job extension in favor of .WithMsBuildArguments() (#​2812)

Features

  • Add VS Test Adapter filter support for running specific benchmarks (#​2788)
  • Update NativeAOT instruction set support for .NET 10+ (#​2828)

Improvements

  • Add PowerShell-based CPU detection fallback for Windows when WMIC is unavailable (#​2749)
  • Improve IsNetCore and IsNativeAOT detection for single-file apps without AOT (#​2799)
  • Use --nodeReuse:false for dotnet CLI commands to improve build isolation (#​2814)
  • Enable assembly signing for debug builds (#​2774)

Bug Fixes

  • Fix ArgumentsSource on external types not working if the argument type is not primitive (#​2820)
  • Fix workload warmup mode not working correctly
  • Fix EtwProfiler for file paths slightly under 260 characters (#​2808)
  • Fix console logs being output twice when using TestAdapter (#​2790)
  • Fix EventProcessor.OnEndValidationStage not being called when critical validation errors occur (#​2816)
  • Fix XmlException thrown when TextReader.Null is passed to AppConfigGenerator (#​2817)
  • Fix case sensitivity issue in NativeMemoryLogParser program name matching (#​2795)
  • Fix typo in BuildPlots.R

Internal

  • Replace StyleCop.Analyzers with unstable version for improved analysis (#​2796)
  • Add workflow to run selected tests (#​2797)
  • Fix flaky MemoryDiagnoser tests on macOS (#​2813)
  • Fix x86 disassembler tests for net462 (#​2792)
  • Split TimeConsumingBenchmark class to reduce test time
  • Update BenchmarkDotNetDiagnosers package version (#​2805)
  • Fix comment in package props about GenerateProgramFile (#​2802)

Full Changelog: dotnet/BenchmarkDotNet@v0.15.2...v0.15.3

0.15.2

This release improves memory allocation measurement accuracy and adds new features for job ordering and runtime validation.

Features

  • Add JobOrderPolicy option to sort jobs in numeric order instead of ordinal order (#​2770)
  • Add RuntimeValidator to detect benchmarks with null runtime configuration (#​2771)

Improvements

  • Improve memory diagnoser accuracy with better allocation measurement isolation, warm-up phase, and handling of tiered JIT (#​2562)

Bug Fixes

  • Auto-generate unique job IDs between benchmark runs to prevent ID collisions
  • Skip null runtime validation for in-process toolchain (#​2780)
  • Fix flaky memory allocation test (#​2782)
  • Fix benchmark test adapter enumeration issues (#​2766)

Internal

  • Modify macOS runner image for CI (#​2775)
  • Add setting to skip test reports when original workflow is cancelled (#​2772)
  • Suppress xunit non-serializable data warnings (#​2769)
  • Enable --force-clone for docs-fetch in generate-gh-pages workflow
  • Allow workflow_dispatch for publish-nightly workflow
  • Enhance docs-fetch command with additional options
  • Remove docs/_changelog folder from main branch (migrated to docs-changelog branch)

Full Changelog: dotnet/BenchmarkDotNet@v0.15.1...v0.15.2

0.15.1

A maintenance release with improved cross-platform compatibility, a new feature for referencing external types in source attributes, and several bug fixes for ARM CPUs and unsupported operating systems.

Features

  • Allow [ArgumentsSource] and [ParamsSource] to reference methods in other types via new constructor overload: [ArgumentsSource(typeof(MyClass), nameof(MyClass.Values))] (#​2748)

Bug Fixes

  • Fix WakeLock P/Invoke compatibility with ARM CPUs by refactoring REASON_CONTEXT to use proper union structure (#​2745, #​2756)
  • Fix Console.CancelKeyPress crash on platforms that don't support it (Android, iOS, tvOS, WASM) (#​2739, #​2741)
  • Fix CPU detection crash on unsupported operating systems by returning CpuInfo.Unknown (#​2740)
  • Support .slnx solution file format when searching for solution files (#​2764)

Improvements

  • Bump Perfolizer: 0.5.2 → 0.5.3
  • Make ExporterBase.GetArtifactFullName accessibility modifier more permissive

Internal

  • Update .NET SDK version to 8.0.410 (#​2762)
  • Update Microsoft.NET.Test.Sdk and other package dependencies (#​2750, #​2755)
  • Rework changelog generation to use docs-changelog branch (#​93d12c42)
  • Fix line-endings to LF in several files
  • Update GitHub Actions workflows

Full Changelog: dotnet/BenchmarkDotNet@v0.15.0...v0.15.1

0.15.0

BenchmarkDotNet v0.15.0 brings .NET 10 support, a new WakeLock feature to prevent system sleep during benchmarks, improved engine internals for more consistent measurements, and numerous bug fixes and improvements.

Features

  • WakeLock support: New [WakeLock] attribute and --wakeLock CLI option to prevent the system from entering sleep mode while benchmarks are running (#​2670)
  • .NET 10 support: Added RuntimeMoniker.Net10, NativeAot10, and Mono10 with full toolchain support (#​2642)
  • Box plots in ScottPlotExporter: New box plot visualization for benchmark results with improved font sizing
  • RiscV64 platform support: Added Platform.RiscV64 for RISC-V 64-bit architecture (#​2644, #​2647)
  • Required properties support: Benchmark classes can now use C# 11 required properties (#​2579)
  • HostSignal.AfterProcessStart: New signal allows diagnosers to obtain the process ID of a benchmark process started in suspended state (#​2674)
  • Parallel build control: New ConfigOptions.DisableParallelBuild option to force sequential builds (#​2725)
  • Auto-hide empty metric columns: ThreadingDiagnoser and ExceptionDiagnoser now support configuration to hide columns when metrics have no values (#​2673)
  • Measurements in DiagnoserResults: Custom diagnosers can now access measurements for calculations (#​2731)

Improvements

  • Constant stack size engine refactoring: Engine stages refactored to use IEngineStageEvaluator for more consistent instruction location and simpler code (#​2688)
  • Use ArtifactsPath instead of IntermediateOutputPath: Improved build artifact handling for SDK 8+ (#​2676)
  • InProcessNoEmitRunner NativeAOT support: Basic support for running InProcessNoEmitRunner with NativeAOT (#​2702)
  • Allow ParamsAttribute values from derived classes: ParamsAttribute.Values setter is now protected instead of private (#​2716)
  • Updated clrmd to 3.1: Disassembler now uses ClrMdV3Disassembler (#​2488)
  • Updated ScottPlot to 5.0.54: Plotting exporter updated to latest ScottPlot version (#​2709)
  • Perfolizer upgraded to 0.5.2: CPU/OS detection logic moved to Perfolizer with new Perfonar exporters replacing Phd exporters
  • Log warnings for empty benchmarks: Clear warning messages when running benchmarks that match no methods (#​2718)
  • Validation for sealed benchmark classes: Compiler now warns when benchmark classes are sealed (#​2660)
  • Improved baseline warning message: More descriptive warning when baseline benchmarks are misconfigured (#​2650)

Bug Fixes

  • Fix async GlobalSetup/GlobalCleanup with InProcessEmit: Async setup and cleanup methods are now properly awaited (#​2109)
  • Fix Windows path too long: Handle Windows MAX_PATH limitations in build paths (#​2681)
  • Fix builds with --keepFiles: Include auto-incremented ID in build artifacts directory to avoid conflicts (#​2423)
  • Fix Ctrl-C handling: System state (power management, console title) is now properly reverted on process termination (#​2483, #​2661)
  • Fix dotnet command failure detection: Commands now always fail when dotnet returns non-zero exit code (#​2535)
  • Fix deadlock in GetDotNetSdkVersion: Resolved potential deadlock in SDK version detection (#​2622)
  • Fix lscpu CPU frequency parsing: Corrected frequency parsing from lscpu output
  • Make lscpu call language-invariant: CPU detection now works correctly regardless of system locale (#​2577)
  • Clean up unsupported Native AOT flags: Removed obsolete IlcGenerateCompleteTypeMetadata and updated flag names (#​2616)
  • Native AOT projects copy SettingsWeWantToCopy: Build settings are now properly propagated (#​2665)

Breaking Changes

  • Removed ConfigCompatibilityValidator: No longer validates config compatibility between runs (#​2599)
  • Phd exporters renamed to Perfonar: [PhdExporter][PerfonarExporter], PhdJsonExporterPerfonarJsonExporter, PhdMdExporterPerfonarMdExporter
  • Removed netstandard1.0 target from Annotations package: Minimum target is now netstandard2.0

Documentation

  • Added Visual Studio Profiler documentation with samples (#​2672)
  • Added WakeLock documentation and samples (#​2670)
    ... (truncated)

Commits viewable in compare view.

Updated Markdig from 0.38.0 to 0.45.0.

Release notes

Sourced from Markdig's releases.

0.45.0

Changes

🚀 Enhancements

  • Recognize supplementary characters (PR #​913) by @​tats-u
  • Use Dictionary.TryAdd instead of ContainsKey and indexer by reducing lookups. (PR #​917) by @​prozolic
  • Replace null checks with IsEmpty property for ReadOnlySpan (PR #​916) by @​prozolic
  • Optimize PipeTable parsing: O(n²) → O(n) for 3.7x–85x speedup, enables 10K+ row tables (PR #​922) by @​Mpdreamz

Full Changelog: 0.44.0...0.45.0

Published with dotnet-releaser

0.44.0

Changes

🧰 Misc

  • feat(link-helper): improve ASCII normalization handling (PR #​911) by @​mos379
  • Test netstandard (PR #​915) by @​MihaZupan
  • Use central package management (fb698598)

Full Changelog: 0.43.0...0.44.0

Published with dotnet-releaser

0.43.0

Changes

✨ New Features

  • Add a basic fuzzing project (PR #​903) by @​MihaZupan

🐛 Bug Fixes

  • Fix for table depth error when cell contains backticks (PR #​891) by @​phillip-haydon
  • Fix issue where an inline code block that spans multiple lines doesn't parse correctly (PR #​893) by @​phillip-haydon
  • Remove leading newline in block attributes (PR #​896) by @​Asttear
  • Fix IndexOutOfRangeException in CodeInlineParser (PR #​900) by @​MihaZupan
  • Fix build warnings (PR #​899) by @​MihaZupan
  • Fix edge cases in EmphasisInlineParser (PR #​902) by @​MihaZupan
  • Fix pipe table parsing with a leading paragraph (PR #​905) by @​MihaZupan

🚀 Enhancements

  • add options for link inline (PR #​894) by @​danielklecha
  • Move sln to slnx (PR #​901) by @​MihaZupan
  • Lazily allocate storage for ProcessInlinesBegin/End delegates on Blocks (PR #​906) by @​MihaZupan
  • Add another test for pipe tables (PR #​907) by @​MihaZupan

Full Changelog: 0.42.0...0.43.0

Published with dotnet-releaser

0.42.0

Changes

🐛 Bug Fixes

  • Fixes issue #​845 (PR #​888) by @​prozolic

🚀 Enhancements

  • Add support for a table without an extra new line before it (PR #​885) by @​dannyp32
  • Add source position tracking for grid tables (PR #​883) by @​messani

Full Changelog: 0.41.3...0.42.0

Published with dotnet-releaser

0.41.3

Changes

🐛 Bug Fixes

  • Fixes #​878: RoundtripRenderer: render indent and 0 blocks for ordered lists (PR #​879) by @​stylefish

📚 Documentation

  • Update readme.md (PR #​877) by @​Mertsch

Full Changelog: 0.41.2...0.41.3

Published with dotnet-releaser

0.41.2

Changes

🐛 Bug Fixes

  • Fix #​872 by reserve null title string. (PR #​876) by @​Akarinnnnn

Full Changelog: 0.41.1...0.41.2

Published with dotnet-releaser

0.41.1

Changes

🐛 Bug Fixes

  • Fix bug in Markdown.ToPlainText with code blocks (PR #​869) by @​prozolic

Full Changelog: 0.41.0...0.41.1

Published with dotnet-releaser

0.41.0

Changes

✨ New Features

  • Add AutoLinkOptions.AllowDomainWithoutPeriod (PR #​859) by @​JamesNK

🐛 Bug Fixes

  • chore: update repository's github path (PR #​861) by @​Meir017

🚀 Enhancements

  • Replace encoding polyfill with NET5+ one. (PR #​851) by @​Akarinnnnn
  • Implemented better indent control in TextRendererBase (PR #​838) by @​Melodi17
  • A couple perf improvements (PR #​864) by @​MihaZupan
  • Infer pipe table column widths from separator row (PR #​863) by @​Amberg
  • Improve Alert parsing perf (PR #​866) by @​MihaZupan
  • Update to CommonMark 0.31.2 (PR #​867) by @​MihaZupan

🏭 Tests

  • Update tests (09a4b81a)

📚 Documentation

  • Fix MathInline is called "math block" (PR #​865) by @​RamType0

📦 Dependencies

  • Update dependencies NuGet (5b323913)

Full Changelog: 0.40.0...0.41.0

Published with dotnet-releaser

0.40.0

Changes

🐛 Bug Fixes

  • Fix errors in LinkHelper and LinkInlineParser. (PR #​837) by @​snnz
  • Check that the alert candidate is not already in an alert block or nested within other elements. (PR #​842) by @​snnz
  • Fixes exception in DefinitionListParser.GetCurrentDefinitionList() (PR #​843) by @​snnz
  • Prevent GridTableParser from looking beyond the end of a line. (PR #​844) by @​snnz

Full Changelog: 0.39.1...0.40.0

Published with dotnet-releaser

0.39.1

Changes

🐛 Bug Fixes

  • Fix an incorrect offset in GridTableParser. (PR #​834) by @​snnz
  • Include opening and closing pipes in the table span (PR #​835) by @​snnz
  • Fix an error in the AbbreviationParser. (PR #​836) by @​snnz

🧰 Maintenance

  • Update ci badge (fdaef774)

Full Changelog: 0.39.0...0.39.1

Published with dotnet-releaser

0.39.0

Changes

🐛 Bug Fixes

  • Fix extra line feeds in link title (PR #​826) by @​snnz
  • Fix incorrect emphasis span calculation. (PR #​829) by @​snnz
  • Set delimiter char and count in CustomContainerInline instances. (PR #​831) by @​snnz
  • Set the correct source location in Footnote and FootnoteLinkReferenceDefinition (PR #​832) by @​snnz

🚀 Enhancements

  • Add .NET 9 target, drop .NET 6 (PR #​828) by @​MihaZupan

🧰 Misc

  • Update readme.md (310a55c7)

Full Changelog: 0.38.0...0.39.0

Published with dotnet-releaser

Commits viewable in compare view.

Updated Sentry.AspNetCore from 5.6.0 to 5.16.3.

Release notes

Sourced from Sentry.AspNetCore's releases.

5.16.3

Fixes

  • Memory leak when finishing an unsampled Transaction that has started unsampled Spans (#​4717)
  • Deliver system breadcrumbs in the main thread on Android (#​4671)

Dependencies

5.16.2

Fixes

  • Do not allow multiple sentry.proguard-uuid metadata to be set in Android manifest (#​4647)

Dependencies

5.16.1

Fixes

  • Structured Logs now have a sentry.origin attribute to so it's clearer where these come from (#​4566)

Dependencies

5.16.0

Features

  • Added EnableBackpressureHandling option for Automatic backpressure handling. When enabled this automatically reduces the sample rate when the SDK detects events being dropped. (#​4452)
  • Add (experimental) Structured Logs integration for Serilog (#​4462)

Fixes

  • Templates are no longer sent with Structured Logs that have no parameters (#​4544)
  • Parent-Span-IDs are no longer sent with Structured Logs when recorded without an active Span (#​4565)
  • Upload linked PDBs to fix non-IL-stripped symbolication for iOS (#​4527)
  • In MAUI Android apps, generate and inject UUID to APK and upload ProGuard mapping to Sentry with the UUID (#​4532)
  • Fixed WASM0001 warning when building Blazor WebAssembly projects (#​4519)

API Changes

  • Remove ExperimentalAttribute from all Structured Logs APIs, and remove Experimental property from SentrySdk, but keep Experimental property on SentryOptions (#​4567)

Dependencies

5.15.1

Fixes

  • Fail when building Blazor WASM with Profiling. We don't support profiling in Blazor WebAssembly projects. (#​4512)
  • Do not overwrite user IP if it is set manually in ASP.NET sdk (#​4513)
  • Fix SentryOptions.Native.SuppressSignalAborts and SuppressExcBadAccess on iOS (#​4521)

Dependencies

5.15.1-maxpath.1

Fixes

  • Fail when building Blazor WASM with Profiling. We don't support profiling in Blazor WebAssembly projects. (#​4512)
  • Do not overwrite user IP if it is set manually in ASP.NET sdk (#​4513)
  • Fix SentryOptions.Native.SuppressSignalAborts and SuppressExcBadAccess on iOS (#​4521)
  • Partial workaround for MAX_PATH issues when building iOS applications from Windows (#​4533)

Dependencies

5.15.0

Features

  • Experimental Structured Logs:
    • Redesign SDK Logger APIs to allow usage of params (#​4451)
    • Shorten the key names of Microsoft.Extensions.Logging attributes (#​4450)

Fixes

  • Experimental Structured Logs:
    • Remove IDisposable from SentryStructuredLogger. Disposal is intended through the owning IHub instance (#​4424)
    • Ensure all buffered logs are sent to Sentry when the application terminates unexpectedly (#​4425)
    • InvalidOperationException potentially thrown during a race condition, especially in concurrent high-volume logging scenarios (#​4428)
  • Blocking calls are no longer treated as unhandled crashes (#​4458)
  • Only apply Session Replay masks to specific control types when necessary to avoid performance issues in MAUI apps with complex UIs (#​4445)
  • De-duplicate Java.Lang.RuntimeException on Android (#​4509)
  • Upload linked PDB to fix symbolication for Mac Catalyst (#​4503)

Dependencies

5.14.1

Fixes

  • Crontabs now support day names (MON-SUN) and allow step values and ranges to be combined (#​4407)
  • Ensure the correct Sentry Cocoa SDK framework version is used on iOS (#​4411)

Dependencies

5.14.0

Features

Fixes

  • Update sample_rate of Dynamic Sampling Context (DSC) when making sampling decisions (#​4374)

5.14.0-alpha.1

Dependencies

5.14.0-alpha.0

Fixes

  • Update sample_rate of Dynamic Sampling Context (DSC) when making sampling decisions (#​4374)
  • Ensure the correct Sentry Cocoa SDK framework version is used on iOS (#​4411)

5.13.0

Features

  • Sentry now includes an EXPERIMENTAL StringStackTraceFactory. This factory isn't as feature rich as the full SentryStackTraceFactory. However, it may provide better results if you are compiling your application AOT and not getting useful stack traces from the full stack trace factory. (#​4362)

Fixes

  • Source context for class libraries when running on Android in Release mode (#​4294)
  • Native AOT: don't load SentryNative on unsupported platforms (#​4347)
  • Fixed issue introduced in release 5.12.0 that might prevent other middleware or user code from reading request bodies (#​4373)
  • SentryTunnelMiddleware overwrites the X-Forwarded-For header (#​4375)
  • Native AOT support for linux-musl-arm64 (#​4365)

Dependencies

5.12.0

API changes

  • App Hang Tracking for iOS is now disabled by default, until this functionality is more stable. If you want to use it in your applications then you'll need to enable this manually. (#​4320)

Features

  • Added StartSpan and GetTransaction methods to the SentrySdk (#​4303)

Fixes

  • Avoid double reporting sessions on iOS and Android apps (#​4341)
  • Sentry now decompresses Request bodies in ASP.NET Core when RequestDecompression middleware is enabled (#​4315)
  • Custom ISentryEventProcessors are now run for native iOS events (#​4318)
  • Crontab validation when capturing checkins (#​4314)
  • Fixed an issue with the way Sentry detects build settings. This was causing Sentry to produce code that could fail at runtime in AOT compiled applications. (#​4333)
  • Native AOT: link to static lzma on Linux/MUSL (#​4326)
  • AppDomain.CurrentDomain.ProcessExit hook is now removed on shutdown (#​4323)

Dependencies

5.12.0-alpha.0

Features

  • Add experimental support for Sentry Structured Logging via SentrySdk.Experimental.Logger (#​4158)
  • Add experimental integrations of Sentry Structured Logging (#​4193)
    • Sentry.AspNetCore, enabled via SentryAspNetCoreOptions.Experimental.EnableLogs
    • Sentry.Extensions.Logging, enabled via SentryLoggingOptions.Experimental.EnableLogs
    • Sentry.Maui, enabled via SentryMauiOptions.Experimental.EnableLogs

API changes

  • App Hang Tracking for iOS is now disabled by default, until this functionality is more stable. If you want to use it in your applications then you'll need to enable this manually. (#​4320)

Features

Fixes

  • Sentry now decompresses Request bodies in ASP.NET Core when RequestDecompression middleware is enabled (#​4315)
  • Custom ISentryEventProcessors are now run for native iOS events (#​4318)
  • Crontab validation when capturing checkins (#​4314)
  • Native AOT: link to static lzma on Linux/MUSL (#​4326)
  • AppDomain.CurrentDomain.ProcessExit hook is now removed on shutdown (#​4323)

Dependencies

5.11.2

Fixes

  • Unsampled spans no longer propagate empty trace headers (#​4302)

5.11.1

Fixes

  • Fix linking of libsentry-native to avoid DllNotFoundException in Native AOT applications (#​4298)

5.11.0

Features

  • Added non-allocating ConfigureScope and ConfigureScopeAsync overloads (#​4244)
  • Add .NET MAUI AutomationId element information to breadcrumbs (#​4248)
  • The HTTP Response Status Code for spans instrumented using OpenTelemetry is now searchable (#​4283)

Fixes

  • The HTTP instrumentation uses the span created for the outgoing request in the sentry-trace header, fixing the parent-child relationship between client and server (#​4264)
  • ExtraData not captured for Breadcrumbs in MauiEventsBinder (#​4254)
    • NOTE: Required breaking changes to the public API of Sentry.Maui.BreadcrumbEvent, while keeping an Obsolete constructor for backward compatibility.
  • InvalidOperationException sending attachments on Android with LLVM enabled (#​4276)
  • When CaptureFeedback methods are called with invalid email addresses, the email address will be removed and, if Debug mode is enabled, a warning will be logged. This is done to avoid losing the Feedback altogether (Sentry would reject Feedback that has an invalid email address) (#​4284)

Dependencies

5.11.0-alpha.3

Features

  • Added non-allocating ConfigureScope and ConfigureScopeAsync overloads (#​4244)
  • Add .NET MAUI AutomationId element information to breadcrumbs (#​4248)

Fixes

  • The HTTP instrumentation uses the span created for the outgoing request in the sentry-trace header, fixing the parent-child relationship between client and server (#​4264)
  • InvalidOperationException sending attachments on Android with LLVM enabled (#​4276)

Dependencies

5.11.0-alpha.1

Fixes

  • The HTTP instrumentation uses the span created for the outgoing request in the sentry-trace header, fixing the parent-child relationship between client and server (#​4264)

Dependencies

5.10.0

Features

  • Rename MemoryInfo.AllocatedBytes to MemoryInfo.TotalAllocatedBytes (#​4243)
  • Replace libcurl with .NET HttpClient for sentry-native (#​4222)

Fixes

  • InvalidCastException in SentrySpanProcessor when using the Sentry.OpenTelemetry integration (#​4245)
  • Fix InApp Exclude for frames without Module by checking against frame's Package (#​4236)

5.9.0

Features

  • Reduced memory pressure when sampling less than 100% of traces/transactions (#​4212)
  • Add SentrySdk.SetTag (#​4232)

Fixes

  • Fixed symbolication for net9.0-android applications in Release config (#​4221)
  • Support Linux arm64 on Native AOT (#​3700)
  • Revert W3C traceparent support (#​4204)

Dependencies

5.8.2-beta.1

Fixes

  • Fixed symbolication for net9.0-android applications in Release config (#​4221)
  • Support Linux arm64 on Native AOT (#​3700)
  • Revert W3C traceparent support (#​4204)

Dependencies

5.8.1

Fixes

  • Support musl on Linux (#​4188)
  • Support for Windows ARM64 with Native AOT (#​4187)
  • Addressed potential performance issue with Sentry.Maui (#​4219)
  • Respect SentryNative=false at runtime (#​4220)

5.8.0

Features

  • .NET MAUI integration with CommunityToolkit.Mvvm Async Relay Commands can now be auto spanned with the new package Sentry.Maui.CommunityToolkit.Mvvm (#​4125)

Fixes

  • Revert "Bump Cocoa SDK from v8.39.0 to v8.46.0 (#​4103)" (#​4202)
    • IMPORTANT: Fixes multiple issues running versions 5.6.x and 5.7.x of the Sentry SDK for .NET on iOS (initialising the SDK and sending data to Sentry)

Dependencies

5.8.0-alpha.0

Features

  • Add experimental support for Sentry Structured Logging via SentrySdk.Logger (#​4158)
  • Add experimental integrations of Sentry Structured Logging (#​4193)
    • Sentry.AspNetCore, enabled via SentryAspNetCoreOptions.EnableLogs
    • Sentry.Extensions.Logging, enabled via SentryLoggingOptions.EnableLogs
    • Sentry.Maui, enabled via SentryMauiOptions.EnableLogs

5.7.0

Features

  • New source generator allows Sentry to see true build variables like PublishAot and PublishTrimmed to properly adapt checks in the Sentry SDK (#​4101)
  • Auto breadcrumbs now include all .NET MAUI gesture recognizer events (#​4124)
  • Associate replays with errors and traces on Android (#​4133)

Fixes

  • Redact Authorization headers before sending events to Sentry (#​4164)
  • Remove Strong Naming from Sentry.Hangfire (#​4099)
  • Increase RequestSize.Small threshold from 1 kB to 4 kB to match other SDKs (#​4177)

Dependencies

5.7.0-beta.0

Features

  • When setting a transaction on the scope, the SDK will attempt to sync the transaction's trace context with the SDK on the native layer. Finishing a transaction will now also start a new trace (#​4153)
  • Added CaptureFeedback overload with configureScope parameter (#​4073)
  • Custom SessionReplay masks in MAUI Android apps (#​4121)

Fixes

  • Work around iOS SHA1 bug (#​4143)
  • Prevent Auto Breadcrumbs Event Binder from leaking and rebinding events (#​4159)
  • Fixes build error when building .NET Framework applications using Sentry 5.6.0: MSB4185 :The function "IsWindows" on type "System.OperatingSystem" is not available (#​4160)
  • Added a SentrySetCommitReleaseOptions build property that can be specified separately from SentryReleaseOptions (#​4109)

Dependencies

Commits viewable in compare view.

Updated YamlDotNet from 18.0.0 to 18.1.0.

Release notes

Sourced from YamlDotNet's releases.

18.1.0

What's Changed

New Contributors

Full Changelog: aaubry/YamlDotNet@v18.0.0...v18.1.0

Breaking

  • Maximum depth of yaml files is now 130 by default. If you need higher you will need to adjust the maximum yaml depth. Going above 130 runs the risk of stack overflow exceptions when any exception happens inside of the deserialization

Commits viewable in compare view.

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Bumps BenchmarkDotNet from 0.14.0 to 0.15.8
Bumps Markdig from 0.38.0 to 0.45.0
Bumps Sentry.AspNetCore from 5.6.0 to 5.16.3
Bumps YamlDotNet from 18.0.0 to 18.1.0

---
updated-dependencies:
- dependency-name: BenchmarkDotNet
  dependency-version: 0.15.8
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Markdig
  dependency-version: 0.45.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Sentry.AspNetCore
  dependency-version: 5.16.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: YamlDotNet
  dependency-version: 18.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Dependency updates (Dependabot) server Related to the C# MCP server labels Jul 4, 2026
@sandovaldavid
sandovaldavid merged commit cd85ea4 into develop Jul 4, 2026
3 checks passed
@sandovaldavid
sandovaldavid deleted the dependabot/nuget/scripts/Kioku.Benchmarks/minor-and-patch-7b62f20144 branch July 4, 2026 07:39
sandovaldavid added a commit that referenced this pull request Jul 10, 2026
…195)

* feat: initial setup — server tooling, logging, semantic search (#2)

* feat(plugin): add Logger class and replace console calls

* feat(server): add KiokuLogger extension methods and migrate log calls

* refactor(server): remove separator comments and replace emoji in tool responses

* docs(docs): add CLAUDE.md with project conventions for AI sessions

* docs(docs): add AGENTS.md with architecture and MCP tools reference

* refactor(server): remove separator comments from parser services

* fix(server): exclude dot directories from vault indexing

* feat(config): add Ollama URL and embedding model env vars

* feat(server): add EmbeddingService with Ollama client and binary cache

* feat(server): integrate EmbeddingService into VaultIndexService

* feat(server): add search_notes_semantic MCP tool

* docs(docs): update CLAUDE.md and AGENTS.md with semantic search

* feat(server): include frontmatter metadata in note embeddings

Frontmatter fields (tags, status, type, date, aliases, extra fields)
are now part of the embedding text. Bumps cache FormatVersion to 2
so existing caches are discarded and rebuilt with the enriched text.

* feat(server): add min_score filter and content snippet to search_notes_semantic

* docs(docs): add auth options guide and update v2-http-sse-spec

Reflects current v1 implementation state, documents HTTP-SSE transport
plan, Bearer Token middleware design, VM deployment with systemd + nginx,
and hybrid search RRF design for v2.

* style(server): fix formatting style violations

* ci(ci): rename jobs to match branch protection requirements

* docs(docs): document hybrid vm and local architecture (#3)

* docs(docs): document hybrid vm and local architecture

* docs(docs): update readme with local compile and setup instructions

* docs(docs): add obsidian plugin setup guide to readme

* chore(develop): release 1.1.0 (#1)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): HTTP-SSE transport with dual-mode startup and API key auth

Squash merge of feat/http-sse-transport: HTTP-SSE transport, API key auth, HybridSearchService with RRF, and three new MCP tools (search_notes_hybrid, find_similar_notes, get_note_embedding).

* feat(server): add task management MCP tools

Adds 5 MCP tools for Obsidian task management: list_tasks, complete_task, reopen_task, list_tasks_by_tag, list_overdue_tasks. Supports Obsidian Tasks plugin emoji date format (📅 ⏳ 🛫).

* feat(server): add Zettelkasten knowledge management tools

Adds 5 MCP tools: create_zettel (timestamped notes with semantic auto-linking), create_moc (Map of Content), create_folder_readme (folder index), link_related_notes (semantic wikilinks), create_literature_note (academic template).

* docs(docs): update commands-reference with v3 state and new-commands analysis

- Mark all v1 and v2 tools as implemented (✅)
- Add Task Management group (27-32): 5 tools implemented in develop
- Add Zettelkasten group (33-40): 5 tools implemented in develop
- Add Session Context group (61-62): planned for Rama I
- Add Research group (58-60): planned for Rama J
- Add Knowledge Graph entries (12-16): planned for Rama K
- Add CSS Theming entries (56-57): planned for Rama E extension
- Add Plugin Commands B2-B8: toggle-reading-mode, get-selection, fold/unfold, reload-snippets
- Add discarded tools table with rationale
- Update version summary with accurate counts (21 implemented, 50 planned, 15 proposed)
- Add Community Store consideration #7 about app.customCss
- Include new-commands.md as untracked docs file

* feat(server): add vault organization and taxonomy management tools

* feat(server): add vault organization and taxonomy management tools

Add VaultOrganizationTools with 7 MCP tools for bulk vault maintenance:

- normalize_tags: standardizes tag format (lowercase, hyphens) across vault
- rename_tag_globally: renames a tag in all notes with dry_run support
- merge_tags: merges source tag into target tag across all notes
- suggest_tags: recommends existing tags based on note content overlap
- find_duplicate_notes: detects similar notes via Jaccard/shingle similarity
- find_broken_links: finds wikilinks pointing to non-existent notes
- audit_vault: generates health report (untagged, empty, stale, broken links)

All destructive bulk operations support dry_run=true parameter to preview
changes before applying. Registers in both stdio and HTTP-SSE transports.

* fix(server): add braces to if statements in VaultOrganizationTools

Fix IDE0011 violations detected by dotnet format --verify-no-changes.
All braceless single-statement if blocks now use explicit braces.

* feat(server): add session context and work activity tracking tools

Add SessionContextTools with 4 MCP tools for work session management:

- get_recent_activity(n, folder): returns N most recently modified notes
  by File.GetLastWriteTime, optionally scoped to a folder
- get_work_context(inbox_folder, max_per_section): vault snapshot with
  inbox notes, draft notes, recent activity, and active session note
- start_work_session(name, folder, goal): creates a session note with
  timestamp header; appends to existing session if same date exists
- end_work_session(note, summary): appends modified-notes log and
  duration to the session note, sets status: done

Session detection scans common session folder patterns:
Sessions/, Journal/, Daily/, 99_System/Sessions/
Registered in both stdio and HTTP-SSE transports.

* feat(server): add workflow chain tools for templates and action items

Add WorkflowTools with 4 MCP tools for high-level workflow operations:

- list_templates: scans templates folder, returns names and {{ var }} placeholders
  Auto-detects: Templates/, 99_System/Templates/, _templates/, System/Templates/
- create_note_from_template(template, target, variables, folder): Mustache-style
  {{ variable }} interpolation; built-in vars: date, time, title, datetime
  Returns warning for unresolved placeholders without failing
- create_template(name, content, folder): saves a new template .md file
- extract_action_items(note, output_note, dry_run): extracts unchecked
  '- [ ] text' checkboxes; optionally consolidates into a new note

All tools use auto-detection of vault templates folder with fallback chain.
JSON variable parsing uses lightweight regex (no extra dependencies).
Registered in both stdio and HTTP-SSE transports.

* feat(plugin): add UI plugin commands and CSS theming MCP tools

Plugin commands (TypeScript — all using public Obsidian APIs only):
- toggle-reading-mode: markdown:toggle-preview command
- get-selection: editor.getSelection() via MarkdownView.editor
- fold-all-headings: editor:fold-all command
- unfold-all-headings: editor:unfold-all command
- reload-snippets: app:reload-css-snippets command

C# MCP tools (CssThemingTools):
- apply_css_snippet(name, css_content, enable): writes to .obsidian/snippets/,
  optionally adds to enabledCssSnippets in app.json
- list_css_snippets(): lists snippets with enabled/disabled status and preview

Design: does NOT use app.customCss (private API). Uses file I/O for snippets
and app.json for the enabled list. Requires reload-snippets plugin command
to activate new snippets without restarting Obsidian.

Registered CssThemingTools in both stdio and HTTP-SSE transports.

* feat(server): add knowledge graph tools (#13)

* feat(server): add knowledge graph tools

- get_knowledge_timeline: chronological notes by date, filterable by tag/folder/range
- get_concept_map: BFS graph (links + backlinks) as JSON with depth and max_nodes limits
- get_vault_snapshot: single-call vault summary (folders, tags, frontmatter, links)

* fix(server): format KnowledgeGraphTools.cs to pass linter checks

* feat(server): add research, export, and gist sharing tools (#14)

* feat(server): add research, export, and gist sharing tools

- export_citations: BibTeX or Markdown table from citekey frontmatter
- get_literature_gap: find citekeys referenced inline without a lit note
- export_note: HTML export via Markdig with inline styles
- share_as_gist: publish note to GitHub Gist (KIOKU_GITHUB_TOKEN)
- Add KIOKU_GITHUB_TOKEN env var to KiokuConfiguration
- Add Markdig 0.38.0 dependency for Markdown-to-HTML

* fix(server): format research tools to pass linter checks

* chore(develop): release 1.2.0 (#5)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): register PluginIntegrationTools and remove RandomNumberTools scaffolding

* docs(docs): update commands-reference to reflect v3 implementation state (84% complete)

* chore(develop): release 1.3.0 (#15)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): add asset tools for vault file management

Implement four new MCP tools in AssetTools.cs:
- reorder_notes_in_folder: rename notes with numeric prefixes (01-, 02-, …)
- list_excalidraw_files: discover .excalidraw files and markdown notes with excalidraw:true
- get_asset_metadata: query size, path, modified date of non-markdown assets
- find_orphan_assets: detect unreferenced assets with dry_run support

Reuses VaultIndexService for note scanning and FrontmatterParser patterns
for excalidraw metadata detection. Orphan detection scans all notes for
wikilink and markdown image reference patterns.

Register AssetTools in both HTTP and stdio MCP server transports.

* feat(plugin,server): add 5 editor command tools across server and plugin

Plugin-side (TypeScript main.ts): implement 5 new commands
- insert-at-cursor: editor.replaceRange() at cursor position
- replace-selection: editor.replaceSelection() with text
- create-note-ui: vault.create() + openFile() new note in editor
- scroll-to-block: search for block ID (^blockid) and scroll/focus
- open-in-split: workspace.getLeaf('split') and openFile()

Server-side (C# ObsidianBridgeTools): wrap each as MCP tool
- All 5 tools call bridge.SendRequestAsync() with typed payload
- insert_at_cursor, replace_selection take text parameter
- create_note_ui, open_in_split take vault-relative path
- scroll_to_block takes blockId (without ^ prefix)

Tools reuse existing ResolveNote() helper for path/name lookup.
No new registrations needed — ObsidianBridgeTools already registered.

* feat(server): add vault routing tools for intelligent note organization

Add two new MCP tools to VaultOrganizationTools.cs:

suggest_folder: ranks existing vault folders by semantic and keyword
similarity to a given note. Uses HybridSearchService.FindSimilar() to
accumulate scores per folder, with keyword overlap as fallback.

reclassify_note: moves a note to the best-matching folder using the
same scoring as suggest_folder. Supports dry_run preview. Uses existing
move_note file-move pattern with Directory.CreateDirectory().

Shared helper RankFolders accumulates semantic + keyword scores across
all folders, skipping the note's current folder. Fallback to keyword
tokenization when embeddings unavailable.

Expand VaultOrganizationTools constructor to inject KiokuConfiguration,
HybridSearchService, and EmbeddingService — all already registered as
singletons in Program.cs. No new registrations needed.

* chore(develop): release 1.4.0 (#16)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* docs(docs): update implementation status for Ramas F/G/H and add pending Ramas I-N (#17)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): add graph analysis tools (Rama I) (#18)

Implement three new read-only tools for analyzing vault knowledge graph structure:
- find_unlinked_notes: identifies completely isolated notes
- find_graph_islands: detects small disconnected components
- measure_vault_density: computes connectivity metrics

* feat(server): add git integration tools (Rama J) (#19)

Implement two new read-only tools for git repository interaction:
- get_git_status: shows modified, added, deleted, and untracked files
- list_git_commits: displays recent commits with hash and message

* feat(server): extend asset tools with normalization (Rama K) (#20)

Add normalize_attachment_names and move_attachments_to_folder to AssetTools.
Both tools support dry_run and update references in all affected notes.

* feat(server): extend session context tools (Rama L) (#21)

Add list_work_sessions and get_session_activity tools.

* chore(develop): release 1.5.0 (#22)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): add research validation tool (Rama M) (#23)

Add validate_research_notes tool to check research/literature notes.

* feat(server): add css snippet removal tool (Rama N) (#24)

Add remove_css_snippet tool for deleting CSS snippets and cleanup.

* chore(develop): release 1.6.0 (#25)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(release): add checkout step to attach-artifacts job (#26)

gh release upload requires git context to determine the repository.
Without actions/checkout, it fails with 'not a git repository'.

* chore(develop): release 1.6.1 (#27)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(server): add missing TrimmerRoots.xml, fill .mcp/server.json placeholders, remove unused import (#28)

* refactor(server): extract shared NoteHelpers, deduplicate Program.cs registration (#29)

* fix(server): improve HttpClient config and WebSocket exception handling (#30)

* fix(plugin): replace as any casts with typed KiokuApp interface, fix deprecated activeLeaf (#31)

* chore(plugin): add version-bump.mjs, fix prettierignore, add log level filtering (#32)

* chore(docs): mark new-commands.md as historical, note most ideas are implemented (#33)

* chore(develop): release 1.6.2 (#34)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* docs(docs): reorganize docs directory and update all READMEs (#35)

* fix(plugin): bundle ws correctly and refactor command dispatch to registry pattern (#36)

* docs(docs): add MCP client configuration for all supported platforms (#38)

* chore(develop): release 1.6.3 (#37)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): change create_folder_readme to use folder name for Folder Notes plugin compatibility (#39)

* chore(develop): release 1.7.0 (#40)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(server): add prerelease versioning strategy for develop branch (#41)

* chore(develop): release 1.7.1-beta (#42)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(plugin): package Obsidian plugin files as ZIP for easy installation (#43)

* fix(server): resolve false positives in tags, broken links, and backlinks

* fix(server): resolve false positives in tags, broken links, and backlinks

* fix(server): add braces to if/else to pass dotnet format check

* fix(plugin): preserve requestId in dispatch response for all bridge commands (#46)

* fix(server): resolve 5 bugs in git, prepend, session, rename, and extract tools (#47)

- Bug 1: list_git_commits — pass --oneline and -N as separate arguments

- Bug 2: prepend_to_note and append_to_note — interpret literal \n as newlines

- Bug 3: Session tools — check NoteType instead of ExtraFields["type"]

- Bug 4: Fix stale index after rename/move — add SynchronizeFileMoveAsync

- Bug 5: extract_action_items — use ResolveNote for full path/name resolution

* chore(develop): release 1.8.0-beta (#44)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): add delete_note and revert_note tools (#48)

- delete_note: removes a note from vault and index; supports dry_run preview

- revert_note: restores a note to its last git committed version via git restore

- VaultIndexService: add SynchronizeFileDelete and SynchronizeFileReindexAsync helpers

* feat(server): add staging tools — stage_note, stage_all, unstage_note, commit_staged (#50)

* feat(server): add 4 restore and trash recovery tools

- list_deleted_notes: list .md files in .trash

- restore_note_from_trash: move file from trash back to vault

- revert_all_uncommitted: git restore entire vault

- restore_note_version: git restore --source for specific revision

* feat(server): add 4 staging tools

- stage_note: git add for a specific note with dry_run support

- stage_all: git add -A for all vault changes

- unstage_note: git restore --staged to remove from staging

- commit_staged: git commit with descriptive message

- GitTools constructor: add VaultIndexService for note resolution

* fix(server): resolve note lookup bugs from diagnostics (#51)

* feat(server): add FolderRanker service, zettel filename format, auto-folder (#52)

* chore(develop): release 1.8.0-beta.1 (#49)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): add VaultConfigService with .kioku/config.yml support (#53)

* feat(server): add VaultConfigService with .kioku/config.yml support

* fix(server): add braces to if statements to satisfy dotnet format

* chore(develop): release 1.8.0-beta.2 (#54)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): config v2 templates, macOS support, plugin refactor, and tests (#55)

* feat(server): add VaultConfigService with .kioku/config.yml support

* fix(server): add braces to if statements to satisfy dotnet format

* feat(server): add auto-tag inheritance and suggest_tags tool

- VaultConfigService: add AutoTagsConfig (inherit by folder prefix, exclude_from_tags)
- NoteHelpers: add MergeTagsWithInheritance() for dedup and field exclusion
- NoteCommandTools, ZettelkastenTools: apply inherited tags on note creation
- NoteQueryTools: add suggest_tags tool exposing tag state for AI agent decisions

* build(server): add macOS runtime identifiers and CI targets

* perf(server): vectorize cosine similarity with SIMD

* feat(server): add template variable expansion and vault config templates

* refactor(plugin): extract bridge, handlers, and types from main.ts

* test(server): add xunit project with FrontmatterParser, NoteHelpers, and TaskService tests

* docs(docs): add architecture review and feature roadmap

* chore(develop): release 1.8.0-beta.3 (#56)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(server): correct table cell extraction and use cross-platform invalid filename chars (#57)

* chore(develop): release 1.8.0-beta.4 (#58)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(server): add vault path-traversal containment for all write tools (#59)

Add NoteHelpers.EnsureInsideVault() that canonicalizes paths and rejects
any candidate that resolves outside the vault root. Route all write tools
through the containment check:

- NoteHelpers.BuildFilePath (create_note, rename_note)
- NoteCommandTools.move_note (destination_folder)
- ZettelkastenTools (folder note creation)
- VaultOrganizationTools.reclassify_note
- WorkflowTools (template folder, output notes)
- SessionContextTools.start_work_session
- RestoreTools (trash listing, restore destination)
- AssetTools (metadata, normalize, move attachments)

Add 7 unit tests covering valid paths, root path, ../ traversal,
absolute paths outside vault, and BuildFilePath rejection.

Fixes BUG-1 from docs/review/01-diagnosis-and-bugs.md

* test(server): add VaultFixture for integration testing (#62)

Create a reusable xUnit IAsyncLifetime fixture that provisions a
temporary vault directory with sample notes (frontmatter, tags,
wikilinks, subfolders) and tears it down after tests complete.

Provides helpers: CreateNoteAsync, ReadNoteBodyAsync, NoteExists,
GetNotePath, GetFolderPath. Pre-builds the VaultIndexService so
test classes can immediately query the index.

Part of P0 testing infrastructure (docs/review/06-testing-strategy.md)

* test(server): add path-traversal regression and write-tool round-trip tests (#63)

* fix(server): add vault path-traversal containment for all write tools

Add NoteHelpers.EnsureInsideVault() that canonicalizes paths and rejects
any candidate that resolves outside the vault root. Route all write tools
through the containment check:

- NoteHelpers.BuildFilePath (create_note, rename_note)
- NoteCommandTools.move_note (destination_folder)
- ZettelkastenTools (folder note creation)
- VaultOrganizationTools.reclassify_note
- WorkflowTools (template folder, output notes)
- SessionContextTools.start_work_session
- RestoreTools (trash listing, restore destination)
- AssetTools (metadata, normalize, move attachments)

Add 7 unit tests covering valid paths, root path, ../ traversal,
absolute paths outside vault, and BuildFilePath rejection.

Fixes BUG-1 from docs/review/01-diagnosis-and-bugs.md

* test(server): add VaultFixture for integration testing

Create a reusable xUnit IAsyncLifetime fixture that provisions a
temporary vault directory with sample notes (frontmatter, tags,
wikilinks, subfolders) and tears it down after tests complete.

Provides helpers: CreateNoteAsync, ReadNoteBodyAsync, NoteExists,
GetNotePath, GetFolderPath. Pre-builds the VaultIndexService so
test classes can immediately query the index.

Part of P0 testing infrastructure (docs/review/06-testing-strategy.md)

* test(server): add path-traversal regression and write-tool round-trip tests

Integration tests over a real temporary vault using VaultFixture:

- Write-tool round-trip: create → update → move → rename → delete
- Path-traversal regression: create_note, move_note, rename_note
  with ../ and absolute paths outside vault must throw
- Locks BUG-1 fix permanently via EnsureInsideVault

All 100 tests pass (86 existing + 7 unit + 7 integration).

Part of P0 testing (docs/review/06-testing-strategy.md)

* fix(plugin): restore bridge startup error Notice (#60)

Add optional onStartupError callback to BridgeServer that fires when
the WebSocket server fails to start (e.g. EADDRINUSE). When
showNotifications is enabled, the user sees a Notice instead of the
error being silently logged.

Fixes BUG-5 from docs/review/01-diagnosis-and-bugs.md

* docs(docs): reconcile version, tool counts, and dependency status (#61)

* docs(docs): reconcile version, tool counts, and dependency status

- README: version 1.6.2 → 1.8.0-beta.4, tool count ~85 → 102+
- AGENTS.md: 18 tools → 102 tools across 17 classes, add note about
  full tool surface, update plugin file structure (bridge/handlers/types)
- planning.md: correct YamlDotNet/Markdig status (both are in use),
  clarify parser manual is for frontmatter only, YamlDotNet for config.yml
- Add implementation tracking tables to all docs/review/ files

* docs(docs): update P0 tracking tables — all 6 tasks done

Mark all P0 tasks as done in tracking tables across review docs.
P0 phase is complete: path-traversal fix, bridge notice, doc
reconciliation, VaultFixture, integration tests, BRAT support.

* docs(docs): add PR links to P0 tracking tables

* feat(plugin): add BRAT support and fundingUrl to manifest (#64)

- Upload main.js, manifest.json, styles.css as individual release
  assets so BRAT (Beta Reviewer's Auto-update Tool) can discover
  and install the plugin directly from the GitHub repo
- Add fundingUrl to manifest.json for the Obsidian Sponsor button

Part of P0 distribution (docs/review/04-plugin-improvements.md §15,
docs/review/07-production-readiness.md §1/§4)

* docs(docs): update P0 tracking tables — all 6 PRs merged to develop (#66)

* chore(develop): release 1.8.0-beta.5 (#65)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(plugin): await openLinkText in cmdOpenFile (#67)

Make cmdOpenFile async and await the openLinkText call in try/catch.
Previously the promise was discarded with void, so errors from
openLinkText were silently swallowed and the handler reported
success before the file was actually opened.

Now returns success:false with the error message if openLinkText
rejects.

Fixes BUG-6 from docs/review/01-diagnosis-and-bugs.md

* fix(server): handle reindex exceptions in debounced task (#68)

Replace fire-and-forget ContinueWith pattern with Task.Run and
proper try/catch. The previous code had two problems:

1. The discarded task (_ =) meant exceptions were unobserved
2. ContinueWith(async ...) returns Task<Task>, so the inner async
   work wasn't awaited — failures in IndexFileAsync were silently lost

Now uses Task.Run with explicit try/catch that logs errors via
_logger.Error, so failed reindexes are visible in the logs.

Fixes BUG-2 from docs/review/01-diagnosis-and-bugs.md

* fix(server): add model/dimension stamping to embedding cache (#70)

Stamp the embedding cache with model name and dimension in the file
header (format version 3). On load, if the cached model or dimension
differs from the configured model, the cache is invalidated and
re-embedded from scratch.

Changes:
- EmbeddingPersistence: add modelName and dimension to header
- EmbeddingService: add ExpectedDimension property with known model
  dimensions (nomic-embed-text=768, mxbai-embed-large=1024, etc.)
- EmbeddingService.InitializeAsync: invalidate cache on model/dim mismatch
- CosineSimilarity: throw on dimension mismatch instead of silently
  truncating to the shorter vector

This prevents silently wrong similarity scores when users change
the embedding model (e.g. from nomic-embed-text to mxbai-embed-large).

Fixes BUG-3 from docs/review/01-diagnosis-and-bugs.md

* fix(server,plugin): add protocol version handshake to bridge (#71)

Add protocolVersion field to BridgeMessage and BridgeResponse on both
sides (C# server and TypeScript plugin). The plugin now checks the
protocol version on incoming messages and notifies the user if there's
a mismatch.

Changes:
- Plugin: add PROTOCOL_VERSION constant (v1), include in all responses,
  check incoming messages and call onProtocolMismatch callback
- Plugin: add onProtocolMismatch callback to BridgeServer, show Notice
  when versions don't match
- Server: add BridgeProtocol.Version constant (v1), include in outgoing
  messages, add ProtocolVersion property to BridgeMessage/BridgeResponse

This prevents silent breakage when the server and plugin versions
drift apart, and gives users a clear message to update.

Fixes BUG-8 from docs/review/01-diagnosis-and-bugs.md

* fix(server): use IHttpClientFactory instead of static/new HttpClient (#72)

Replace static HttpClient in EmbeddingService and per-call HttpClient
in ResearchTools with IHttpClientFactory named clients.

Changes:
- Program.cs: register 'ollama' and 'web' named HttpClients with
  SocketsHttpHandler for connection pooling
- EmbeddingService: inject IHttpClientFactory, use CreateClient(ollama)
  instead of static _http field
- ResearchTools: inject IHttpClientFactory, use CreateClient(web)
  instead of new HttpClient() per call

Benefits:
- Proper connection pooling and reuse
- No socket exhaustion under load
- No risk of disposing a shared static client
- Consistent timeout/retry configuration per dependency

Fixes BUG-4 from docs/review/01-diagnosis-and-bugs.md

* fix(server): add BootstrapLogger for early startup errors (#73)

Create BootstrapLogger for use before DI/logging is configured.
This replaces the direct Console.Error.WriteLine in Program.cs
with a consistent logging interface.

BootstrapLogger provides Error/Warn/Info methods that write to
stderr with the same [level] format used by the full logging
pipeline. This is the only place that uses it — once DI is
configured, all logging goes through ILogger<T>.

Fixes BUG-9 from docs/review/01-diagnosis-and-bugs.md

* fix(plugin): add payload validation for all bridge handlers (#69)

Add validatePayload helper that checks for required fields and
returns clean error messages instead of cryptic destructuring errors.

Applied validation to handlers that require specific fields:
- open-file: requires 'path'
- create-note-ui: requires 'path'
- open-in-split: requires 'path'
- trigger-command: requires 'commandId'
- insert-at-cursor: requires 'text'
- replace-selection: requires 'text'
- scroll-to-block: requires 'blockId'
- run-dataview-query: requires 'query'
- run-templater: requires 'templatePath'

Now returns { success: false, error: 'Missing required field(s): ...' }
instead of throwing when fields are missing.

Fixes BUG-7 from docs/review/01-diagnosis-and-bugs.md

* fix(plugin): use Plugin.manifest for get-app-version (#74)

Pass pluginManifest to createHandlers and use it directly in
cmdGetAppVersion instead of looking up the manifest from the
plugin registry (app.plugins.manifests).

This is more reliable and follows the Plugin API correctly —
the plugin already has access to its own manifest via this.manifest.

Fixes BUG-10 from docs/review/01-diagnosis-and-bugs.md

* feat(ci): add code coverage reporting with coverlet and Codecov (#75)

Configure test-server job to collect code coverage using coverlet
and upload to Codecov for visibility.

Changes:
- Add --collect:'XPlat Code Coverage' to dotnet test
- Add codecov/codecov-action@v4 to upload coverage reports
- Coverage reports are generated in Cobertura XML format
- Upload is non-blocking (fail_ci_if_error: false)

This provides visibility into test coverage and helps identify
areas that need more tests.

Part of P1 testing infrastructure (docs/review/06-testing-strategy.md)

* feat(ci): add Docker deployment with Ollama integration (#76)

Add Docker configuration for deploying Kioku MCP Server with
optional Ollama for embeddings.

Files:
- Dockerfile: multi-stage build using .NET 10 Alpine images
- docker-compose.yml: server + Ollama services with health checks
- .dockerignore: optimize build context
- docs/docker.md: deployment guide and troubleshooting

Features:
- HTTP-SSE transport on port 5173
- Ollama integration for semantic search
- Health checks for both services
- Optional GPU support for Ollama
- Volume mounts for vault and Ollama data

Usage:
  export KIOKU_VAULT_PATH=/path/to/vault
  docker-compose up -d
  docker exec kioku-ollama ollama pull nomic-embed-text

Part of P1 distribution (docs/review/07-production-readiness.md §1)

* feat(ci): add NuGet package publish on release (#77)

Add publish-nuget job to release-please workflow that builds and
publishes the Kioku MCP Server as a dotnet tool to NuGet.org.

The job:
- Runs only when a release is created
- Builds the server in Release configuration
- Packs as NuGet package (kioku-mcp-server)
- Pushes to NuGet.org using NUGET_API_KEY secret

Users can install via:
  dotnet tool install -g kioku-mcp-server

Requires NUGET_API_KEY secret to be configured in the repository.

Part of P1 distribution (docs/review/07-production-readiness.md §1)

* feat(plugin): prepare for Obsidian Community Store submission (#78)

Add documentation and improve code quality for Community Store.

Changes:
- Add comprehensive README.md with installation and usage
- Add TSDoc comments for undocumented internal Obsidian APIs
- Add null-checks for internal API access (vault.adapter.basePath)
- Document KiokuApp and KiokuDataAdapter interfaces

Community Store checklist:
- manifest.json complete with all required fields
- Desktop-only declared (uses Node.js WebSocket)
- Clean lifecycle (onload/onunload implemented)
- No network calls beyond localhost (127.0.0.1)
- Scoped CSS (.kioku-* prefix)
- Comprehensive README with installation
- fundingUrl for Sponsor button
- Documented internal API usage with fallbacks

Part of P1 distribution (docs/review/07-production-readiness.md)

* feat(server): add soft-delete with trash for delete_note (#79)

* feat(server): add soft-delete with trash for delete_note

delete_note now moves files to .trash/ by default instead of
permanently deleting them. Added 'permanent' parameter to opt
into hard delete. Handles filename conflicts in trash with
auto-incrementing suffixes.

Added 3 integration tests:
- Soft delete moves file to .trash
- Permanent delete removes file immediately
- Dry run reports action without modifying files

Tests: 103 passing (was 100).

Fixes part of docs/review/03-mcp-server-improvements.md §4

* style(server): fix whitespace formatting in NoteCommandTools

* feat(docs): add auto-generated MCP tools reference (#81)

Add a generator tool that creates docs/commands-reference.md from
the [McpServerTool] and [Description] attributes in the server code.

Files:
- scripts/GenerateCommandsRef/ - Console app that uses reflection
  to enumerate all 102 tools across 17 tool classes
- docs/commands-reference.md - Generated reference with tool names,
  descriptions, parameters, types, and required/optional flags

Regenerate with: dotnet run --project scripts/GenerateCommandsRef

Part of P1 docs (docs/review/03-mcp-server-improvements.md §22)

* docs(docs): add security policy and installation guides (#82)

Add comprehensive documentation for production deployment:

- SECURITY.md: Security policy, vulnerability reporting process,
  security features, and best practices
- docs/install.md: Installation guide with multiple deployment
  options (Docker, .NET tool, binary releases), configuration
  reference, and verification steps
- docs/troubleshooting.md: Common issues and solutions for server,
  plugin, connection, semantic search, and Docker-specific problems

Part of P1 production readiness (docs/review/07-production-readiness.md)

* docs(docs): update tracking tables with P1 PRs (#83)

Update implementation status tables to reflect 16 P1 PRs created.

Files updated:
- 01-diagnosis-and-bugs.md: BUG-2, 3, 4, 6, 7, 8, 9, 10
- 03-mcp-server-improvements.md: reindex, cache, httpclient, etc.
- 04-plugin-improvements.md: open-file, validation, protocol, etc.
- 06-testing-strategy.md: coverage gate
- 07-production-readiness.md: docker, nuget, community store, etc.
- README.md: overall P1 progress summary

All P1 tasks have PRs except Vitest tests and contract test.

* feat(ci): add dependency vulnerability scanning

Add vulnerability checks to CI pipeline for both C# and TypeScript dependencies.

Changes:
- Added 'dotnet list package --vulnerable' check to build-server job
- Added 'pnpm audit --audit-level=high' check to build-plugin job
- Both checks run on every PR and push to main/develop

Benefits:
- Catches known vulnerabilities in dependencies early
- Non-blocking warnings (won't fail builds yet)
- Helps maintain security posture

Part of P1 security hardening (docs/review/07-production-readiness.md §3)

* docs(docs): mark all P1 PRs as merged in tracking tables (#85)

Update implementation status tables to reflect that all P1 bug fixes
and features have been merged to develop.

Completed:
- All 8 bug fixes (BUG-2, 3, 4, 6, 7, 8, 9, 10)
- All 8 features (coverage, docker, nuget, community store, soft-delete,
  security docs, commands-ref, dep scanning)

Remaining:
- Plugin Vitest test suite (not started)
- Bridge protocol contract test (not started)

Progress: 13/15 P1 tasks complete

* test(plugin): add Vitest suite and protocol contract tests (#86)

Add comprehensive unit tests for the Obsidian plugin bridge handlers
and a shared protocol contract test that locks the C#<->TS wire shape.

Changes:
- Add vitest + @vitest/coverage-v8 to obsidian-kioku-mcp
- Create minimal Obsidian mocks under src/__mocks__/obsidian.ts
- Add test utilities for building mock App/Vault/Workspace/Editor
- Add handlers.test.ts covering happy paths, missing payloads,
  file-not-found, and dependency-not-installed guards
- Add protocol.contract.test.ts validating BridgeMessage/BridgeResponse
  fixtures and that BridgeServer enriches responses with protocolVersion
- Add protocol-schema.json as a shared JSON Schema reference
- Wire plugin tests into the build-plugin CI job

Locks BUG-6 (open-file async rejection) and BUG-7 (payload validation).
Part of P1 testing strategy (docs/review/06-testing-strategy.md §3-4)

* docs(docs): mark P1 testing tasks as complete (#87)

Update implementation status tables to reflect that the plugin Vitest
suite and bridge protocol contract test have been merged.

Phase P1 is now complete: 15/15 tasks merged.

Next: Phase P2 (Scale & Polish).

* docs(docs): plan P2 tasks and reconcile P1 status in review docs (#88)

Update architecture and server improvement tables to reflect P1 merges:
- Protocol SSoT handshake + contract test are merged
- IHttpClientFactory, bootstrap logger, and generated commands-ref moved to P1

Add Phase P2 task table to README with 13 scale-and-polish items drawn from
architecture, server, and production-readiness reviews.

* feat(server): expose operational counters in ping and get_index_status (#89)

Enrich diagnostics with live operational counters so agents and users
can see the server's current state at a glance.

Changes:
- Add CachedEmbeddingCount and EmbeddingModel properties to EmbeddingService
- Extend the known embedding model dimension registry with gte-small and
  jina-embeddings-v2-base-en
- Update UtilityTools.ping to report cached embeddings and Ollama availability
- Update UtilityTools.get_index_status to report cached embeddings, Ollama
  state, and the configured embedding model

Part of P2 operational counters (docs/review/README.md #22)

* docs(docs): mark P2 operational counters as merged (#90)

* feat(server): introduce standardized KiokuError taxonomy (#91)

Add a centralized error helper so tool responses can carry stable
machine-readable codes alongside the existing human-readable messages.

Changes:
- Add KiokuError in Domain with NOT_FOUND, INVALID_ARGUMENT, UNAUTHORIZED,
  INTERNAL, and DEPENDENCY_UNAVAILABLE codes
- Migrate NoteCommandTools and NoteQueryTools to use KiokuError helpers
- Keep the existing [error] prefix so current clients are unaffected

Part of P2 consistent error taxonomy (docs/review/README.md #23)

* docs(docs): mark P2 error taxonomy as merged (#92)

* feat(server): add EmbeddingModelRegistry for known Ollama models (#93)

Centralize known embedding-model dimensions so the server validates
configurations consistently and future tools can query the registry.

Changes:
- Add EmbeddingModelRegistry in Domain with 16 known Ollama models
- Replace inline KnownModelDimensions dictionary in EmbeddingService
- Add unit tests for known dimensions, case-insensitivity, and defaults

Part of P2 embedding model registry (docs/review/README.md #24)

* docs(docs): mark P2 embedding model registry as merged (#94)

* feat(server): config-v2 polish — built-in template variables and malformed config warning (#95)

Improve the config-v2 template system and make configuration errors visible.

Changes:
- ExpandTemplateVariables now supports built-ins: {{date}}, {{time}},
  {{datetime}}, {{year}}, {{month}}, {{day}}, {{title}}, and {{uid}}
- User-provided variables take precedence over built-ins
- VaultConfigService now logs a clear warning when .kioku/config.yml is malformed
- Add unit tests for built-in variable expansion
- Update integration tests to provide the new required ILogger dependency

Part of P2 config-v2 polish (docs/review/README.md #25)

* docs(docs): mark P2 config-v2 polish as merged (#96)

* feat(server): add pagination to list_notes (#97)

Allow agents to page through large vault listings without blowing context.

Changes:
- Add 'limit' and 'offset' parameters to list_notes
- Cap limit to KIOKU_MAX_RESULTS
- Validate offset >= 0 and limit > 0 with clean error responses
- Update generated commands-reference.md to reflect the new signature

Part of P2 pagination & limits (docs/review/README.md #26)

* docs(docs): mark P2 pagination & limits as merged (#98)

* feat(server): flush embedding cache on graceful shutdown (#99)

Ensure pending embeddings are persisted when the server receives
SIGTERM or otherwise begins shutting down.

Changes:
- Make EmbeddingService.SaveAsync public with XML documentation
- Register ApplicationStopping callback in both HTTP and stdio modes
- Callback flushes the embedding cache before the process exits

Part of P2 graceful shutdown (docs/review/README.md #31)

* docs(docs): mark P2 graceful shutdown as merged (#100)

* feat(server): add BenchmarkDotNet project for performance tracking (#101)

Add a dedicated benchmark project so regressions in hot paths can be
detected over time.

Changes:
- New scripts/Kioku.Benchmarks project using BenchmarkDotNet
- Benchmarks for EmbeddingService.CosineSimilarity (768-dim vectors)
  and FrontmatterParser.GetBodyStart
- Make EmbeddingService.CosineSimilarity public so the benchmark can
  reference it

Part of P2 performance benchmarks (docs/review/README.md #30)

* docs(docs): mark P2 performance benchmarks as merged (#102)

* chore(develop): release 1.8.0-beta.6 (#84)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(server): add opt-in tool-call telemetry (#103)

Add privacy-first, opt-in metrics that count tool calls without ever
logging note contents or vault data.

Changes:
- Add MetricsService with in-memory counters (disabled by default)
- Add KIOKU_ENABLE_METRICS environment variable
- Expose total tool-call count in ping and get_index_status when enabled
- Instrument NoteCommandTools and NoteQueryTools as the first tools

Part of P2 opt-in telemetry (docs/review/README.md #29)

* docs(docs): mark P2 opt-in telemetry as merged (#105)

* feat(server): add tool capability groups / namespacing (#106)

Let vault owners disable optional tool groups via .kioku/config.yml so
research-focused vaults can load a smaller, cheaper tool surface.

Changes:
- Add CapabilitiesConfig to VaultConfigData with disabled/enabled/required
- Add VaultConfigService.IsGroupEnabled(groupName)
- Register core tools (NoteQuery, NoteCommand, Utility) always and optional
  groups conditionally in Program.cs
- Add unit tests for capability filtering

Known groups: tasks, zettelkasten, organization, sessions, workflows, css,
graph, research, bridge, plugin, graph-analysis, git, restore, assets.

Part of P2 tool namespacing (docs/review/README.md #28)

* docs(docs): mark P2 tool namespacing as merged (#107)

* feat(server): add one-line install script and package manager placeholders (#108)

- Add scripts/install.sh for Linux/macOS/Windows binary install

- Document Homebrew and WinGet targets in docs/install.md

- Ignore BenchmarkDotNet.Artifacts/

* docs(docs): mark P2 installer scripts as merged (#109)

* feat(ci): generate SBOMs and sign release artifacts with cosign (#110)

- Add anchore/sbom-action to generate SPDX SBOMs for each server build

- Install cosign and sign binaries + SBOMs using keyless Sigstore signing

- Upload signatures, certificates, and SBOMs to GitHub Releases

- Document signature verification in SECURITY.md

* docs(docs): mark P2 SBOM/signing as merged (#111)

* feat(server): add opt-in Sentry crash reporting (#112)

- Add KIOKU_SENTRY_DSN environment variable

- Integrate Sentry.AspNetCore for HTTP transport

- Initialize Sentry SDK for stdio transport when DSN is set

- Disable PII, tracing, profiling, and sessions for privacy

- Document KIOKU_SENTRY_DSN in install.md

* docs(docs): mark P2 crash reporting as merged (#113)

* feat(server): add optional JSON format for query tools (#114)

- Add format parameter to read_note, list_notes, search_notes, filter_notes,

  get_note_metadata, get_backlinks, get_outgoing_links, and get_vault_stats

- Default behavior remains human-readable text

- Add NoteQueryToolsTests covering JSON output shapes

- Fix xUnit2031 analyzer warning in TaskServiceTests

* docs(docs): mark P2 structured tool results as merged (#115)

* chore(develop): release 1.8.0-beta.7 (#104)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(ci): add github actions workflow for opencode integration (#116)

* chore(develop): release 1.8.0-beta.8 (#117)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(ci): extract main.js from ZIP artifact for BRAT upload

* docs(docs): update stale docs and add feature specs with task breakdown (#119)

- Fix drift: 102 tools/17 classes everywhere (was ~85/16, 18, beta.4, 1.6.2)
- Complete env-var tables (11 vars), fix broken links, reconcile config schema
- Mark implemented work as done (hybrid search, bearer auth, planned tables)
- Add docs/vault-config.md guide (capability groups included)
- Add docs/features/ with 12 feature specs (server + plugin)
- Add docs/tasks/ with prioritized branch-per-PR backlog (P0-P3)
- Update .mcp/server.json version and env vars

* fix(server)!: rename duplicate suggest_tags query tool to inspect_note_tags (#120)

NoteQueryTools defined a read-only diagnostic tool named suggest_tags that
collided with the real tag-suggestion tool in VaultOrganizationTools. With
the organization capability group enabled (default), two MCP tools were
registered under the same name. The diagnostic one is renamed to
inspect_note_tags; VaultOrganizationTools keeps suggest_tags, matching what
the name promises.

BREAKING CHANGE: the MCP tool suggest_tags in NoteQueryTools (core, always
registered) is renamed to inspect_note_tags. Agents calling the read-only
diagnostic variant by name must update to inspect_note_tags.

* chore(config): add MIT license file and metadata (#122)

The root README already declared "MIT — ver LICENSE" but the file didn't
exist, and no package metadata declared a license — a blocker for the
NuGet.org publish and the Obsidian Community Store submission, both of
which require an explicit license. Adds LICENSE (MIT, David Sandoval) and
declares it in Kioku.Mcp.Server.csproj (PackageLicenseExpression) and both
package.json files.

* chore(release): bump README and server.json versions via release-please extra-files (#123)

release-please only updated the csproj, plugin manifest.json and package.json
(extra-files), so the versions hand-written in both READMEs and
.mcp/server.json drifted from the actual release on every cut (README hit
beta.4 while the repo was at beta.8). Both READMEs already carry the
x-release-please-version annotation from a prior docs pass; this registers
them as "generic" extra-files, and adds two "json" entries for
.mcp/server.json ($.version and $.packages[0].version — release-please
merges same-path updaters via CompositeUpdater, so both apply in one run).

* fix(server): move merge-conflict tools out of the plugin capability group (#121)

fix_merge_conflicts and resolve_merge_conflict lived in PluginIntegrationTools
(group `plugin`) but only scan/edit files on disk — they never use the
Obsidian bridge. Users who disable the `plugin` group (e.g. because they
don't run the Obsidian plugin) lost two tools that don't need it. Moved both
tools, plus their private conflict-parsing helpers, to GitTools (group
`git`), which conceptually fits git merge-conflict tooling and already
injects the VaultIndexService they need. Tool names are unchanged — this is
not a breaking change for agents, only a capability-group change.

* feat(server): expose latent bridge commands as MCP tools (#124)

* docs(docs): mark P0-01/03/04/05 tasks as merged in backlog index

The task index still listed these as pending after PRs #120-#123 landed;
sync the status column with reality.

* feat(server): expose latent bridge commands as MCP tools

Adds 6 tools wrapping the 8 Obsidian bridge commands handlers.ts already
implements but the server never surfaced: get_selection_in_obsidian,
toggle_reading_mode, fold_all_headings, unfold_all_headings,
get_obsidian_status (aggregates is-obsidian-ready + get-app-version +
get-vault-path into one call) and reload_css_snippets. Follows the
existing ad hoc "[error] Obsidian plugin error: ..." convention already
used throughout ObsidianBridgeTools.cs rather than KiokuError.DependencyUnavailable,
which no bridge tool in this file actually uses today.

* docs(docs): mark P1-01 task as merged in backlog index (#125)

* feat(plugin): add bridge status bar item and control commands (#126)

Adds visibility into the WebSocket bridge without opening the dev console:
a status bar item ([online] Kioku :7765 (1) / [offline] Kioku, click to
restart), kioku-stop-bridge/kioku-start-bridge/kioku-copy-status commands
alongside the existing restart command, and a showStatusBar setting.

BridgeServer gains clientCount/isRunning getters and onClientConnected/
onClientDisconnected/onStateChange callbacks, following the existing
onStartupError/onProtocolMismatch pattern. Moved the "listening" log and
onStateChange firing from an optimistic post-construction call into the
ws package's "listening" event so state changes fire exactly once per
real transition instead of double-firing on a port-conflict startup
failure (caught by the new BridgeServer tests).

Status formatting logic lives in a new status.ts as pure, tested
functions since main.ts is excluded from coverage.

* docs(docs): mark P1-03 task as merged in backlog index (#127)

* test(server): cover http transport, api key middleware and bridge service (#128)

* docs(docs): mark P1-05 task as merged in backlog index (#129)

* feat(server): update inbound wikilinks on move_note and rename_note (#130)

* docs(docs): mark P1-02 task as merged in backlog index (#131)

* feat(server): add optional shared-token auth to the obsidian bridge (#132)

Adds an optional shared secret (KIOKU_BRIDGE_TOKEN / plugin "Auth token"
setting) to the bridge WebSocket, bumping PROTOCOL_VERSION to 2. When no
token is configured on either side the handshake is a no-op, preserving
full backward compatibility with v1 clients.

* fix(server): make ObsidianBridgeService's connection teardown reentrant-safe (#134)

CloseAndResetAsync could be invoked concurrently from two independent
paths (an explicit call after a failed auth handshake, and the receive
loop's own teardown running as an unsynchronized background task).
A losing caller could hit ObjectDisposedException disposing an
already-disposed CancellationTokenSource/WebSocket, which then
overrode the intended auth-failure error surfaced to callers. Each
field is now atomically claimed via Interlocked.Exchange so only one
concurrent caller ever disposes it.

* docs(docs): mark P1-04 task as merged in backlog index (#133)

* feat(server): add local text generation service with KIOKU_GEN_MODEL (#135)

* docs(docs): mark P2-01 task as merged in backlog index (#136)

* feat(server): add generate_digest tool for daily and weekly reviews (#137)

* docs(docs): mark P2-03 task as merged in backlog index (#138)

* feat(server): add process_inbox batch triage tool (#139)

* docs(docs): mark P2-04 task as merged in backlog index (#140)

* feat(server): add suggest_links and apply_link_suggestions tools (#141)

* docs(docs): mark P2-02 task as merged in backlog index (#142)

* feat(server): expose mcp prompts and note resources (#143)

* docs(docs): mark P2-05 task as merged in backlog index (#144)

* feat(server): add bibtex import and export for literature notes (#145)

* docs(docs): mark P3-01 task as merged in backlog index (#146)

* feat(server): add citation graph analysis for literature notes (#147)

* docs(docs): mark P3-04 task as merged in backlog index (#148)

* feat(server): add generate_flashcards tool with spaced-repetition and anki output (#149)

* docs(docs): mark P3-02 task as merged in backlog index (#150)

* feat(server): incremental re-embedding with content hashes and progress (#151)

* chore(develop): release 2.0.0-beta.8 (#118)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* docs(docs): mark P3-03 task as merged in backlog index (#152)

* fix(ci): pass explicit target-branch to release-please action (#155)

Without it, release-please defaults to the repo's default branch
(develop) regardless of which branch triggered the workflow, so
pushes to main never produced a release PR targeting main — no
stable release/tag/GitHub Release was ever cut.

* docs(docs): add community health files and dependabot configuration (#158)

Adds CODE_OF_CONDUCT.md, CONTRIBUTING.md, issue templates (bug report,
feature request), a PR template, and .github/dependabot.yml covering
nuget (all 4 .csproj directories), the pnpm workspace, github-actions,
and docker — closing the gaps flagged by GitHub's community standards
checklist (was 57% complete: missing everything except README/LICENSE).

* fix(ci): fix publish-nuget job and rename installed tool command to kioku (#176)

- Kioku.Mcp.Server.csproj was missing IsPackable=true, so `dotnet pack`
  silently produced no .nupkg (warning only) and `publish-nuget` then
  failed pushing a nonexistent file — the job has never actually
  succeeded since it was added.
- Fixing IsPackable surfaced two deeper conflicts between PackAsTool
  (meant to be a portable, framework-dependent package) and the
  self-contained/multi-RID publish setup used for the separate
  per-platform release binaries:
  - StaticWebAssetsEnabled=false: this is an API-only server with no
    wwwroot/Razor content: static web assets add nothing but RID-path
    mismatches between build and pack.
  - SelfContained/PublishSelfContained/PublishSingleFile are now scoped
    to an explicit runtime publish only, so a plain build/pack (no -r)
    stays framework-dependent instead of auto-detecting the local RID.
  - release-please.yml's restore/build/pack steps for the NuGet package
    now override RuntimeIdentifiers to empty, since a PackAsTool project
    with multiple RuntimeIdentifiers otherwise tries to bundle a
    self-contained build for every one of them.
- ToolCommandName is now explicit ("kioku") rather than defaulting to
  the assembly name — updated every doc that documented the installed
  command (docs/install.md, docs/troubleshooting.md, the plugin
  README) to match. The NuGet package name itself (kioku-mcp-server)
  is unchanged.

* chore(deps): Bump the minor-and-patch group with 6 updates (#170)

Bumps coverlet.collector from 6.0.2 to 6.0.4
Bumps Markdig from 0.38.0 to 0.45.0
Bumps Microsoft.NET.Test.Sdk from 17.11.1 to 17.14.1
Bumps Sentry.AspNetCore from 5.6.0 to 5.16.3
Bumps xunit from 2.9.2 to 2.9.3
Bumps YamlDotNet from 18.0.0 to 18.1.0

---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 6.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: Markdig
  dependency-version: 0.45.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 17.14.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Sentry.AspNetCore
  dependency-version: 5.16.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: xunit
  dependency-version: 2.9.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: YamlDotNet
  dependency-version: 18.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): Bump the minor-and-patch group with 4 updates (#167)

Bumps BenchmarkDotNet from 0.14.0 to 0.15.8
Bumps Markdig from 0.38.0 to 0.45.0
Bumps Sentry.AspNetCore from 5.6.0 to 5.16.3
Bumps YamlDotNet from 18.0.0 to 18.1.0

---
updated-dependencies:
- dependency-name: BenchmarkDotNet
  dependency-version: 0.15.8
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Markdig
  dependency-version: 0.45.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: Sentry.AspNetCore
  dependency-version: 5.16.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: YamlDotNet
  dependency-version: 18.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): bump codecov/codecov-action from 4 to 7 (#160)

Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 7.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4...v7)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): Bump Sentry.AspNetCore from 5.16.3 to 6.6.0 (#175)

---
updated-dependencies:
- dependency-name: Sentry.AspNetCore
  dependency-version: 6.6.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): Bump Microsoft.NET.Test.Sdk from 17.14.1 to 18.7.0 (#174)

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 18.7.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): Bump Markdig from 0.45.0 to 1.3.2 (#173)

---
updated-dependencies:
- dependency-name: Markdig
  dependency-version: 1.3.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): Bump coverlet.collector from 6.0.4 to 10.0.1 (#172)

---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 10.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(develop): release 2.0.0-beta.9 (#159)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore(ci): bump pnpm/action-setup from 4 to 6 (#161)

Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4 to 6.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/v4...v6)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): bump googleapis/release-please-action from 4 to 5 (#162)

Bumps [googleapis/release-please-action](https://github.com/googleapis/release-please-action) from 4 to 5.
- [Release notes](https://github.com/googleapis/release-please-action/releases)
- [Changelog](https://github.com/googleapis/release-please-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/googleapis/release-please-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: googleapis/release-please-action
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): bump actions/download-artifact from 4 to 8 (#163)

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): bump actions/setup-dotnet from 4 to 5 (#164)

Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 4 to 5.
- [Release notes](https://github.com/actions/setup-dotnet/releases)
- [Commits](https://github.com/actions/setup-dotnet/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-dotnet
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(release): use NuGet Trusted Publishing instead of long-lived API key (#179)

Replaces the NUGET_API_KEY secret with OIDC-based Trusted Publishing
(NuGet/login@v1), removing the need to store or rotate a long-lived
NuGet API key.

* ci(release): add manual NuGet publish workflow (#181)

Adds a standalone workflow_dispatch workflow, decoupled from
release-please's release_created gate, so an already-tagged version
(e.g. 2.0.0-beta.9, whose automated publish-nuget run failed before
Trusted Publishing was set up) can be packed and pushed on demand
without cutting a new release.

* docs(docs): translate remaining Spanish content to English (#182)

Translates all remaining Spanish prose across the repo to English for
consistency: root README.md, src/Kioku.Mcp.Server/README.md,
docs/planning.md, docs/v2-http-sse-spec.md, docs/deploy/auth-options.md,
and all files in docs/features/ and docs/tasks/. Code blocks, paths,
URLs, tool/command names and env vars are left untouched.

* fix(server): pack real LICENSE file and enable deterministic builds (#183)

- PackageLicenseExpression -> PackageLicenseFile: nuget.org was showing the
  generic SPDX MIT template instead of the repo's actual LICENSE (with the
  real copyright holder and year).
- Add ContinuousIntegrationBuild, scoped to GitHub Actions, so the packed
  assembly no longer embeds the build machine's absolute paths (nuget.org's
  package quality check flagged this as "non deterministic").
- Document the ASP.NET Core Runtime prerequisite for `dotnet tool install`,
  since the server targets Sdk.Web for the HTTP-SSE transport and nuget.org
  lists Microsoft.AspNetCore.App as a framework dependency.

* chore(ci): bump actions/setup-node from 4 to 6 (#187)

Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): bump actions/upload-artifact from 4 to 7 (#188)

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(ci): bump actions/checkout from 4 to 7 (#189)

Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): Bump xunit.runner.visu…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency updates (Dependabot) server Related to the C# MCP server

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant