superpowers-manager 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +63 -325
  2. package/dist/adapter.js +91 -46
  3. package/dist/artifact-tree.js +110 -0
  4. package/dist/atomic.js +103 -7
  5. package/dist/cli-arguments.js +37 -0
  6. package/dist/cli.js +97 -40
  7. package/dist/codex-compatibility.js +126 -0
  8. package/dist/codex-conflicts.js +99 -0
  9. package/dist/codex-harness.js +321 -0
  10. package/dist/codex-json.js +7 -0
  11. package/dist/codex-prepare.js +255 -0
  12. package/dist/codex-presentation.js +282 -0
  13. package/dist/commands/install.js +187 -173
  14. package/dist/commands/mutation.js +71 -0
  15. package/dist/commands/prepare.js +87 -188
  16. package/dist/commands/probe.js +191 -176
  17. package/dist/commands/uninstall.js +52 -139
  18. package/dist/commands/update.js +33 -88
  19. package/dist/generated-plugin.js +3 -3
  20. package/dist/harness-compatibility.js +13 -0
  21. package/dist/harness.js +1 -0
  22. package/dist/lifecycle.js +1 -86
  23. package/dist/manifest-overlay.js +2 -2
  24. package/dist/pi-compatibility.js +73 -0
  25. package/dist/pi-harness.js +63 -0
  26. package/dist/pi-install.js +495 -0
  27. package/dist/pi-native.js +81 -0
  28. package/dist/pi-package.js +153 -0
  29. package/dist/pi-paths.js +30 -0
  30. package/dist/pi-prepare.js +111 -0
  31. package/dist/pi-presentation.js +67 -0
  32. package/dist/pi-settings.js +171 -0
  33. package/dist/pi-shared-skills.js +413 -0
  34. package/dist/pi-state.js +311 -0
  35. package/dist/resource-lock.js +265 -0
  36. package/dist/safe-path.js +21 -5
  37. package/dist/strict-json.js +1 -1
  38. package/dist/upstream-workspace.js +8 -0
  39. package/dist/validator.js +3 -2
  40. package/package.json +19 -18
  41. package/bin/superpowers-manager.js +0 -16
package/README.md CHANGED
@@ -1,366 +1,104 @@
1
1
  # Superpowers Manager
2
2
 
