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.
- package/README.md +63 -325
- package/dist/adapter.js +91 -46
- package/dist/artifact-tree.js +110 -0
- package/dist/atomic.js +103 -7
- package/dist/cli-arguments.js +37 -0
- package/dist/cli.js +97 -40
- package/dist/codex-compatibility.js +126 -0
- package/dist/codex-conflicts.js +99 -0
- package/dist/codex-harness.js +321 -0
- package/dist/codex-json.js +7 -0
- package/dist/codex-prepare.js +255 -0
- package/dist/codex-presentation.js +282 -0
- package/dist/commands/install.js +187 -173
- package/dist/commands/mutation.js +71 -0
- package/dist/commands/prepare.js +87 -188
- package/dist/commands/probe.js +191 -176
- package/dist/commands/uninstall.js +52 -139
- package/dist/commands/update.js +33 -88
- package/dist/generated-plugin.js +3 -3
- package/dist/harness-compatibility.js +13 -0
- package/dist/harness.js +1 -0
- package/dist/lifecycle.js +1 -86
- package/dist/manifest-overlay.js +2 -2
- package/dist/pi-compatibility.js +73 -0
- package/dist/pi-harness.js +63 -0
- package/dist/pi-install.js +495 -0
- package/dist/pi-native.js +81 -0
- package/dist/pi-package.js +153 -0
- package/dist/pi-paths.js +30 -0
- package/dist/pi-prepare.js +111 -0
- package/dist/pi-presentation.js +67 -0
- package/dist/pi-settings.js +171 -0
- package/dist/pi-shared-skills.js +413 -0
- package/dist/pi-state.js +311 -0
- package/dist/resource-lock.js +265 -0
- package/dist/safe-path.js +21 -5
- package/dist/strict-json.js +1 -1
- package/dist/upstream-workspace.js +8 -0
- package/dist/validator.js +3 -2
- package/package.json +19 -18
- package/bin/superpowers-manager.js +0 -16
package/README.md
CHANGED
|
@@ -1,366 +1,104 @@
|
|
|
1
1
|
# Superpowers Manager
|
|
2
2
|
|
|
3
|
-
Install and
|
|
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
|
-
##
|
|
7
|
+
## Start with your agent
|
|
12
8
|
|
|
13
|
-
|
|
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
|
-
|
|
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-
|
|
34
|
-
npx superpowers-manager
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
25
|
+
### Pi
|
|
77
26
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
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
|
-
|
|
40
|
+
### Uninstall Codex
|
|
157
41
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
marketplace.
|
|
42
|
+
```sh
|
|
43
|
+
npx superpowers-manager uninstall --harness codex
|
|
44
|
+
```
|
|
162
45
|
|
|
163
|
-
|
|
164
|
-
official provider:
|
|
46
|
+
### Uninstall Pi
|
|
165
47
|
|
|
166
48
|
```sh
|
|
167
|
-
|
|
168
|
-
npx superpowers-manager install
|
|
49
|
+
npx superpowers-manager uninstall --harness pi
|
|
169
50
|
```
|
|
170
51
|
|
|
171
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
335
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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).
|