diff --git a/.agents/skills/dotnet-inspect/SKILL.md b/.agents/skills/dotnet-inspect/SKILL.md index 7a622c1..1bc9ace 100644 --- a/.agents/skills/dotnet-inspect/SKILL.md +++ b/.agents/skills/dotnet-inspect/SKILL.md @@ -1,6 +1,6 @@ --- name: dotnet-inspect -version: 0.10.3 +version: 0.10.5 description: Find evidence instead of guessing for .NET packages, platform libraries, local assemblies, APIs, dependencies, SourceLink/symbol provenance, and version-to-version API changes. --- @@ -57,7 +57,7 @@ dnx dotnet-inspect -y -- library System.Text.Json -S "Async*" --count dnx dotnet-inspect -y -- library System.Text.Json -S "Async*" --rows -n 10 ``` -Bare `-S` renders `@Default`, a curated high-density view; `-S @All` renders an exhaustive document. Categories such as `@Integrations` expand to related sections. Sections marked opt-in must be selected explicitly with `-S`. Focused library/member `-S Section` output keeps a compact context row before the selected section. +`@` represents a category or grouping of sections. Bare `-S` renders `@Default`, a curated high-density view; `-S @All` renders an exhaustive document with all sections. Categories such as `@Integrations` and `@Switches` expand to related sections. Sections marked opt-in must be selected explicitly with `-S`. Focused library/member `-S Section` output keeps a compact context row before the selected section. ## General tips @@ -112,26 +112,34 @@ dnx dotnet-inspect -y -- member JsonSerializer --package System.Text.Json Serial A selected overload defaults to `Signature`; use bare `-S` for `Signature` plus `Decompiled Source`, or select `Original Source`, `IL`, or `IL (Annotated)` when you need specific implementation evidence. +To read a whole type instead of one member, use `type Name -S "Decompiled Source"`: it renders the entire type as one C# listing — declaration, fields (including non-public, for context), and every member body. Add `--raw` to print only the bare listing (no headings or code fences), suitable for redirecting to a file: + +```text +dnx dotnet-inspect -y -- type Stack --platform System.Collections -S "Decompiled Source" --raw > Stack.cs +``` + Fidelity expectations: `Original Source` is the SourceLink-backed original source when available. `Decompiled Source` is lowered C#, a best-effort readable reconstruction from IL that helps explain intent; it uses PDB debug information such as local names when available, but is not guaranteed to match original syntax or compiler transformations. Raw IL and annotated IL are the highest-fidelity displays for exact opcodes, offsets, branches, tokens, and member calls; use them to confirm behavior when precision matters. For crash/stack diagnostics that include a MethodDef token plus IL offset, `source --il-offset 0x06000001+0x5` can map the offset to source. This is a niche deep-debugging path; do not start there for normal API lookup. -## Package, library, and Signals workflow +## Package, library, integrations, and Signals workflow Use `package` for NuGet package structure and registry-backed signals. Use `library` for assembly metadata, APIs, PDB/SourceLink evidence, and direct references. ```bash dnx dotnet-inspect -y -- package System.Text.Json -S Signals dnx dotnet-inspect -y -- package System.Text.Json -S "Library Files" -dnx dotnet-inspect -y -- package Microsoft.Extensions.Logging.Abstractions --library -S Integrations +dnx dotnet-inspect -y -- package Aspire.Azure.AI.OpenAI --library -S @Integrations dnx dotnet-inspect -y -- library System.Text.Json -S Signals -dnx dotnet-inspect -y -- library Microsoft.Extensions.Logging.Abstractions -S Integrations +dnx dotnet-inspect -y -- library System.Text.Json -S Switches dnx dotnet-inspect -y -- library System.Diagnostics.DiagnosticSource -S OpenTelemetry ``` `Signals` reports observations, not a safety or trust verdict. Library Signals include SourceLink presence, SourceLink availability, determinism, trim/AOT markers, async kind (`Runtime`, `State machine`, `Mixed`, or `None`), memory-safety metadata, unsafe/PInvoke observations, and direct references. Package Signals include TFMs, manifest, readme/license, dependencies, package signature, local provenance, vulnerabilities, package age, dependency vulnerability/deprecation counts, and dependency age. -Use `package Foo --library` to inspect the package's primary DLL when it is unambiguous; add a DLL name when a package contains multiple libraries. Use the `Integrations` library section as a roll-up of detected ecosystem support, then select a focused integration section by name. Integration sections currently include AI, Aspire, Dependency Injection, Logging, Options, Hosting, Health Checks, HTTP Client, and OpenTelemetry. Focused integration sections list package-owned actionable types or starter APIs, not raw assembly references. Use the `OpenTelemetry` library section for detailed OpenTelemetry types such as `ActivitySource`, `DiagnosticSource`, and `System.Diagnostics.Metrics` types. +Use `package Foo --library` to inspect the package's primary DLL when it is unambiguous; add a DLL name when a package contains multiple libraries. Use `-S Integrations` for the ecosystem roll-up, `-S @Integrations` for roll-up plus focused sections, or a focused section such as `OpenTelemetry`. Integration sections cover AI, ASP.NET Core, Aspire resources, Authentication, Dependency Injection, Logging, Options, Hosting, Health Checks, HTTP Client, OpenAPI, and OpenTelemetry. Focused sections list package-owned starter APIs, support types, and telemetry controls, not raw assembly references. + +Use `-S Switches` when runtime feature switches or compatibility switches may affect behavior. `library X -S Signals` resolves SourceLink by acquiring a missing PDB. Per-source-file reachability is opt-in: add `-S "SourceLink Availability"` and `-S "SourceLink Missing Files"` for HTTP HEAD checks, or `-S "SourceLink Integrity"` to download source files and compare checksums. For .NET tool packages, inspect the tool DLL through the package context, for example `library dotnet-inspect.dll --package dotnet-inspect@ -S "SourceLink Integrity"`. Tool v2 pointer/RID packages resolve to their inspectable framework-dependent payload. diff --git a/apm.lock.yaml b/apm.lock.yaml index 22cec0d..5329c82 100644 --- a/apm.lock.yaml +++ b/apm.lock.yaml @@ -1,5 +1,5 @@ lockfile_version: '1' -generated_at: '2026-06-11T16:57:10.174720+00:00' +generated_at: '2026-06-12T16:22:34.482600+00:00' apm_version: 0.14.0 dependencies: - repo_url: Faithlife/RepoConventions @@ -13,10 +13,10 @@ dependencies: content_hash: sha256:6e4dc45d96d7adc8f1d3e3300d9ee90eef9c2d0231ea83ad86fed64fca105034 - repo_url: richlander/dotnet-inspect host: github.com - resolved_commit: 07f5afd4cf4bd804267421c140fafac1bea6c6f2 + resolved_commit: 5893fe87d9eda18cf84ee641bc4c36b2f184e235 virtual_path: skills/dotnet-inspect is_virtual: true package_type: claude_skill deployed_files: - .agents/skills/dotnet-inspect - content_hash: sha256:a7fe1be8c0573d30774ce15908804e8cf8823747b43d9598de4fc4890a18072c + content_hash: sha256:f9e476244dc5a9c58782afbd7ed8fc3c2ff5850b946fc5152a7f1a6ce5c91819