Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| <?xml version="1.0"?> | ||
| <doc> | ||
| <assembly> | ||
| <name>Fuse.Fusion.Embeddings.Onnx</name> | ||
| </assembly> | ||
| <members> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor"> | ||
| <summary> | ||
| The pinned identity of a downloadable sentence-encoder model: its files, source URLs, expected SHA-256 | ||
| hashes, and vector dimensionality. Hashes are verified after download and a mismatch is rejected. | ||
| </summary> | ||
| <param name="Name">The model name, used as the per-machine cache subdirectory.</param> | ||
| <param name="Dimensions">The embedding vector length the model produces.</param> | ||
| <param name="MaxTokens">The maximum input token length; longer inputs are truncated.</param> | ||
| <param name="ModelFile">The ONNX weights file descriptor.</param> | ||
| <param name="VocabFile">The WordPiece vocabulary file descriptor.</param> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.#ctor(System.String,System.Int32,System.Int32,Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile,Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile)"> | ||
| <summary> | ||
| The pinned identity of a downloadable sentence-encoder model: its files, source URLs, expected SHA-256 | ||
| hashes, and vector dimensionality. Hashes are verified after download and a mismatch is rejected. | ||
| </summary> | ||
| <param name="Name">The model name, used as the per-machine cache subdirectory.</param> | ||
| <param name="Dimensions">The embedding vector length the model produces.</param> | ||
| <param name="MaxTokens">The maximum input token length; longer inputs are truncated.</param> | ||
| <param name="ModelFile">The ONNX weights file descriptor.</param> | ||
| <param name="VocabFile">The WordPiece vocabulary file descriptor.</param> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.Name"> | ||
| <summary>The model name, used as the per-machine cache subdirectory.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.Dimensions"> | ||
| <summary>The embedding vector length the model produces.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.MaxTokens"> | ||
| <summary>The maximum input token length; longer inputs are truncated.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.ModelFile"> | ||
| <summary>The ONNX weights file descriptor.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.VocabFile"> | ||
| <summary>The WordPiece vocabulary file descriptor.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.Default"> | ||
| <summary> | ||
| The default model: <c>all-MiniLM-L6-v2</c>, a 384-dimension sentence encoder (~90 MB). URLs and | ||
| hashes were captured from the Hugging Face <c>sentence-transformers/all-MiniLM-L6-v2</c> repository. | ||
| </summary> | ||
| </member> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile"> | ||
| <summary> | ||
| One downloadable file belonging to an <see cref="T:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor" />. | ||
| </summary> | ||
| <param name="FileName">The file name within the model cache directory.</param> | ||
| <param name="Url">The pinned download URL.</param> | ||
| <param name="Sha256">The lowercase hexadecimal SHA-256 the downloaded bytes must match.</param> | ||
| <param name="SizeBytes">The expected file size in bytes, used only for the download notice.</param> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile.#ctor(System.String,System.String,System.String,System.Int64)"> | ||
| <summary> | ||
| One downloadable file belonging to an <see cref="T:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor" />. | ||
| </summary> | ||
| <param name="FileName">The file name within the model cache directory.</param> | ||
| <param name="Url">The pinned download URL.</param> | ||
| <param name="Sha256">The lowercase hexadecimal SHA-256 the downloaded bytes must match.</param> | ||
| <param name="SizeBytes">The expected file size in bytes, used only for the download notice.</param> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile.FileName"> | ||
| <summary>The file name within the model cache directory.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile.Url"> | ||
| <summary>The pinned download URL.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile.Sha256"> | ||
| <summary>The lowercase hexadecimal SHA-256 the downloaded bytes must match.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile.SizeBytes"> | ||
| <summary>The expected file size in bytes, used only for the download notice.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelResolver"> | ||
| <summary> | ||
| Resolves a model's files to local paths: honoring a sideload directory, reusing a per-machine cache, or | ||
| downloading and verifying against the pinned SHA-256. Returns <see langword="null" /> when the files are | ||
| unavailable (offline with nothing cached, or a hash mismatch), so the caller can fall back to hashing. | ||
| </summary> | ||
| </member> | ||
| <member name="F:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelResolver.SideloadPathVariable"> | ||
| <summary> | ||
| The environment variable that points to a directory holding the model files. When set, the resolver | ||
| loads from there and never touches the network. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelResolver.#ctor(Fuse.Fusion.Embeddings.Onnx.IEmbeddingModelDownloader,System.String)"> | ||
| <summary> | ||
| Initializes a new instance of the <see cref="T:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelResolver" /> class. | ||
| </summary> | ||
| <param name="downloader">The seam used to fetch missing files.</param> | ||
| <param name="cacheRoot"> | ||
| The root of the per-machine model cache. Defaults to <c>~/.fuse/models</c> when <c>null</c>. | ||
| </param> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelResolver.ResolveAsync(Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor,System.Threading.CancellationToken)"> | ||
| <summary> | ||
| Resolves the model and vocabulary file paths for <paramref name="descriptor" />. | ||
| </summary> | ||
| <param name="descriptor">The pinned model descriptor.</param> | ||
| <param name="cancellationToken">Token used to cancel any download.</param> | ||
| <returns>The local file paths, or <see langword="null" /> when the model cannot be made available.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.ResolvedEmbeddingModel"> | ||
| <summary> | ||
| The resolved local file paths for a model. | ||
| </summary> | ||
| <param name="Descriptor">The model descriptor the paths belong to.</param> | ||
| <param name="ModelPath">The local path of the ONNX weights file.</param> | ||
| <param name="VocabPath">The local path of the vocabulary file.</param> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.ResolvedEmbeddingModel.#ctor(Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor,System.String,System.String)"> | ||
| <summary> | ||
| The resolved local file paths for a model. | ||
| </summary> | ||
| <param name="Descriptor">The model descriptor the paths belong to.</param> | ||
| <param name="ModelPath">The local path of the ONNX weights file.</param> | ||
| <param name="VocabPath">The local path of the vocabulary file.</param> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.ResolvedEmbeddingModel.Descriptor"> | ||
| <summary>The model descriptor the paths belong to.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.ResolvedEmbeddingModel.ModelPath"> | ||
| <summary>The local path of the ONNX weights file.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.ResolvedEmbeddingModel.VocabPath"> | ||
| <summary>The local path of the vocabulary file.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.Extensions.OnnxEmbeddingsServiceCollectionExtensions"> | ||
| <summary> | ||
| Registers the opt-in ONNX semantic embedding model in place of the hashing default, with a tri-state | ||
| resolution and an intact fallback. | ||
| </summary> | ||
| </member> | ||
| <member name="F:Fuse.Fusion.Embeddings.Onnx.Extensions.OnnxEmbeddingsServiceCollectionExtensions.EnableVariable"> | ||
| <summary> | ||
| The environment variable that selects the embedding backend: <c>1</c>/<c>true</c> for ONNX, | ||
| <c>0</c>/<c>false</c> for hashing. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.Extensions.OnnxEmbeddingsServiceCollectionExtensions.ResolveChoice(System.Nullable{System.Boolean})"> | ||
| <summary> | ||
| Resolves the embedding choice: an explicit flag wins, otherwise <see cref="F:Fuse.Fusion.Embeddings.Onnx.Extensions.OnnxEmbeddingsServiceCollectionExtensions.EnableVariable" /> is | ||
| consulted, otherwise the build default applies (<see langword="null" />). The default is opt-in | ||
| (hashing) until a recall@budget measurement justifies flipping it. | ||
| </summary> | ||
| <param name="explicitFlag">The value of an explicit <c>--embeddings</c> flag, or <c>null</c> when absent.</param> | ||
| <returns><see langword="true" /> for ONNX, <see langword="false" /> for hashing, <see langword="null" /> for the default.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.Extensions.OnnxEmbeddingsServiceCollectionExtensions.AddFuseOnnxEmbeddings(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Nullable{System.Boolean},Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor)"> | ||
| <summary> | ||
| Registers <see cref="T:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel" /> as the <see cref="T:Fuse.Fusion.Retrieval.IEmbeddingModel" /> when embeddings are | ||
| requested and the model resolves; otherwise leaves the hashing default in place. A forced-off choice | ||
| and an unavailable model both keep hashing, so a run never fails for want of the model. | ||
| </summary> | ||
| <param name="services">The service collection. Call after <c>AddFuse</c> so this registration wins.</param> | ||
| <param name="explicitFlag">The value of an explicit <c>--embeddings</c> flag, or <c>null</c>.</param> | ||
| <param name="descriptor">The model to use, or <c>null</c> for <see cref="P:Fuse.Fusion.Embeddings.Onnx.EmbeddingModelDescriptor.Default" />.</param> | ||
| <returns>The same <paramref name="services" /> instance, to allow chaining.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.HttpEmbeddingModelDownloader"> | ||
| <summary> | ||
| Default <see cref="T:Fuse.Fusion.Embeddings.Onnx.IEmbeddingModelDownloader" /> that fetches files over HTTP, printing a one-line | ||
| stderr notice on first download. A failure (offline, transport error) returns <see langword="false" /> | ||
| so the caller can fall back to the hashing embedding rather than throwing. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.HttpEmbeddingModelDownloader.TryDownloadAsync(Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile,System.String,System.Threading.CancellationToken)"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.IEmbeddingModelDownloader"> | ||
| <summary> | ||
| Fetches a model file to a local path. An injectable seam so tests can supply a fixture or assert that no | ||
| network call is attempted (for example when a model is sideloaded). | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.IEmbeddingModelDownloader.TryDownloadAsync(Fuse.Fusion.Embeddings.Onnx.EmbeddingModelFile,System.String,System.Threading.CancellationToken)"> | ||
| <summary> | ||
| Downloads <paramref name="file" /> to <paramref name="destinationPath" />. | ||
| </summary> | ||
| <param name="file">The pinned file descriptor (URL and expected hash).</param> | ||
| <param name="destinationPath">The absolute path to write the file to.</param> | ||
| <param name="cancellationToken">Token used to cancel the download.</param> | ||
| <returns><see langword="true" /> when the file was fetched, <see langword="false" /> when it could not be.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel"> | ||
| <summary> | ||
| A genuine semantic <see cref="T:Fuse.Fusion.Retrieval.IEmbeddingModel" /> backed by an ONNX sentence encoder (for example | ||
| <c>all-MiniLM-L6-v2</c>). It tokenizes text with the model's WordPiece vocabulary, runs the transformer, | ||
| mean-pools the token embeddings over the attention mask, and L2-normalizes the result, so cosine | ||
| similarity reflects semantic closeness rather than only lexical overlap. | ||
| </summary> | ||
| <remarks> | ||
| This type references ONNX Runtime and is therefore excluded from the Native AOT build, where the | ||
| hashing embedding remains the fallback. Inference is deterministic, so a repeated query yields an | ||
| identical vector and a stable ranking. The instance is thread-safe for concurrent <see cref="M:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel.Embed(System.String)" /> | ||
| calls and owns the underlying session, which is disposed with it. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel.#ctor(Fuse.Fusion.Embeddings.Onnx.ResolvedEmbeddingModel)"> | ||
| <summary> | ||
| Initializes a new instance of the <see cref="T:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel" /> class from resolved local files. | ||
| </summary> | ||
| <param name="resolved">The resolved model and vocabulary paths plus the pinned descriptor.</param> | ||
| </member> | ||
| <member name="P:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel.Dimensions"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel.Embed(System.String)"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Fusion.Embeddings.Onnx.OnnxEmbeddingModel.Dispose"> | ||
| <inheritdoc /> | ||
| </member> | ||
| </members> | ||
| </doc> |
@@ -5,8 +5,5 @@ <?xml version="1.0" encoding="utf-8"?> | ||
| <Default Extension="psmdcp" ContentType="application/vnd.openxmlformats-package.core-properties+xml" /> | ||
| <Default Extension="a" ContentType="application/octet" /> | ||
| <Default Extension="aar" ContentType="application/octet" /> | ||
| <Default Extension="config" ContentType="application/octet" /> | ||
| <Default Extension="dll" ContentType="application/octet" /> | ||
| <Default Extension="dylib" ContentType="application/octet" /> | ||
| <Default Extension="exe" ContentType="application/octet" /> | ||
| <Default Extension="json" ContentType="application/octet" /> | ||
@@ -13,0 +10,0 @@ <Default Extension="lib" ContentType="application/octet" /> |
+2
-2
@@ -5,3 +5,3 @@ <?xml version="1.0" encoding="utf-8"?> | ||
| <id>Fuse</id> | ||
| <version>3.1.0</version> | ||
| <version>2.4.0</version> | ||
| <authors>Litenova Solutions</authors> | ||
@@ -18,4 +18,4 @@ <license type="expression">MIT</license> | ||
| </packageTypes> | ||
| <repository type="git" url="https://github.com/Litenova-Solutions/Fuse.git" commit="3077801ba24fb91b6c7f8ff9128252fa85e39eab" /> | ||
| <repository type="git" url="https://github.com/Litenova-Solutions/Fuse.git" commit="3ab1025324c2e25bef42a1b335bd4a6d008eead2" /> | ||
| </metadata> | ||
| </package> |
+107
-68
@@ -8,3 +8,3 @@ <!-- mcp-name: io.github.Litenova-Solutions/fuse --> | ||
| <p align="center"> | ||
| <b>A faster, cheaper, more accurate AI coding assistant on your .NET codebase.</b> | ||
| <b>The MCP server that collapses an AI coding agent's explore phase on .NET into one scoped call.</b> | ||
| </p> | ||
@@ -23,2 +23,3 @@ | ||
| <a href="https://github.com/Litenova-Solutions/Fuse/actions/workflows/ci.yml"><img src="https://github.com/Litenova-Solutions/Fuse/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI status"></a> | ||
| <a href="https://codecov.io/gh/Litenova-Solutions/Fuse"><img src="https://codecov.io/gh/Litenova-Solutions/Fuse/branch/main/graph/badge.svg" alt="Code coverage"></a> | ||
| <a href="https://registry.modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-registry-6d4aff" alt="MCP Registry"></a> | ||
@@ -31,9 +32,30 @@ <a href="https://dotnet.microsoft.com/download"><img src="https://img.shields.io/badge/.NET-10.0-512BD4?logo=dotnet&logoColor=white" alt=".NET 10"></a> | ||
| Fuse is a Model Context Protocol server that makes your AI coding assistant (Claude Code, Cursor, GitHub Copilot) faster, cheaper, and more accurate on .NET code. Its one concrete edge: it understands how your code is actually wired (which service implements an interface, which handler runs a request, which action a route hits) by reading the code with Roslyn, so the assistant answers from the real graph instead of guessing from file names and grep. Context for a task arrives scoped and reduced in one call, so the agent spends fewer tokens and fewer round-trips. The same engine is also a `fuse` CLI. | ||
| Fuse is a Model Context Protocol server for AI-assisted development on .NET. It hands your coding agent (Claude Code, Cursor, GitHub Copilot) the right code, scoped and reduced, in a single call, instead of letting it burn its context window opening thousands of files during the explore phase. It cuts input tokens while keeping the public API intact, scopes to the files a task needs, and trims the round-trips an agent makes. The same engine is also a `fuse` CLI. | ||
| Full documentation: **[fuse.codes](https://fuse.codes/docs)**. | ||
| Unlike generic repo packers (Repomix, Code2Prompt, Gitingest), Fuse understands C# structure: dependency graphs, skeleton extraction, BM25 query scoping, git change detection, and convention patterns. An opt-in Roslyn precision tier and a hybrid-retrieval reranker raise accuracy further. The MCP server exposes nine tools; see [Connect your agent](https://fuse.codes/docs/start/connect-your-ai). | ||
| Full documentation lives at **[fuse.codes](https://fuse.codes/docs)**. | ||
| ## Why Fuse | ||
| Measured over a pinned corpus of four real .NET libraries (MediatR, FluentValidation, AutoMapper, Newtonsoft.Json), counted with the `o200k_base` tokenizer. Reduction ratios transfer across models even though absolute token counts do not. Every figure is reproducible with one command and reported in full, including the arms where Fuse ties or loses, on the [benchmarks page](https://fuse.codes/docs/project/benchmarks). | ||
| <p align="center"> | ||
| <img src="assets/fuse-benchmarks.png" alt="Fuse benchmark results: 40 percent fewer tokens at full public-API fidelity, 88 percent change-scoping recall versus a 38 percent grep baseline, 100 percent versus 4 percent skeleton method fidelity with the opt-in Roslyn tier, one scoped call replacing at least six grep-and-open round-trips, and that call delivering a task's context in about 13 times fewer tokens than a generic packer." width="820"> | ||
| </p> | ||
| - **One scoped call instead of an explore loop.** Over 24 real merged pull requests, one `fuse --query` call delivers the files a change needs in about 40,000 tokens at 51 percent recall, against a generic-packer dump of about 512,000 tokens (about 13 times more) at the same single call, and about 494,000 tokens to read the repository blind. Fuse ties a packer at one call and wins on tokens; with a git base the change-scoping mode reaches 88 percent recall. Read the token number with its recall. | ||
| - **Cuts tokens without dropping API.** Default reduction removes 7 to 10 percent and `--all` removes 21 to 40 percent of tokens while keeping 99 to 100 percent of public types and methods. `--skeleton` removes 66 to 93 percent for an architecture map. | ||
| - **Smaller than the generic packers.** Repomix output runs 1.3 to 3.9 percent larger than raw concatenation on these repositories; Fuse is smaller than raw in every mode. | ||
| - **Finds the files a change touches.** Change scoping recalls 88 percent of the files in 24 real merged pull requests at 61 percent precision, and all three scoping modes beat an agent-style grep baseline. | ||
| - **Trustworthy skeletons on hard code.** The opt-in Roslyn tier keeps 100 percent of method signatures on all four libraries, including Newtonsoft.Json, where the regex skeleton kept 4 percent. | ||
| - **Cheap repeated calls.** The on-disk analysis index roughly halves warm-call wall-clock across a session, so a multi-call task pays the analysis cost once. | ||
| - **Native AOT and no runtime reflection on the default path.** The fast path ships as an ahead-of-time-compiled binary; Roslyn and the vector reranker are opt-in tiers isolated from it. | ||
| Reproduce every number with `pwsh -File tests/benchmarks/harness/run-all.ps1`. | ||
| ## Install | ||
| Fuse is a .NET developer tool, so the recommended install is the .NET global tool ([.NET SDK 10.0](https://dotnet.microsoft.com/download) or later): | ||
| Fuse is a developer tool for .NET developers, so the recommended install is the | ||
| .NET global tool ([.NET SDK 10.0](https://dotnet.microsoft.com/download) or later): | ||
@@ -44,14 +66,24 @@ ```bash | ||
| Or run it on demand without installing: `dnx Fuse -- serve`. No SDK? Install a self-contained binary (the .NET runtime is bundled): | ||
| Or run it on demand without installing: `dnx Fuse -- serve`. | ||
| If you do not have the .NET SDK, install a self-contained binary (Native AOT, no | ||
| runtime required) with the script for your platform: | ||
| ```bash | ||
| curl -fsSL https://fuse.codes/install.sh | sh # Linux / macOS | ||
| irm https://fuse.codes/install.ps1 | iex # Windows PowerShell | ||
| # Linux | ||
| curl -fsSL https://fuse.codes/install.sh | sh | ||
| ``` | ||
| On Windows: `winget install Litenova.Fuse`, or grab a binary from [Releases](https://github.com/Litenova-Solutions/Fuse/releases). Verify with `fuse --help`. Full notes: [fuse.codes/docs/start/install](https://fuse.codes/docs/start/install). | ||
| ```powershell | ||
| # Windows | ||
| irm https://fuse.codes/install.ps1 | iex | ||
| ``` | ||
| On Windows you can also use `winget install Litenova.Fuse`, or download a binary | ||
| from [Releases](https://github.com/Litenova-Solutions/Fuse/releases). Verify with | ||
| `fuse --help`. Full notes: [fuse.codes/docs/start/install](https://fuse.codes/docs/start/install). | ||
| ## Connect your agent | ||
| Register Fuse once; your client launches `fuse mcp serve` automatically when MCP is enabled: | ||
| Register Fuse once; your AI client launches `fuse mcp serve` automatically when MCP is enabled: | ||
@@ -62,5 +94,9 @@ ```bash | ||
| That writes MCP config for Claude Code, Cursor, and GitHub Copilot in the current project, and `--rules` adds a short instruction so the agent reaches for the `fuse_*` tools instead of grepping blindly. Use `--scope user` for every project on the machine, or `--client cursor` for one client. | ||
| That writes MCP config for Claude Code, Cursor, and GitHub Copilot in the current project, | ||
| and `--rules` (recommended) writes a short rule into each client's instruction file | ||
| (`CLAUDE.md`, `.cursor/rules/fuse.mdc`, `.github/copilot-instructions.md`) so the agent | ||
| reaches for the `fuse_*` tools instead of grepping blindly. Use `fuse mcp install --scope user` | ||
| to register for every project on this machine, or `--client cursor` to configure one client only. | ||
| Prefer to wire it by hand? The MCP server config is the same shape everywhere: | ||
| Manual registration is also supported. For Claude Code, add `.mcp.json` to your project root: | ||
@@ -71,2 +107,3 @@ ```json | ||
| "fuse": { | ||
| "type": "stdio", | ||
| "command": "fuse", | ||
@@ -79,67 +116,63 @@ "args": ["mcp", "serve"] | ||
| Put it in `.mcp.json` (Claude Code), `.cursor/mcp.json` (Cursor), or `.vscode/mcp.json` (Copilot); any MCP client uses the same `command` and `args`. The Claude CLI shortcut is `claude mcp add fuse --scope project -- fuse mcp serve`. Both surfaces are covered in [Connect your agent](https://fuse.codes/docs/start/connect-your-ai). | ||
| Or register with the Claude CLI: `claude mcp add fuse --scope project -- fuse mcp serve` | ||
| (use `--scope user` for all projects). Cursor uses `.cursor/mcp.json` and GitHub Copilot | ||
| uses `.vscode/mcp.json`; see [Connect to your AI](https://fuse.codes/docs/start/connect-your-ai) for both. | ||
| ## Quickstart (what the agent calls) | ||
| A recommended agent flow on a large codebase: survey with `fuse_toc` or `fuse_skeleton`, drill in with `fuse_focus` or `fuse_search`, then review a branch with `fuse_changes`. Or call `fuse_ask` with a task and a token budget and let Fuse pick the strategy. See [Context for an agent](https://fuse.codes/docs/scenarios/context-for-an-agent). | ||
| Fuse exposes verbs an agent uses while it works. Two carry most of the value: | ||
| Tool catalog and parameters: [MCP Tools](https://fuse.codes/docs/reference/mcp-tools) and [MCP Resources](https://fuse.codes/docs/reference/mcp-resources). MCP Registry manifest: [mcp-registry/server.json](mcp-registry/server.json). | ||
| ```text | ||
| # Resolve .NET wiring: which implementation does the container give for IBasketService? | ||
| fuse_resolve service="IBasketService" | ||
| -> BasketService (src/ApplicationCore/Services/BasketService.cs) | ||
| edge: di_resolves_to (registered services.AddScoped<IBasketService, BasketService>()) | ||
| ## Command-line quickstart | ||
| # Scope a change: the blast radius of a branch, packed under a token budget | ||
| fuse_review changedSince="main" | ||
| -> changed files + support files (the interface a changed type implements, its consumers) | ||
| 100% of changed files kept, ~958 tokens median, with provenance for each file | ||
| ``` | ||
| The same engine runs as a CLI: | ||
| The rest of the surface, by what an agent does with it: | ||
| ```bash | ||
| # fuse a .NET project with the DotNet template | ||
| fuse dotnet --directory ./src | ||
| | Verb | What it does | | ||
| |------|--------------| | ||
| | `fuse_map` | Workspace map (symbols, routes, counts). The cheap first call. | | ||
| | `fuse_localize` | Rank candidate files for a task. Refuses and hands back a map when the task names no code. | | ||
| | `fuse_resolve` | Resolve wiring: service to implementation, request to handler, route to action, config to options. | | ||
| | `fuse_context` | Emit scoped, reduced source (with provenance) for selected seeds. | | ||
| | `fuse_review` | Diff-first semantic impact and packed context for a change. | | ||
| | `fuse_neighbors` | Graph neighborhood of a file, callers and implementers of a symbol, central files of an area. | | ||
| | `fuse_find` | Exact symbol, path, or text lookup. | | ||
| | `fuse_index` | Build or refresh the persistent semantic index (the read tools build it on first use). | | ||
| # maximum C# reduction, public API intact | ||
| fuse dotnet --directory ./src --all | ||
| Tool parameters and the full catalog: [MCP Tools](https://fuse.codes/docs/reference/mcp-tools). | ||
| # architecture overview, signatures only | ||
| fuse dotnet --directory ./src --all --skeleton | ||
| ## Benchmarks (honest, sourced, reproducible) | ||
| # cheap survey before fetching files (tree, symbol outline, token costs) | ||
| fuse dotnet --directory ./src --toc | ||
| Fuse is judged as a semantic engine, not a token compressor: can it resolve .NET wiring, scope a change precisely, help an agent, and stay honest on a vague query. Every figure below is recorded under `tests/benchmarks/results` and reproduced with `fuse eval <suite>`; the full methodology, the corpus, and the modes where Fuse is weak are on the [benchmarks page](https://fuse.codes/docs/project/benchmarks). Numbers are counted with the `o200k_base` tokenizer over a commit-pinned corpus (Scrutor, Ardalis.Specification, NodaTime, and the eShopOnWeb application). | ||
| # accurate skeletons and dependency edges with the Roslyn precision tier | ||
| fuse dotnet --directory ./src --skeleton --semantic | ||
| - **Resolves .NET wiring deterministically.** On the wiring fixture, the extracted semantic graph matches the hand-built edge ground truth exactly (22 of 22 edges, recall and precision 1.0): DI registration and injection, MediatR request-to-handler, ASP.NET route-to-action, EF Core, decorators, options binding, and more. This is the moat a lexical or tree-sitter index cannot follow. | ||
| - **Scopes a change with precision.** Over 53 real merged pull requests, `fuse review` keeps 100 percent of the changed files at 79.8 percent precision in a median 958 returned tokens, adding the semantic blast radius (callers, DI consumers, handlers) on top. A grep baseline reaches 53 percent recall at 14 percent precision. | ||
| - **Honest on open-ended localization.** From a task title alone, with no git base, `fuse localize` recalls about 15 percent of the changed files: the weakest mode, reported straight. Rather than return a low-precision guess on a no-signal title, Fuse refuses and hands back a navigation map (correct-refusal rate 100 percent on no-signal titles). | ||
| - **Helps a real agent.** Driving Claude (sonnet-4-6) over 12 pull requests, the Fuse MCP arm edged out bare filesystem tools on file recall (30 versus 26 percent) at comparable token cost, on a small, model-dependent sample. | ||
| - **Token-efficient context.** The Roslyn skeleton keeps essentially all public API while removing roughly 37 to 55 percent of tokens at skeleton level (a support number; the headline is "a PR in about a thousand tokens"). | ||
| # PR-scoped fusion with diff hunks and the callers of each changed file | ||
| fuse dotnet --directory ./src --changed-since main --review | ||
| No head-to-head ranking against other tools is claimed here; the measured peer comparison (with the exact reproduction command and every caveat) lives on the [benchmarks page](https://fuse.codes/docs/project/benchmarks). | ||
| # query-scoped fusion | ||
| fuse dotnet --directory ./src --query "payment gateway" --query-top 10 | ||
| ``` | ||
| ## Command-line use | ||
| Output defaults to `Documents/Fuse`; use `--output` and `--name` to control the destination. Walkthrough: [fuse.codes/docs/start/quickstart](https://fuse.codes/docs/start/quickstart). | ||
| The same engine runs as a CLI for one-shot context outside an agent: | ||
| ## Commands | ||
| ```bash | ||
| fuse index ./src # build the semantic index | ||
| fuse localize ./src --task "discount rounding at checkout" | ||
| fuse dotnet --directory ./src --level skeleton # architecture overview, signatures only | ||
| ``` | ||
| | Command | Purpose | | ||
| |---------|---------| | ||
| | `fuse` | Generic fusion. All extensions unless you set `--only-extensions`. | | ||
| | `fuse dotnet` | .NET projects: C# reduction, structural maps, dependency-aware scoping. | | ||
| | `fuse wiki` | Azure DevOps wikis: Markdown only. | | ||
| | `fuse init` | Create `fuse.json` in the current directory. | | ||
| | `fuse mcp install` | Register Fuse with MCP clients (Claude Code, Cursor, Copilot). | | ||
| | `fuse mcp serve` | MCP server entry point on stdio (launched by your client, not run manually). | | ||
| Output and option lists: [Commands](https://fuse.codes/docs/reference/commands) and [Quickstart](https://fuse.codes/docs/start/quickstart). | ||
| Full option lists: [Commands](https://fuse.codes/docs/reference/commands) and [Options](https://fuse.codes/docs/reference/options). | ||
| ## Status | ||
| ## How it works | ||
| - **Solid: .NET semantic context.** The Roslyn-backed wiring graph, change-impact review, and warm millisecond retrieval are the mature core. | ||
| - **Default-on, offline dense retrieval.** A small local embedding model is fetched once and cached, then runs entirely offline; lexical is the fallback when no model is present. | ||
| - **Early: multi-language.** Non-C# languages are supported at the syntax tier (token-efficient context and search); the deep typed graph is .NET-only for now. | ||
| A fusion is a four-stage pipeline: | ||
| The planned direction is the [Roadmap](https://fuse.codes/docs/project/roadmap); shipped work is the [Changelog](https://fuse.codes/docs/project/changelog). | ||
| 1. **Collection** - scan the source directory and apply filters (extensions, `.gitignore`, binary detection, test projects, globs). | ||
| 2. **Filtering** - optional scoping: focus, git changes, or BM25 query with dependency expansion. | ||
| 3. **Reduction** - normalize whitespace, run language and format reducers, apply skeleton, markers, and secret redaction. | ||
| 4. **Emission** - count tokens, build the manifest, apply the output format, and write within a token budget. | ||
| The concept in plain terms is at [How Fuse works](https://fuse.codes/docs/concepts/how-fuse-works); the internals are at [The pipeline](https://fuse.codes/docs/internals/pipeline). | ||
| ## Repository layout | ||
@@ -149,12 +182,18 @@ | ||
| src/ | ||
| Core/ Pipeline and engine: Fuse.Collection, Fuse.Reduction, Fuse.Emission, | ||
| Fuse.Fusion, plus the V3 semantic stack (Fuse.Indexing, Fuse.Semantics, | ||
| Fuse.Retrieval, Fuse.Context). | ||
| Host/ Fuse.Cli: the CLI commands and the MCP server. | ||
| Plugins/ Extension-keyed providers: Abstractions, Languages.CSharp, | ||
| Languages.CSharp.Roslyn, Formats.Web. | ||
| tests/ Unit, golden-output, and integration tests; benchmarks under tests/benchmarks. | ||
| site/ The fuse.codes website and documentation (Next.js + Fumadocs). | ||
| assets/ The benchmark figure and its chart-generating script. | ||
| mcp-registry/ MCP Registry server manifest. | ||
| Core/ Pipeline libraries | ||
| Fuse.Collection/ File discovery, filters, templates | ||
| Fuse.Reduction/ Content pipeline, caching, redaction | ||
| Fuse.Emission/ Output writers, token budget, manifest | ||
| Fuse.Fusion/ Orchestration, scoping, analysis, enrichment, DI | ||
| Host/ | ||
| Fuse.Cli/ CLI and MCP server | ||
| Plugins/ Extension-keyed capability providers | ||
| Fuse.Plugins.Abstractions/ Capability interfaces (shared contract) | ||
| Fuse.Plugins.Languages.CSharp/ C# language plugin (regex, AOT-clean default) | ||
| Fuse.Plugins.Languages.CSharp.Roslyn/ Opt-in Roslyn precision tier (excluded from the AOT build) | ||
| Fuse.Plugins.Formats.Web/ Format reducers (HTML, JSON, YAML, SQL, TS/JS, etc.) | ||
| tests/ Unit, golden-output, and integration tests; benchmarks | ||
| site/ The fuse.codes website and documentation (Next.js + Fumadocs) | ||
| assets/ Benchmark figure and the chart-generating script | ||
| mcp-registry/ MCP Registry server manifest | ||
| ``` | ||
@@ -170,3 +209,3 @@ | ||
| Contribution workflow: [Contributing](https://fuse.codes/docs/project/contributing). Durable project context for contributors and agents: [AGENTS.md](AGENTS.md). The docs site is in [site/](site/). | ||
| Contribution workflow: [Contributing](https://fuse.codes/docs/project/contributing). Agent instructions: [AGENTS.md](AGENTS.md). The documentation site is in [site/](site/); see [site/README.md](site/README.md) to run it locally. | ||
@@ -173,0 +212,0 @@ ## License |
@@ -54,4 +54,3 @@ <?xml version="1.0"?> | ||
| <c>.gitignore</c> patterns found along the way. Traversal stops at the | ||
| git repository root resolved by <see cref="M:Fuse.Collection.FileSystem.RepositoryRootResolver.TryFindRepositoryRoot(System.String)" /> | ||
| (inclusive) or the file system root when not inside a repository. | ||
| repository root (directory containing a <c>.git</c> folder) or the file system root. | ||
| </remarks> | ||
@@ -215,14 +214,2 @@ </member> | ||
| </member> | ||
| <member name="T:Fuse.Collection.FileSystem.RepositoryRootResolver"> | ||
| <summary> | ||
| Locates the git repository root for a path on disk. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Collection.FileSystem.RepositoryRootResolver.TryFindRepositoryRoot(System.String)"> | ||
| <summary> | ||
| Walks upward from <paramref name="startDirectory" /> until a directory containing <c>.git</c> is found. | ||
| </summary> | ||
| <param name="startDirectory">The directory to start from (typically the fusion source directory).</param> | ||
| <returns>The repository root, or <see langword="null" /> when no <c>.git</c> directory is found.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Collection.FileSystem.SourceContentProvider"> | ||
@@ -313,20 +300,13 @@ <summary> | ||
| </summary> | ||
| <remarks> | ||
| The pattern set is fixed at construction and never mutated, so a single instance is safe to share or | ||
| to evaluate concurrently. <see cref="T:Fuse.Collection.FileCollectionPipeline" /> builds a fresh instance carrying the | ||
| current run's patterns rather than mutating a shared one, which keeps concurrent collection runs against | ||
| different repositories from racing on a process-wide pattern set. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Collection.Filters.GitIgnoreFilter.#ctor"> | ||
| <member name="M:Fuse.Collection.Filters.GitIgnoreFilter.SetPatterns(System.Collections.Generic.IReadOnlyList{DotNet.Globbing.Glob})"> | ||
| <summary> | ||
| Initializes a filter with no patterns, which excludes nothing. Used as the registered placeholder | ||
| that <see cref="T:Fuse.Collection.FileCollectionPipeline" /> replaces per run with a pattern-carrying instance. | ||
| Sets the compiled <c>.gitignore</c> patterns for the current collection run. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Collection.Filters.GitIgnoreFilter.#ctor(System.Collections.Generic.IReadOnlyList{DotNet.Globbing.Glob})"> | ||
| <summary> | ||
| Initializes a filter with the compiled <c>.gitignore</c> patterns for a collection run. | ||
| </summary> | ||
| <param name="patterns">The glob patterns to apply, typically produced by <see cref="T:Fuse.Collection.FileSystem.GitIgnoreParser" />.</param> | ||
| <remarks> | ||
| <see cref="T:Fuse.Collection.FileCollectionPipeline" /> calls this before evaluating candidates so that | ||
| <see cref="M:Fuse.Collection.Filters.GitIgnoreFilter.Include(Fuse.Collection.Models.FileCandidate,Fuse.Collection.Options.CollectionOptions)" /> matches against the patterns gathered for the current source tree. | ||
| Until it is called the filter holds an empty pattern set and excludes nothing. | ||
| </remarks> | ||
| </member> | ||
@@ -771,5 +751,3 @@ <member name="M:Fuse.Collection.Filters.GitIgnoreFilter.Include(Fuse.Collection.Models.FileCandidate,Fuse.Collection.Options.CollectionOptions)"> | ||
| (resolved relative to <see cref="P:Fuse.Collection.Options.CollectionOptions.SourceDirectory" /> when not rooted) and skips directory enumeration | ||
| and the include/exclude filters. Only paths contained within the normalized | ||
| <see cref="P:Fuse.Collection.Options.CollectionOptions.SourceDirectory" /> are collected; paths outside the root are skipped. Used by the reduce | ||
| path to compact a caller-supplied file set. | ||
| and the include/exclude filters. Used by the reduce path to compact a caller-supplied file set. | ||
| </remarks> | ||
@@ -776,0 +754,0 @@ </member> |
@@ -110,18 +110,2 @@ <?xml version="1.0"?> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Maps.CsprojProjectReferenceParser"> | ||
| <summary> | ||
| Extracts <c>ProjectReference</c> include paths from raw <c>.csproj</c> text. | ||
| </summary> | ||
| <remarks> | ||
| References resolved through imported targets, MSBuild properties, or globs are not recovered; only | ||
| literal <c><ProjectReference Include="..."></c> elements are matched. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Abstractions.Maps.CsprojProjectReferenceParser.EnumerateIncludePaths(System.String)"> | ||
| <summary> | ||
| Returns the include path of every <c>ProjectReference</c> element in the supplied content. | ||
| </summary> | ||
| <param name="csprojContent">The raw <c>.csproj</c> file text.</param> | ||
| <returns>Normalized forward-slash include paths, in document order.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Maps.IProjectGraphGenerator"> | ||
@@ -398,3 +382,5 @@ <summary> | ||
| <remarks> | ||
| Roslyn supplies member-level chunks for C#; other languages may register their own extractors. | ||
| A precise (semantic) implementation registered later overrides a regex one by extension. The regex tier | ||
| produces coarser chunking but must still yield coherent, independently parseable member bodies so the | ||
| symbol-level path keeps working on the Native AOT build, where Roslyn is absent. | ||
| </remarks> | ||
@@ -538,10 +524,2 @@ </member> | ||
| <param name="EndLine">The 1-based line at which the member ends, inclusive.</param> | ||
| <param name="StableId"> | ||
| A collision-free identity for the member: namespace, the full containing-type chain (with generic | ||
| arity), the member name, and for methods and constructors the generic arity and parameter type list. | ||
| Unlike <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" /> it distinguishes overloads, nested types that share a simple parent | ||
| name, the same member name across namespaces, and members of partial classes, so member operations | ||
| (selection, thin-skeleton assembly, body deduplication, slicing) key on it rather than on the | ||
| display name. When an extractor cannot compute the components it falls back to <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" />. | ||
| </param> | ||
| <remarks> | ||
@@ -554,3 +532,3 @@ A precise (semantic) extractor resolves member boundaries from a parse tree; a regex extractor produces | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Abstractions.Outline.SymbolChunk.#ctor(System.String,System.String,System.String,System.String,System.Int32,System.Int32,System.String)"> | ||
| <member name="M:Fuse.Plugins.Abstractions.Outline.SymbolChunk.#ctor(System.String,System.String,System.String,System.String,System.Int32,System.Int32)"> | ||
| <summary> | ||
@@ -576,10 +554,2 @@ A single member-level slice of a source file: one declared member together with its full text and the | ||
| <param name="EndLine">The 1-based line at which the member ends, inclusive.</param> | ||
| <param name="StableId"> | ||
| A collision-free identity for the member: namespace, the full containing-type chain (with generic | ||
| arity), the member name, and for methods and constructors the generic arity and parameter type list. | ||
| Unlike <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" /> it distinguishes overloads, nested types that share a simple parent | ||
| name, the same member name across namespaces, and members of partial classes, so member operations | ||
| (selection, thin-skeleton assembly, body deduplication, slicing) key on it rather than on the | ||
| display name. When an extractor cannot compute the components it falls back to <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" />. | ||
| </param> | ||
| <remarks> | ||
@@ -619,25 +589,8 @@ A precise (semantic) extractor resolves member boundaries from a parse tree; a regex extractor produces | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.StableId"> | ||
| <summary> | ||
| A collision-free identity for the member: namespace, the full containing-type chain (with generic | ||
| arity), the member name, and for methods and constructors the generic arity and parameter type list. | ||
| Unlike <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" /> it distinguishes overloads, nested types that share a simple parent | ||
| name, the same member name across namespaces, and members of partial classes, so member operations | ||
| (selection, thin-skeleton assembly, body deduplication, slicing) key on it rather than on the | ||
| display name. When an extractor cannot compute the components it falls back to <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" />. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName"> | ||
| <summary> | ||
| The fully qualified member name (<c>ParentType.SymbolName</c>), or the simple name when the member | ||
| has no parent type. Intended for display (provenance, markers); use <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.Identity" /> to key | ||
| member operations, since <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" /> collides for overloads and like-named members. | ||
| has no parent type. Used as a stable chunk identifier within a file. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.Identity"> | ||
| <summary> | ||
| The collision-free identity used to key member operations: <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.StableId" /> when the extractor | ||
| computed one, otherwise <see cref="P:Fuse.Plugins.Abstractions.Outline.SymbolChunk.QualifiedName" />. | ||
| </summary> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Patterns.DetectedPattern"> | ||
@@ -802,116 +755,2 @@ <summary> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Reducers.IGeneratedCodeDetector"> | ||
| <summary> | ||
| Detects machine-generated C# (for example EF Core migrations and model snapshots) and optionally | ||
| collapses generated method bodies to signatures. | ||
| </summary> | ||
| <remarks> | ||
| Host and reduction paths resolve this capability through dependency injection so callers outside the | ||
| C# plugin do not reference the collapser implementation directly. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Abstractions.Reducers.IGeneratedCodeDetector.IsGenerated(System.String)"> | ||
| <summary> | ||
| Returns whether the content looks like machine-generated C# that is worth flagging or collapsing. | ||
| </summary> | ||
| <param name="content">The C# source to inspect.</param> | ||
| <returns><see langword="true" /> when the file appears to be generated.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Abstractions.Reducers.IGeneratedCodeDetector.Collapse(System.String)"> | ||
| <summary> | ||
| Collapses generated method bodies when the content is recognized as generated; otherwise returns | ||
| the content unchanged. | ||
| </summary> | ||
| <param name="content">The C# source to collapse.</param> | ||
| <returns>The collapsed content, or the original when it is not recognized as generated.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Scoping.IReranker"> | ||
| <summary> | ||
| Reorders a query's BM25 candidate pool by blending the lexical score with a dense query-to-document | ||
| similarity, so a file whose meaning matches the query can outrank one that merely shares more words. | ||
| </summary> | ||
| <remarks> | ||
| This is an optional capability: when no implementation is registered (no model present, offline, or the | ||
| feature is off) the query path runs on the lexical BM25F ranking alone, which is the guaranteed | ||
| no-model, no-network floor. An implementation embeds the query and each candidate's text representation | ||
| with a small in-process model and returns the candidates reordered by the blended score. It must be | ||
| deterministic for a given model and inputs, and must not throw for an empty or single-item pool. | ||
| </remarks> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Scoping.IReranker.IsAvailable"> | ||
| <summary> | ||
| Whether the reranker is ready to score (its model is loaded or loadable). When <see langword="false" />, | ||
| callers keep the lexical ordering rather than invoking <see cref="M:Fuse.Plugins.Abstractions.Scoping.IReranker.Rerank(System.String,System.Collections.Generic.IReadOnlyList{Fuse.Plugins.Abstractions.Scoping.RankedFile},System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})" />. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Abstractions.Scoping.IReranker.Rerank(System.String,System.Collections.Generic.IReadOnlyList{Fuse.Plugins.Abstractions.Scoping.RankedFile},System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})"> | ||
| <summary> | ||
| Reorders <paramref name="candidates" /> by blending each candidate's existing (lexical) score with the | ||
| dense similarity between <paramref name="query" /> and the candidate's text from | ||
| <paramref name="documentText" />. | ||
| </summary> | ||
| <param name="query">The raw query text.</param> | ||
| <param name="candidates">The lexical candidate pool, each with its BM25 score in <see cref="P:Fuse.Plugins.Abstractions.Scoping.RankedFile.Score" />.</param> | ||
| <param name="documentText"> | ||
| The text representation to embed per candidate path (for example declared symbols, the path, and a | ||
| content sketch). A path absent from the map is treated as empty text and keeps its lexical rank. | ||
| </param> | ||
| <returns> | ||
| The candidates reordered by the blended score, highest first. Returns the input order unchanged when | ||
| the reranker is unavailable or the pool has fewer than two items. | ||
| </returns> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder"> | ||
| <summary> | ||
| Embeds text into a dense vector so two pieces of text can be compared by meaning rather than by shared | ||
| words. Used to persist a per-chunk embedding index at indexing time and to embed a query at retrieval | ||
| time, so a prose query can rank a chunk it does not share tokens with. | ||
| </summary> | ||
| <remarks> | ||
| This is an optional capability: when no implementation is registered (no model present, offline, or the | ||
| feature is off) the retrieval path stays on the lexical BM25F ranking, which is the guaranteed no-model, | ||
| no-network floor. An implementation must be deterministic for a given model and input, must return a | ||
| unit-length vector of <see cref="P:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder.Dimension" /> components (so a dot product is a cosine similarity), and | ||
| must return an empty array for empty or untokenizable input rather than throwing. | ||
| </remarks> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder.IsAvailable"> | ||
| <summary> | ||
| Whether the embedder is ready to embed (its model is loaded or loadable). When | ||
| <see langword="false" />, callers skip embedding and keep the lexical ranking. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder.Dimension"> | ||
| <summary>The dimension of the vectors this embedder produces.</summary> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder.Embed(System.String)"> | ||
| <summary> | ||
| Embeds a single text into a unit-length dense vector. | ||
| </summary> | ||
| <param name="text">The text to embed.</param> | ||
| <returns> | ||
| A unit-length vector of <see cref="P:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder.Dimension" /> components, or an empty array for empty or | ||
| untokenizable input. | ||
| </returns> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Scoping.RankedFile"> | ||
| <summary> | ||
| A ranked file and its relevance score. | ||
| </summary> | ||
| <param name="Path">The normalized relative path of the ranked file.</param> | ||
| <param name="Score">The relevance score; higher is more relevant.</param> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Abstractions.Scoping.RankedFile.#ctor(System.String,System.Double)"> | ||
| <summary> | ||
| A ranked file and its relevance score. | ||
| </summary> | ||
| <param name="Path">The normalized relative path of the ranked file.</param> | ||
| <param name="Score">The relevance score; higher is more relevant.</param> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Scoping.RankedFile.Path"> | ||
| <summary>The normalized relative path of the ranked file.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Abstractions.Scoping.RankedFile.Score"> | ||
| <summary>The relevance score; higher is more relevant.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Abstractions.Skeleton.ISkeletonExtractor"> | ||
@@ -918,0 +757,0 @@ <summary> |
@@ -9,3 +9,3 @@ <?xml version="1.0"?> | ||
| <summary> | ||
| Registers the Roslyn structural tier for C#. | ||
| Registers the opt-in Roslyn precision tier for C#. | ||
| </summary> | ||
@@ -15,47 +15,15 @@ </member> | ||
| <summary> | ||
| Registers Roslyn implementations of the C# skeleton, dependency, type-name, outline, slice, chunk, | ||
| route-map, and semantic-marker capabilities. | ||
| Registers Roslyn implementations of the C# skeleton, dependency, type-name, and outline capabilities. | ||
| </summary> | ||
| <param name="services">The service collection to add the capabilities to.</param> | ||
| <returns>The same <paramref name="services" /> instance, to allow call chaining.</returns> | ||
| <returns>The same <paramref name="services" /> instance, to allow chaining.</returns> | ||
| <remarks> | ||
| Call this after <c>AddCSharpLanguage</c> (typically via <c>AddFuse</c>) so Roslyn supplies | ||
| every structural capability for <c>.cs</c>. | ||
| Call this <em>after</em> the regex C# plugin is registered (after <c>AddFuse</c>). Each capability | ||
| registry resolves an extension to its last registration, so registering the Roslyn implementations | ||
| last makes them win for <c>.cs</c> while the regex implementations remain the fallback for any | ||
| capability the Roslyn tier does not provide. This method is invoked only when semantic analysis is | ||
| requested, so the regex tier stays the default; it is never reached in the Native AOT build, which | ||
| does not reference this assembly. | ||
| </remarks> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Languages.CSharp.Roslyn.Maps.RoslynRouteMapGenerator"> | ||
| <summary> | ||
| Builds an HTTP route map from ASP.NET controller actions and minimal-API registrations in | ||
| <c>.cs</c> files using Roslyn syntax analysis. | ||
| </summary> | ||
| <remarks> | ||
| Attribute routes built from constants or interpolation are not resolved; verb-only actions fall back | ||
| to the handler name as the path. Rows are emitted in case-insensitive order inside a | ||
| <c><!-- fuse:route-map --></c> comment block. | ||
| </remarks> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Languages.CSharp.Roslyn.Maps.RoslynRouteMapGenerator.SupportedExtensions"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Languages.CSharp.Roslyn.Maps.RoslynRouteMapGenerator.Generate(System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Languages.CSharp.Roslyn.Markers.RoslynSemanticMarkerGenerator"> | ||
| <summary> | ||
| Generates one <see cref="T:Fuse.Plugins.Abstractions.Markers.SemanticMarker" /> per type declaration in <c>.cs</c> content using Roslyn | ||
| syntax analysis, capturing the type kind, implemented interfaces, constructor parameter types, and | ||
| inferred dependencies. | ||
| </summary> | ||
| <remarks> | ||
| The parser is error-tolerant, so skeleton and aggressively reduced content that is no longer | ||
| well-formed C# still yields markers from the partial tree. Record primary-constructor parameters are | ||
| not treated as constructor dependencies; that matches the prior regex generator. | ||
| </remarks> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Languages.CSharp.Roslyn.Markers.RoslynSemanticMarkerGenerator.SupportedExtensions"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Languages.CSharp.Roslyn.Markers.RoslynSemanticMarkerGenerator.GenerateMarkers(System.String)"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Languages.CSharp.Roslyn.RoslynDependencyExtractor"> | ||
@@ -62,0 +30,0 @@ <summary> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| { | ||
| "runtimeTarget": { | ||
| "name": ".NETCoreApp,Version=v6.0", | ||
| "signature": "" | ||
| }, | ||
| "compilationOptions": {}, | ||
| "targets": { | ||
| ".NETCoreApp,Version=v6.0": { | ||
| "Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost/4.14.0-3.25262.10": { | ||
| "dependencies": { | ||
| "Microsoft.Build.Locator": "1.6.10", | ||
| "Microsoft.CodeAnalysis.NetAnalyzers": "8.0.0-preview.23468.1", | ||
| "Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers": "3.3.4-beta1.22504.1", | ||
| "Microsoft.DotNet.XliffTasks": "9.0.0-beta.25255.5", | ||
| "Microsoft.VisualStudio.Threading.Analyzers": "17.13.2", | ||
| "Newtonsoft.Json": "13.0.3", | ||
| "Roslyn.Diagnostics.Analyzers": "3.11.0-beta1.24081.1", | ||
| "System.Collections.Immutable": "9.0.0", | ||
| "System.CommandLine": "2.0.0-beta4.24528.1" | ||
| }, | ||
| "runtime": { | ||
| "Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": {} | ||
| }, | ||
| "resources": { | ||
| "cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "cs" | ||
| }, | ||
| "de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "de" | ||
| }, | ||
| "es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "es" | ||
| }, | ||
| "fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "fr" | ||
| }, | ||
| "it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "it" | ||
| }, | ||
| "ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "ja" | ||
| }, | ||
| "ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "ko" | ||
| }, | ||
| "pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "pl" | ||
| }, | ||
| "pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "pt-BR" | ||
| }, | ||
| "ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "ru" | ||
| }, | ||
| "tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "tr" | ||
| }, | ||
| "zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "zh-Hans" | ||
| }, | ||
| "zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": { | ||
| "locale": "zh-Hant" | ||
| } | ||
| } | ||
| }, | ||
| "Microsoft.Build.Locator/1.6.10": { | ||
| "runtime": { | ||
| "lib/net6.0/Microsoft.Build.Locator.dll": { | ||
| "assemblyVersion": "1.0.0.0", | ||
| "fileVersion": "1.6.10.57384" | ||
| } | ||
| } | ||
| }, | ||
| "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.11.0-beta1.24081.1": {}, | ||
| "Microsoft.CodeAnalysis.NetAnalyzers/8.0.0-preview.23468.1": {}, | ||
| "Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers/3.3.4-beta1.22504.1": {}, | ||
| "Microsoft.CodeAnalysis.PublicApiAnalyzers/3.11.0-beta1.24081.1": {}, | ||
| "Microsoft.DotNet.XliffTasks/9.0.0-beta.25255.5": {}, | ||
| "Microsoft.VisualStudio.Threading.Analyzers/17.13.2": {}, | ||
| "Newtonsoft.Json/13.0.3": { | ||
| "runtime": { | ||
| "lib/net6.0/Newtonsoft.Json.dll": { | ||
| "assemblyVersion": "13.0.0.0", | ||
| "fileVersion": "13.0.3.27908" | ||
| } | ||
| } | ||
| }, | ||
| "Roslyn.Diagnostics.Analyzers/3.11.0-beta1.24081.1": { | ||
| "dependencies": { | ||
| "Microsoft.CodeAnalysis.BannedApiAnalyzers": "3.11.0-beta1.24081.1", | ||
| "Microsoft.CodeAnalysis.PublicApiAnalyzers": "3.11.0-beta1.24081.1" | ||
| } | ||
| }, | ||
| "System.Collections.Immutable/9.0.0": { | ||
| "dependencies": { | ||
| "System.Memory": "4.5.5", | ||
| "System.Runtime.CompilerServices.Unsafe": "6.0.0" | ||
| }, | ||
| "runtime": { | ||
| "lib/netstandard2.0/System.Collections.Immutable.dll": { | ||
| "assemblyVersion": "9.0.0.0", | ||
| "fileVersion": "9.0.24.52809" | ||
| } | ||
| } | ||
| }, | ||
| "System.CommandLine/2.0.0-beta4.24528.1": { | ||
| "dependencies": { | ||
| "System.Memory": "4.5.5" | ||
| }, | ||
| "runtime": { | ||
| "lib/netstandard2.0/System.CommandLine.dll": { | ||
| "assemblyVersion": "2.0.0.0", | ||
| "fileVersion": "2.0.24.52801" | ||
| } | ||
| }, | ||
| "resources": { | ||
| "lib/netstandard2.0/cs/System.CommandLine.resources.dll": { | ||
| "locale": "cs" | ||
| }, | ||
| "lib/netstandard2.0/de/System.CommandLine.resources.dll": { | ||
| "locale": "de" | ||
| }, | ||
| "lib/netstandard2.0/es/System.CommandLine.resources.dll": { | ||
| "locale": "es" | ||
| }, | ||
| "lib/netstandard2.0/fr/System.CommandLine.resources.dll": { | ||
| "locale": "fr" | ||
| }, | ||
| "lib/netstandard2.0/it/System.CommandLine.resources.dll": { | ||
| "locale": "it" | ||
| }, | ||
| "lib/netstandard2.0/ja/System.CommandLine.resources.dll": { | ||
| "locale": "ja" | ||
| }, | ||
| "lib/netstandard2.0/ko/System.CommandLine.resources.dll": { | ||
| "locale": "ko" | ||
| }, | ||
| "lib/netstandard2.0/pl/System.CommandLine.resources.dll": { | ||
| "locale": "pl" | ||
| }, | ||
| "lib/netstandard2.0/pt-BR/System.CommandLine.resources.dll": { | ||
| "locale": "pt-BR" | ||
| }, | ||
| "lib/netstandard2.0/ru/System.CommandLine.resources.dll": { | ||
| "locale": "ru" | ||
| }, | ||
| "lib/netstandard2.0/tr/System.CommandLine.resources.dll": { | ||
| "locale": "tr" | ||
| }, | ||
| "lib/netstandard2.0/zh-Hans/System.CommandLine.resources.dll": { | ||
| "locale": "zh-Hans" | ||
| }, | ||
| "lib/netstandard2.0/zh-Hant/System.CommandLine.resources.dll": { | ||
| "locale": "zh-Hant" | ||
| } | ||
| } | ||
| }, | ||
| "System.Memory/4.5.5": {}, | ||
| "System.Runtime.CompilerServices.Unsafe/6.0.0": {} | ||
| } | ||
| }, | ||
| "libraries": { | ||
| "Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost/4.14.0-3.25262.10": { | ||
| "type": "project", | ||
| "serviceable": false, | ||
| "sha512": "" | ||
| }, | ||
| "Microsoft.Build.Locator/1.6.10": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-DJhCkTGqy1LMJzEmG/2qxRTMHwdPc3WdVoGQI5o5mKHVo4dsHrCMLIyruwU/NSvPNSdvONlaf7jdFXnAMuxAuA==", | ||
| "path": "microsoft.build.locator/1.6.10", | ||
| "hashPath": "microsoft.build.locator.1.6.10.nupkg.sha512" | ||
| }, | ||
| "Microsoft.CodeAnalysis.BannedApiAnalyzers/3.11.0-beta1.24081.1": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-DH6L3rsbjppLrHM2l2/NKbnMaYd0NFHx2pjZaFdrVcRkONrV3i9FHv6Id8Dp6/TmjhXQsJVJJFbhhjkpuP1xxg==", | ||
| "path": "microsoft.codeanalysis.bannedapianalyzers/3.11.0-beta1.24081.1", | ||
| "hashPath": "microsoft.codeanalysis.bannedapianalyzers.3.11.0-beta1.24081.1.nupkg.sha512" | ||
| }, | ||
| "Microsoft.CodeAnalysis.NetAnalyzers/8.0.0-preview.23468.1": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-ZhIvyxmUCqb8OiU/VQfxfuAmIB4lQsjqhMVYKeoyxzSI+d7uR5Pzx3ZKoaIhPizQ15wa4lnyD6wg3TnSJ6P4LA==", | ||
| "path": "microsoft.codeanalysis.netanalyzers/8.0.0-preview.23468.1", | ||
| "hashPath": "microsoft.codeanalysis.netanalyzers.8.0.0-preview.23468.1.nupkg.sha512" | ||
| }, | ||
| "Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers/3.3.4-beta1.22504.1": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-2XRlqPAzVke7Sb80+UqaC7o57OwfK+tIr+aIOxrx41RWDMeR2SBUW7kL4sd6hfLFfBNsLo3W5PT+UwfvwPaOzA==", | ||
| "path": "microsoft.codeanalysis.performancesensitiveanalyzers/3.3.4-beta1.22504.1", | ||
| "hashPath": "microsoft.codeanalysis.performancesensitiveanalyzers.3.3.4-beta1.22504.1.nupkg.sha512" | ||
| }, | ||
| "Microsoft.CodeAnalysis.PublicApiAnalyzers/3.11.0-beta1.24081.1": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-3bYGBihvoNO0rhCOG1U9O50/4Q8suZ+glHqQLIAcKvnodSnSW+dYWYzTNb1UbS8pUS8nAUfxSFMwuMup/G5DtQ==", | ||
| "path": "microsoft.codeanalysis.publicapianalyzers/3.11.0-beta1.24081.1", | ||
| "hashPath": "microsoft.codeanalysis.publicapianalyzers.3.11.0-beta1.24081.1.nupkg.sha512" | ||
| }, | ||
| "Microsoft.DotNet.XliffTasks/9.0.0-beta.25255.5": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-bb0fZB5ViPscdfYeWlmtyXJMzNkgcpkV5RWmXktfV9lwIUZgNZmFotUXrdcTyZzrN7v1tQK/Y6BGnbkP9gEsXg==", | ||
| "path": "microsoft.dotnet.xlifftasks/9.0.0-beta.25255.5", | ||
| "hashPath": "microsoft.dotnet.xlifftasks.9.0.0-beta.25255.5.nupkg.sha512" | ||
| }, | ||
| "Microsoft.VisualStudio.Threading.Analyzers/17.13.2": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-Qcd8IlaTXZVq3wolBnzby1P7kWihdWaExtD8riumiKuG1sHa8EgjV/o70TMjTaeUMhomBbhfdC9OPwAHoZfnjQ==", | ||
| "path": "microsoft.visualstudio.threading.analyzers/17.13.2", | ||
| "hashPath": "microsoft.visualstudio.threading.analyzers.17.13.2.nupkg.sha512" | ||
| }, | ||
| "Newtonsoft.Json/13.0.3": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==", | ||
| "path": "newtonsoft.json/13.0.3", | ||
| "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512" | ||
| }, | ||
| "Roslyn.Diagnostics.Analyzers/3.11.0-beta1.24081.1": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-reHqZCDKifA+DURcL8jUfYkMGL4FpgNt5LI0uWTS6IpM8kKVbu/kO8byZsqfhBu4wUzT3MBDcoMfzhZPdENIpg==", | ||
| "path": "roslyn.diagnostics.analyzers/3.11.0-beta1.24081.1", | ||
| "hashPath": "roslyn.diagnostics.analyzers.3.11.0-beta1.24081.1.nupkg.sha512" | ||
| }, | ||
| "System.Collections.Immutable/9.0.0": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w==", | ||
| "path": "system.collections.immutable/9.0.0", | ||
| "hashPath": "system.collections.immutable.9.0.0.nupkg.sha512" | ||
| }, | ||
| "System.CommandLine/2.0.0-beta4.24528.1": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-Xt8tsSU8yd0ZpbT9gl5DAwkMYWLo8PV1fq2R/belrUbHVVOIKqhLfbWksbdknUDpmzMHZenBtD6AGAp9uJTa2w==", | ||
| "path": "system.commandline/2.0.0-beta4.24528.1", | ||
| "hashPath": "system.commandline.2.0.0-beta4.24528.1.nupkg.sha512" | ||
| }, | ||
| "System.Memory/4.5.5": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", | ||
| "path": "system.memory/4.5.5", | ||
| "hashPath": "system.memory.4.5.5.nupkg.sha512" | ||
| }, | ||
| "System.Runtime.CompilerServices.Unsafe/6.0.0": { | ||
| "type": "package", | ||
| "serviceable": true, | ||
| "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", | ||
| "path": "system.runtime.compilerservices.unsafe/6.0.0", | ||
| "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512" | ||
| } | ||
| } | ||
| } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| { | ||
| "runtimeOptions": { | ||
| "tfm": "net6.0", | ||
| "framework": { | ||
| "name": "Microsoft.NETCore.App", | ||
| "version": "6.0.0" | ||
| }, | ||
| "rollForward": "Major", | ||
| "configProperties": { | ||
| "System.Reflection.Metadata.MetadataUpdater.IsSupported": false | ||
| } | ||
| } | ||
| } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| <?xml version="1.0"?> | ||
| <doc> | ||
| <assembly> | ||
| <name>Fuse.Context</name> | ||
| </assembly> | ||
| <members> | ||
| <member name="T:Fuse.Context.ContextJsonDto"> | ||
| <summary> | ||
| The JSON shape of an emitted semantic context. | ||
| </summary> | ||
| <param name="Mode">The plan mode.</param> | ||
| <param name="Root">The workspace root, when set.</param> | ||
| <param name="ChangedSince">The git base ref for review plans, when set.</param> | ||
| <param name="Files">The number of files.</param> | ||
| <param name="EstimatedTokens">The total token count.</param> | ||
| <param name="Entries">The file entries.</param> | ||
| <param name="Notes">Warnings/notes.</param> | ||
| </member> | ||
| <member name="M:Fuse.Context.ContextJsonDto.#ctor(System.String,System.String,System.String,System.Int32,System.Int32,System.Collections.Generic.IReadOnlyList{Fuse.Context.ContextFileDto},System.Collections.Generic.IReadOnlyList{System.String})"> | ||
| <summary> | ||
| The JSON shape of an emitted semantic context. | ||
| </summary> | ||
| <param name="Mode">The plan mode.</param> | ||
| <param name="Root">The workspace root, when set.</param> | ||
| <param name="ChangedSince">The git base ref for review plans, when set.</param> | ||
| <param name="Files">The number of files.</param> | ||
| <param name="EstimatedTokens">The total token count.</param> | ||
| <param name="Entries">The file entries.</param> | ||
| <param name="Notes">Warnings/notes.</param> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextJsonDto.Mode"> | ||
| <summary>The plan mode.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextJsonDto.Root"> | ||
| <summary>The workspace root, when set.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextJsonDto.ChangedSince"> | ||
| <summary>The git base ref for review plans, when set.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextJsonDto.Files"> | ||
| <summary>The number of files.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextJsonDto.EstimatedTokens"> | ||
| <summary>The total token count.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextJsonDto.Entries"> | ||
| <summary>The file entries.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextJsonDto.Notes"> | ||
| <summary>Warnings/notes.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Context.ContextFileDto"> | ||
| <summary> | ||
| The JSON shape of a single emitted file. | ||
| </summary> | ||
| <param name="Path">The file's normalized path.</param> | ||
| <param name="Role">The file's role.</param> | ||
| <param name="Tier">The render tier.</param> | ||
| <param name="Score">The retrieval score.</param> | ||
| <param name="Tokens">The token count.</param> | ||
| <param name="Provenance">The provenance chain.</param> | ||
| <param name="Content">The rendered content.</param> | ||
| <param name="Unchanged">Whether the file was elided as unchanged in the session.</param> | ||
| </member> | ||
| <member name="M:Fuse.Context.ContextFileDto.#ctor(System.String,System.String,System.String,System.Double,System.Int32,System.Collections.Generic.IReadOnlyList{System.String},System.String,System.Boolean)"> | ||
| <summary> | ||
| The JSON shape of a single emitted file. | ||
| </summary> | ||
| <param name="Path">The file's normalized path.</param> | ||
| <param name="Role">The file's role.</param> | ||
| <param name="Tier">The render tier.</param> | ||
| <param name="Score">The retrieval score.</param> | ||
| <param name="Tokens">The token count.</param> | ||
| <param name="Provenance">The provenance chain.</param> | ||
| <param name="Content">The rendered content.</param> | ||
| <param name="Unchanged">Whether the file was elided as unchanged in the session.</param> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Path"> | ||
| <summary>The file's normalized path.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Role"> | ||
| <summary>The file's role.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Tier"> | ||
| <summary>The render tier.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Score"> | ||
| <summary>The retrieval score.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Tokens"> | ||
| <summary>The token count.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Provenance"> | ||
| <summary>The provenance chain.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Content"> | ||
| <summary>The rendered content.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.ContextFileDto.Unchanged"> | ||
| <summary>Whether the file was elided as unchanged in the session.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Context.FuseContextJsonContext"> | ||
| <summary> | ||
| Source-generated serializer context for emitted semantic-context JSON. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.Boolean"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.Double"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.ContextFileDto"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.ContextJsonDto"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.IReadOnlyListContextFileDto"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.IReadOnlyListString"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.Int32"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.String"> | ||
| <summary> | ||
| Defines the source generated JSON serialization contract metadata for a given type. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.Default"> | ||
| <summary> | ||
| The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance. | ||
| </summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.FuseContextJsonContext.GeneratedSerializerOptions"> | ||
| <summary> | ||
| The source-generated options associated with this context. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Context.FuseContextJsonContext.#ctor"> | ||
| <inheritdoc/> | ||
| </member> | ||
| <member name="M:Fuse.Context.FuseContextJsonContext.#ctor(System.Text.Json.JsonSerializerOptions)"> | ||
| <inheritdoc/> | ||
| </member> | ||
| <member name="M:Fuse.Context.FuseContextJsonContext.GetTypeInfo(System.Type)"> | ||
| <inheritdoc/> | ||
| </member> | ||
| <member name="T:Fuse.Context.ContextSessionStore"> | ||
| <summary> | ||
| Tracks which files have already been sent in a context session so unchanged files can be elided from | ||
| later payloads instead of resent. Used by the warm MCP server, where one agent makes many calls. | ||
| </summary> | ||
| <remarks> | ||
| A session maps a file path to the hash of the content last sent for it. <see cref="M:Fuse.Context.ContextSessionStore.Reconcile(System.String,System.Collections.Generic.IReadOnlyList{Fuse.Context.RenderedFile})" /> returns | ||
| the files whose content is unchanged since the previous send (so the caller can emit them as a brief | ||
| reference) and records the current content for every file. The store is in-memory and thread-safe. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Context.ContextSessionStore.Reconcile(System.String,System.Collections.Generic.IReadOnlyList{Fuse.Context.RenderedFile})"> | ||
| <summary> | ||
| Records the current content of the rendered files for a session and returns the paths whose content | ||
| is unchanged since the previous call in that session. | ||
| </summary> | ||
| <param name="sessionId">The session id.</param> | ||
| <param name="files">The rendered files about to be emitted.</param> | ||
| <returns>The normalized paths that were already sent unchanged in this session.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Context.ContextSessionStore.Clear(System.String)"> | ||
| <summary> | ||
| Clears a session's record. | ||
| </summary> | ||
| <param name="sessionId">The session id to clear.</param> | ||
| </member> | ||
| <member name="T:Fuse.Context.ProvenanceFormatter"> | ||
| <summary> | ||
| Formats a file's provenance chain (the reasons and edges that included it) for the manifest and for the | ||
| per-file comment attached to each rendered entry. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Context.ProvenanceFormatter.Summarize(System.Collections.Generic.IReadOnlyList{System.String})"> | ||
| <summary> | ||
| Summarizes a provenance chain onto one line for the manifest impact list. | ||
| </summary> | ||
| <param name="provenance">The provenance chain.</param> | ||
| <returns>A single-line summary, or "seed" when the chain has no edges.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Context.ProvenanceFormatter.Format(System.Collections.Generic.IReadOnlyList{System.String})"> | ||
| <summary> | ||
| Formats a provenance chain as a multi-line block for a per-file comment. | ||
| </summary> | ||
| <param name="provenance">The provenance chain.</param> | ||
| <returns>The block text (without comment delimiters); empty when the chain is empty.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Context.SemanticContextEmitter"> | ||
| <summary> | ||
| Emits a rendered context as XML, Markdown, or JSON: the semantic manifest preamble followed by each | ||
| file's provenance and rendered body. | ||
| </summary> | ||
| <remarks> | ||
| The token budget is honored upstream by the plan packing, so the emitter writes exactly the files the | ||
| plan kept; redaction is applied by the renderer before this point. JSON uses a source-generated | ||
| serializer context, per the project's reflection-free serialization invariant. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Context.SemanticContextEmitter.Emit(Fuse.Retrieval.ContextPlan,Fuse.Context.RenderedContext,Fuse.Context.ContextOutputFormat,System.String,System.String,System.Collections.Generic.IReadOnlyCollection{System.String})"> | ||
| <summary> | ||
| Emits the rendered context in the requested format. | ||
| </summary> | ||
| <param name="plan">The context plan (for the manifest).</param> | ||
| <param name="rendered">The rendered files.</param> | ||
| <param name="format">The output format.</param> | ||
| <param name="root">The workspace root, for the manifest.</param> | ||
| <param name="changedSince">The git base ref for review plans, for the manifest.</param> | ||
| <param name="unchangedPaths">Paths to emit as a reference (body omitted) because they were already sent unchanged in the session.</param> | ||
| <returns>The emitted payload.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Context.ContextOutputFormat"> | ||
| <summary>The output format for an emitted semantic context.</summary> | ||
| </member> | ||
| <member name="F:Fuse.Context.ContextOutputFormat.Xml"> | ||
| <summary>An XML envelope with a manifest comment and file elements.</summary> | ||
| </member> | ||
| <member name="F:Fuse.Context.ContextOutputFormat.Markdown"> | ||
| <summary>A Markdown document with a manifest block and fenced file sections.</summary> | ||
| </member> | ||
| <member name="F:Fuse.Context.ContextOutputFormat.Json"> | ||
| <summary>A JSON document.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Context.SemanticContextRenderer"> | ||
| <summary> | ||
| Renders a <see cref="T:Fuse.Retrieval.ContextPlan" /> into per-file source payloads, each at the render tier the plan | ||
| assigned, by reusing the content reduction pipeline. | ||
| </summary> | ||
| <remarks> | ||
| Each render tier maps to a reduction level: full source to <see cref="F:Fuse.Plugins.Abstractions.Options.ReductionLevel.None" />, reduced | ||
| to <see cref="F:Fuse.Plugins.Abstractions.Options.ReductionLevel.Standard" />, skeleton and sketch to <see cref="F:Fuse.Plugins.Abstractions.Options.ReductionLevel.Skeleton" />, | ||
| and public API to <see cref="F:Fuse.Plugins.Abstractions.Options.ReductionLevel.PublicApi" />. Omitted items are listed by the plan but not | ||
| rendered. Redaction runs as part of the pipeline, so secrets never reach the payload. The whole plan is | ||
| reduced in a single pipeline pass using a per-file level selector. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Context.SemanticContextRenderer.#ctor(Fuse.Reduction.ContentReductionPipeline,Fuse.Collection.FileSystem.ISourceContentProvider)"> | ||
| <summary> | ||
| Initializes a new instance of the <see cref="T:Fuse.Context.SemanticContextRenderer" /> class. | ||
| </summary> | ||
| <param name="reductionPipeline">The content reduction pipeline that applies per-file tiers and redaction.</param> | ||
| <param name="contentProvider">The provider used to read source files.</param> | ||
| </member> | ||
| <member name="M:Fuse.Context.SemanticContextRenderer.RenderAsync(Fuse.Retrieval.ContextPlan,System.String,System.Threading.CancellationToken)"> | ||
| <summary> | ||
| Renders the plan's files at their assigned tiers. | ||
| </summary> | ||
| <param name="plan">The context plan to render.</param> | ||
| <param name="rootDirectory">The workspace root, used to resolve file paths.</param> | ||
| <param name="cancellationToken">A token to cancel rendering.</param> | ||
| <returns>The rendered files (Omitted and missing files excluded) and the total token count.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Context.RenderedContext"> | ||
| <summary> | ||
| The rendered context: one entry per included file plus the total token count. | ||
| </summary> | ||
| <param name="Files">The rendered files in plan order.</param> | ||
| <param name="TotalTokens">The total token count across the rendered files.</param> | ||
| </member> | ||
| <member name="M:Fuse.Context.RenderedContext.#ctor(System.Collections.Generic.IReadOnlyList{Fuse.Context.RenderedFile},System.Int32)"> | ||
| <summary> | ||
| The rendered context: one entry per included file plus the total token count. | ||
| </summary> | ||
| <param name="Files">The rendered files in plan order.</param> | ||
| <param name="TotalTokens">The total token count across the rendered files.</param> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedContext.Files"> | ||
| <summary>The rendered files in plan order.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedContext.TotalTokens"> | ||
| <summary>The total token count across the rendered files.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Context.RenderedFile"> | ||
| <summary> | ||
| A single rendered file. | ||
| </summary> | ||
| <param name="Path">The file's normalized path.</param> | ||
| <param name="Role">The file's role in the plan.</param> | ||
| <param name="Tier">The render tier applied.</param> | ||
| <param name="Score">The retrieval score.</param> | ||
| <param name="Content">The rendered (reduced and redacted) content.</param> | ||
| <param name="TokenCount">The token count of the rendered content.</param> | ||
| <param name="Provenance">The provenance chain explaining the file's inclusion.</param> | ||
| </member> | ||
| <member name="M:Fuse.Context.RenderedFile.#ctor(System.String,System.String,Fuse.Retrieval.RenderTier,System.Double,System.String,System.Int32,System.Collections.Generic.IReadOnlyList{System.String})"> | ||
| <summary> | ||
| A single rendered file. | ||
| </summary> | ||
| <param name="Path">The file's normalized path.</param> | ||
| <param name="Role">The file's role in the plan.</param> | ||
| <param name="Tier">The render tier applied.</param> | ||
| <param name="Score">The retrieval score.</param> | ||
| <param name="Content">The rendered (reduced and redacted) content.</param> | ||
| <param name="TokenCount">The token count of the rendered content.</param> | ||
| <param name="Provenance">The provenance chain explaining the file's inclusion.</param> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedFile.Path"> | ||
| <summary>The file's normalized path.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedFile.Role"> | ||
| <summary>The file's role in the plan.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedFile.Tier"> | ||
| <summary>The render tier applied.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedFile.Score"> | ||
| <summary>The retrieval score.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedFile.Content"> | ||
| <summary>The rendered (reduced and redacted) content.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedFile.TokenCount"> | ||
| <summary>The token count of the rendered content.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Context.RenderedFile.Provenance"> | ||
| <summary>The provenance chain explaining the file's inclusion.</summary> | ||
| </member> | ||
| <member name="T:Fuse.Context.SemanticManifestBuilder"> | ||
| <summary> | ||
| Builds the semantic-context manifest preamble: a header summarizing the plan (mode, root, changed base, | ||
| file count, token estimate), the seed files, the semantic impact with the edge that pulled each | ||
| non-seed file in, and any notes. | ||
| </summary> | ||
| <remarks> | ||
| The manifest is the agent-facing explanation of a context payload. It is emitted as a comment block | ||
| ahead of the file entries; the comment delimiters are added by the format-specific emitter. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Context.SemanticManifestBuilder.Build(Fuse.Retrieval.ContextPlan,System.String,System.String)"> | ||
| <summary> | ||
| Builds the manifest body (without comment delimiters) for a plan. | ||
| </summary> | ||
| <param name="plan">The context plan.</param> | ||
| <param name="root">The workspace root, or null to omit.</param> | ||
| <param name="changedSince">The git base ref for review plans, or null to omit.</param> | ||
| <returns>The manifest body text.</returns> | ||
| </member> | ||
| </members> | ||
| </doc> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| <?xml version="1.0"?> | ||
| <doc> | ||
| <assembly> | ||
| <name>Fuse.Plugins.Rerank.Onnx</name> | ||
| </assembly> | ||
| <members> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.DenseModelProvisioner"> | ||
| <summary> | ||
| Ensures the bundled dense embedding model is present in the user-data cache so the dense retrieval | ||
| channel is on by default. The model is fetched once and cached on first index; every later run, and | ||
| all query-time work, is fully offline. | ||
| </summary> | ||
| <remarks> | ||
| This is the "fetch-once-and-cache on first run" half of the dense-by-default policy. It runs only on the | ||
| indexing path (never at query time, so the no-network-at-query-time rule holds), is idempotent (a present | ||
| model is a fast no-op), and degrades gracefully: when the fetch fails (genuinely offline, or a blocked | ||
| download) it logs and returns, leaving retrieval on the deterministic lexical fallback. It honors the | ||
| opt-out (<c>FUSE_DENSE</c> set to a falsy value), so a caller who does not want the dense channel pays no | ||
| download. The integrity-pinned <see cref="T:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader" /> backs the fetch, so a truncated or | ||
| tampered download is rejected rather than loaded. | ||
| </remarks> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.DenseModelProvisioner.IsDenseEnabled"> | ||
| <summary> | ||
| Whether the dense channel is enabled. Dense is on by default; it is disabled only when | ||
| <c>FUSE_DENSE</c> is explicitly set to a falsy value (<c>0</c>, <c>false</c>, <c>no</c>, or <c>off</c>, | ||
| case-insensitive). Absent an explicit opt-out, Fuse provisions and | ||
| uses the bundled embedding model. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.DenseModelProvisioner.EnsureModelAsync(System.IProgress{System.String},Microsoft.Extensions.Logging.ILogger,System.Threading.CancellationToken)"> | ||
| <summary> | ||
| Ensures the default bi-encoder embedding model is cached, fetching it once if absent. Safe to call on | ||
| every index: it returns immediately when dense is disabled or the model is already present, and never | ||
| throws (a failed fetch leaves the lexical fallback in place). | ||
| </summary> | ||
| <param name="progress">An optional sink for human-readable download progress lines.</param> | ||
| <param name="logger">An optional logger; a failed fetch is logged once at warning level.</param> | ||
| <param name="cancellationToken">A token to cancel the download.</param> | ||
| <returns><see langword="true" /> when the model is present after the call; otherwise <see langword="false" />.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker"> | ||
| <summary> | ||
| An <see cref="T:Fuse.Plugins.Abstractions.Scoping.IReranker" /> that reorders the BM25 candidate pool with an in-process cross-encoder | ||
| (ms-marco-MiniLM-L-6-v2), scoring each query-to-document pair jointly so the query attends directly to a | ||
| candidate's text rather than comparing two independently pooled embeddings. | ||
| </summary> | ||
| <remarks> | ||
| A cross-encoder is the more accurate reranker family but costs one model run per candidate (its score is | ||
| pair-specific, so no document-side embedding can be cached). The model loads lazily on the first rerank | ||
| and is reused across calls; when it is absent or fails to load the reranker reports unavailable and the | ||
| lexical ordering is kept, so retrieval stays on the lexical path when no model is present. The cross-encoder logit and the | ||
| lexical score are min-max normalized over the pool before blending, so neither signal's raw scale leaks | ||
| into the blend. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker.#ctor(System.String,System.String,Microsoft.Extensions.Logging.ILogger{Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker})"> | ||
| <summary> | ||
| Initializes a new instance of the <see cref="T:Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker" /> class over the cached model files. | ||
| </summary> | ||
| <param name="onnxModelPath">Path to the quantized ONNX graph.</param> | ||
| <param name="vocabPath">Path to the WordPiece vocabulary.</param> | ||
| <param name="logger">Optional logger; a load failure is logged once and then the reranker stays unavailable.</param> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker.IsAvailable"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker.Rerank(System.String,System.Collections.Generic.IReadOnlyList{Fuse.Plugins.Abstractions.Scoping.RankedFile},System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker.Dispose"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker"> | ||
| <summary> | ||
| An <see cref="T:Fuse.Plugins.Abstractions.Scoping.IReranker" /> that reorders the BM25 candidate pool with an in-process all-MiniLM-L6-v2 | ||
| sentence embedder, blending the lexical score with dense query-to-document similarity so a file whose | ||
| meaning matches the query can outrank one that merely shares more words. | ||
| </summary> | ||
| <remarks> | ||
| The model loads lazily on the first rerank and is then reused across calls (ONNX Runtime sessions are | ||
| safe for concurrent inference). When the model is absent or fails to load the reranker reports | ||
| unavailable and callers keep the lexical ordering, so retrieval stays on the lexical path when no model is present. Both the | ||
| lexical and dense signals are min-max normalized over the pool before blending, so the blend is free of | ||
| each signal's raw scale. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker.#ctor(System.String,System.String,Microsoft.Extensions.Logging.ILogger{Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker})"> | ||
| <summary> | ||
| Initializes a new instance of the <see cref="T:Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker" /> class over the cached model files. | ||
| </summary> | ||
| <param name="onnxModelPath">Path to the quantized ONNX graph.</param> | ||
| <param name="vocabPath">Path to the WordPiece vocabulary.</param> | ||
| <param name="logger">Optional logger; a load failure is logged once and then the reranker stays unavailable.</param> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker.IsAvailable"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker.Rerank(System.String,System.Collections.Generic.IReadOnlyList{Fuse.Plugins.Abstractions.Scoping.RankedFile},System.Collections.Generic.IReadOnlyDictionary{System.String,System.String})"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker.Dispose"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder"> | ||
| <summary> | ||
| An <see cref="T:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder" /> backed by the in-process all-MiniLM-L6-v2 sentence model, used to | ||
| persist a per-chunk embedding index at indexing time and to embed a query at retrieval time. | ||
| </summary> | ||
| <remarks> | ||
| The model loads lazily on first use and is then reused (ONNX Runtime sessions are safe for concurrent | ||
| inference). When the model is absent or fails to load, <see cref="P:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder.IsAvailable" /> reports false and the | ||
| retrieval path stays lexical, so retrieval stays on the lexical path when no model is present. | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder.#ctor(System.String,System.String,Microsoft.Extensions.Logging.ILogger{Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder})"> | ||
| <summary> | ||
| Initializes a new instance of the <see cref="T:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder" /> class over the cached model files. | ||
| </summary> | ||
| <param name="onnxModelPath">Path to the quantized ONNX graph.</param> | ||
| <param name="vocabPath">Path to the WordPiece vocabulary.</param> | ||
| <param name="logger">Optional logger; a load failure is logged once and then the embedder stays unavailable.</param> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder.CreateDefault(Microsoft.Extensions.Logging.ILogger{Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder})"> | ||
| <summary> | ||
| Creates an embedder over the model in the Fuse user-data cache, present or not. The instance reports | ||
| unavailable until the model files exist, so this is safe to construct unconditionally. | ||
| </summary> | ||
| <param name="logger">An optional logger.</param> | ||
| <returns>An embedder bound to the default cached model location.</returns> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder.IsAvailable"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder.Dimension"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder.Embed(System.String)"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder.Dispose"> | ||
| <inheritdoc /> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader"> | ||
| <summary> | ||
| Downloads and verifies the dense rerank model files into the user-data cache, and reports or clears | ||
| them. This is the explicit, opt-in fetch the CLI <c>fuse models</c> command drives; nothing here runs | ||
| during scoping. | ||
| </summary> | ||
| <remarks> | ||
| Files come from the public ONNX export of all-MiniLM-L6-v2 and are pinned by SHA-256, so a truncated or | ||
| tampered download is rejected rather than loaded. The total is about 23 MB (a quantized graph plus a | ||
| vocabulary). | ||
| </remarks> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.ModelFile"> | ||
| <summary>One file the model needs: where it goes in the cache, where it comes from, and its expected hash.</summary> | ||
| <param name="RelativePath">Path under the model directory, using <c>/</c> separators.</param> | ||
| <param name="Url">Source URL.</param> | ||
| <param name="Sha256">Expected lowercase hex SHA-256 of the file contents.</param> | ||
| <param name="Bytes">Approximate size in bytes, for the size shown before download.</param> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.ModelFile.#ctor(System.String,System.String,System.String,System.Int64)"> | ||
| <summary>One file the model needs: where it goes in the cache, where it comes from, and its expected hash.</summary> | ||
| <param name="RelativePath">Path under the model directory, using <c>/</c> separators.</param> | ||
| <param name="Url">Source URL.</param> | ||
| <param name="Sha256">Expected lowercase hex SHA-256 of the file contents.</param> | ||
| <param name="Bytes">Approximate size in bytes, for the size shown before download.</param> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.ModelFile.RelativePath"> | ||
| <summary>Path under the model directory, using <c>/</c> separators.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.ModelFile.Url"> | ||
| <summary>Source URL.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.ModelFile.Sha256"> | ||
| <summary>Expected lowercase hex SHA-256 of the file contents.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.ModelFile.Bytes"> | ||
| <summary>Approximate size in bytes, for the size shown before download.</summary> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.Files"> | ||
| <summary>The files that make up the default bi-encoder model, in download order.</summary> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.FilesFor(System.String)"> | ||
| <summary> | ||
| The files that make up a given model, in download order. | ||
| </summary> | ||
| <param name="modelId">The model identifier; defaults to the bi-encoder <see cref="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId" />.</param> | ||
| <returns>The file manifest for the model.</returns> | ||
| <exception cref="T:System.ArgumentException">Thrown when the model identifier is not a known rerank model.</exception> | ||
| </member> | ||
| <member name="P:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.TotalBytes"> | ||
| <summary>The total download size in bytes across the default model's files.</summary> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.DownloadAsync(System.IProgress{System.String},System.Threading.CancellationToken,System.String)"> | ||
| <summary> | ||
| Downloads any missing or corrupt file of a model into the cache, verifying each against its pinned hash. | ||
| </summary> | ||
| <param name="progress">Optional sink for human-readable per-file progress lines.</param> | ||
| <param name="cancellationToken">Token used to cancel the download.</param> | ||
| <param name="modelId">The model identifier; defaults to the bi-encoder <see cref="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId" />.</param> | ||
| <returns>A task that completes when every file is present and verified.</returns> | ||
| <exception cref="T:System.InvalidOperationException">Thrown when a downloaded file fails its integrity check.</exception> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.Verify(System.String,System.String)"> | ||
| <summary> | ||
| Verifies a file against an expected SHA-256. | ||
| </summary> | ||
| <param name="path">The file to hash.</param> | ||
| <param name="expectedSha256">The expected lowercase hex digest.</param> | ||
| <returns><see langword="true" /> when the file's hash matches; otherwise <see langword="false" />.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelDownloader.Remove(System.String)"> | ||
| <summary> | ||
| Removes a cached model directory, if present. | ||
| </summary> | ||
| <param name="modelId">The model identifier; defaults to the bi-encoder <see cref="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId" />.</param> | ||
| <returns><see langword="true" /> when a directory was deleted; <see langword="false" /> when none existed.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.RerankModelLocator"> | ||
| <summary> | ||
| Resolves the on-disk location of the dense rerank model in the Fuse user-data cache, so the reranker can | ||
| check whether a model is present without downloading and load it when it is. | ||
| </summary> | ||
| <remarks> | ||
| The cache root is <c>FUSE_USER_DATA</c> when set, otherwise <c>~/.fuse</c>; the model lives under | ||
| <c>{root}/models/all-MiniLM-L6-v2</c> with the quantized ONNX graph at <c>onnx/model_quantized.onnx</c> | ||
| and the WordPiece vocabulary at <c>vocab.txt</c>. This type performs no network access: download is a | ||
| separate, explicit step, and an absent model means the query path stays lexical. | ||
| </remarks> | ||
| </member> | ||
| <member name="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId"> | ||
| <summary>The model identifier (and cache subdirectory name) of the default bi-encoder dense reranker.</summary> | ||
| </member> | ||
| <member name="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.CrossEncoderModelId"> | ||
| <summary>The model identifier (and cache subdirectory name) of the cross-encoder reranker.</summary> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelDirectory(System.String)"> | ||
| <summary> | ||
| The directory holding the cached files for a model, whether or not they are present. | ||
| </summary> | ||
| <param name="modelId">The model identifier; defaults to the bi-encoder <see cref="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId" />.</param> | ||
| <returns>The absolute path to <c>{userData}/models/{modelId}</c>.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.OnnxModelPath(System.String)"> | ||
| <summary>The expected path to a model's quantized ONNX graph.</summary> | ||
| <param name="modelId">The model identifier; defaults to the bi-encoder <see cref="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId" />.</param> | ||
| <returns>The absolute path to the model file, which may not exist.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.VocabPath(System.String)"> | ||
| <summary>The expected path to a model's WordPiece vocabulary.</summary> | ||
| <param name="modelId">The model identifier; defaults to the bi-encoder <see cref="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId" />.</param> | ||
| <returns>The absolute path to the vocabulary file, which may not exist.</returns> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.IsModelPresent(System.String)"> | ||
| <summary> | ||
| Whether both files of a model are present on disk and so the reranker can load without a download. | ||
| </summary> | ||
| <param name="modelId">The model identifier; defaults to the bi-encoder <see cref="F:Fuse.Plugins.Rerank.Onnx.RerankModelLocator.ModelId" />.</param> | ||
| <returns><see langword="true" /> when the ONNX graph and vocabulary both exist; otherwise <see langword="false" />.</returns> | ||
| </member> | ||
| <member name="T:Fuse.Plugins.Rerank.Onnx.RerankServiceCollectionExtensions"> | ||
| <summary> | ||
| Dependency-injection registration for the ONNX dense reranker. | ||
| </summary> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankServiceCollectionExtensions.AddOnnxDenseReranker(Microsoft.Extensions.DependencyInjection.IServiceCollection)"> | ||
| <summary> | ||
| Registers <see cref="T:Fuse.Plugins.Rerank.Onnx.OnnxDenseReranker" /> as the <see cref="T:Fuse.Plugins.Abstractions.Scoping.IReranker" /> when its model is present | ||
| in the user-data cache; otherwise registers nothing, so the orchestrator receives no reranker and the | ||
| query path stays on the lexical BM25F floor. | ||
| </summary> | ||
| <param name="services">The service collection to add to.</param> | ||
| <returns>The same <paramref name="services" /> instance for chaining.</returns> | ||
| <remarks> | ||
| Registration is gated on file presence rather than always registering, so a build with no model | ||
| downloaded is byte-identical in behavior to one without the assembly. The reranker still loads the | ||
| model lazily on first use and degrades to lexical if that load fails. | ||
| <para> | ||
| <c>FUSE_RERANK_MODEL=cross</c> selects the cross-encoder (<see cref="T:Fuse.Plugins.Rerank.Onnx.OnnxCrossEncoderReranker" />) | ||
| when its model is present; the default <c>bi</c> uses the bi-encoder. The cross-encoder is more | ||
| accurate per query-document pair but runs the model once per candidate, so it is the slower arm. | ||
| </para> | ||
| </remarks> | ||
| </member> | ||
| <member name="M:Fuse.Plugins.Rerank.Onnx.RerankServiceCollectionExtensions.AddOnnxTextEmbedder(Microsoft.Extensions.DependencyInjection.IServiceCollection)"> | ||
| <summary> | ||
| Registers <see cref="T:Fuse.Plugins.Rerank.Onnx.OnnxTextEmbedder" /> as the <see cref="T:Fuse.Plugins.Abstractions.Scoping.ITextEmbedder" /> so the indexer persists | ||
| a vector per chunk and the dense retrieval channel is on by default. Registers nothing only when the | ||
| dense channel is explicitly opted out of (<c>FUSE_DENSE</c> falsy), in which case indexing and | ||
| retrieval stay byte-identical to a build without dense. | ||
| </summary> | ||
| <param name="services">The service collection to add to.</param> | ||
| <returns>The same <paramref name="services" /> instance for chaining.</returns> | ||
| <remarks> | ||
| Dense is on by default: the bundled embedding model is fetched once and cached on first index (see | ||
| <see cref="T:Fuse.Plugins.Rerank.Onnx.DenseModelProvisioner" />), and all query-time work is offline. The embedder is registered | ||
| even when the model file is not yet present, because it loads lazily and reports unavailable until the | ||
| model is cached, so registration is safe before provisioning runs. When the model is genuinely absent | ||
| (offline, fetch blocked) the embedder stays unavailable and the deterministic lexical path is the | ||
| graceful fallback. The no-rewrite rule is unchanged: the query string is embedded, never paraphrased. | ||
| </remarks> | ||
| </member> | ||
| </members> | ||
| </doc> |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display