# pacm

<a id="pacm"></a>

# pacm

[Package](https://auscaster.com/icey/docs/api-reference/icy-pacm-Package.md#package) manifests, install tasks, and repository management helpers.

## Classes

| Name | Description |
|------|-------------|
| [`InstallMonitor`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallMonitor.md#installmonitor) | Aggregates multiple install tasks and reports overall progress. |
| [`InstallTask`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallTask.md#installtask) | Downloads, extracts, and finalizes a single package installation. |
| [`PackageManager`](https://auscaster.com/icey/docs/api-reference/icy-pacm-PackageManager.md#packagemanager-1) | Loads package manifests and coordinates install, update, and uninstall workflows. |
| [`InstallationState`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallationState.md#installationstate) | [State](https://auscaster.com/icey/docs/api-reference/icy-State.md#state) machine states for package installation. |
| [`InstallOptions`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallOptions.md#installoptions) | [Package](https://auscaster.com/icey/docs/api-reference/icy-pacm-Package.md#package) installation options. |
| [`LocalPackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#localpackage) | [Package](https://auscaster.com/icey/docs/api-reference/icy-pacm-Package.md#package) metadata for an installed package on the local filesystem. |
| [`Package`](https://auscaster.com/icey/docs/api-reference/icy-pacm-Package.md#package) | JSON-backed package metadata shared by local and remote package records. |
| [`PackagePair`](https://auscaster.com/icey/docs/api-reference/icy-pacm-PackagePair.md#packagepair) | Pairing of the installed and remote metadata for the same package ID. |
| [`RemotePackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-RemotePackage.md#remotepackage) | [Package](https://auscaster.com/icey/docs/api-reference/icy-pacm-Package.md#package) metadata loaded from the remote package index. |

## Typedefs

| Return | Name | Description |
|--------|------|-------------|
| std::vector< [`LocalPackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#localpackage) * > | [`LocalPackageVec`](#localpackagevec)  | Vector of local package pointers used by install monitor progress snapshots. |
| std::vector< [`InstallTask`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallTask.md#installtask) * > | [`InstallTaskVec`](#installtaskvec)  | Vector of raw install task pointers used for transient iteration. |
| std::vector< [`InstallTask::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallTask.md#ptr-19) > | [`InstallTaskPtrVec`](#installtaskptrvec)  | Vector of shared install task handles retained across async workflows. |
| std::vector< [`PackagePair`](https://auscaster.com/icey/docs/api-reference/icy-pacm-PackagePair.md#packagepair) > | [`PackagePairVec`](#packagepairvec)  | Vector of local/remote package pairs used for reconciliation and update checks. |
| [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore)< std::string, [`LocalPackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#localpackage) > | [`LocalPackageStore`](#localpackagestore)  | Keyed store of installed packages indexed by package ID. |
| [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore)< std::string, [`RemotePackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-RemotePackage.md#remotepackage) > | [`RemotePackageStore`](#remotepackagestore)  | Keyed store of remote package metadata indexed by package ID. |

---

<a id="localpackagevec"></a>

### LocalPackageVec

```cpp
using LocalPackageVec = std::vector< LocalPackage * >
```

Type: std::vector< [`LocalPackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#localpackage) * >

[Defined in src/pacm/include/icy/pacm/installmonitor.h:23](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/installmonitor.h#L23)

Vector of local package pointers used by install monitor progress snapshots.

---

<a id="installtaskvec"></a>

### InstallTaskVec

```cpp
using InstallTaskVec = std::vector< InstallTask * >
```

Type: std::vector< [`InstallTask`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallTask.md#installtask) * >

[Defined in src/pacm/include/icy/pacm/installtask.h:208](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/installtask.h#L208)

Vector of raw install task pointers used for transient iteration.

---

<a id="installtaskptrvec"></a>

### InstallTaskPtrVec

```cpp
using InstallTaskPtrVec = std::vector< InstallTask::Ptr >
```

Type: std::vector< [`InstallTask::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-pacm-InstallTask.md#ptr-19) >

[Defined in src/pacm/include/icy/pacm/installtask.h:211](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/installtask.h#L211)

Vector of shared install task handles retained across async workflows.

---

<a id="packagepairvec"></a>

### PackagePairVec

```cpp
using PackagePairVec = std::vector< PackagePair >
```

Type: std::vector< [`PackagePair`](https://auscaster.com/icey/docs/api-reference/icy-pacm-PackagePair.md#packagepair) >

[Defined in src/pacm/include/icy/pacm/package.h:363](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/package.h#L363)

Vector of local/remote package pairs used for reconciliation and update checks.

---

<a id="localpackagestore"></a>

### LocalPackageStore

```cpp
using LocalPackageStore = KeyedStore< std::string, LocalPackage >
```

Type: [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore)< std::string, [`LocalPackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#localpackage) >

[Defined in src/pacm/include/icy/pacm/packagemanager.h:55](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/packagemanager.h#L55)

Keyed store of installed packages indexed by package ID.

---

<a id="remotepackagestore"></a>

### RemotePackageStore

```cpp
using RemotePackageStore = KeyedStore< std::string, RemotePackage >
```

Type: [`KeyedStore`](https://auscaster.com/icey/docs/api-reference/icy-KeyedStore.md#keyedstore)< std::string, [`RemotePackage`](https://auscaster.com/icey/docs/api-reference/icy-pacm-RemotePackage.md#remotepackage) >

[Defined in src/pacm/include/icy/pacm/packagemanager.h:58](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/packagemanager.h#L58)

Keyed store of remote package metadata indexed by package ID.

## Functions

| Return | Name | Description |
|--------|------|-------------|
| `std::string` | [`getInstallTaskNamesString`](#getinstalltasknamesstring) `inline` | Returns a comma-delimited string of display names from `packages`. |
| `void` | [`validatePathComponent`](#validatepathcomponent) `inline` | Validates that a string is safe to use as a path component. Rejects path traversal sequences (..), directory separators (/ and ), null bytes, and empty strings. |

---

<a id="getinstalltasknamesstring"></a>

### getInstallTaskNamesString

`inline`

```cpp
inline std::string getInstallTaskNamesString(LocalPackageVec & packages)
```

[Defined in src/pacm/include/icy/pacm/installmonitor.h:91](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/installmonitor.h#L91)

Returns a comma-delimited string of display names from `packages`. 
#### Returns
Comma-separated name string, e.g. "PluginA, PluginB".

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `packages` | [`LocalPackageVec`](#localpackagevec) & | Vector of [LocalPackage](https://auscaster.com/icey/docs/api-reference/icy-pacm-LocalPackage.md#localpackage) pointers to format. |

---

<a id="validatepathcomponent"></a>

### validatePathComponent

`inline`

```cpp
inline void validatePathComponent(std::string_view name, std::string_view context)
```

[Defined in src/pacm/include/icy/pacm/packagemanager.h:41](https://github.com/auscaster/icey/blob/main/src/pacm/include/icy/pacm/packagemanager.h#L41)

Validates that a string is safe to use as a path component. Rejects path traversal sequences (..), directory separators (/ and ), null bytes, and empty strings.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `name` | `std::string_view` | The path component to validate. |
| `context` | `std::string_view` | Caller description included in the exception message. |

#### Exceptions

| Exception | Description |
|-----------|-------------|
| `std::invalid_argument` | if `name` fails any validation check. |
