mirror of
https://github.com/obra/superpowers.git
synced 2026-06-27 04:59:05 +08:00
Compare commits
3 Commits
codex/issu
...
fix/1780-s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
54252ee401 | ||
|
|
ea0da051e3 | ||
|
|
1e912bc757 |
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "superpowers-dev",
|
|
||||||
"interface": {
|
|
||||||
"displayName": "Superpowers Dev"
|
|
||||||
},
|
|
||||||
"plugins": [
|
|
||||||
{
|
|
||||||
"name": "superpowers",
|
|
||||||
"source": {
|
|
||||||
"source": "url",
|
|
||||||
"url": "./"
|
|
||||||
},
|
|
||||||
"policy": {
|
|
||||||
"installation": "AVAILABLE",
|
|
||||||
"authentication": "ON_INSTALL"
|
|
||||||
},
|
|
||||||
"category": "Developer Tools"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
||||||
"version": "6.0.3",
|
"version": "6.0.2",
|
||||||
"source": "./",
|
"source": "./",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Jesse Vincent",
|
"name": "Jesse Vincent",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
|
||||||
"version": "6.0.3",
|
"version": "6.0.2",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Jesse Vincent",
|
"name": "Jesse Vincent",
|
||||||
"email": "jesse@fsck.com"
|
"email": "jesse@fsck.com"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"version": "6.0.3",
|
"version": "6.0.2",
|
||||||
"description": "An agentic skills framework & software development methodology that works: planning, TDD, debugging, and collaboration workflows.",
|
"description": "An agentic skills framework & software development methodology that works: planning, TDD, debugging, and collaboration workflows.",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Jesse Vincent",
|
"name": "Jesse Vincent",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"displayName": "Superpowers",
|
"displayName": "Superpowers",
|
||||||
"description": "Core skills library: TDD, debugging, collaboration patterns, and proven techniques",
|
"description": "Core skills library: TDD, debugging, collaboration patterns, and proven techniques",
|
||||||
"version": "6.0.3",
|
"version": "6.0.2",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Jesse Vincent",
|
"name": "Jesse Vincent",
|
||||||
"email": "jesse@fsck.com"
|
"email": "jesse@fsck.com"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"version": "6.0.3",
|
"version": "6.0.2",
|
||||||
"description": "An agentic skills framework and software development methodology.",
|
"description": "An agentic skills framework and software development methodology.",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Jesse Vincent",
|
"name": "Jesse Vincent",
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
# Superpowers Release Notes
|
# Superpowers Release Notes
|
||||||
|
|
||||||
## v6.0.3 (2026-06-18)
|
|
||||||
|
|
||||||
### Subagent-Driven Development
|
|
||||||
|
|
||||||
- **SDD scratch files moved out of `.git/`.** Claude Code treats `.git/` as a protected path and denies agent writes there, so an implementer subagent writing its report into `.git/sdd/` got blocked mid-run. Task briefs, implementer reports, review diffs, and the progress ledger now live in a self-ignoring `.superpowers/sdd/` directory in the working tree — kept out of `git status` and out of commits, and resolved per worktree by a shared `sdd-workspace` helper. One caveat: because the workspace is git-ignored working-tree scratch, `git clean -fdx` will delete the progress ledger; recover from `git log` if that happens. (#1780)
|
|
||||||
|
|
||||||
## v6.0.2 (2026-06-16)
|
## v6.0.2 (2026-06-16)
|
||||||
|
|
||||||
### Install Fixes
|
### Install Fixes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"description": "Core skills library: TDD, debugging, collaboration patterns, and proven techniques",
|
"description": "Core skills library: TDD, debugging, collaboration patterns, and proven techniques",
|
||||||
"version": "6.0.3",
|
"version": "6.0.2",
|
||||||
"contextFileName": "GEMINI.md"
|
"contextFileName": "GEMINI.md"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
{
|
{
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "\"${PLUGIN_ROOT}/hooks/run-hook.cmd\" session-start-codex",
|
"command": "\"${PLUGIN_ROOT}/hooks/run-hook.cmd\" session-start-codex",
|
||||||
"commandWindows": "& \"${PLUGIN_ROOT}/hooks/run-hook.cmd\" session-start-codex",
|
|
||||||
"async": false
|
"async": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "superpowers",
|
"name": "superpowers",
|
||||||
"version": "6.0.3",
|
"version": "6.0.2",
|
||||||
"description": "Superpowers skills and runtime bootstrap for coding agents",
|
"description": "Superpowers skills and runtime bootstrap for coding agents",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": ".opencode/plugins/superpowers.js",
|
"main": ".opencode/plugins/superpowers.js",
|
||||||
|
|||||||
@@ -260,8 +260,6 @@ a ledger file, not only in todos.
|
|||||||
- The ledger is your recovery map: the commits it names exist in git even
|
- The ledger is your recovery map: the commits it names exist in git even
|
||||||
when your context no longer remembers creating them. After compaction,
|
when your context no longer remembers creating them. After compaction,
|
||||||
trust the ledger and `git log` over your own recollection.
|
trust the ledger and `git log` over your own recollection.
|
||||||
- `git clean -fdx` will destroy the ledger (it's git-ignored scratch); if
|
|
||||||
that happens, recover from `git log`.
|
|
||||||
|
|
||||||
## Prompt Templates
|
## Prompt Templates
|
||||||
|
|
||||||
|
|||||||
8
tests/brainstorm-server/package-lock.json
generated
8
tests/brainstorm-server/package-lock.json
generated
@@ -8,13 +8,13 @@
|
|||||||
"name": "brainstorm-server-tests",
|
"name": "brainstorm-server-tests",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ws": "^8.21.0"
|
"ws": "^8.19.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ws": {
|
"node_modules/ws": {
|
||||||
"version": "8.21.0",
|
"version": "8.19.0",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
|
||||||
"integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
|
"integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
"test": "node ws-protocol.test.js && node helper.test.js && node browser-launcher.test.js && node auth.test.js && node branding.test.js && node server.test.js && node lifecycle.test.js && bash start-server.test.sh && bash stop-server.test.sh"
|
"test": "node ws-protocol.test.js && node helper.test.js && node browser-launcher.test.js && node auth.test.js && node branding.test.js && node server.test.js && node lifecycle.test.js && bash start-server.test.sh && bash stop-server.test.sh"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ws": "^8.21.0"
|
"ws": "^8.19.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ done
|
|||||||
# List of skill tests to run (fast unit tests)
|
# List of skill tests to run (fast unit tests)
|
||||||
tests=(
|
tests=(
|
||||||
"test-worktree-path-policy.sh"
|
"test-worktree-path-policy.sh"
|
||||||
"test-sdd-workspace.sh"
|
|
||||||
"test-subagent-driven-development.sh"
|
"test-subagent-driven-development.sh"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
||||||
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
||||||
MARKETPLACE="$REPO_ROOT/.agents/plugins/marketplace.json"
|
|
||||||
|
|
||||||
python3 - "$MARKETPLACE" "$REPO_ROOT" <<'PY'
|
|
||||||
import json
|
|
||||||
import sys
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
marketplace_path = Path(sys.argv[1])
|
|
||||||
repo_root = Path(sys.argv[2])
|
|
||||||
|
|
||||||
if not marketplace_path.exists():
|
|
||||||
raise AssertionError(".agents/plugins/marketplace.json must exist")
|
|
||||||
|
|
||||||
marketplace = json.loads(marketplace_path.read_text(encoding="utf-8"))
|
|
||||||
|
|
||||||
def assert_equal(actual, expected, label):
|
|
||||||
if actual != expected:
|
|
||||||
raise AssertionError(f"{label}: expected {expected!r}, got {actual!r}")
|
|
||||||
|
|
||||||
assert_equal(marketplace.get("name"), "superpowers-dev", "marketplace name")
|
|
||||||
assert_equal(
|
|
||||||
marketplace.get("interface", {}).get("displayName"),
|
|
||||||
"Superpowers Dev",
|
|
||||||
"marketplace display name",
|
|
||||||
)
|
|
||||||
|
|
||||||
plugins = marketplace.get("plugins")
|
|
||||||
if not isinstance(plugins, list):
|
|
||||||
raise AssertionError("plugins must be a list")
|
|
||||||
|
|
||||||
matching_plugins = [plugin for plugin in plugins if plugin.get("name") == "superpowers"]
|
|
||||||
assert_equal(len(matching_plugins), 1, "superpowers plugin entry count")
|
|
||||||
|
|
||||||
plugin = matching_plugins[0]
|
|
||||||
assert_equal(plugin.get("source"), {"source": "url", "url": "./"}, "plugin source")
|
|
||||||
assert_equal(
|
|
||||||
plugin.get("policy"),
|
|
||||||
{"installation": "AVAILABLE", "authentication": "ON_INSTALL"},
|
|
||||||
"plugin policy",
|
|
||||||
)
|
|
||||||
assert_equal(plugin.get("category"), "Developer Tools", "plugin category")
|
|
||||||
|
|
||||||
plugin_manifest = repo_root / ".codex-plugin" / "plugin.json"
|
|
||||||
if not plugin_manifest.exists():
|
|
||||||
raise AssertionError(".codex-plugin/plugin.json must exist")
|
|
||||||
|
|
||||||
manifest = json.loads(plugin_manifest.read_text(encoding="utf-8"))
|
|
||||||
assert_equal(manifest.get("name"), plugin.get("name"), "plugin manifest name")
|
|
||||||
assert_equal(
|
|
||||||
manifest.get("hooks"),
|
|
||||||
"./hooks/hooks-codex.json",
|
|
||||||
"Codex hooks manifest",
|
|
||||||
)
|
|
||||||
|
|
||||||
print("Codex marketplace manifest looks good")
|
|
||||||
PY
|
|
||||||
Reference in New Issue
Block a user