make-wpf-service — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited make-wpf-service (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
If `$0` is empty, use the AskUserQuestion tool to ask: "Enter the Service name (e.g., DataExport, FileManager)". Do NOT proceed until a valid name is provided. Use the response as the ServiceName for all subsequent steps.
Generate a $0Service with interface + implementation class + DI registration. Automatically places files in the correct project based on solution structure. If --no-interface is appended, skip interface generation.
{Namespace} with the project's root namespace detected from csproj or existing code.# Interface + Implementation + DI registration
/wpf-dev-pack:make-wpf-service DataExport
# Implementation only (no interface) — for simple services
/wpf-dev-pack:make-wpf-service FileManager --no-interface$0 is the service name (without Service suffix — auto-appended)DataExport → IDataExportService.cs + DataExportService.cs--no-interface flag: Skip interface generation (class-only)Search for solution file and identify projects by naming convention:
| Project Suffix | Purpose | Files Placed |
|---|---|---|
.Abstractions | Interfaces | I$0Service.cs |
.Core | Business logic | $0Service.cs (UI-independent) |
.WpfServices | WPF-dependent services | $0Service.cs (if needs WPF types) |
.WpfApp | Application | DI registration in App.xaml.cs |
Fallback rules (keep the interface visible to both the implementation and the app):
.Abstractions project → place the interface in `.Core` (beside the implementation). Do NOT put it in the WPF app project: .Core cannot reference the app, so an interface placed there is unreachable from the implementation in .Core..Core or .WpfServices (no separate logic project) → place both interface and implementation in the app's Services/ folder.Services/ folder.Create I$0Service.cs:
namespace {Namespace}.Services;
public interface I$0Service
{
// TODO: Define service contract
// TODO: 서비스 계약 정의
}Create $0Service.cs:
namespace {Namespace}.Services;
public sealed class $0Service : I$0Service
{
// TODO: Implement service
// TODO: 서비스 구현
}If --no-interface:
namespace {Namespace}.Services;
public sealed class $0Service
{
// TODO: Implement service
// TODO: 서비스 구현
}#### CommunityToolkit.Mvvm (GenericHost)
Locate App.xaml.cs and add in ConfigureServices:
// With interface
services.AddSingleton<I$0Service, $0Service>();
// Without interface (--no-interface)
services.AddSingleton<$0Service>();#### Prism 9
Locate App.xaml.cs and add in RegisterTypes:
// With interface
containerRegistry.RegisterSingleton<I$0Service, $0Service>();
// Without interface (--no-interface)
containerRegistry.RegisterSingleton<$0Service>();GlobalUsings: make sureApp.xaml.cscan resolve the service type — addglobal using {Namespace}.Services;to the app's existingGlobalUsings.csif absent (theServicesnamespace now exists, so the using resolves). Do not create a secondGlobalUsings.cs.
Output list of generated/modified files and next steps guidance.
{AbstractionsProject}/
└── Services/
└── I$0Service.cs
{CoreProject}/
└── Services/
└── $0Service.cs
{WpfAppProject}/
└── App.xaml.cs (DI registration added){CoreProject}/
└── Services/
└── $0Service.cs
{WpfAppProject}/
└── App.xaml.cs (DI registration added)If there is no `.Abstractions` project (the default 3-project structure), placeI$0Service.csin `$0.Core/Services/` alongside$0Service.cs— never in the WPF app project, which.Corecannot reference.
/wpf-dev-pack:make-wpf-project first~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.