superpowers-mcp 6.2.0 → 6.2.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.
package/README.ja.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-6.2.0-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![Version](https://img.shields.io/badge/version-6.2.1-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  このドキュメントは、オリジナルの Superpowers スキルライブラリを独立した MCP Toolpack にパッケージ化するための情報と使用手順をまとめたものです。
package/README.ko.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-6.2.0-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![Version](https://img.shields.io/badge/version-6.2.1-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  이 문서는 원본 Superpowers 스킬 라이브러리를 독립적인 MCP Toolpack으로 패키징하기 위한 정보와 사용 지침을 요약한 것입니다.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md)
4
4
 
5
- [![Version](https://img.shields.io/badge/version-6.2.0-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![Version](https://img.shields.io/badge/version-6.2.1-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  This document summarizes the information and usage instructions for packaging the original Superpowers skills library into an independent MCP Toolpack.
@@ -128,7 +128,13 @@ These skills are designed for orchestrating complex meta-execution patterns with
128
128
 
129
129
  ## 🆕 Recent Updates
130
130
 
131
- ### v6.2.0 (Latest)
131
+ ### v6.2.1 (Latest)
132
+
133
+ - **PowerShell Script Test Suite**: Added `tests/powershell/` with 63 assertions across 5 suites for `sdd-workspace.ps1`, `task-brief.ps1`, `review-package.ps1`, `find-polluter.ps1`, and the brainstorm `start-server.ps1`/`stop-server.ps1` lifecycle. Run with `tests/powershell/run-tests.sh`; it skips gracefully when `pwsh` is unavailable.
134
+ - **stop-server.ps1 Cross-Platform Fix**: `Get-CimInstance Win32_Process` is Windows-only; the script now uses `ps` on Unix so the server-id check works correctly on macOS/Linux.
135
+ - **Cleanup**: Removed `skills/using-superpowers/references/copilot-tools.md`, an orphaned reference file already pruned upstream.
136
+
137
+ ### v6.2.0
132
138
  - **Upstream Sync with obra/superpowers v6.2.0**: Synchronized upstream improvements across all skills while preserving local security enhancements and PowerShell helpers.
133
139
  - **subagent-driven-development Restructure**: Plan-scoped workspaces (`.superpowers/sdd/<plan>/`) so concurrent plans can never read or overwrite each other's artifacts. Resume-based review-fix loop with a five-round circuit breaker, plus a new scoped `re-review-prompt.md` for re-reviews after fixes.
134
140
  - **test-driven-development**: `testing-anti-patterns.md` replaced by upstream `writing-good-tests.md`.
package/README.zh-TW.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [한국어](README.ko.md)
4
4
 
5
- [![版本](https://img.shields.io/badge/version-6.2.0-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
5
+ [![版本](https://img.shields.io/badge/version-6.2.1-blue.svg)](https://github.com/Poseidoncode/superpowers-mcp)
6
6
  [![授權](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
7
7
 
8
8
  本文檔總結了將原始 Superpowers 技能庫打包成獨立 MCP Toolpack 的相關資訊與使用說明。
@@ -128,6 +128,12 @@
128
128
 
129
129
  ## 🆕 最近更新
130
130
 
131
+ ### v6.2.1 (最新版)
132
+
133
+ - **PowerShell 腳本測試套件**:新增 `tests/powershell/`,橫跨 `sdd-workspace.ps1`、`task-brief.ps1`、`review-package.ps1`、`find-polluter.ps1` 與 brainstorm `start-server.ps1`/`stop-server.ps1` 生命週期,共 63 個 assertion。使用 `tests/powershell/run-tests.sh` 執行;未安裝 `pwsh` 時會自動跳過。
134
+ - **`stop-server.ps1` 跨平台修正**:`Get-CimInstance Win32_Process` 僅 Windows 可用,腳本現在在 Unix 上改用 `ps` 以正確檢查 server-id,macOS/Linux 不再出錯。
135
+ - **清理**:移除已無用的 `skills/using-superpowers/references/copilot-tools.md`(上游已在 v6.2.0 中刪除,本地也沒有任何引用)。
136
+
131
137
  ### v6.2.0 (最新版)
132
138
  - **上游同步 obra/superpowers v6.2.0**:同步上游所有技能的改進,同時保留本地的安全性強化與 PowerShell 輔助腳本。
133
139
  - **subagent-driven-development 重構**:採用計畫範圍工作區(`.superpowers/sdd/<plan>/`),並行計畫之間的產物再也不會互相讀寫。改為可續接的 review-fix 迴圈,內建五輪熔斷機制,並新增修復後複審專用的 `re-review-prompt.md`。
package/out/server.js CHANGED
@@ -49,7 +49,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
49
49
  `}var hs=class{constructor(t=ff.default.stdin,r=ff.default.stdout){this._stdin=t,this._stdout=r,this._readBuffer=new ms,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let t=this._readBuffer.readMessage();if(t===null)break;this.onmessage?.(t)}catch(t){this.onerror?.(t)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(t){return new Promise(r=>{let n=T_(t);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var zr=ir(require("fs/promises")),Ir=ir(require("path")),gs=class{skillsPath;cachedSkills=null;skillMap=new Map;contentCache=new Map;constructor(t){this.skillsPath=t}parseFrontmatter(t){if(!t.startsWith("---"))return{name:"",description:""};let r=t.split(/\r?\n/),n=[],o=!1;for(let c=1;c<r.length;c++){if(r[c].trim()==="---"){o=!0;break}n.push(r[c])}if(!o)return{name:"",description:""};let i="",a="",s=!1;for(let c of n){let u=c.match(/^name:\s*(.+?)\s*$/);if(u){i=u[1].replace(/^["']|["']$/g,"").trim(),s=!1;continue}let l=c.match(/^description:\s*(.+?)\s*$/);if(l){a=l[1].replace(/^["']|["']$/g,"").trim(),s=!0;continue}s&&c.startsWith(" ")?a+=" "+c.trim():s=!1}return{name:i,description:a}}async exists(t){try{return await zr.access(t),!0}catch{return!1}}async listSkills(t=!1){if(this.cachedSkills&&!t)return this.cachedSkills;if(!await this.exists(this.skillsPath))return[];let r=[];this.skillMap.clear();try{let o=(await zr.readdir(this.skillsPath,{withFileTypes:!0})).filter(a=>a.isDirectory()).map(async a=>{let s=Ir.join(this.skillsPath,a.name),c=Ir.join(s,"SKILL.md");if(!await this.exists(c))return null;try{let u=await zr.readFile(c,"utf-8"),{name:l,description:d}=this.parseFrontmatter(u);return{name:l||a.name,description:d,skillPath:c}}catch{return process.stderr.write(`Warning: Failed to read skill file in directory "${a.name}"
50
50
  `),null}}),i=await Promise.all(o);for(let a of i)if(a){r.push(a),this.skillMap.set(a.name.toLowerCase(),a);let s=Ir.basename(Ir.dirname(a.skillPath)).toLowerCase();this.skillMap.set(s,a)}}catch(n){return process.stderr.write(`Error reading skills directory: ${String(n)}
51
51
  `),[]}return this.cachedSkills=r.sort((n,o)=>n.name.localeCompare(o.name)),this.cachedSkills}async findSkill(t){if(/^[a-zA-Z0-9-_]+$/.test(t))return this.cachedSkills||await this.listSkills(),this.skillMap.get(t.toLowerCase())}async readSkillContent(t,r=!1){if(this.contentCache.has(t)&&!r)return this.contentCache.get(t);try{let o=(await zr.readFile(t,"utf-8")).replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,"").trim();return this.contentCache.set(t,o),o}catch{throw new Error("Failed to read skill content")}}clearCache(){this.cachedSkills=null,this.skillMap.clear(),this.contentCache.clear()}};function PT(){let e=process.env.SKILLS_PATH;if(e){let r=or.resolve(e);if(["/","/etc","/var","/bin","/sbin","C:\\","C:\\Windows"].includes(r)||r===or.parse(r).root)process.stderr.write(`Warning: Potentially unsafe SKILLS_PATH: "${e}". Fallback to default.
52
- `);else return r}let t=or.join(__dirname,"..","skills");return j_.existsSync(t)?t:or.join(__dirname,"skills")}var E_=PT(),nr=new gs(E_),Pr=new fs({name:"superpowers-mcp",version:"6.2.0"},{capabilities:{resources:{subscribe:!1},prompts:{},tools:{}}});Pr.setRequestHandler(rd,async()=>({resources:(await nr.listSkills()).map(t=>({uri:`skill://superpowers/${t.name}`,name:t.name,description:t.description,mimeType:"text/markdown"}))}));Pr.setRequestHandler(od,async e=>{let t=e.params.uri,r=t.match(/^skill:\/\/superpowers\/(.+)$/);if(!r)throw new R(L.InvalidRequest,`Invalid skill URI: ${t}`);let n=r[1],o=await nr.findSkill(n);if(!o)throw new R(L.InvalidRequest,`Skill not found: ${n}`);try{let i=await nr.readSkillContent(o.skillPath);return{contents:[{uri:t,mimeType:"text/markdown",text:i}]}}catch{throw new R(L.InternalError,"Failed to read skill content safely.")}});Pr.setRequestHandler(id,async()=>({prompts:[{name:"session-start",description:"Inject the Superpowers context into an AI agent session. Tells the agent it has superpowers and how to use the skill system."}]}));Pr.setRequestHandler(ad,async e=>{if(e.params.name!=="session-start")throw new R(L.InvalidRequest,`Unknown prompt: ${e.params.name}`);let t=or.join(E_,"using-superpowers","SKILL.md"),r="";try{r=await nr.readSkillContent(t)}catch{r=`# Superpowers
52
+ `);else return r}let t=or.join(__dirname,"..","skills");return j_.existsSync(t)?t:or.join(__dirname,"skills")}var E_=PT(),nr=new gs(E_),Pr=new fs({name:"superpowers-mcp",version:"6.2.1"},{capabilities:{resources:{subscribe:!1},prompts:{},tools:{}}});Pr.setRequestHandler(rd,async()=>({resources:(await nr.listSkills()).map(t=>({uri:`skill://superpowers/${t.name}`,name:t.name,description:t.description,mimeType:"text/markdown"}))}));Pr.setRequestHandler(od,async e=>{let t=e.params.uri,r=t.match(/^skill:\/\/superpowers\/(.+)$/);if(!r)throw new R(L.InvalidRequest,`Invalid skill URI: ${t}`);let n=r[1],o=await nr.findSkill(n);if(!o)throw new R(L.InvalidRequest,`Skill not found: ${n}`);try{let i=await nr.readSkillContent(o.skillPath);return{contents:[{uri:t,mimeType:"text/markdown",text:i}]}}catch{throw new R(L.InternalError,"Failed to read skill content safely.")}});Pr.setRequestHandler(id,async()=>({prompts:[{name:"session-start",description:"Inject the Superpowers context into an AI agent session. Tells the agent it has superpowers and how to use the skill system."}]}));Pr.setRequestHandler(ad,async e=>{if(e.params.name!=="session-start")throw new R(L.InvalidRequest,`Unknown prompt: ${e.params.name}`);let t=or.join(E_,"using-superpowers","SKILL.md"),r="";try{r=await nr.readSkillContent(t)}catch{r=`# Superpowers
53
53
 
54
54
  You have superpowers. Use the read_skill and list_skills tools to discover and load skills.`}return{description:"Superpowers session start context \u2014 establishes how to find and use skills",messages:[{role:"user",content:{type:"text",text:`<EXTREMELY_IMPORTANT>
55
55
  You have superpowers.
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.2.0",
5
+ "version": "6.2.1",
6
6
  "publisher": "superpowers",
7
7
  "license": "MIT",
8
8
  "repository": {
@@ -34,9 +34,17 @@ function Test-BrainstormServer {
34
34
  param([int]$ProcessId)
35
35
  $expected = Read-ExpectedServerId
36
36
  if (-not $expected) { return $false }
37
- $process = Get-CimInstance Win32_Process -Filter "ProcessId = $ProcessId" -ErrorAction SilentlyContinue
38
- if (-not $process) { return $false }
39
- return ($process.CommandLine -like "*--brainstorm-server-id=$expected*")
37
+ if ($IsWindows) {
38
+ $process = Get-CimInstance Win32_Process -Filter "ProcessId = $ProcessId" -ErrorAction SilentlyContinue
39
+ if (-not $process) { return $false }
40
+ return ($process.CommandLine -like "*--brainstorm-server-id=$expected*")
41
+ }
42
+ # Unix: ps -p prints the full command line, e.g.
43
+ # node ... server.cjs --brainstorm-server-id=<id>; the id is validated
44
+ # hex above, so no regex escaping is needed.
45
+ $cmd = (& ps -p $ProcessId -o command= 2>$null)
46
+ if (-not $cmd) { return $false }
47
+ return ($cmd -match "--brainstorm-server-id=$expected")
40
48
  }
41
49
 
42
50
  if (Test-Path -LiteralPath $pidFile) {
@@ -1,42 +0,0 @@
1
- # Copilot CLI Tool Mapping
2
-
3
- Skills use Claude Code tool names. When you encounter these in a skill, use your platform equivalent:
4
-
5
- | Skill references | Copilot CLI equivalent |
6
- |-----------------|----------------------|
7
- | `Read` (file reading) | `view` |
8
- | `Write` (file creation) | `create` |
9
- | `Edit` (file editing) | `edit` |
10
- | `Bash` (run commands) | `bash` |
11
- | `Grep` (search file content) | `grep` |
12
- | `Glob` (search files by name) | `glob` |
13
- | `Skill` tool (invoke a skill) | `skill` |
14
- | `WebFetch` | `web_fetch` |
15
- | `Task` tool (dispatch subagent) | `task` with `agent_type: "general-purpose"` or `"explore"` |
16
- | Multiple `Task` calls (parallel) | Multiple `task` calls |
17
- | Task status/output | `read_agent`, `list_agents` |
18
- | `TodoWrite` (task tracking) | `sql` with built-in `todos` table |
19
- | `WebSearch` | No equivalent — use `web_fetch` with a search engine URL |
20
- | `EnterPlanMode` / `ExitPlanMode` | No equivalent — stay in the main session |
21
-
22
- ## Async shell sessions
23
-
24
- Copilot CLI supports persistent async shell sessions, which have no direct Claude Code equivalent:
25
-
26
- | Tool | Purpose |
27
- |------|---------|
28
- | `bash` with `async: true` | Start a long-running command in the background |
29
- | `write_bash` | Send input to a running async session |
30
- | `read_bash` | Read output from an async session |
31
- | `stop_bash` | Terminate an async session |
32
- | `list_bash` | List all active shell sessions |
33
-
34
- ## Additional Copilot CLI tools
35
-
36
- | Tool | Purpose |
37
- |------|---------|
38
- | `store_memory` | Persist facts about the codebase for future sessions |
39
- | `report_intent` | Update the UI status line with current intent |
40
- | `sql` | Query the session's SQLite database (todos, metadata) |
41
- | `fetch_copilot_cli_documentation` | Look up Copilot CLI documentation |
42
- | GitHub MCP tools (`github-mcp-server-*`) | Native GitHub API access (issues, PRs, code search) |