mirror of
https://github.com/obra/superpowers.git
synced 2026-07-01 06:59:06 +08:00
Compare commits
1 Commits
codex/fix-
...
fix/codex-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ded04a41e3 |
@@ -21,12 +21,13 @@
|
||||
"workflow"
|
||||
],
|
||||
"skills": "./skills/",
|
||||
"hooks": {},
|
||||
"interface": {
|
||||
"displayName": "Superpowers",
|
||||
"shortDescription": "Planning, TDD, debugging, and delivery workflows for coding agents",
|
||||
"longDescription": "Use Superpowers to guide agent work through brainstorming, implementation planning, test-driven development, systematic debugging, parallel execution, code review, and finish-the-branch workflows.",
|
||||
"developerName": "Jesse Vincent",
|
||||
"category": "Developer Tools",
|
||||
"category": "Coding",
|
||||
"capabilities": [
|
||||
"Interactive",
|
||||
"Read",
|
||||
|
||||
@@ -51,32 +51,25 @@ if not plugin_manifest.exists():
|
||||
|
||||
manifest = json.loads(plugin_manifest.read_text(encoding="utf-8"))
|
||||
assert_equal(manifest.get("name"), plugin.get("name"), "plugin manifest name")
|
||||
supported_categories = {
|
||||
"Productivity",
|
||||
"Creativity",
|
||||
"Developer Tools",
|
||||
"Business & Operations",
|
||||
"Data & Analytics",
|
||||
"Communication",
|
||||
"Education & Research",
|
||||
"Security",
|
||||
"Finance",
|
||||
"Healthcare",
|
||||
"Travel",
|
||||
"Entertainment",
|
||||
"Other",
|
||||
}
|
||||
manifest_category = manifest.get("interface", {}).get("category")
|
||||
if manifest_category not in supported_categories:
|
||||
raise AssertionError(
|
||||
f"plugin manifest category: expected one of {sorted(supported_categories)!r}, "
|
||||
f"got {manifest_category!r}"
|
||||
)
|
||||
assert_equal(manifest_category, plugin.get("category"), "plugin manifest category")
|
||||
|
||||
# Codex auto-discovers a plugin's hooks/hooks.json whenever the Codex manifest
|
||||
# has no `hooks` field: load_plugin_hooks falls back to a hardcoded
|
||||
# DEFAULT_HOOKS_CONFIG_FILE = "hooks/hooks.json" and registers it. That file is
|
||||
# the Claude Code SessionStart hook, it is tracked in this repo, and this
|
||||
# marketplace installs the whole repo root (source url "./"), so on Codex the
|
||||
# fallback re-registers the SessionStart hook and its install-time trust prompt.
|
||||
# Declaring an empty inline hooks object ({}) parses as an empty inline hook set
|
||||
# and suppresses the auto-discovery. An absent field, an empty array ([]), and
|
||||
# an empty inline list all collapse back to the fallback, so the value must be
|
||||
# exactly an empty object.
|
||||
hooks_config = repo_root / "hooks" / "hooks.json"
|
||||
if not hooks_config.exists():
|
||||
raise AssertionError("hooks/hooks.json must exist (Claude Code SessionStart hook)")
|
||||
|
||||
assert_equal(
|
||||
manifest.get("hooks"),
|
||||
None,
|
||||
"Codex manifest ships no hooks",
|
||||
{},
|
||||
"Codex manifest must declare empty hooks {} to suppress hooks/hooks.json auto-discovery",
|
||||
)
|
||||
|
||||
print("Codex marketplace manifest looks good")
|
||||
|
||||
Reference in New Issue
Block a user