superpowers-mcp 6.4.4 → 6.4.5
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.es.md +10 -3
- package/README.hi.md +10 -3
- package/README.ja.md +10 -3
- package/README.ko.md +10 -3
- package/README.md +10 -3
- package/README.pt-BR.md +10 -3
- package/README.zh-TW.md +10 -3
- package/docs/skill-compositions.es.md +11 -7
- package/docs/skill-compositions.hi.md +11 -7
- package/docs/skill-compositions.ja.md +11 -7
- package/docs/skill-compositions.ko.md +11 -7
- package/docs/skill-compositions.md +11 -7
- package/docs/skill-compositions.pt-BR.md +11 -7
- package/docs/skill-compositions.zh-TW.md +11 -7
- package/out/server.js +51 -51
- package/package.json +2 -2
- package/scripts/upstream-drift.js +8 -1
- package/skills/writing-plans/SKILL.md +32 -20
- package/skills/writing-plans/skeleton-first-plans.md +3 -2
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "superpowers-mcp",
|
|
3
3
|
"displayName": "Superpowers MCP",
|
|
4
4
|
"description": "Superpowers skills library (TDD, debugging, collaboration workflows) as an MCP server for VSCode and Antigravity",
|
|
5
|
-
"version": "6.4.
|
|
5
|
+
"version": "6.4.5",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=18"
|
|
8
8
|
},
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
],
|
|
40
40
|
"overrides": {
|
|
41
41
|
"@hono/node-server": "^2.1.1",
|
|
42
|
-
"fast-uri": "^4.1
|
|
42
|
+
"fast-uri": "^4.2.1",
|
|
43
43
|
"hono": "^4.13.7",
|
|
44
44
|
"qs": "^6.16.0"
|
|
45
45
|
},
|
|
@@ -93,11 +93,18 @@ function readBaseline(baselinePath = BASELINE_PATH) {
|
|
|
93
93
|
return parsed;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
/** OS metadata Finder/Explorer drop into folders; never upstream content. */
|
|
97
|
+
const OS_JUNK = new Set([".DS_Store", "Thumbs.db", "desktop.ini"]);
|
|
98
|
+
const isOsJunk = (name) => OS_JUNK.has(name) || name.startsWith("._");
|
|
99
|
+
|
|
96
100
|
/** Walk the fork's skills tree and return the upstream-style paths it covers. */
|
|
97
101
|
function localSkillPaths(skillsDir = SKILLS_DIR) {
|
|
98
102
|
const found = new Set();
|
|
99
103
|
const walk = (dir, relative) => {
|
|
100
104
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
105
|
+
if (isOsJunk(entry.name)) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
101
108
|
const nextRelative = relative ? `${relative}/${entry.name}` : entry.name;
|
|
102
109
|
if (entry.isDirectory()) {
|
|
103
110
|
walk(path.join(dir, entry.name), nextRelative);
|
|
@@ -378,4 +385,4 @@ if (require.main === module) {
|
|
|
378
385
|
});
|
|
379
386
|
}
|
|
380
387
|
|
|
381
|
-
module.exports = { parseArgs, skillNameOf, readBaseline, localSkillPaths, classifyDrift, classifyCoverage, requireCompleteTreeForRecord };
|
|
388
|
+
module.exports = { parseArgs, skillNameOf, isOsJunk, readBaseline, localSkillPaths, classifyDrift, classifyCoverage, requireCompleteTreeForRecord };
|
|
@@ -7,9 +7,7 @@ description: Use when you have a spec or requirements for a multi-step task, bef
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Write
|
|
11
|
-
|
|
12
|
-
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
|
|
10
|
+
Write implementation plans for an engineer who has not seen this codebase or this spec. Assume they write idiomatic code in the project's language once they know the exact interface and the exact test, and that they will make a reasonable choice wherever the plan leaves one open. What they cannot know is what you decided: which files, which names and signatures, which values from the spec, which tests prove each task. Document those. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
|
|
13
11
|
|
|
14
12
|
**Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
|
|
15
13
|
|
|
@@ -66,9 +64,9 @@ deliverable needs them; split only where a reviewer could meaningfully
|
|
|
66
64
|
reject one task while approving its neighbor. Each task ends with an
|
|
67
65
|
independently testable deliverable.
|
|
68
66
|
|
|
69
|
-
##
|
|
67
|
+
## Step Granularity
|
|
70
68
|
|
|
71
|
-
**Each step is one action
|
|
69
|
+
**Each step is one action with a checkable result:**
|
|
72
70
|
- "Write the failing test" - step
|
|
73
71
|
- "Run it to make sure it fails" - step
|
|
74
72
|
- "Implement the minimal code to make the test pass" - step
|
|
@@ -147,12 +145,11 @@ def test_specific_behavior():
|
|
|
147
145
|
Run: `pytest tests/path/test.py::test_name -v`
|
|
148
146
|
Expected: FAIL with "function not defined"
|
|
149
147
|
|
|
150
|
-
- [ ] **Step 3:
|
|
148
|
+
- [ ] **Step 3: Implement `function(input: InputType) -> ResultType` in `exact/path/to/file.py`**
|
|
151
149
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
```
|
|
150
|
+
One line on the approach when the signature and the test leave a choice
|
|
151
|
+
(which library call, which data structure); a code block only for an
|
|
152
|
+
algorithm they do not determine.
|
|
156
153
|
|
|
157
154
|
- [ ] **Step 4: Run test to verify it passes**
|
|
158
155
|
|
|
@@ -167,15 +164,28 @@ git commit -m "feat: add specific feature"
|
|
|
167
164
|
```
|
|
168
165
|
````
|
|
169
166
|
|
|
170
|
-
##
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
-
|
|
177
|
-
|
|
178
|
-
-
|
|
167
|
+
## What a Step Contains
|
|
168
|
+
|
|
169
|
+
A step is done when the implementer can write exactly one reasonable thing
|
|
170
|
+
from it. That is the whole requirement: unambiguous, not complete. Each kind
|
|
171
|
+
of step carries what makes it unambiguous and nothing more:
|
|
172
|
+
|
|
173
|
+
- **A test step:** the test's name and its assertions, as code, with the
|
|
174
|
+
spec's exact values in them.
|
|
175
|
+
- **A code step:** the exact signature (name, parameters, return type), the
|
|
176
|
+
file it lives in, and the specific values the spec pins. The implementer
|
|
177
|
+
writes the body. A body appears only for an algorithm the signature and
|
|
178
|
+
tests do not determine, or for exact copy the spec fixes.
|
|
179
|
+
- **A verification step:** the command to run and the output that means it
|
|
180
|
+
passed.
|
|
181
|
+
- **A reference to another task:** that task's Interfaces block says what
|
|
182
|
+
to use; the plan does not repeat that task's code.
|
|
183
|
+
|
|
184
|
+
A plan is the set of decisions the implementer cannot make alone. A plan
|
|
185
|
+
longer than the code it describes has written the code instead. Lines that
|
|
186
|
+
decide nothing ("TBD", "handle edge cases", "add appropriate validation",
|
|
187
|
+
"write tests for the above", a type or function no task defines) are the
|
|
188
|
+
opposite failure, and the self-review catches both.
|
|
179
189
|
|
|
180
190
|
## Self-Review
|
|
181
191
|
|
|
@@ -183,12 +193,14 @@ After writing the complete plan, look at the spec with fresh eyes and check the
|
|
|
183
193
|
|
|
184
194
|
**1. Spec coverage:** Skim each section/requirement in the spec. Can you point to a task that implements it? List any gaps.
|
|
185
195
|
|
|
186
|
-
**2.
|
|
196
|
+
**2. Step scan:** Every step must let the implementer write exactly one reasonable thing, and no step may carry more than that: a line that decides nothing is a gap, a function body the signature and tests already determine is a transcript. Fix both.
|
|
187
197
|
|
|
188
198
|
**3. Type consistency:** Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called `clearLayers()` in Task 3 but `clearFullLayers()` in Task 7 is a bug.
|
|
189
199
|
|
|
190
200
|
**4. Review Focus:** For each input class or failure mode the spec implies, is there a task whose tests exercise it? The five uncovered ones most likely to bite a person go in the Review Focus section, and each line there gets its test added to the owning task. An empty section means you checked and found none, not that you skipped the check.
|
|
191
201
|
|
|
202
|
+
**5. Proportion:** Compare the plan's length to the spec's. A plan several times longer than the spec it implements is a transcript of the program, not a plan. If code blocks are most of the document, replace bodies with signatures, test names and assertions, and check that each step is still unambiguous.
|
|
203
|
+
|
|
192
204
|
If you find issues, fix them inline. No need to re-review — just fix and move on. If you find a spec requirement with no task, add the task.
|
|
193
205
|
|
|
194
206
|
## Execution Handoff
|
|
@@ -117,8 +117,9 @@ are **plan failures** — never write them:
|
|
|
117
117
|
|
|
118
118
|
## Self-Review
|
|
119
119
|
|
|
120
|
-
Run SKILL.md's Self-Review checklist, reading step 2 against
|
|
121
|
-
Contracts" above rather than
|
|
120
|
+
Run SKILL.md's Self-Review checklist, reading step 2 against
|
|
121
|
+
"No Vague Contracts" above rather than against the step template in
|
|
122
|
+
"What a Step Contains".
|
|
122
123
|
|
|
123
124
|
## Red Flags
|
|
124
125
|
|