# Patch Manager integration

This page documents how V-SwiFT exposes itself to Patch Manager.

## Registered Patch Manager Library

On plugin startup, `VSwiftPlugin.Awake()` registers a Patch Manager library:

```patch
Universe.RegisterRawLibrary("VSwift", "mixins", VSWIFT_MIXINS)
```

Patches can then use this to include it:

```patch
@use "VSwift:*";
```

## Included Mixins

The module ships these mixins:

```patch
@mixin ps-pam-override() {
    PAMModuleVisualsOverride +: [
        {
            PartComponentModuleName: PartComponentModule_PartSwitch,
            ModuleDisplayName: "VSwift/PartSwitch",
            ShowHeader: true,
            ShowFooter: false
        }
    ];
}

@mixin part-switch() {
    +Module_PartSwitch {
        +Data_PartSwitch {
            @mixin-slot
        }
    }
    @include ps-pam-override()
}
```

## Selectable hierarchy

The runtime selectable tree for `Data_PartSwitch` is:

* `Data_PartSwitch`
  * `PredefinedDynamicNodes`
  * one child per `VariantSet`
    * one child per `Variant`
      * one child per transformer

## Symbolic transformer creation

When you add a transformer in a patch, V-SwiFT resolves the name from the transformer's `[Transformer(nameof(...))]` attribute. That means author-facing names are symbolic, for example:

* `+MassModifier`
* `+EngineModeSwapper`
* `+ResourceContainerAdder`

## Special adapters

Most transformers fall back to generic JSON token editing, but V-SwiFT provides special adapters for:

* `Data_PartSwitch` via `PartSwitchSelectable`
* `AttachNodeAdder` via `AttachNodeAdderSelectable`
* `EngineModeSwapper` via `EngineModeTransformerSelectable`

Those adapters expose nested child elements such as `attach_node` and `engine_mode`, and allow class capture by IDs such as `nodeID` or `engineID`.

## Related PM docs

* [Mixins](https://docs.ksp2redux.org/doc/mixins-4Su5OeYkDO)
* [Class Capture Selector](https://docs.ksp2redux.org/doc/class-capture-selector-Tt2xvH1eP0)
* [Selection Actions](https://docs.ksp2redux.org/doc/selection-actions-4wDLob9lyh)