You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,6 +17,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
17
17
-`apm install --ssh` / `--https` flags and `APM_GIT_PROTOCOL=ssh|https` env to pick the initial transport for shorthand dependencies (#778)
18
18
-`apm install --allow-protocol-fallback` flag and `APM_ALLOW_PROTOCOL_FALLBACK=1` env as the migration escape hatch for cross-protocol fallback (#778)
19
19
- Add APM Review Panel skill (`.github/skills/apm-review-panel/`) and four new specialist personas (`devx-ux-expert`, `supply-chain-security-expert`, `apm-ceo`, `oss-growth-hacker`) with auto-activating per-persona skills. Routes specialist findings through an APM CEO arbiter for strategic / breaking-change calls, with the OSS growth hacker side-channeling adoption insights via `WIP/growth-strategy.md`. Instrumentation per Handbook Ch. 9 (`The Instrumented Codebase`); PROSE-compliant (thin SKILL.md routers, persona detail lazy-loaded via markdown links, explicit boundaries per persona).
Copy file name to clipboardExpand all lines: docs/src/content/docs/guides/marketplaces.md
+82-1Lines changed: 82 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,6 +63,21 @@ Marketplaces can declare a `metadata.pluginRoot` field to specify the base direc
63
63
64
64
With `pluginRoot` set to `./plugins`, the source `"my-tool"` resolves to `owner/repo/plugins/my-tool`. Sources that already contain a path separator (e.g. `./custom/path`) are not affected by `pluginRoot`.
65
65
66
+
### Versioned plugins
67
+
68
+
Plugins can declare a `version` field and a `source.ref` that points to a specific Git tag or commit:
The `version` field is informational (displayed by `apm view` and `apm outdated`). The `source.ref` determines which Git ref APM checks out during install.
80
+
66
81
## Register a marketplace
67
82
68
83
```bash
@@ -125,13 +140,32 @@ use `apm marketplace browse <name>` instead.
125
140
Use the `NAME@MARKETPLACE` syntax to install a plugin from a specific marketplace:
126
141
127
142
```bash
143
+
# Install using the source ref from the marketplace entry
128
144
apm install code-review@acme-plugins
145
+
146
+
# Install with a specific git ref override
147
+
apm install code-review@acme-plugins#v2.0.0
148
+
149
+
# Install from a specific branch
150
+
apm install code-review@acme-plugins#main
129
151
```
130
152
131
-
APM resolves the plugin name against the marketplace index, fetches the underlying Git repository, and installs it as a standard APM dependency. The resolved source appears in `apm.yml` and `apm.lock.yaml` just like any direct dependency.
153
+
The `#` separator carries a raw git ref that overrides the `source.ref` from the marketplace entry. Without `#`, APM uses the ref defined in the marketplace manifest.
154
+
155
+
APM resolves the plugin name against the marketplace index, fetches the underlying Git repository using the resolved ref, and installs it as a standard APM dependency. The resolved source appears in `apm.yml` and `apm.lock.yaml` just like any direct dependency.
132
156
133
157
For full `apm install` options, see [CLI Commands](../../reference/cli-commands/).
134
158
159
+
## View plugin details
160
+
161
+
Show metadata for a marketplace plugin:
162
+
163
+
```bash
164
+
apm view code-review@acme-plugins
165
+
```
166
+
167
+
Displays the plugin's name, version, description, source, and tags.
168
+
135
169
## Provenance tracking
136
170
137
171
Marketplace-resolved plugins are tracked in `apm.lock.yaml` with full provenance:
Removing a marketplace does not uninstall plugins previously installed from it. Those plugins remain pinned in `apm.lock.yaml` to their resolved Git sources.
224
+
225
+
## Validate a marketplace
226
+
227
+
Check a marketplace manifest for schema errors and duplicate entries:
228
+
229
+
```bash
230
+
apm marketplace validate acme-plugins
231
+
232
+
# Verbose output
233
+
apm marketplace validate acme-plugins --verbose
234
+
```
235
+
236
+
Catches: missing required fields and duplicate plugin names (case-insensitive).
237
+
238
+
:::note[Planned]
239
+
The `--check-refs` flag will verify that source refs are reachable over the network. It is accepted but not yet implemented.
240
+
:::
241
+
242
+
For full option details, see [CLI Commands](../../reference/cli-commands/).
243
+
244
+
## Security
245
+
246
+
### Version immutability
247
+
248
+
APM caches version-to-ref mappings in `~/.apm/cache/marketplace/version-pins.json`. On subsequent installs, APM compares the marketplace ref against the cached pin. If a version's ref has changed, APM warns:
249
+
250
+
```
251
+
WARNING: Version 2.0.0 of code-review@acme-plugins ref changed: was 'v2.0.0', now 'deadbeef'. This may indicate a ref swap attack.
252
+
```
253
+
254
+
This detects marketplace maintainers (or compromised accounts) silently pointing an existing version at different code.
255
+
256
+
### Shadow detection
257
+
258
+
When installing a marketplace plugin, APM checks all other registered marketplaces for plugins with the same name. A match produces a warning:
259
+
260
+
```
261
+
WARNING: Plugin 'code-review' also found in marketplace 'other-plugins'. Verify you are installing from the intended source.
262
+
```
263
+
264
+
Shadow detection runs automatically during install -- no configuration required.
265
+
266
+
### Best practices
267
+
268
+
- **Use commit SHAs as refs** -- tags and branches can be moved; commit SHAs cannot.
269
+
- **Keep plugin names unique across marketplaces** -- avoids shadow warnings and reduces confusion.
270
+
- **Review immutability warnings** -- a changed ref for an existing version is a strong signal of tampering.
-`PACKAGES` - Optional APM packages to add and install. Accepts shorthand (`owner/repo`), HTTPS URLs, SSH URLs, FQDN shorthand (`host/owner/repo`), local filesystem paths (`./path`, `../path`, `/absolute/path`, `~/path`), or marketplace references (`NAME@MARKETPLACE`). All forms are normalized to canonical format in `apm.yml`.
84
+
-`PACKAGES` - Optional APM packages to add and install. Accepts shorthand (`owner/repo`), HTTPS URLs, SSH URLs, FQDN shorthand (`host/owner/repo`), local filesystem paths (`./path`, `../path`, `/absolute/path`, `~/path`), or marketplace references (`NAME@MARKETPLACE[#ref]`). All forms are normalized to canonical format in `apm.yml`.
85
85
86
86
**Options:**
87
87
-`--runtime TEXT` - Target specific runtime only (copilot, codex, vscode)
0 commit comments