superpowers-manager 0.9.0 → 0.9.1

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.
@@ -182,12 +182,20 @@ async function runBuild(input, env, log) {
182
182
  ? "cannot copy upstream manifest into candidate"
183
183
  : "cannot copy fallback manifest into candidate");
184
184
  }
185
- let plan;
186
185
  let sourceRoot;
187
186
  let realCandidateRoot;
188
187
  try {
189
188
  sourceRoot = await realpath(upstreamRoot);
190
189
  realCandidateRoot = await realpath(candidateRoot);
190
+ }
191
+ catch {
192
+ // Kept out of the classification catch below, which re-emits its cause:
193
+ // a raw realpath error would carry Node's wording onto stderr.
194
+ log.appendText("stderr", `cannot resolve hook roots: ${upstreamRoot}, ${candidateRoot}`);
195
+ fail("build-failed", "failed to prepare upstream Codex hooks");
196
+ }
197
+ let plan;
198
+ try {
191
199
  const manifest = await readManifest(candidateManifest);
192
200
  plan = await classifyHooks(manifest, manifestSource, sourceRoot);
193
201
  }
@@ -240,7 +240,24 @@ async function validateMaterializedDestination(destination, candidateRoot) {
240
240
  throw hookError(message);
241
241
  }
242
242
  }
243
+ // The `hook materialization failed:` site in src/harnesses/codex/adapter.ts
244
+ // re-emits this module's messages, so a raw cp/copyFile/mkdir/readlink/symlink
245
+ // error must not escape: its message carries Node's own wording. Only an
246
+ // errno-shaped code is interpolated, matching
247
+ // `src/harnesses/codex/adapter.ts::const detail =`.
243
248
  export async function materializeHooks(plan, sourceRoot, candidateRoot) {
249
+ try {
250
+ await copyHookFiles(plan, sourceRoot, candidateRoot);
251
+ }
252
+ catch (cause) {
253
+ if (cause instanceof SafetyError && cause.module === "hooks")
254
+ throw cause;
255
+ const code = cause?.code ?? "";
256
+ const detail = /^E[A-Z0-9]+$/.test(code) ? `: ${code}` : "";
257
+ throw hookError(`cannot copy upstream hooks from ${sourceRoot} into ${candidateRoot}${detail}`, cause);
258
+ }
259
+ }
260
+ async function copyHookFiles(plan, sourceRoot, candidateRoot) {
244
261
  if (plan.copyHooksSubtree) {
245
262
  const sourceHooks = resolve(sourceRoot, "hooks");
246
263
  const candidateHooks = resolve(candidateRoot, "hooks");
package/package.json CHANGED
@@ -1,30 +1,40 @@
1
1
  {
2
2
  "name": "superpowers-manager",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Install obra/superpowers directly from upstream for Codex, Pi, OpenCode, and Claude Code. Stay on a known-good release or commit, try a branch, and upgrade when you choose.",
5
5
  "keywords": [
6
6
  "superpowers",
7
7
  "obra-superpowers",
8
8
  "agent-skills",
9
+ "skills",
10
+ "ai-agent",
9
11
  "ai-coding-agent",
10
12
  "coding-agent",
11
13
  "agent-harness",
12
- "codex",
13
- "codex-plugin",
14
- "plugin-manager",
15
14
  "cli",
16
15
  "installer",
17
16
  "updater",
17
+ "plugin-manager",
18
+ "version-manager",
19
+ "version-pinning",
20
+ "codex",
21
+ "openai-codex",
22
+ "codex-plugin",
23
+ "codex-skills",
18
24
  "pi",
19
25
  "pi-coding-agent",
26
+ "pi-skills",
20
27
  "opencode",
28
+ "opencode-plugin",
29
+ "opencode-skills",
30
+ "claude",
21
31
  "claude-code",
22
32
  "claude-code-plugin",
23
- "version-pinning"
33
+ "claude-code-skills"
24
34
  ],
25
35
  "license": "MIT",
26
36
  "type": "module",
27
- "packageManager": "pnpm@12.4.2",
37
+ "packageManager": "pnpm@12.6.0",
28
38
  "scripts": {
29
39
  "lint": "oxlint src/ tests/",
30
40
  "format": "prettier --write src/ tests/",