mirror of
https://github.com/obra/superpowers.git
synced 2026-08-08 07:08:46 +08:00
Merge pull request #1995 from caiolopes/add-devin-cli-support
feat: add Devin CLI support
This commit is contained in:
22
.devin-plugin/plugin.json
Normal file
22
.devin-plugin/plugin.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "superpowers",
|
||||||
|
"version": "6.2.0",
|
||||||
|
"description": "An agentic skills framework & software development methodology that works: planning, TDD, debugging, and collaboration workflows.",
|
||||||
|
"author": {
|
||||||
|
"name": "Jesse Vincent",
|
||||||
|
"email": "jesse@fsck.com"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/obra/superpowers",
|
||||||
|
"repository": "https://github.com/obra/superpowers",
|
||||||
|
"license": "MIT",
|
||||||
|
"keywords": [
|
||||||
|
"brainstorming",
|
||||||
|
"subagent-driven-development",
|
||||||
|
"skills",
|
||||||
|
"planning",
|
||||||
|
"tdd",
|
||||||
|
"debugging",
|
||||||
|
"code-review",
|
||||||
|
"workflow"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
{ "path": ".claude-plugin/plugin.json", "field": "version" },
|
{ "path": ".claude-plugin/plugin.json", "field": "version" },
|
||||||
{ "path": ".cursor-plugin/plugin.json", "field": "version" },
|
{ "path": ".cursor-plugin/plugin.json", "field": "version" },
|
||||||
{ "path": ".codex-plugin/plugin.json", "field": "version" },
|
{ "path": ".codex-plugin/plugin.json", "field": "version" },
|
||||||
|
{ "path": ".devin-plugin/plugin.json", "field": "version" },
|
||||||
{ "path": ".kimi-plugin/plugin.json", "field": "version" },
|
{ "path": ".kimi-plugin/plugin.json", "field": "version" },
|
||||||
{ "path": ".claude-plugin/marketplace.json", "field": "plugins.0.version" },
|
{ "path": ".claude-plugin/marketplace.json", "field": "plugins.0.version" },
|
||||||
{ "path": "gemini-extension.json", "field": "version" }
|
{ "path": "gemini-extension.json", "field": "version" }
|
||||||
|
|||||||
17
README.md
17
README.md
@@ -13,6 +13,7 @@ Superpowers is a complete software development methodology for your coding agent
|
|||||||
- [Codex App](#codex-app)
|
- [Codex App](#codex-app)
|
||||||
- [Codex CLI](#codex-cli)
|
- [Codex CLI](#codex-cli)
|
||||||
- [Cursor](#cursor)
|
- [Cursor](#cursor)
|
||||||
|
- [Devin CLI](#devin-cli)
|
||||||
- [Factory Droid](#factory-droid)
|
- [Factory Droid](#factory-droid)
|
||||||
- [Gemini CLI](#gemini-cli)
|
- [Gemini CLI](#gemini-cli)
|
||||||
- [GitHub Copilot CLI](#github-copilot-cli)
|
- [GitHub Copilot CLI](#github-copilot-cli)
|
||||||
@@ -31,7 +32,7 @@ Superpowers is a complete software development methodology for your coding agent
|
|||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
|
|
||||||
Give your agent Superpowers: [Claude Code](#claude-code), [Antigravity](#antigravity), [Codex App](#codex-app), [Codex CLI](#codex-cli), [Cursor](#cursor), [Factory Droid](#factory-droid), [Gemini CLI](#gemini-cli), [GitHub Copilot CLI](#github-copilot-cli), [Grok Build CLI](#grok-build-cli), [Hermes Agent](#hermes-agent), [Kimi Code](#kimi-code), [OpenCode](#opencode), [Pi](#pi).
|
Give your agent Superpowers: [Claude Code](#claude-code), [Antigravity](#antigravity), [Codex App](#codex-app), [Codex CLI](#codex-cli), [Cursor](#cursor), [Devin CLI](#devin-cli), [Factory Droid](#factory-droid), [Gemini CLI](#gemini-cli), [GitHub Copilot CLI](#github-copilot-cli), [Grok Build CLI](#grok-build-cli), [Hermes Agent](#hermes-agent), [Kimi Code](#kimi-code), [OpenCode](#opencode), [Pi](#pi).
|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
@@ -128,6 +129,20 @@ Superpowers is available via the [official Codex plugin marketplace](https://git
|
|||||||
|
|
||||||
- Or search for "superpowers" in the plugin marketplace.
|
- Or search for "superpowers" in the plugin marketplace.
|
||||||
|
|
||||||
|
### Devin CLI
|
||||||
|
|
||||||
|
- Install the plugin from this repository:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
devin plugins install obra/superpowers
|
||||||
|
```
|
||||||
|
|
||||||
|
- Update to the latest version with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
devin plugins update superpowers
|
||||||
|
```
|
||||||
|
|
||||||
### Factory Droid
|
### Factory Droid
|
||||||
|
|
||||||
- Register the marketplace:
|
- Register the marketplace:
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ EXCLUDES=(
|
|||||||
"/.claude-plugin/"
|
"/.claude-plugin/"
|
||||||
"/.codex/"
|
"/.codex/"
|
||||||
"/.cursor-plugin/"
|
"/.cursor-plugin/"
|
||||||
|
"/.devin-plugin/"
|
||||||
"/.git/"
|
"/.git/"
|
||||||
"/.gitattributes"
|
"/.gitattributes"
|
||||||
"/.github/"
|
"/.github/"
|
||||||
|
|||||||
63
tests/devin/test-devin-plugin.sh
Executable file
63
tests/devin/test-devin-plugin.sh
Executable file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Validate the Devin CLI integration. `devin plugins install obra/superpowers`
|
||||||
|
# reads `.devin-plugin/plugin.json` and auto-discovers the co-located `skills/`
|
||||||
|
# directory; Devin CLI surfaces every installed skill's name + description in
|
||||||
|
# the system prompt at session start and invokes them via its native `skill`
|
||||||
|
# tool, and its system prompt already documents its own tools (subagent
|
||||||
|
# profiles, todo tracking, question prompts), so there is no hook, injector,
|
||||||
|
# or tool-mapping scaffold to test. What IS Devin-specific is the manifest.
|
||||||
|
#
|
||||||
|
# Mirrors tests/kimi/test-plugin-manifest.sh. CI-safe: does not require
|
||||||
|
# `devin` installed.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||||
|
|
||||||
|
MANIFEST="$REPO_ROOT/.devin-plugin/plugin.json"
|
||||||
|
|
||||||
|
fail() { echo "FAIL: $*" >&2; exit 1; }
|
||||||
|
|
||||||
|
echo "test-devin-plugin: checking Devin CLI manifest"
|
||||||
|
|
||||||
|
# --- Manifest is valid and matches the repo version -------------------------
|
||||||
|
[ -f "$MANIFEST" ] || fail "manifest missing at $MANIFEST"
|
||||||
|
|
||||||
|
python3 - "$MANIFEST" <<'PY'
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
manifest_path = Path(sys.argv[1])
|
||||||
|
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
|
||||||
|
repo_root = manifest_path.parents[1]
|
||||||
|
|
||||||
|
if manifest.get("name") != "superpowers":
|
||||||
|
raise AssertionError(f"plugin name: expected 'superpowers', got {manifest.get('name')!r}")
|
||||||
|
|
||||||
|
package = json.loads((repo_root / "package.json").read_text(encoding="utf-8"))
|
||||||
|
if manifest.get("version") != package.get("version"):
|
||||||
|
raise AssertionError(
|
||||||
|
f"manifest version {manifest.get('version')!r} != package.json version {package.get('version')!r}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Devin CLI plugins carry skills only (auto-discovered from ./skills/); the
|
||||||
|
# manifest supports metadata + dependency lists, nothing executable.
|
||||||
|
unsupported = ["skills", "hooks", "commands", "sessionStart", "contextFileName", "inject"]
|
||||||
|
present = sorted(field for field in unsupported if field in manifest)
|
||||||
|
if present:
|
||||||
|
raise AssertionError("unsupported Devin manifest fields present: " + ", ".join(present))
|
||||||
|
|
||||||
|
version_config = json.loads((repo_root / ".version-bump.json").read_text(encoding="utf-8"))
|
||||||
|
entries = version_config.get("files")
|
||||||
|
if not isinstance(entries, list) or not any(
|
||||||
|
entry.get("path") == ".devin-plugin/plugin.json" and entry.get("field") == "version"
|
||||||
|
for entry in entries
|
||||||
|
if isinstance(entry, dict)
|
||||||
|
):
|
||||||
|
raise AssertionError(".version-bump.json must update .devin-plugin/plugin.json version")
|
||||||
|
|
||||||
|
print("Devin plugin manifest looks good")
|
||||||
|
PY
|
||||||
|
|
||||||
|
echo "PASS: Devin CLI plugin valid (manifest)"
|
||||||
Reference in New Issue
Block a user