3
- Install and update the latest stable
4
- [`obra/superpowers`](https://github.com/obra/superpowers) release directly from
5
- upstream, without waiting for agent marketplaces to catch up.
6
- Codex supported today.
3
+ Install and explicitly refresh the latest stable [`obra/superpowers`](https://github.com/obra/superpowers) release. Superpowers Manager supports Codex and the Pi coding agent without waiting for a marketplace copy to catch up.
7
4
 
8
- > Unofficial community integration. Not affiliated with the
9
- > `obra/superpowers` maintainers.
5
+ > Unofficial community integration. Not affiliated with the `obra/superpowers` maintainers.
10
6
 
11
- ## Quick start
7
+ ## Start with your agent
12
8
 
13
- ```sh
14
- npx superpowers-manager install
15
- npx superpowers-manager probe
16
- npx superpowers-manager update
17
- ```
9
+ The two harnesses share upstream selection, while each has independent prepared and installed state. Omitting `--harness` selects Codex.
18
10
 
19
- Use the official marketplace for the simplest native Codex installation. Use
20
- Superpowers Manager when you want immediate stable-upstream freshness after a
21
- user-triggered install/update, per-invocation release or commit selection,
22
- recorded upstream provenance, diagnostics, upstream-owned Codex hook handling,
23
- and explicit install/update/probe/uninstall lifecycle control.
24
-
25
- | Choose | Best fit |
26
- |---|---|
27
- | Official marketplace | Simplest Codex-native installation and marketplace-managed cadence |
28
- | `superpowers-manager` | Direct stable-upstream freshness when invoked, exact ref selection, provenance, diagnostics, and lifecycle control |
29
-
30
- ### Moving from `superpowers-wrapper`
11
+ ### Codex
31
12
 
32
13
  ```sh
33
- npx superpowers-wrapper@0.1.1 uninstall
34
- npx superpowers-manager install
14
+ npx superpowers-manager install --harness codex
15
+ npx superpowers-manager probe --harness codex
16
+ npx superpowers-manager update --harness codex
35
17
  ```
36
18
 
37
- The manager detects legacy wrapper-owned Codex state and stops before mutation.
38
- It never removes the legacy provider automatically.
39
-
40
- ## Requirements and platforms
41
-
42
- Superpowers Manager requires Node 24+, and Codex is the only supported
43
- integration today. Every other requirement is per command, enforced by
44
- preflight before any dispatch. This table is checked against production by
45
- `tests/bin/readme-requirements.test.js`; edit it when a command's requirements
46
- change, in the same pull request.
47
-
48
- <!-- requirements:begin -->
49
- | Command | git | Python 3 | Codex CLI |
50
- |---|---|---|---|
51
- | `pin` | yes | no | no |
52
- | `track-latest` | no | no | no |
53
- | `unpin` | no | no | no |
54
- | `prepare` | yes | only with SUPERPOWERS_VALIDATOR | no |
55
- | `probe` | yes | no | yes |
56
- | `install` | yes | no | yes |
57
- | `update` | yes | no | yes |
58
- | `uninstall` | no | no | yes |
59
- <!-- requirements:end -->
60
-
61
- See `docs/baseline/behavioral-inventory.md`'s `CLI-PREFLIGHT-01` for the
62
- behaviour this table describes.
63
-
64
- macOS and Linux are tested. WSL2 is supported. The native Windows path is
65
- untested; the launcher no longer looks for Git Bash at all — every command runs
66
- in-process, so no POSIX shell is discovered or required — but path handling
67
- between MSYS and Codex remains a known risk area.
68
-
69
- Network needs depend on the saved policy. `pin` verifies its target;
70
- `track-latest` and invocation overrides resolve from upstream when applied; and
71
- `prepare`, `install`, and `update` fetch or verify the effective source. A probe
72
- of a saved exact pin can reuse its recorded identity without upstream access.
73
- Updates remain user-triggered; the manager does not run automatic or background
74
- updates.
19
+ Codex installs the Manager-owned marketplace plugin after preparation and
20
+ validation. Review upstream hook definitions with Codex's `/hooks` flow before
21
+ trusting or running them; updates can change a referenced script or surface a
22
+ new definition. The manager neither creates hooks nor changes Codex trust state.
23
+ See the [Codex reference](https://github.com/j7an/superpowers-manager/blob/main/docs/codex.md).
75
24
 
76
- ## What it does
25
+ ### Pi
77
26
 
78
- - Resolves an upstream ref, defaulting to the latest stable `vX.Y.Z` release
79
- tag.
80
- - Clones/fetches upstream at that commit and assembles a Codex plugin tree under
81
- `plugins/superpowers/` (skills, assets, license/readme, manifest, and any
82
- hook files that the upstream manifest allows).
83
- - Stamps the generated manifest with a ref-aware manager version ending in
84
- `+manager.<short-sha>` and writes the upstream provenance to
85
- `.superpowers-upstream.json`.
86
- - Validates the generated tree with the manager's shipped contract validator
87
- before swapping it into place (a failed run never destroys a previously
88
- generated tree).
89
- - Registers the `superpowers-manager` marketplace and installs or refreshes
90
- `superpowers@superpowers-manager` in Codex.
91
-
92
- The generated plugin carries upstream skills, assets, documentation, and the
93
- upstream-owned hook policy. When upstream provides a Codex manifest, its
94
- `hooks` declaration is preserved: exact `{}` suppresses the `hooks/` subtree;
95
- active declarations conditionally materialize the upstream hook files; and a
96
- missing `hooks` key or explicit empty array (`[]`) declaration uses Codex's
97
- default discovery only when upstream ships `hooks/hooks.json`. Manifest-less
98
- fallback refs use the committed minimal template and generate neither a manifest
99
- `hooks` key nor a `hooks/` directory.
100
- The manager never creates its own hooks or mutates Codex trust state.
101
-
102
- Review upstream hook command definitions with Codex's `/hooks` flow. Codex
103
- trust applies to a command definition, not to the contents of scripts that the
104
- definition references. An explicit update of an older pin can therefore change
105
- the contents of a trusted referenced script, or reveal a newly untrusted
106
- upstream definition; review it before trusting or running it. This policy
107
- eliminates latent hook-policy drift.
108
-
109
- ## Runtime architecture
110
-
111
- - The in-process TypeScript runtime under `src/` owns lifecycle dispatch,
112
- status, and adapter-result handling;
113
- see the [in-process adapter result contract](https://github.com/j7an/superpowers-manager/blob/main/docs/adapter-result-contract.md).
114
- - `src/adapter.ts` owns build, inspection, reconciliation, and Codex mutation.
115
- - Codex is the only supported adapter today; no public harness selector ships
116
- yet.
117
-
118
- Validation checks the manager-owned manifest overlay, generated-tree structure,
119
- skill frontmatter envelope, known local paths, and provenance. It deliberately
120
- does not implement a general YAML parser or mirror every Codex ingestion rule;
121
- upstream owns skill semantics and Codex owns its evolving schema.
122
-
123
- `SUPERPOWERS_VALIDATOR=/path/to/validator.py` adds an optional Python validator
124
- after the built-in check. It receives the candidate plugin root as its only
125
- argument. It cannot replace or bypass built-in validation, and either check
126
- failing prevents the tree swap and all Codex mutation.
127
-
128
- `SUPERPOWERS_VALIDATOR_EXECUTABLE=/path/to/validator` adds an optional external
129
- validator after the built-in check. It names an executable, receiving the
130
- candidate plugin root as its only argument. The manager constructs no shell
131
- command string and supplies argv directly. On Linux, `execvp` may hand that
132
- same argv to `/bin/sh` after `ENOEXEC`, and the values are preserved rather
133
- than re-parsed, so a candidate path containing spaces or shell metacharacters
134
- is passed through intact and cannot inject a command — on either platform. A
135
- file with the exec bit set but no valid executable format is handled by the
136
- platform's own `execvp` fallback, not by the manager: on Linux, `/bin/sh` runs
137
- it as shell source; on darwin, it is
138
- rejected outright as not runnable. Give the validator a shebang line or make
139
- it a real binary, or its behavior will differ by platform. Exit 0 accepts;
140
- any nonzero exit rejects and prevents the tree swap. The manager stops
141
- waiting after 30 seconds and keeps at most 64 KiB of each of its output
142
- streams. It cannot replace or bypass built-in validation, and it is not a
143
- security boundary: it runs with the manager's own privileges, by design.
27
+ ```sh
28
+ npx superpowers-manager install --harness pi
29
+ npx superpowers-manager probe --harness pi
30
+ npx superpowers-manager update --harness pi
31
+ ```
144
32
 
145
- `SUPERPOWERS_VALIDATOR` is deprecated in favor of `SUPERPOWERS_VALIDATOR_EXECUTABLE`
146
- and continues to work unchanged. The legacy variable requires `python3`; the
147
- executable hook does not. Setting both is rejected at preflight, before any
148
- network or Codex access, rather than silently resolved. Removal of the legacy
149
- variable is deferred to a future major release.
33
+ Pi installs a separately validated, Manager-owned frozen snapshot. Restart Pi
34
+ after a successful install, activating update, or removal. See the
35
+ [Pi reference](https://github.com/j7an/superpowers-manager/blob/main/docs/pi.md)
36
+ for compatibility, experimental opt-in, and recovery behavior.
150
37
 
151
- The in-process install command keeps harness-specific validation in the Codex
152
- adapter: phase 1 prepares the exact candidate first, then the adapter performs
153
- its Codex and refresh-mode preflight before any Codex mutation. The CLI runs
154
- its Codex preflight before invoking the lifecycle handler.
38
+ To remove a Manager-owned installation, choose one harness explicitly:
155
39
 
156
- ## Provider ownership
40
+ ### Uninstall Codex
157
41
 
158
- If another `superpowers` provider is installed, remove or disable it yourself
159
- before installing this one. The manager never removes another provider and
160
- mutates only `superpowers@superpowers-manager` and the `superpowers-manager`
161
- marketplace.
42
+ ```sh
43
+ npx superpowers-manager uninstall --harness codex
44
+ ```
162
45
 
163
- For example, if you intentionally want the manager to take over from the
164
- official provider:
46
+ ### Uninstall Pi
165
47
 
166
48
  ```sh
167
- codex plugin remove superpowers@openai-curated
168
- npx superpowers-manager install
49
+ npx superpowers-manager uninstall --harness pi
169
50
  ```
170
51
 
171
- Manager install, update, and uninstall commands inspect both current and legacy
172
- identities and fail closed when Codex state cannot be read or parsed. If legacy
173
- `superpowers-wrapper` state remains, use the migration commands above; the
174
- manager will not remove it for you.
175
-
176
- ## Lifecycle commands
52
+ The manager never removes another Superpowers provider. See the [ownership guidance](https://github.com/j7an/superpowers-manager/blob/main/docs/usage.md#provider-ownership) before switching providers.
177
53
 
178
- | Command | Codex side effects | Purpose |
179
- |---|---|---|
180
- | `npx superpowers-manager pin REF` | None | Resolve and save an exact upstream release tag or full commit |
181
- | `npx superpowers-manager track-latest` | None | Save a policy that resolves the latest stable release when applied |
182
- | `npx superpowers-manager unpin` | None | Remove saved selection and return to the packaged fallback policy |
183
- | `npx superpowers-manager prepare` | None | Resolve upstream, build a staged plugin tree, validate it, and replace the generated tree only on success |
184
- | `npx superpowers-manager probe` | None | Report requested and resolved refs, desired/generated/installed commits, identity state, and status |
185
- | `npx superpowers-manager install` | Marketplace and plugin state | Prepare and validate, register the marketplace, install the plugin, and verify installed state |
186
- | `npx superpowers-manager update` | Marketplace and plugin state when stale | Probe, prepare and/or install as needed, then verify the refresh |
187
- | `npx superpowers-manager uninstall` | Marketplace and plugin state | Remove only manager-owned Codex state and verify removal |
54
+ ## Shared selection and lifecycle
188
55
 
189
- Calling `npx superpowers-manager` without a subcommand is equivalent to
190
- `update`. `probe` is read-only. Install and update stop before prepare or Codex
191
- mutation when legacy state is present. Uninstall removes only manager-owned
192
- state and reports any legacy residue without modifying it. These commands fail
193
- closed when required state cannot be inspected and refuse to report success
194
- when resulting manager state cannot be verified.
56
+ Use `pin`, `track-latest`, or `unpin` to save shared upstream intent. They do not activate Codex or Pi; run the selected harness's `install` or `update` to apply that choice. There is no background updater.
195
57
 
196
- ## Choosing the upstream version
58
+ | Command | Purpose |
59
+ |---|---|
60
+ | `prepare` | Build and validate the selected harness's prepared output |
61
+ | `install` | Apply the shared selection to the selected harness |
62
+ | `probe` | Inspect the selected harness without mutation |
63
+ | `update` | Explicitly refresh the selected harness when needed and verify it |
64
+ | `uninstall` | Remove only Manager-owned state from the selected harness |
197
65
 
198
- Save a tag pin, commit pin, or explicit latest-stable policy for future
199
- invocations:
66
+ Use `--harness codex` or `--harness pi` with each targeted lifecycle command.
200
67
 
201
68
  ```sh
202
69
  npx superpowers-manager pin v6.1.1
203
- npx superpowers-manager pin 0123456789abcdef0123456789abcdef01234567 # replace with a real upstream commit
204
70
  npx superpowers-manager track-latest
205
71
  npx superpowers-manager unpin
206
72
  ```
207
73
 
208
- The selection commands save intent only; they do not prepare generated content
209
- or change Codex state. Run `npx superpowers-manager install` for a first
210
- installation or `npx superpowers-manager update` to apply the saved policy to
211
- an existing installation. There is no background updater: selection changes
212
- take effect only through a user-triggered `prepare`, `install`, or `update`.
213
-
214
- `pin` accepts only an exact `vMAJOR.MINOR.PATCH` tag (optionally with a SemVer
215
- prerelease suffix) or a full 40-character commit. It resolves and verifies the
216
- target before saving both the exact commit identity and its source. The saved
217
- identity is the contract, not the contents of a clone cache: clearing or moving
218
- `SUPERPOWERS_CACHE_DIR` does not change the selection. `track-latest` saves the
219
- source and resolves the highest stable `vX.Y.Z` tag each time the policy is
220
- applied. `unpin` removes only the saved selection and restores the packaged
221
- `config/upstream-ref` fallback, currently `latest-release`.
222
-
223
- The user-wide selection file is `selection.json` under the first configured
224
- location:
225
-
226
- 1. `$SUPERPOWERS_CONFIG_DIR`
227
- 2. `$XDG_CONFIG_HOME/superpowers-manager`
228
- 3. `$HOME/.config/superpowers-manager`
229
-
230
- Each location must be absolute. The ref and source precedence chains are
231
- independent:
232
-
233
- - Ref: `SUPERPOWERS_REF`, then saved selection, then `config/upstream-ref`.
234
- - Source: `SUPERPOWERS_UPSTREAM_URL`, then saved source, then the official
235
- `https://github.com/obra/superpowers` source.
236
-
237
- `SUPERPOWERS_REF` is an invocation-only override and is not persisted. Unlike
238
- an exact saved pin, it accepts stable tags, full commit SHAs, branches, and
239
- other resolvable upstream refs for that invocation:
240
-
241
- ```sh
242
- SUPERPOWERS_REF=feature/foo npx superpowers-manager probe
74
+ ```text
75
+ shared selection -> prepare / inspect / activate Codex
76
+ -> prepare / inspect / activate Pi
243
77
  ```
244
78
 
245
- `pin` and `track-latest` bind the current `SUPERPOWERS_UPSTREAM_URL`, or the
246
- official source when that variable is unset, to the saved intent. An invocation
247
- may override only the ref or only the source; `probe` exposes
248
- `selection_origin`, `selection_mode`, `upstream_source_origin`,
249
- `effective_source`, the saved-selection fields, and a mixed-origin warning in
250
- human output so that combination remains visible.
251
-
252
- A saved exact pin lets `probe` determine the desired upstream identity without
253
- contacting Git, even when the saved source is temporarily unavailable. This is
254
- not a general offline installation promise: `pin` verifies the requested
255
- target, `track-latest` must resolve when applied, and `prepare`/`install`/`update`
256
- must fetch or verify content from the effective source. Codex inspection is
257
- still required for lifecycle status.
258
-
259
- HTTP(S) upstream URLs containing userinfo are now rejected, including
260
- token-only userinfo. This is an intentional compatibility break: use a Git
261
- credential helper for HTTP(S) authentication or an SSH source instead of
262
- embedding credentials in the URL.
263
-
264
- Saved selection does not claim or transfer provider ownership. The manager
265
- continues to mutate only `superpowers@superpowers-manager` and never removes or
266
- updates the official provider or any other provider automatically.
267
-
268
- ## How versioning works
269
-
270
- - **Upstream manifest first:** when upstream provides
271
- `.codex-plugin/plugin.json`, `prepare` uses it as the generated manifest base
272
- so future upstream metadata fields, including its hook declaration, are
273
- preserved by default.
274
- - **Fallback template:** `plugins/superpowers/.codex-plugin/plugin.template.json`
275
- is committed as a minimal fallback for older upstream refs that do not ship a
276
- Codex manifest. It carries the placeholder version
277
- `0.0.0+manager.template`, declares no hooks, and produces no `hooks/`
278
- directory.
279
- - **Manager overlay:** `prepare` replaces the version with a ref-aware manager
280
- version and forces `skills` to `./skills/`. Unknown upstream manifest fields,
281
- including `hooks`, remain preserved; the adapter materializes hook files only
282
- according to the upstream declaration.
283
- - Stable tags generate release-looking versions such as
284
- `6.0.3+manager.896224c`; explicit prerelease tags generate versions such as
285
- `6.1.0-beta.1+manager.abc1234`.
286
- - Branch builds deliberately stay below real releases:
287
- `main` generates `0.0.0-main+manager.<short-sha>` and other named refs
288
- generate `0.0.0-ref-<sanitized-ref>+manager.<short-sha>`.
289
- - Raw 40-character commit SHAs generate `0.0.0+manager.<short-sha>`.
290
- - **`.superpowers-upstream.json`** records the authoritative provenance:
291
- `source`, `requested_ref`, `resolved_ref`, `commit`, and the upstream manifest
292
- version. The generated manifest version is for human readability and Codex
293
- package identity; the upstream `commit` is what `probe`/`update` compare
294
- against.
295
-
296
- ## Refresh modes
79
+ The [usage reference](https://github.com/j7an/superpowers-manager/blob/main/docs/usage.md) covers version selection, precedence, offline behavior, `prepare`, validators, and every lifecycle command. The harness references cover [Codex registration and hooks](https://github.com/j7an/superpowers-manager/blob/main/docs/codex.md) and [Pi snapshots and recovery](https://github.com/j7an/superpowers-manager/blob/main/docs/pi.md).
297
80
 
298
- `install` and `update` accept `SUPERPOWERS_INSTALL_REFRESH_MODE`:
299
-
300
- - `add-only` (default) — `plugin add` re-reads the local source, which refreshes
301
- a mutated tree. Verified sufficient for local marketplaces.
302
- - `remove-add` — removes the manager's own plugin first, then re-adds it. Use
303
- only if a refresh ever fails to take:
304
-
305
- ```sh
306
- SUPERPOWERS_INSTALL_REFRESH_MODE=remove-add npx superpowers-manager update
307
- ```
308
-
309
- ## Tests
310
-
311
- ```sh
312
- pnpm install --frozen-lockfile
313
- pnpm run build
314
- sh tests/run.sh # Layers 1-3: host-side hermetic checks while iterating
315
- sh tests/container.sh # Layers 1-4: blocking Docker acceptance command
316
- sh tests/manual/codex-behavior-probe.sh # optional native-only compatibility residue
317
- ```
318
-
319
- `pnpm run build` deletes `dist/` before compiling, so every build is a clean
320
- rebuild and stale artifacts of deleted or renamed modules cannot survive.
321
-
322
- Layers 1-3 stay offline and hermetic: they use a fake local upstream repo plus
323
- host-side fixtures, and they perform no mutation of the developer's or runner's
324
- real Codex state.
81
+ ## Requirements and platforms
325
82
 
326
- Layer 4 is the Docker acceptance path. It is the required completion command
327
- because the isolated-container Codex probe graduated from a temporary
328
- nonblocking spike to a blocking acceptance gate. `sh tests/container.sh` runs
329
- the inner `sh tests/run.sh` suite and then the real Codex offline probe inside
330
- an isolated container home with networking disabled. That container run may
331
- mutate the throwaway container-local Codex state, but it still performs no
332
- mutation of the developer's or runner's real Codex state.
83
+ The installed package requires Node >=24. Native source, tests, and packaging tooling require Node >=24.12.0. Every other requirement is command-specific and is checked before dispatch. This table is derived from production by `tests/bin/readme-requirements.test.ts`.
333
84
 
334
- The container probe uses Codex's `hooks/list` only as compatibility evidence
335
- for the tested Codex build. It is not a stable Superpowers Manager API.
85
+ <!-- requirements:begin -->
86
+ | Command | git | Python 3 | Codex CLI (default) | Pi CLI (`--harness pi`) |
87
+ |---|---|---|---|---|
88
+ | `pin` | yes | no | no | no |
89
+ | `track-latest` | no | no | no | no |
90
+ | `unpin` | no | no | no | no |
91
+ | `prepare` | yes | only with SUPERPOWERS_VALIDATOR | no | no |
92
+ | `probe` | yes | no | yes | no |
93
+ | `install` | yes | no | yes | yes |
94
+ | `update` | yes | no | yes | yes |
95
+ | `uninstall` | no | no | yes | yes |
96
+ <!-- requirements:end -->
336
97
 
337
- The manual probe is opt-in and covers native-only compatibility residue such as
338
- path/cache and version-precedence behavior against an intentionally real local
339
- Codex install. It is not part of acceptance. GitHub Actions runs both the
340
- toolchain check and the blocking container acceptance command on pull requests
341
- and pushes to `main`.
98
+ macOS and Linux are tested. WSL2 is supported for the established Codex path; Pi in WSL2 and native Windows remain untested. The manager runs in-process and does not require Git Bash. The [Pi reference](https://github.com/j7an/superpowers-manager/blob/main/docs/pi.md#runtime-compatibility) explains its runtime qualification and admission checks.
342
99
 
343
- ## Repository layout
100
+ Native test versions qualify integration mechanisms; they are not runtime allowlists, and an untested runtime is not automatically certified as compatible.
344
101
 
345
- ```
346
- .agents/plugins/marketplace.json # local marketplace definition (tracked)
347
- .github/ # CI, security, dependency, and release workflows (tracked)
348
- bin/superpowers-manager.js # public thin loader for dist/cli.js
349
- config/upstream-ref # packaged upstream fallback policy (tracked)
350
- docs/ # adapter result contract and baseline evidence (tracked)
351
- package.json pnpm-lock.yaml tsconfig.json # package contract and locked toolchain (tracked)
352
- plugins/superpowers/
353
- .codex-plugin/plugin.template.json # fallback manifest template (tracked)
354
- generated plugin tree # prepared from upstream (gitignored)
355
- src/ # in-process TypeScript runtime (tracked)
356
- cli.ts # CLI parsing, preflight, and command dispatch
357
- commands/ # lifecycle and selection command handlers
358
- adapter.ts # Codex integration
359
- tests/ # hermetic suite and manual Codex probe (tracked)
360
- migration-inventory/ # frozen historical evidence
361
- dist/ # generated ESM build tree (gitignored)
362
- ```
102
+ ## Contributing
363
103
 
364
- Everything under `plugins/superpowers/` except the fallback manifest template is
365
- generated by `npx superpowers-manager prepare` and ignored by Git; re-run that
366
- command to regenerate it.
104
+ See [the contributor guide](https://github.com/j7an/superpowers-manager/blob/main/CONTRIBUTING.md) for development, testing, packaging, CI, and repository layout. Architecture details live in the [harness interface](https://github.com/j7an/superpowers-manager/blob/main/docs/harness-interface.md) and [adapter result contract](https://github.com/j7an/superpowers-manager/blob/main/docs/adapter-result-contract.md).